* Fix the bug in SQL splitting by completing the task in two steps: 1. removeComment 2. split * Add a unit test for Hive SQL splitting.
This commit is contained in:
parent
c0435e5bd8
commit
5d8808dda4
|
|
@ -134,6 +134,7 @@ public abstract class AbstractDataSourceProcessor implements DataSourceProcessor
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.other);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.other);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.other);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,7 +129,8 @@ public class ClickHouseDataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.clickhouse);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.clickhouse);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.clickhouse);
|
||||
}
|
||||
|
||||
private String transformOther(Map<String, String> otherMap) {
|
||||
|
|
|
|||
|
|
@ -135,7 +135,8 @@ public class DamengDataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.dm);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.dm);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.dm);
|
||||
}
|
||||
|
||||
private String transformOther(Map<String, String> paramMap) {
|
||||
|
|
|
|||
|
|
@ -129,7 +129,8 @@ public class Db2DataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.db2);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.db2);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.db2);
|
||||
}
|
||||
|
||||
private String transformOther(Map<String, String> otherMap) {
|
||||
|
|
|
|||
|
|
@ -152,7 +152,8 @@ public class HiveDataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.hive);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.hive);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.hive);
|
||||
}
|
||||
|
||||
private String transformOther(Map<String, String> otherMap) {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ 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;
|
||||
|
|
@ -94,4 +95,23 @@ public class HiveDataSourceProcessorTest {
|
|||
Assertions.assertEquals(DataSourceConstants.HIVE_VALIDATION_QUERY,
|
||||
hiveDatasourceProcessor.getValidationQuery());
|
||||
}
|
||||
|
||||
@Test
|
||||
void splitAndRemoveComment() {
|
||||
String sql = "create table if not exists test_ods.tb_test(\n" +
|
||||
" `id` bigint COMMENT 'id', -- auto increment\n" +
|
||||
" `user_name` string COMMENT 'username',\n" +
|
||||
" `birthday` string COMMENT 'birthday',\n" +
|
||||
" `gender` int COMMENT '1 male 2 female'\n" +
|
||||
") COMMENT 'user information table' PARTITIONED BY (`date_id` string);\n" +
|
||||
"\n" +
|
||||
"-- insert\n" +
|
||||
"insert\n" +
|
||||
" overwrite table test_ods.tb_test partition(date_id = '2024-03-28') -- partition\n" +
|
||||
"values\n" +
|
||||
" (1, 'Magic', '1990-10-01', '1');";
|
||||
List<String> list = hiveDatasourceProcessor.splitAndRemoveComment(sql);
|
||||
Assertions.assertEquals(list.size(), 2);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,7 +177,8 @@ public class MySQLDataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.mysql);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.mysql);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.mysql);
|
||||
}
|
||||
|
||||
private static boolean checkKeyIsLegitimate(String key) {
|
||||
|
|
|
|||
|
|
@ -192,6 +192,7 @@ public class OceanBaseDataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.oceanbase);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.oceanbase);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.oceanbase);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,7 +131,8 @@ public class PostgreSQLDataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.postgresql);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.postgresql);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.postgresql);
|
||||
}
|
||||
|
||||
private String transformOther(Map<String, String> otherMap) {
|
||||
|
|
|
|||
|
|
@ -128,7 +128,8 @@ public class SQLServerDataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.sqlserver);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.sqlserver);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.sqlserver);
|
||||
}
|
||||
|
||||
private String transformOther(Map<String, String> otherMap) {
|
||||
|
|
|
|||
|
|
@ -131,7 +131,8 @@ public class TrinoDataSourceProcessor extends AbstractDataSourceProcessor {
|
|||
|
||||
@Override
|
||||
public List<String> splitAndRemoveComment(String sql) {
|
||||
return SQLParserUtils.splitAndRemoveComment(sql, com.alibaba.druid.DbType.trino);
|
||||
String cleanSQL = SQLParserUtils.removeComment(sql, com.alibaba.druid.DbType.trino);
|
||||
return SQLParserUtils.split(cleanSQL, com.alibaba.druid.DbType.trino);
|
||||
}
|
||||
|
||||
private String transformOther(Map<String, String> otherMap) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue