File tree Expand file tree Collapse file tree 10 files changed +440
-344
lines changed
Expand file tree Collapse file tree 10 files changed +440
-344
lines changed Original file line number Diff line number Diff line change @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
88## [ Unreleased]
99
10+ ### Fixed
11+
12+ - Fixed parsing ` create view ` with nested parens (#468 ).
13+
1014## v2.3.0 - 2025-05-13
1115
1216### Fixed
Original file line number Diff line number Diff line change @@ -2709,10 +2709,8 @@ fn data_source(p: &mut Parser<'_>) {
27092709 p. eat ( LATERAL_KW ) ;
27102710 match p. current ( ) {
27112711 L_PAREN => {
2712- p. bump ( L_PAREN ) ;
2713- // we're at the start of a nested select statement
2714- select_stmt ( p, None ) ;
2715- p. expect ( R_PAREN ) ;
2712+ // TODO: this should be `paren_select` instead of a general `tuple_expr`, since only a select statement is allowed inside
2713+ tuple_expr ( p) ;
27162714 opt_alias ( p) ;
27172715 }
27182716 JSON_TABLE_KW => {
Original file line number Diff line number Diff line change 1+ -- -
2+ source : crates / squawk_parser / src / test .rs
3+ input_file : crates / squawk_parser / test_data / ok / create_view_extra_parens .sql
4+ -- -
5+ SOURCE_FILE
6+ CREATE_VIEW_STMT
7+ CREATE_KW " create"
8+ WHITESPACE " "
9+ VIEW_KW " view"
10+ WHITESPACE " "
11+ PATH
12+ PATH_SEGMENT
13+ NAME
14+ IDENT " foo"
15+ WHITESPACE " "
16+ AS_KW " as"
17+ WHITESPACE " \n "
18+ SELECT
19+ SELECT_CLAUSE
20+ SELECT_KW " select"
21+ WHITESPACE " "
22+ TARGET_LIST
23+ TARGET
24+ FIELD_EXPR
25+ NAME_REF
26+ IDENT " b"
27+ DOT " ."
28+ NAME_REF
29+ IDENT " y"
30+ WHITESPACE " "
31+ FROM_CLAUSE
32+ FROM_KW " from"
33+ WHITESPACE " "
34+ PAREN_EXPR
35+ L_PAREN " ("
36+ PAREN_EXPR
37+ L_PAREN " ("
38+ WHITESPACE " "
39+ SELECT
40+ SELECT_CLAUSE
41+ SELECT_KW " select"
42+ WHITESPACE " "
43+ TARGET_LIST
44+ TARGET
45+ NAME_REF
46+ IDENT " y"
47+ WHITESPACE " "
48+ FROM_CLAUSE
49+ FROM_KW " from"
50+ WHITESPACE " "
51+ NAME_REF
52+ IDENT " bar"
53+ WHITESPACE " "
54+ R_PAREN " )"
55+ R_PAREN " )"
56+ WHITESPACE " "
57+ ALIAS
58+ AS_KW " as"
59+ WHITESPACE " "
60+ NAME
61+ IDENT " b"
62+ WHITESPACE " \n "
63+ ORDER_BY_CLAUSE
64+ ORDER_KW " order"
65+ WHITESPACE " "
66+ BY_KW " by"
67+ WHITESPACE " "
68+ NAME_REF
69+ IDENT " y"
70+ WHITESPACE " "
71+ DESC_KW " desc"
72+ SEMICOLON " ;"
73+ WHITESPACE " \n "
Original file line number Diff line number Diff line change @@ -254,46 +254,47 @@ SOURCE_FILE
254254 IDENT " u"
255255 COMMA " ,"
256256 WHITESPACE " \n "
257- L_PAREN " ("
258- SELECT
259- SELECT_CLAUSE
260- SELECT_KW " select"
261- WHITESPACE " "
262- TARGET_LIST
263- TARGET
264- NAME_REF
265- IDENT " user_id"
266- COMMA " ,"
257+ PAREN_EXPR
258+ L_PAREN " ("
259+ SELECT
260+ SELECT_CLAUSE
261+ SELECT_KW " select"
267262 WHITESPACE " "
268- TARGET
269- CALL_EXPR
263+ TARGET_LIST
264+ TARGET
270265 NAME_REF
271- IDENT " max"
272- ARG_LIST
273- L_PAREN " ("
274- NAME_REF
275- IDENT " login_time"
276- R_PAREN " )"
266+ IDENT " user_id"
267+ COMMA " ,"
277268 WHITESPACE " "
278- AS_KW " as"
279- WHITESPACE " "
280- NAME
281- IDENT " last_login"
282- WHITESPACE " \n "
283- FROM_CLAUSE
284- FROM_KW " from"
285- WHITESPACE " "
286- NAME_REF
287- IDENT " login_history"
288- WHITESPACE " \n "
289- GROUP_BY_CLAUSE
290- GROUP_KW " group"
291- WHITESPACE " "
292- BY_KW " by"
293- WHITESPACE " "
294- NAME_REF
295- IDENT " user_id"
296- R_PAREN " )"
269+ TARGET
270+ CALL_EXPR
271+ NAME_REF
272+ IDENT " max"
273+ ARG_LIST
274+ L_PAREN " ("
275+ NAME_REF
276+ IDENT " login_time"
277+ R_PAREN " )"
278+ WHITESPACE " "
279+ AS_KW " as"
280+ WHITESPACE " "
281+ NAME
282+ IDENT " last_login"
283+ WHITESPACE " \n "
284+ FROM_CLAUSE
285+ FROM_KW " from"
286+ WHITESPACE " "
287+ NAME_REF
288+ IDENT " login_history"
289+ WHITESPACE " \n "
290+ GROUP_BY_CLAUSE
291+ GROUP_KW " group"
292+ WHITESPACE " "
293+ BY_KW " by"
294+ WHITESPACE " "
295+ NAME_REF
296+ IDENT " user_id"
297+ R_PAREN " )"
297298 WHITESPACE " "
298299 ALIAS
299300 NAME
Original file line number Diff line number Diff line change @@ -334,22 +334,23 @@ SOURCE_FILE
334334 USING_CLAUSE
335335 USING_KW " using"
336336 WHITESPACE " "
337- L_PAREN " ("
338- SELECT
339- SELECT_CLAUSE
340- SELECT_KW " select"
341- WHITESPACE " "
342- TARGET_LIST
343- TARGET
344- NAME_REF
345- IDENT " id"
346- WHITESPACE " "
347- FROM_CLAUSE
348- FROM_KW " from"
337+ PAREN_EXPR
338+ L_PAREN " ("
339+ SELECT
340+ SELECT_CLAUSE
341+ SELECT_KW " select"
342+ WHITESPACE " "
343+ TARGET_LIST
344+ TARGET
345+ NAME_REF
346+ IDENT " id"
349347 WHITESPACE " "
350- NAME_REF
351- IDENT " bar"
352- R_PAREN " )"
348+ FROM_CLAUSE
349+ FROM_KW " from"
350+ WHITESPACE " "
351+ NAME_REF
352+ IDENT " bar"
353+ R_PAREN " )"
353354 WHITESPACE " \n "
354355 ON_KW " on"
355356 WHITESPACE " "
@@ -396,53 +397,54 @@ SOURCE_FILE
396397 USING_CLAUSE
397398 USING_KW " using"
398399 WHITESPACE " "
399- L_PAREN " ("
400- SELECT
401- SELECT_CLAUSE
402- SELECT_KW " select"
403- WHITESPACE " "
404- TARGET_LIST
405- TARGET
406- NAME_REF
407- IDENT " id"
408- WHITESPACE " "
409- FROM_CLAUSE
410- FROM_KW " from"
411- WHITESPACE " "
412- NAME_REF
413- IDENT " bar"
400+ PAREN_EXPR
401+ L_PAREN " ("
402+ SELECT
403+ SELECT_CLAUSE
404+ SELECT_KW " select"
405+ WHITESPACE " "
406+ TARGET_LIST
407+ TARGET
408+ NAME_REF
409+ IDENT " id"
414410 WHITESPACE " "
415- JOIN
416- JOIN_KW " join "
411+ FROM_CLAUSE
412+ FROM_KW " from "
417413 WHITESPACE " "
418414 NAME_REF
419- IDENT " foo "
415+ IDENT " bar "
420416 WHITESPACE " "
421- ALIAS
422- AS_KW " as "
417+ JOIN
418+ JOIN_KW " join "
423419 WHITESPACE " "
424- NAME
425- IDENT " f"
426- WHITESPACE " "
427- ON_KW " on"
428- WHITESPACE " "
429- BIN_EXPR
430- FIELD_EXPR
431- NAME_REF
420+ NAME_REF
421+ IDENT " foo"
422+ WHITESPACE " "
423+ ALIAS
424+ AS_KW " as"
425+ WHITESPACE " "
426+ NAME
432427 IDENT " f"
433- DOT " ."
434- NAME_REF
435- IDENT " id"
436428 WHITESPACE " "
437- EQ " = "
429+ ON_KW " on "
438430 WHITESPACE " "
439- FIELD_EXPR
440- NAME_REF
441- IDENT " bar"
442- DOT " ."
443- NAME_REF
444- IDENT " id"
445- R_PAREN " )"
431+ BIN_EXPR
432+ FIELD_EXPR
433+ NAME_REF
434+ IDENT " f"
435+ DOT " ."
436+ NAME_REF
437+ IDENT " id"
438+ WHITESPACE " "
439+ EQ " ="
440+ WHITESPACE " "
441+ FIELD_EXPR
442+ NAME_REF
443+ IDENT " bar"
444+ DOT " ."
445+ NAME_REF
446+ IDENT " id"
447+ R_PAREN " )"
446448 WHITESPACE " "
447449 ALIAS
448450 AS_KW " as"
@@ -495,22 +497,23 @@ SOURCE_FILE
495497 USING_CLAUSE
496498 USING_KW " using"
497499 WHITESPACE " "
498- L_PAREN " ("
499- SELECT
500- SELECT_CLAUSE
501- SELECT_KW " select"
502- WHITESPACE " "
503- TARGET_LIST
504- TARGET
505- NAME_REF
506- IDENT " id"
507- WHITESPACE " "
508- FROM_CLAUSE
509- FROM_KW " from"
500+ PAREN_EXPR
501+ L_PAREN " ("
502+ SELECT
503+ SELECT_CLAUSE
504+ SELECT_KW " select"
505+ WHITESPACE " "
506+ TARGET_LIST
507+ TARGET
508+ NAME_REF
509+ IDENT " id"
510510 WHITESPACE " "
511- NAME_REF
512- IDENT " bar"
513- R_PAREN " )"
511+ FROM_CLAUSE
512+ FROM_KW " from"
513+ WHITESPACE " "
514+ NAME_REF
515+ IDENT " bar"
516+ R_PAREN " )"
514517 WHITESPACE " "
515518 ALIAS
516519 NAME
You can’t perform that action at this time.
0 commit comments