10.3. 统一SQL Java 接口

10.3.1. 简介

统一SQL提供了 Java API,可供 JAVA 程序直接调用;用户只需要在Maven项目中引入sql-convert-runtime依赖即可使用 JAVA API,具体可参考 集成统一SQL代理

10.3.2. 接口说明

接口签名:

public static String parse(String sql, String sourceDialect, String targetDialect) {}

该接口方法位于sql-convert-runtime模块中的com.hundsun.lightdb.unisql.golang.Transformer类中。

10.3.3. 接口请求参数

JAVA 接口的每一项参数说明如下:

接口请求参数

参数名

类型

是否必须

说明

示例

sql

string

源SQL语句

“select name, avg(score) from student_score group by name”

sourceDialect

string

源数据库方言名称,具体可查看 数据源支持范围 中的 源端

ORACLE

targetDialect

string

目标数据库方言名称,具体可查看 数据源支持范围 中的 目标端

LIGHTDB_ORACLE

10.3.4. 接口返回参数

返回类型是一个 string,表示转换后的sql语句,返回值有2种情况:

  • 返回 null 值:表示转换失败

  • 返回非 null 值:表示转换后的sql语句

10.3.5. 调用示例

本例子使用标准的 JAVA 测试用例展示该接口的使用方式,示例代码如下:

@Test
public void parseTest() {
    String parsedSql = Transformer.parse("SELECT MEDIAN(amount) AS median_amount FROM aggregate_sales " +
            "WHERE product_id = 1 ORDER BY  median_amount", DbType.ORACLE.name(), DbType.POSTGRESQL.name());
    System.out.println("统一SQL转换后sql " + parsedSql);
}

示例执行结果,Oracle的median函数将被转换为PostgreSQL的percentile_cont分析函数。

统一SQL转换后sql SELECT percentile_cont(5e-01) WITHIN GROUP (ORDER BY amount) AS median_amount FROM aggregate_sales WHERE product_id=1 ORDER BY median_amount