This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new bc6f05d557e [feat](sql-convertor) support setting sql convertor's
config by session variable (#50959)
bc6f05d557e is described below
commit bc6f05d557e1e08d61bc1829b5ba4f010572331c
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Tue May 20 17:23:23 2025 +0800
[feat](sql-convertor) support setting sql convertor's config by session
variable (#50959)
### What problem does this PR solve?
Problem Summary:
There may be some configurations for sql convertor plugin.
So I added a new session variable `sql_convertor_config`, the format is
a json string
with root element `{}`. So that we can easily extends its content.
eg:
```
set sql_convertor_config = '{"ignore_udf": ["func1", "func2", "fucn3"]}'
```
---
.../doris/plugin/dialect/HttpDialectConverterPlugin.java | 2 +-
.../org/apache/doris/plugin/dialect/HttpDialectUtils.java | 8 +++++---
.../src/main/java/org/apache/doris/qe/SessionVariable.java | 13 +++++++++++++
.../java/org/apache/doris/plugin/HttpDialectUtilsTest.java | 10 +++++-----
4 files changed, 24 insertions(+), 9 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/plugin/dialect/HttpDialectConverterPlugin.java
b/fe/fe-core/src/main/java/org/apache/doris/plugin/dialect/HttpDialectConverterPlugin.java
index d2096cd992b..bff2dfd1340 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/plugin/dialect/HttpDialectConverterPlugin.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/plugin/dialect/HttpDialectConverterPlugin.java
@@ -104,7 +104,7 @@ public class HttpDialectConverterPlugin extends Plugin
implements DialectConvert
return null;
}
return HttpDialectUtils.convertSql(targetURL, originSql,
sessionVariable.getSqlDialect(),
- sessionVariable.getSqlConvertorFeatures());
+ sessionVariable.getSqlConvertorFeatures(),
sessionVariable.getSqlConvertorConfig());
}
// no need to override parseSqlWithDialect, just return null
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/plugin/dialect/HttpDialectUtils.java
b/fe/fe-core/src/main/java/org/apache/doris/plugin/dialect/HttpDialectUtils.java
index 87b06c76125..89acd66658d 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/plugin/dialect/HttpDialectUtils.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/plugin/dialect/HttpDialectUtils.java
@@ -39,8 +39,8 @@ public class HttpDialectUtils {
private static final Logger LOG =
LogManager.getLogger(HttpDialectUtils.class);
public static String convertSql(String targetURL, String originStmt,
String dialect,
- String[] features) {
- ConvertRequest convertRequest = new ConvertRequest(originStmt,
dialect, features);
+ String[] features, String config) {
+ ConvertRequest convertRequest = new ConvertRequest(originStmt,
dialect, features, config);
HttpURLConnection connection = null;
try {
@@ -112,8 +112,9 @@ public class HttpDialectUtils {
private String source; // CHECKSTYLE IGNORE THIS LINE
private String case_sensitive; // CHECKSTYLE IGNORE THIS LINE
private String[] enable_sql_convertor_features; // CHECKSTYLE IGNORE
THIS LINE
+ private String config; // CHECKSTYLE IGNORE THIS LINE
- public ConvertRequest(String originStmt, String dialect, String[]
features) {
+ public ConvertRequest(String originStmt, String dialect, String[]
features, String config) {
this.version = "v1";
this.sql_query = originStmt;
this.from = dialect;
@@ -121,6 +122,7 @@ public class HttpDialectUtils {
this.source = "text";
this.case_sensitive = "0";
this.enable_sql_convertor_features = features;
+ this.config = config;
}
public String toJson() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index ca92b9dada1..69a453a3b16 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -737,6 +737,8 @@ public class SessionVariable implements Serializable,
Writable {
public static final String ENABLE_SQL_CONVERTOR_FEATURES =
"enable_sql_convertor_features";
+ public static final String SQL_CONVERTOR_CONFIG = "sql_convertor_config";
+
/**
* If set false, user couldn't submit analyze SQL and FE won't allocate
any related resources.
*/
@@ -2594,6 +2596,13 @@ public class SessionVariable implements Serializable,
Writable {
})
public String enableSqlConvertorFeatures = "";
+ @VariableMgr.VarAttr(name = SQL_CONVERTOR_CONFIG, needForward = true,
+ description = {
+ "SQL 转换器的相关配置,使用 Json 格式。以 {} 为根元素。",
+ "SQL convertor config, use Json format. The root element
is {}"
+ })
+ public String sqlConvertorConfig = "{}";
+
public void setEnableEsParallelScroll(boolean enableESParallelScroll) {
this.enableESParallelScroll = enableESParallelScroll;
}
@@ -3543,6 +3552,10 @@ public class SessionVariable implements Serializable,
Writable {
return enableSqlConvertorFeatures.split(",");
}
+ public String getSqlConvertorConfig() {
+ return sqlConvertorConfig;
+ }
+
public Dialect getSqlParseDialect() {
return Dialect.getByName(sqlDialect);
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/plugin/HttpDialectUtilsTest.java
b/fe/fe-core/src/test/java/org/apache/doris/plugin/HttpDialectUtilsTest.java
index a25b595a0fc..de359f79475 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/plugin/HttpDialectUtilsTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/plugin/HttpDialectUtilsTest.java
@@ -54,20 +54,20 @@ public class HttpDialectUtilsTest {
String expectedSql = "select * from t1 where `k1` = 1";
String[] features = new String[] {"ctas"};
String targetURL = "http://127.0.0.1:" + port + "/api/v1/convert";
- String res = HttpDialectUtils.convertSql(targetURL, originSql,
"presto", features);
+ String res = HttpDialectUtils.convertSql(targetURL, originSql,
"presto", features, "{}");
Assert.assertEquals(originSql, res);
// test presto
server.setResponse("{\"version\": \"v1\", \"data\": \"" + expectedSql
+ "\", \"code\": 0, \"message\": \"\"}");
- res = HttpDialectUtils.convertSql(targetURL, originSql, "presto",
features);
+ res = HttpDialectUtils.convertSql(targetURL, originSql, "presto",
features, "{}");
Assert.assertEquals(expectedSql, res);
// test response version error
server.setResponse("{\"version\": \"v2\", \"data\": \"" + expectedSql
+ "\", \"code\": 0, \"message\": \"\"}");
- res = HttpDialectUtils.convertSql(targetURL, originSql, "presto",
features);
+ res = HttpDialectUtils.convertSql(targetURL, originSql, "presto",
features, "{}");
Assert.assertEquals(originSql, res);
- // 7. test response code error
+ // test response code error
server.setResponse(
"{\"version\": \"v1\", \"data\": \"" + expectedSql + "\",
\"code\": 400, \"message\": \"\"}");
- res = HttpDialectUtils.convertSql(targetURL, originSql, "presto",
features);
+ res = HttpDialectUtils.convertSql(targetURL, originSql, "presto",
features, "{}");
Assert.assertEquals(originSql, res);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]