This is an automated email from the ASF dual-hosted git repository.
zihaoxiang pushed a commit to branch 3.2.2-prepare
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/3.2.2-prepare by this push:
new e91a272965 Fix SqlServer split merge sql will miss ; (#16118) (#16120)
e91a272965 is described below
commit e91a2729653cff6c733caa461b24a3c95875b7a3
Author: Wenjun Ruan <[email protected]>
AuthorDate: Thu Jun 6 17:11:51 2024 +0800
Fix SqlServer split merge sql will miss ; (#16118) (#16120)
(cherry picked from commit d6714bb77ab4a236a781a02dbdd6fd54b991e6fc)
---
.../param/SQLServerDataSourceProcessor.java | 7 +++--
.../param/SQLServerDataSourceProcessorTest.java | 31 ++++++++++++++++++++++
2 files changed, 36 insertions(+), 2 deletions(-)
diff --git
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/main/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessor.java
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/main/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessor.java
index c3b73580dd..687d853fff 100644
---
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/main/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessor.java
+++
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/main/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessor.java
@@ -35,6 +35,7 @@ import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import com.alibaba.druid.sql.parser.SQLParserUtils;
import com.google.auto.service.AutoService;
@@ -128,8 +129,10 @@ public class SQLServerDataSourceProcessor extends
AbstractDataSourceProcessor {
@Override
public List<String> splitAndRemoveComment(String sql) {
- String cleanSQL = SQLParserUtils.removeComment(sql,
com.alibaba.druid.DbType.sqlserver);
- return SQLParserUtils.split(cleanSQL,
com.alibaba.druid.DbType.sqlserver);
+ return SQLParserUtils.splitAndRemoveComment(sql,
com.alibaba.druid.DbType.sqlserver)
+ .stream()
+ .map(subSql -> subSql.concat(";"))
+ .collect(Collectors.toList());
}
private String transformOther(Map<String, String> otherMap) {
diff --git
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/test/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessorTest.java
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/test/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessorTest.java
index de30e27e0b..7d34755d65 100644
---
a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/test/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessorTest.java
+++
b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-sqlserver/src/test/java/org/apache/dolphinscheduler/plugin/datasource/sqlserver/param/SQLServerDataSourceProcessorTest.java
@@ -17,12 +17,15 @@
package org.apache.dolphinscheduler.plugin.datasource.sqlserver.param;
+import static com.google.common.truth.Truth.assertThat;
+
import org.apache.dolphinscheduler.common.constants.DataSourceConstants;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils;
import org.apache.dolphinscheduler.spi.enums.DbType;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
@@ -95,4 +98,32 @@ public class SQLServerDataSourceProcessorTest {
Assertions.assertEquals(DataSourceConstants.SQLSERVER_VALIDATION_QUERY,
sqlServerDatasourceProcessor.getValidationQuery());
}
+
+ @Test
+ void splitAndRemoveComment_singleSelect() {
+ String sql = "select * from table;";
+ List<String> subSqls =
sqlServerDatasourceProcessor.splitAndRemoveComment(sql);
+ assertThat(subSqls).hasSize(1);
+ assertThat(subSqls.get(0)).isEqualTo("select * from table;");
+ }
+
+ @Test
+ void splitAndRemoveComment_singleMerge() {
+ String sql = "MERGE\n" +
+ " [ TOP ( expression ) [ PERCENT ] ]\n" +
+ " [ INTO ] <target_table> [ WITH ( <merge_hint> ) ] [ [ AS
] table_alias ]\n" +
+ " USING <table_source> [ [ AS ] table_alias ]\n" +
+ " ON <merge_search_condition>\n" +
+ " [ WHEN MATCHED [ AND <clause_search_condition> ]\n" +
+ " THEN <merge_matched> ] [ ...n ]\n" +
+ " [ WHEN NOT MATCHED [ BY TARGET ] [ AND
<clause_search_condition> ]\n" +
+ " THEN <merge_not_matched> ]\n" +
+ " [ WHEN NOT MATCHED BY SOURCE [ AND
<clause_search_condition> ]\n" +
+ " THEN <merge_matched> ] [ ...n ]\n" +
+ " [ <output_clause> ]\n" +
+ " [ OPTION ( <query_hint> [ ,...n ] ) ];";
+ List<String> subSqls =
sqlServerDatasourceProcessor.splitAndRemoveComment(sql);
+ assertThat(subSqls).hasSize(1);
+ assertThat(subSqls.get(0)).isEqualTo(sql);
+ }
}