diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 4a5430a375..77b7c05a90 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -1116,7 +1116,7 @@ public class SQLExprParser extends SQLParser { } throw new ParserException("ERROR. " + lexer.info()); case LBRACKET: - if (dbType == DbType.odps) { + if (dbType == DbType.odps || dbType == DbType.clickhouse) { SQLArrayExpr array = new SQLArrayExpr(); lexer.nextToken(); this.exprList(array.getValues(), array); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index f5be2685ee..92cc80ab3b 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -2476,7 +2476,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return false; } } - exp.accept(this); + if (exp != null) { + exp.accept(this); + } return false; } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/clickhouse/ClickHouseResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/clickhouse/ClickHouseResourceTest.java index f9ac221333..9e153a5277 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/clickhouse/ClickHouseResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/clickhouse/ClickHouseResourceTest.java @@ -40,6 +40,10 @@ public class ClickHouseResourceTest extends OracleTest { exec_test("bvt/parser/clickhouse-0.txt"); } + public void test_1() throws Exception { + exec_test("bvt/parser/clickhouse-1.txt"); + } + public void exec_test(String resource) throws Exception { System.out.println(resource); InputStream is = null; diff --git a/src/test/resources/bvt/parser/clickhouse-1.txt b/src/test/resources/bvt/parser/clickhouse-1.txt new file mode 100644 index 0000000000..201cbf67a7 --- /dev/null +++ b/src/test/resources/bvt/parser/clickhouse-1.txt @@ -0,0 +1,12 @@ +select * from data_all dsa where dsa.sign='1' and dsa.number in ( select DISTINCT number +from dc_clients do +where hasAny(splitByString(',',cast(do.df_time as String)),[?,?])=1 ) +--------------------------- +SELECT * +FROM data_all dsa +WHERE dsa.sign = '1' + AND dsa.number IN ( + SELECT DISTINCT number + FROM dc_clients do + WHERE hasAny(splitByString(',', CAST(do.df_time AS String)), [?, ?]) = 1 + ) \ No newline at end of file