Skip to content

Commit 791d99b

Browse files
authored
parser: add list nodes for group by and order by (#698)
1 parent 8b6a435 commit 791d99b

18 files changed

+860
-644
lines changed

crates/squawk_ide/src/expand_selection.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ const DELIMITED_LIST_KINDS: &[SyntaxKind] = &[
3838
SyntaxKind::ATTRIBUTE_LIST,
3939
SyntaxKind::COLUMN_LIST,
4040
SyntaxKind::CONSTRAINT_EXCLUSION_LIST,
41+
SyntaxKind::GROUP_BY_LIST,
4142
SyntaxKind::JSON_TABLE_COLUMN_LIST,
4243
SyntaxKind::OPTIONS_LIST,
4344
SyntaxKind::PARAM_LIST,
4445
SyntaxKind::PARTITION_ITEM_LIST,
4546
SyntaxKind::ROW_LIST,
4647
SyntaxKind::SET_OPTIONS_LIST,
48+
SyntaxKind::SORT_BY_LIST,
4749
SyntaxKind::TABLE_ARG_LIST,
4850
SyntaxKind::TABLE_LIST,
4951
SyntaxKind::TARGET_LIST,

crates/squawk_parser/src/generated/syntax_kind.rs

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/squawk_parser/src/grammar.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2727,14 +2727,20 @@ fn opt_order_by_clause(p: &mut Parser<'_>) -> bool {
27272727
return false;
27282728
}
27292729
p.expect(BY_KW);
2730+
sort_by_list(p);
2731+
m.complete(p, ORDER_BY_CLAUSE);
2732+
true
2733+
}
2734+
2735+
fn sort_by_list(p: &mut Parser<'_>) {
2736+
let m = p.start();
27302737
while !p.at(EOF) {
27312738
sort_by(p);
27322739
if !p.eat(COMMA) {
27332740
break;
27342741
}
27352742
}
2736-
m.complete(p, ORDER_BY_CLAUSE);
2737-
true
2743+
m.complete(p, SORT_BY_LIST);
27382744
}
27392745

27402746
fn sort_by(p: &mut Parser<'_>) {
@@ -4334,6 +4340,7 @@ fn group_by_list(p: &mut Parser<'_>) {
43344340
// ambiguity, a GROUP BY name will be interpreted as an input-column name
43354341
// rather than an output column name.
43364342

4343+
let m = p.start();
43374344
while !p.at(EOF) && !p.at(SEMICOLON) {
43384345
if opt_group_by_item(p).is_none() {
43394346
p.error("expected group by item");
@@ -4342,6 +4349,7 @@ fn group_by_list(p: &mut Parser<'_>) {
43424349
break;
43434350
}
43444351
}
4352+
m.complete(p, GROUP_BY_LIST);
43454353
}
43464354

43474355
const GROUP_BY_ITEM_FIRST: TokenSet =

crates/squawk_parser/tests/snapshots/tests__create_view_extra_parens_ok.snap

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,12 @@ SOURCE_FILE
6868
WHITESPACE " "
6969
BY_KW "by"
7070
WHITESPACE " "
71-
SORT_BY
72-
NAME_REF
73-
IDENT "y"
74-
WHITESPACE " "
75-
SORT_DESC
76-
DESC_KW "desc"
71+
SORT_BY_LIST
72+
SORT_BY
73+
NAME_REF
74+
IDENT "y"
75+
WHITESPACE " "
76+
SORT_DESC
77+
DESC_KW "desc"
7778
SEMICOLON ";"
7879
WHITESPACE "\n"

crates/squawk_parser/tests/snapshots/tests__delete_ok.snap

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -326,9 +326,10 @@ SOURCE_FILE
326326
WHITESPACE " "
327327
BY_KW "by"
328328
WHITESPACE " "
329-
GROUPING_EXPR
330-
NAME_REF
331-
IDENT "user_id"
329+
GROUP_BY_LIST
330+
GROUPING_EXPR
331+
NAME_REF
332+
IDENT "user_id"
332333
R_PAREN ")"
333334
WHITESPACE " "
334335
ALIAS
@@ -999,13 +1000,14 @@ SOURCE_FILE
9991000
WHITESPACE " "
10001001
BY_KW "BY"
10011002
WHITESPACE " "
1002-
SORT_BY
1003-
FIELD_EXPR
1004-
NAME_REF
1005-
IDENT "l"
1006-
DOT "."
1007-
NAME_REF
1008-
IDENT "creation_date"
1003+
SORT_BY_LIST
1004+
SORT_BY
1005+
FIELD_EXPR
1006+
NAME_REF
1007+
IDENT "l"
1008+
DOT "."
1009+
NAME_REF
1010+
IDENT "creation_date"
10091011
WHITESPACE "\n "
10101012
LOCKING_CLAUSE
10111013
FOR_KW "FOR"

crates/squawk_parser/tests/snapshots/tests__explain_ok.snap

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -398,9 +398,10 @@ SOURCE_FILE
398398
WHITESPACE " "
399399
BY_KW "BY"
400400
WHITESPACE " "
401-
GROUPING_EXPR
402-
NAME_REF
403-
IDENT "foo"
401+
GROUP_BY_LIST
402+
GROUPING_EXPR
403+
NAME_REF
404+
IDENT "foo"
404405
SEMICOLON ";"
405406
WHITESPACE "\n\n"
406407
EXPLAIN
@@ -484,9 +485,10 @@ SOURCE_FILE
484485
WHITESPACE " "
485486
BY_KW "BY"
486487
WHITESPACE " "
487-
GROUPING_EXPR
488-
NAME_REF
489-
IDENT "foo"
488+
GROUP_BY_LIST
489+
GROUPING_EXPR
490+
NAME_REF
491+
IDENT "foo"
490492
SEMICOLON ";"
491493
WHITESPACE "\n\n"
492494
COMMENT "-- doc_example_8"
@@ -561,9 +563,10 @@ SOURCE_FILE
561563
WHITESPACE " "
562564
BY_KW "BY"
563565
WHITESPACE " "
564-
GROUPING_EXPR
565-
NAME_REF
566-
IDENT "foo"
566+
GROUP_BY_LIST
567+
GROUPING_EXPR
568+
NAME_REF
569+
IDENT "foo"
567570
SEMICOLON ";"
568571
WHITESPACE "\n\n"
569572
COMMENT "-- parens_select"

0 commit comments

Comments
 (0)