This is an automated email from the ASF dual-hosted git repository.
zihaoxiang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 5ad7b1509f [Fix-15787] Reuse code and solve the problem of complex SQL
parsing exceptions in… (#15833)
5ad7b1509f is described below
commit 5ad7b1509f79c52b24d11f50c1d0172287dcd968
Author: XinXing <[email protected]>
AuthorDate: Mon Apr 15 15:01:28 2024 +0800
[Fix-15787] Reuse code and solve the problem of complex SQL parsing
exceptions in… (#15833)
* Reuse code and solve the problem of complex SQL parsing exceptions in
druid, corresponding to issue #15787
* Code Format
* Enhanced adaptability to SQL formatting
---
.../datasource/oracle/param/OracleDataSourceProcessor.java | 11 ++++++-----
.../oracle/param/OracleDataSourceProcessorTest.java | 13 ++++++++-----
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessor.java
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessor.java
index 89b872d7f5..5f24b8cc19 100644
---
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessor.java
+++
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/main/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessor.java
@@ -41,8 +41,7 @@ import java.util.stream.Collectors;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
-import com.alibaba.druid.sql.parser.SQLParserFeature;
-import com.alibaba.druid.sql.parser.SQLStatementParser;
+import com.alibaba.druid.sql.parser.SQLParserUtils;
import com.google.auto.service.AutoService;
@AutoService(DataSourceProcessor.class)
@@ -149,9 +148,11 @@ public class OracleDataSourceProcessor extends
AbstractDataSourceProcessor {
@Override
public List<String> splitAndRemoveComment(String sql) {
- SQLStatementParser parser = new OracleStatementParser(sql,
SQLParserFeature.KeepComments);
- List<SQLStatement> statementList = parser.parseStatementList();
- return
statementList.stream().map(SQLStatement::toString).collect(Collectors.toList());
+ if (sql.toUpperCase().contains("BEGIN") &&
sql.toUpperCase().contains("END")) {
+ return new
OracleStatementParser(sql).parseStatementList().stream().map(SQLStatement::toString)
+ .collect(Collectors.toList());
+ }
+ return SQLParserUtils.splitAndRemoveComment(sql,
com.alibaba.druid.DbType.oracle);
}
private String transformOther(Map<String, String> otherMap) {
diff --git
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/test/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessorTest.java
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/test/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessorTest.java
index 57e316ed63..2f9133463d 100644
---
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/test/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessorTest.java
+++
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-oracle/src/test/java/org/apache/dolphinscheduler/plugin/datasource/oracle/param/OracleDataSourceProcessorTest.java
@@ -155,13 +155,16 @@ public class OracleDataSourceProcessorTest {
@Test
void splitAndRemoveComment_MultipleSql() {
- String plSql = "select * from test;select * from test2;";
+ String plSql =
+ "select a,a-a as b from (select 1 as a,2 as b from dual) union
all select 1 as a,2 as b from dual;select * from dual; -- this comment";
List<String> sqls =
oracleDatasourceProcessor.splitAndRemoveComment(plSql);
// We will not split the plsql
Assertions.assertEquals(2, sqls.size());
- Assertions.assertEquals("SELECT *\n" +
- "FROM test;", sqls.get(0));
- Assertions.assertEquals("SELECT *\n" +
- "FROM test2;", sqls.get(1));
+ System.out.println(sqls.get(0));
+ System.out.println(sqls.get(1));
+ Assertions.assertEquals(
+ "select a,a-a as b from (select 1 as a,2 as b from dual) union
all select 1 as a,2 as b from dual",
+ sqls.get(0));
+ Assertions.assertEquals("select * from dual", sqls.get(1));
}
}