---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_syntax/test_data/validation/select.sql
---
SOURCE_FILE@0..730
WHITESPACE@0..1 "\n"
SELECT@1..17
FROM_CLAUSE@1..7
FROM_KW@1..5 "from"
WHITESPACE@5..6 " "
RELATION_FROM_ITEM@6..7
RELATION_NAME_REF@6..7
PATH_REF@6..7
PATH_SEGMENT_REF@6..7
IDENT@6..7 "t"
WHITESPACE@7..8 " "
SELECT_CLAUSE@8..16
SELECT_KW@8..14 "select"
WHITESPACE@14..15 " "
TARGET_LIST@15..16
TARGET@15..16
NAME_REF@15..16
IDENT@15..16 "c"
SEMICOLON@16..17 ";"
WHITESPACE@17..19 "\n\n"
SELECT@19..34
FROM_CLAUSE@19..27
FROM_KW@19..23 "from"
WHITESPACE@23..24 " "
FUNCTION_FROM_ITEM@24..27
CALL_EXPR@24..27
NAME_REF@24..25
IDENT@24..25 "f"
ARG_LIST@25..27
L_PAREN@25..26 "("
R_PAREN@26..27 ")"
SELECT_CLAUSE@27..33
SELECT_KW@27..33 "select"
SEMICOLON@33..34 ";"
WHITESPACE@34..36 "\n\n"
SELECT@36..43
FROM_CLAUSE@36..42
FROM_KW@36..40 "from"
WHITESPACE@40..41 " "
RELATION_FROM_ITEM@41..42
RELATION_NAME_REF@41..42
PATH_REF@41..42
PATH_SEGMENT_REF@41..42
IDENT@41..42 "t"
SEMICOLON@42..43 ";"
WHITESPACE@43..45 "\n\n"
SELECT@45..72
SELECT_CLAUSE@45..61
SELECT_KW@45..51 "SELECT"
TARGET_LIST@51..61
TARGET@51..61
TUPLE_EXPR@51..61
L_PAREN@51..52 "("
NAME_REF@52..53
IDENT@52..53 "o"
COMMA@53..54 ","
SELECT@54..60
SELECT_CLAUSE@54..60
SELECT_KW@54..60 "select"
R_PAREN@60..61 ")"
WHERE_CLAUSE@61..71
WHERE_KW@61..66 "WHERE"
CAST_EXPR@66..71
LITERAL@66..68
STRING@66..68 "''"
COLON_COLON@68..70
COLON@68..69 ":"
COLON@69..70 ":"
PATH_TYPE@70..71
PATH_REF@70..71
PATH_SEGMENT_REF@70..71
IDENT@70..71 "r"
SEMICOLON@71..72 ";"
WHITESPACE@72..74 "\n\n"
SELECT@74..100
SELECT_CLAUSE@74..86
SELECT_KW@74..80 "SELECT"
TARGET_LIST@80..86
TARGET@80..86
CALL_EXPR@80..86
FIELD_EXPR@80..84
TUPLE_EXPR@80..82
L_PAREN@80..81 "("
R_PAREN@81..82 ")"
DOT@82..83 "."
NAME_REF@83..84
IDENT@83..84 "n"
ARG_LIST@84..86
L_PAREN@84..85 "("
R_PAREN@85..86 ")"
FROM_CLAUSE@86..99
FROM_KW@86..90 "FROM"
WHITESPACE@90..91 " "
FUNCTION_FROM_ITEM@91..99
ONLY_KW@91..95 "ONLY"
WHITESPACE@95..96 " "
CALL_EXPR@96..99
NAME_REF@96..97
IDENT@96..97 "p"
ARG_LIST@97..99
L_PAREN@97..98 "("
R_PAREN@98..99 ")"
SEMICOLON@99..100 ";"
WHITESPACE@100..102 "\n\n"
SELECT@102..137
WITH_CLAUSE@102..120
WITH_KW@102..106 "with"
WHITESPACE@106..107 " "
WITH_TABLE@107..120
CTE_NAME@107..108
IDENT@107..108 "t"
WHITESPACE@108..109 " "
AS_KW@109..111 "as"
WHITESPACE@111..112 " "
L_PAREN@112..113 "("
SELECT@113..119
FROM_CLAUSE@113..119
FROM_KW@113..117 "from"
WHITESPACE@117..118 " "
RELATION_FROM_ITEM@118..119
RELATION_NAME_REF@118..119
PATH_REF@118..119
PATH_SEGMENT_REF@118..119
IDENT@118..119 "k"
R_PAREN@119..120 ")"
WHITESPACE@120..121 "\n"
SELECT_CLAUSE@121..129
SELECT_KW@121..127 "select"
WHITESPACE@127..128 " "
TARGET_LIST@128..129
TARGET@128..129
STAR@128..129 "*"
WHITESPACE@129..130 " "
FROM_CLAUSE@130..136
FROM_KW@130..134 "from"
WHITESPACE@134..135 " "
RELATION_FROM_ITEM@135..136
RELATION_NAME_REF@135..136
PATH_REF@135..136
PATH_SEGMENT_REF@135..136
IDENT@135..136 "t"
SEMICOLON@136..137 ";"
WHITESPACE@137..139 "\n\n"
SELECT@139..158
SELECT_CLAUSE@139..157
SELECT_KW@139..145 "SELECT"
TARGET_LIST@145..157
TARGET@145..157
TUPLE_EXPR@145..157
L_PAREN@145..146 "("
NAME_REF@146..147
IDENT@146..147 "o"
COMMA@147..148 ","
SELECT@148..156
SELECT_CLAUSE@148..156
SELECT_KW@148..154 "select"
WHITESPACE@154..155 " "
TARGET_LIST@155..156
TARGET@155..156
NAME_REF@155..156
IDENT@155..156 "f"
R_PAREN@156..157 ")"
SEMICOLON@157..158 ";"
WHITESPACE@158..160 "\n\n"
SELECT@160..176
SELECT_CLAUSE@160..175
SELECT_KW@160..166 "select"
WHITESPACE@166..167 " "
TARGET_LIST@167..175
TARGET@167..175
PAREN_EXPR@167..175
L_PAREN@167..168 "("
SELECT@168..174
SELECT_CLAUSE@168..174
SELECT_KW@168..174 "select"
R_PAREN@174..175 ")"
SEMICOLON@175..176 ";"
WHITESPACE@176..178 "\n\n"
CREATE_VIEW@178..218
CREATE_KW@178..184 "create"
WHITESPACE@184..185 " "
VIEW_KW@185..189 "view"
WHITESPACE@189..190 " "
VIEW@190..191
PATH@190..191
PATH_SEGMENT@190..191
IDENT@190..191 "f"
WHITESPACE@191..192 " "
AS_KW@192..194 "as"
WHITESPACE@194..195 " "
SELECT@195..217
SELECT_CLAUSE@195..201
SELECT_KW@195..201 "select"
WHITESPACE@201..202 " "
FROM_CLAUSE@202..217
FROM_KW@202..206 "from"
PAREN_FROM_ITEM@206..217
PAREN_SELECT@206..217
L_PAREN@206..207 "("
PAREN_FROM_ITEM@207..216
PAREN_SELECT@207..215
L_PAREN@207..208 "("
SELECT@208..214
SELECT_CLAUSE@208..214
SELECT_KW@208..214 "select"
R_PAREN@214..215 ")"
FROM_ALIAS@215..216
TABLE_ALIAS@215..216
IDENT@215..216 "a"
R_PAREN@216..217 ")"
SEMICOLON@217..218 ";"
WHITESPACE@218..220 "\n\n"
SELECT@220..232
SELECT_CLAUSE@220..231
SELECT_KW@220..226 "select"
WHITESPACE@226..227 " "
TARGET_LIST@227..231
TARGET@227..231
TUPLE_EXPR@227..229
L_PAREN@227..228 "("
R_PAREN@228..229 ")"
WHITESPACE@229..230 " "
AS_NAME@230..231
COLUMN_NAME@230..231
IDENT@230..231 "d"
SEMICOLON@231..232 ";"
WHITESPACE@232..234 "\n\n"
COMMENT@234..249 "-- this is okay"
WHITESPACE@249..250 "\n"
SELECT@250..265
SELECT_CLAUSE@250..264
SELECT_KW@250..256 "select"
WHITESPACE@256..257 " "
TARGET_LIST@257..264
TARGET@257..264
TUPLE_EXPR@257..262
ROW_KW@257..260 "row"
L_PAREN@260..261 "("
R_PAREN@261..262 ")"
WHITESPACE@262..263 " "
AS_NAME@263..264
COLUMN_NAME@263..264
IDENT@263..264 "d"
SEMICOLON@264..265 ";"
WHITESPACE@265..267 "\n\n"
COMMENT@267..338 "-- COLLATE can be a b ..."
WHITESPACE@338..339 "\n"
SELECT@339..357
SELECT_CLAUSE@339..356
SELECT_KW@339..345 "SELECT"
WHITESPACE@345..346 " "
TARGET_LIST@346..356
TARGET@346..356
LITERAL@346..348
STRING@346..348 "''"
WHITESPACE@348..349 " "
AS_NAME@349..356
COLUMN_NAME@349..356
COLLATE_KW@349..356 "COLLATE"
SEMICOLON@356..357 ";"
WHITESPACE@357..358 "\n"
SELECT@358..381
SELECT_CLAUSE@358..380
SELECT_KW@358..364 "SELECT"
WHITESPACE@364..365 " "
TARGET_LIST@365..380
TARGET@365..380
COLLATE@365..376
LITERAL@365..367
STRING@365..367 "''"
WHITESPACE@367..368 " "
COLLATE_KW@368..375 "COLLATE"
WHITESPACE@375..376 " "
COLLATION_REF@376..376
AS_NAME@376..380
AS_KW@376..378 "AS"
WHITESPACE@378..379 " "
COLUMN_NAME@379..380
IDENT@379..380 "t"
SEMICOLON@380..381 ";"
WHITESPACE@381..383 "\n\n"
COMMENT@383..437 "-- GROUP BY and ORDER ..."
WHITESPACE@437..438 "\n"
SELECT@438..454
SELECT_CLAUSE@438..444
SELECT_KW@438..444 "select"
WHITESPACE@444..445 " "
GROUP_BY_CLAUSE@445..453
GROUP_KW@445..450 "group"
WHITESPACE@450..451 " "
BY_KW@451..453 "by"
SEMICOLON@453..454 ";"
WHITESPACE@454..455 "\n"
SELECT@455..488
SELECT_CLAUSE@455..463
SELECT_KW@455..461 "select"
WHITESPACE@461..462 " "
TARGET_LIST@462..463
TARGET@462..463
LITERAL@462..463
INT_NUMBER@462..463 "1"
WHITESPACE@463..464 " "
GROUP_BY_CLAUSE@464..475
GROUP_KW@464..469 "group"
WHITESPACE@469..470 " "
BY_KW@470..472 "by"
WHITESPACE@472..473 " "
GROUP_BY_LIST@473..475
GROUPING_EXPR@473..474
NAME_REF@473..474
IDENT@473..474 "a"
COMMA@474..475 ","
WHITESPACE@475..476 " "
HAVING_CLAUSE@476..487
HAVING_KW@476..482 "having"
WHITESPACE@482..483 " "
LITERAL@483..487
TRUE_KW@483..487 "true"
SEMICOLON@487..488 ";"
WHITESPACE@488..489 "\n"
SELECT@489..538
WITH_CLAUSE@489..521
WITH_KW@489..493 "with"
WHITESPACE@493..494 " "
WITH_TABLE@494..521
CTE_NAME@494..495
IDENT@494..495 "q"
WHITESPACE@495..496 " "
AS_KW@496..498 "as"
WHITESPACE@498..499 " "
L_PAREN@499..500 "("
SELECT@500..520
SELECT_CLAUSE@500..508
SELECT_KW@500..506 "select"
WHITESPACE@506..507 " "
TARGET_LIST@507..508
TARGET@507..508
LITERAL@507..508
INT_NUMBER@507..508 "1"
WHITESPACE@508..509 " "
GROUP_BY_CLAUSE@509..520
GROUP_KW@509..514 "group"
WHITESPACE@514..515 " "
BY_KW@515..517 "by"
WHITESPACE@517..518 " "
GROUP_BY_LIST@518..520
GROUPING_EXPR@518..519
NAME_REF@518..519
IDENT@518..519 "a"
COMMA@519..520 ","
R_PAREN@520..521 ")"
WHITESPACE@521..522 " "
SELECT_CLAUSE@522..530
SELECT_KW@522..528 "select"
WHITESPACE@528..529 " "
TARGET_LIST@529..530
TARGET@529..530
STAR@529..530 "*"
WHITESPACE@530..531 " "
FROM_CLAUSE@531..537
FROM_KW@531..535 "from"
WHITESPACE@535..536 " "
RELATION_FROM_ITEM@536..537
RELATION_NAME_REF@536..537
PATH_REF@536..537
PATH_SEGMENT_REF@536..537
IDENT@536..537 "q"
SEMICOLON@537..538 ";"
WHITESPACE@538..539 "\n"
CREATE_MATERIALIZED_VIEW@539..600
CREATE_KW@539..545 "create"
WHITESPACE@545..546 " "
MATERIALIZED_KW@546..558 "materialized"
WHITESPACE@558..559 " "
VIEW_KW@559..563 "view"
WHITESPACE@563..564 " "
VIEW@564..565
PATH@564..565
PATH_SEGMENT@564..565
IDENT@564..565 "v"
WHITESPACE@565..566 " "
AS_KW@566..568 "as"
WHITESPACE@568..569 " "
SELECT@569..589
SELECT_CLAUSE@569..577
SELECT_KW@569..575 "select"
WHITESPACE@575..576 " "
TARGET_LIST@576..577
TARGET@576..577
LITERAL@576..577
INT_NUMBER@576..577 "1"
WHITESPACE@577..578 " "
GROUP_BY_CLAUSE@578..589
GROUP_KW@578..583 "group"
WHITESPACE@583..584 " "
BY_KW@584..586 "by"
WHITESPACE@586..587 " "
GROUP_BY_LIST@587..589
GROUPING_EXPR@587..588
NAME_REF@587..588
IDENT@587..588 "a"
COMMA@588..589 ","
WHITESPACE@589..590 " "
WITH_DATA@590..599
WITH_KW@590..594 "with"
WHITESPACE@594..595 " "
DATA_KW@595..599 "data"
SEMICOLON@599..600 ";"
WHITESPACE@600..601 "\n"
SELECT@601..622
SELECT_CLAUSE@601..609
SELECT_KW@601..607 "select"
WHITESPACE@607..608 " "
TARGET_LIST@608..609
TARGET@608..609
LITERAL@608..609
INT_NUMBER@608..609 "1"
WHITESPACE@609..610 " "
GROUP_BY_CLAUSE@610..621
GROUP_KW@610..615 "group"
WHITESPACE@615..616 " "
BY_KW@616..618 "by"
WHITESPACE@618..619 " "
GROUP_BY_LIST@619..621
GROUPING_EXPR@619..620
NAME_REF@619..620
IDENT@619..620 "a"
COMMA@620..621 ","
SEMICOLON@621..622 ";"
WHITESPACE@622..623 "\n"
SELECT@623..644
SELECT_CLAUSE@623..631
SELECT_KW@623..629 "select"
WHITESPACE@629..630 " "
TARGET_LIST@630..631
TARGET@630..631
LITERAL@630..631
INT_NUMBER@630..631 "1"
WHITESPACE@631..632 " "
ORDER_BY_CLAUSE@632..643
ORDER_KW@632..637 "order"
WHITESPACE@637..638 " "
BY_KW@638..640 "by"
WHITESPACE@640..641 " "
SORT_BY_LIST@641..643
SORT_BY@641..642
NAME_REF@641..642
IDENT@641..642 "a"
COMMA@642..643 ","
SEMICOLON@643..644 ";"
WHITESPACE@644..645 "\n"
SELECT@645..673
SELECT_CLAUSE@645..651
SELECT_KW@645..651 "select"
WHITESPACE@651..652 " "
GROUP_BY_CLAUSE@652..663
GROUP_KW@652..657 "group"
WHITESPACE@657..658 " "
BY_KW@658..660 "by"
WHITESPACE@660..661 " "
GROUP_BY_LIST@661..663
GROUPING_EXPR@661..662
NAME_REF@661..662
IDENT@661..662 "a"
COMMA@662..663 ","
WHITESPACE@663..664 " "
ORDER_BY_CLAUSE@664..672
ORDER_KW@664..669 "order"
WHITESPACE@669..670 " "
BY_KW@670..672 "by"
SORT_BY_LIST@672..672
SEMICOLON@672..673 ";"
WHITESPACE@673..675 "\n\n"
COMMENT@675..708 "-- trailing ORDER BY ..."
WHITESPACE@708..709 "\n"
SELECT@709..729
SELECT_CLAUSE@709..717
SELECT_KW@709..715 "select"
WHITESPACE@715..716 " "
TARGET_LIST@716..717
TARGET@716..717
LITERAL@716..717
INT_NUMBER@716..717 "1"
WHITESPACE@717..718 " "
ORDER_BY_CLAUSE@718..729
ORDER_KW@718..723 "order"
WHITESPACE@723..724 " "
BY_KW@724..726 "by"
WHITESPACE@726..727 " "
SORT_BY_LIST@727..729
SORT_BY@727..728
NAME_REF@727..728
IDENT@727..728 "a"
COMMA@728..729 ","
WHITESPACE@729..730 "\n"
error[syntax-error]: Leading from clauses are not supported in Postgres
╭▸
2 │ from t select c;
╰╴━━━━━━
error[syntax-error]: Leading from clauses are not supported in Postgres
╭▸
4 │ from f()select;
╰╴━━━━━━━━
error[syntax-error]: Missing select clause
╭▸
6 │ from t;
╰╴━
error[syntax-error]: Expected a target after SELECT
╭▸
8 │ SELECT(o,select)WHERE''::r;
╰╴ ━━━━━━
error[syntax-error]: Expected an expression
╭▸
10 │ SELECT().n()FROM ONLY p();
╰╴ ━
error[syntax-error]: expected function name before argument list
╭▸
10 │ SELECT().n()FROM ONLY p();
╰╴ ━
error[syntax-error]: ONLY cannot be used with a function call
╭▸
10 │ SELECT().n()FROM ONLY p();
╰╴ ━━━━
error[syntax-error]: Missing select clause
╭▸
12 │ with t as (from k)
╰╴ ━
error[syntax-error]: Subqueries in tuple expressions must be parenthesized
╭▸
15 │ SELECT(o,select f);
╰╴ ━━━━━━━━
error[syntax-error]: Expected a target after SELECT
╭▸
17 │ select (select);
╰╴ ━━━━━━
error[syntax-error]: Parentheses are not allowed
╭▸
19 │ create view f as select from((select)a);
╰╴ ━━━━━━━━━━━
error[syntax-error]: A subquery alias must follow all closing parentheses
╭▸
19 │ create view f as select from((select)a);
╰╴ ━
error[syntax-error]: Expected an expression
╭▸
21 │ select () d;
╰╴ ━
error[syntax-error]: expected path name
╭▸
28 │ SELECT '' COLLATE AS t;
╰╴ ━
error[syntax-error]: Expected at least one GROUP BY item
╭▸
31 │ select group by;
╰╴ ━
error[syntax-error]: Expected a GROUP BY item after comma
╭▸
32 │ select 1 group by a, having true;
╰╴ ━
error[syntax-error]: Expected a GROUP BY item after comma
╭▸
33 │ with q as (select 1 group by a,) select * from q;
╰╴ ━
error[syntax-error]: Expected a GROUP BY item after comma
╭▸
34 │ create materialized view v as select 1 group by a, with data;
╰╴ ━
error[syntax-error]: Expected a GROUP BY item after comma
╭▸
35 │ select 1 group by a,;
╰╴ ━
error[syntax-error]: Expected an ORDER BY item after comma
╭▸
36 │ select 1 order by a,;
╰╴ ━
error[syntax-error]: Expected a GROUP BY item after comma
╭▸
37 │ select group by a, order by;
╰╴ ━
error[syntax-error]: Expected at least one ORDER BY item
╭▸
37 │ select group by a, order by;
╰╴ ━
error[syntax-error]: Expected an ORDER BY item after comma
╭▸
40 │ select 1 order by a,
╰╴ ━