Skip to content

Commit ceb9f49

Browse files
authored
Merge pull request #2769 from ClickHouse/03/02/26/verify_pre_release
fixed parser to handle '^' in statements
2 parents 5f0897d + 3624efd commit ceb9f49

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

jdbc-v2/src/main/javacc/ClickHouseSqlParser.jj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@ void columnExpr(): { Token t; } {
831831
| (LOOKAHEAD(2) macro())+
832832
| LOOKAHEAD(2, { !(tokenIn(1, INF, NAN, NULL) && tokenIn(2, DOT)) }) literal()
833833
| LOOKAHEAD(2, { getToken(2).kind == LPAREN }) functionExpr() { token_source.funcUsed = true; }
834-
| anyIdentifier() (LOOKAHEAD(2) <DOT> anyIdentifier())*
834+
| anyIdentifier() (LOOKAHEAD(2) <DOT> (<CARET>)? anyIdentifier())*
835835
}
836836

837837
// interested parts
@@ -930,7 +930,7 @@ Token aliasExpr(): { Token t = null; } {
930930
}
931931

932932
void nestedIdentifier(): {} {
933-
(<ASTERISK> | anyIdentifier()) (LOOKAHEAD(2) <DOT> (<ASTERISK> | anyIdentifier()))*
933+
(<ASTERISK> | anyIdentifier()) (LOOKAHEAD(2) <DOT> (<CARET>)? (<ASTERISK> | anyIdentifier()))*
934934
}
935935

936936
void tableIdentifier(boolean record): { } {
@@ -1029,7 +1029,7 @@ Token numberLiteral(): { Token t = null; StringBuilder sb = new StringBuilder();
10291029
}
10301030

10311031
void operator(): {} {
1032-
(<ARROW> | <ASTERISK> | <CONCAT> | <CONVERT> | <DASH> | <EQ_DOUBLE> | <EQ_SINGLE>
1032+
(<ARROW> | <ASTERISK> | <CARET> | <CONCAT> | <CONVERT> | <DASH> | <EQ_DOUBLE> | <EQ_SINGLE>
10331033
| <GE> | <GT> | <LE> | <LT> | <NOT_EQ> | <PERCENT> | <PLUS> | <SLASH>)
10341034
}
10351035

@@ -1286,6 +1286,7 @@ TOKEN: {
12861286
| <RPAREN: ")">
12871287
| <SEMICOLON: ";">
12881288
| <SLASH: "/">
1289+
| <CARET: "^">
12891290
| <#UNDERSCORE: "_">
12901291
}
12911292

jdbc-v2/src/test/java/com/clickhouse/jdbc/internal/BaseSqlParserFacadeTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,10 @@ public Object[][] testMiscStmtDp() {
454454
{"select countIf(*, 1 = ?)", 1},
455455
{"select count(*) filter (where 1 = ?)", 1},
456456
{WHEN_HAS_ARRAY, 0},
457+
{EXTEND_JOIN_ALIAS_SYNTAX, 0},
458+
{"SELECT * FROM t WHERE hasToken(message, 'DDLWorker')", 0},
459+
{"SELECT * FROM t WHERE hasAllTokens(message, ['peak', 'memory'])", 0},
460+
{"SELECT * FROM t WHERE hasAnyTokens(message, tokens('01442_merge_detach_attach'))", 0},
457461
};
458462
}
459463

@@ -569,6 +573,11 @@ public Object[][] testMiscStmtDp() {
569573
" END AS action_to_do\n" +
570574
"FROM db.table1";
571575

576+
private static final String EXTEND_JOIN_ALIAS_SYNTAX = "SELECT *\n" +
577+
"FROM (SELECT 1) AS t(a)\n" +
578+
"JOIN (SELECT 1) AS u(b)\n" +
579+
"ON a = b";
580+
572581
@Test(dataProvider = "testStatementWithoutResultSetDP")
573582
public void testStatementsForResultSet(String sql, int args, boolean hasResultSet) {
574583
System.out.println("sql: " + sql);
@@ -652,7 +661,8 @@ public static Object[][] testStatementWithoutResultSetDP() {
652661
{"CHECK GRANT SELECT(col2) ON table_2", 0, true},
653662
{"CHECK TABLE test_table", 0, true},
654663
{"CHECK TABLE t0 PARTITION ID '201003' FORMAT PrettyCompactMonoBlock SETTINGS check_query_single_value_result = 0", 0, true},
655-
664+
{"select toJSONString(data.^header_index) from database.analyzed limit 1;", 0, true},
665+
{"select toJSONString(data.^header_index), ? as text from database.analyzed limit 1;", 1, true},
656666

657667
/* no result set */
658668
{"INSERT INTO test_table VALUES (1, ?)", 1, false},

0 commit comments

Comments
 (0)