Skip to content

Commit 9653c9e

Browse files
authored
Merge pull request #2552 from ClickHouse/jdbc_parser_issues
[JDBC] Fix parser issues with CTE and view parameters
2 parents dff5e2e + f960191 commit 9653c9e

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

jdbc-v2/src/main/antlr4/com/clickhouse/jdbc/internal/ClickHouseParser.g4

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ query
4141

4242
// CTE statement
4343
ctes
44-
: LPAREN? WITH (cteUnboundCol COMMA)* namedQuery (COMMA namedQuery)* RPAREN?
44+
: LPAREN? WITH cteUnboundCol? (COMMA cteUnboundCol)* COMMA? namedQuery (COMMA namedQuery)* RPAREN?
4545
;
4646

4747
namedQuery
@@ -55,6 +55,8 @@ columnAliases
5555
cteUnboundCol
5656
: (literal AS identifier) # CteUnboundColLiteral
5757
| (QUERY AS identifier) # CteUnboundColParam
58+
| LPAREN columnExpr RPAREN AS identifier # CteUnboundColExpr
59+
| LPAREN ctes? selectStmt RPAREN AS identifier # CteUnboundNestedSelect
5860
;
5961

6062
// ALTER statement
@@ -438,6 +440,11 @@ fromClause
438440
: FROM joinExpr
439441
| FROM identifier LPAREN QUERY RPAREN
440442
| FROM ctes
443+
| FROM identifier LPAREN viewParam (COMMA viewParam)? RPAREN
444+
;
445+
446+
viewParam
447+
: identifier EQ_SINGLE (literal | QUERY)
441448
;
442449

443450
arrayJoinClause
@@ -937,6 +944,7 @@ columnExpr
937944
| LBRACKET columnExprList? RBRACKET # ColumnExprArray
938945
| columnIdentifier # ColumnExprIdentifier
939946
| QUERY (CAST_OP identifier)? # ColumnExprParam
947+
| columnExpr REGEXP literal # ColumnExprRegexp
940948
;
941949

942950
columnArgList

jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/ParsedPreparedStatement.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,13 @@ public void enterFromClause(ClickHouseParser.FromClauseContext ctx) {
205205
}
206206
}
207207

208+
@Override
209+
public void enterViewParam(ClickHouseParser.ViewParamContext ctx) {
210+
if (ctx.QUERY() != null) {
211+
appendParameter(ctx.QUERY().getSymbol().getStartIndex());
212+
}
213+
}
214+
208215
private void appendParameter(int startIndex) {
209216
argCount++;
210217
if (argCount > paramPositions.length) {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,10 @@ public Object[][] testMiscStmtDp() {
322322
{"SELECT v FROM t WHERE f in (?)", 1},
323323
{"SELECT v FROM t WHERE a > 10 AND event NOT IN (?)", 1},
324324
{"SELECT v FROM t WHERE f in (1, 2, 3)", 0},
325-
{"with ? as val1, numz as (select val1, number from system.numbers limit 10) select * from numz", 1}
325+
{"with ? as val1, numz as (select val1, number from system.numbers limit 10) select * from numz", 1},
326+
{"WITH 'hello' REGEXP 'h' AS result SELECT 1", 0},
327+
{"WITH (select 1) as a, z AS (select 2) SELECT 1", 0},
328+
{"SELECT result FROM test_view(myParam = ?)", 1},
326329
};
327330
}
328331

0 commit comments

Comments
 (0)