---
source: crates/squawk_parser/tests/tests.rs
input_file: crates/squawk_parser/tests/data/err/select.sql
---
SOURCE_FILE
COMMENT "--- via https://duckdb.org/docs/stable/sql/dialect/friendly_sql.html#trailing-commas"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE "\n "
TARGET_LIST
TARGET
LITERAL
INT_NUMBER "42"
WHITESPACE " "
AS_NAME
AS_KW "as"
WHITESPACE " "
NAME
IDENT "x"
COMMA ","
WHITESPACE "\n "
TARGET
ARRAY_EXPR
ARRAY_KW "array"
L_BRACK "["
LITERAL
STRING "'a'"
COMMA ","
WHITESPACE " "
LITERAL
STRING "'b'"
COMMA ","
WHITESPACE " "
LITERAL
STRING "'c'"
ERROR
COMMA ","
R_BRACK "]"
WHITESPACE " "
AS_NAME
AS_KW "as"
WHITESPACE " "
NAME
IDENT "y"
COMMA ","
WHITESPACE "\n "
TARGET
LITERAL
STRING "'hello world'"
WHITESPACE " "
AS_NAME
AS_KW "as"
WHITESPACE " "
NAME
IDENT "z"
ERROR
COMMA ","
WHITESPACE "\n"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- trailing comma in column list"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
STAR "*"
WHITESPACE " "
FROM_CLAUSE
FROM_KW "from"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "t"
WHITESPACE " "
ALIAS
AS_KW "as"
WHITESPACE " "
NAME
IDENT "u"
COLUMN_LIST
L_PAREN "("
COLUMN
NAME
IDENT "a"
ERROR
COMMA ","
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- missing comma"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
NAME_REF
IDENT "a"
COMMA ","
WHITESPACE " "
TARGET
NAME_REF
IDENT "b"
WHITESPACE " "
AS_NAME
NAME
IDENT "c"
WHITESPACE " "
TARGET
NAME_REF
IDENT "d"
COMMA ","
WHITESPACE " "
TARGET
NAME_REF
IDENT "e"
WHITESPACE " "
FROM_CLAUSE
FROM_KW "from"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "t"
SEMICOLON ";"
WHITESPACE "\n"
COMMENT "-- ^ ^ comma missing"
WHITESPACE "\n"
COMMENT "-- \\-- this is a label"
WHITESPACE "\n\n"
COMMENT "-- distinct on missing a comma"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "SELECT"
WHITESPACE " "
DISTINCT_CLAUSE
DISTINCT_KW "DISTINCT"
WHITESPACE " "
ON_KW "ON"
WHITESPACE " "
L_PAREN "("
NAME_REF
IDENT "a"
WHITESPACE " "
NAME_REF
IDENT "b"
R_PAREN ")"
WHITESPACE " "
TARGET_LIST
TARGET
NAME_REF
IDENT "a"
COMMA ","
WHITESPACE " "
TARGET
NAME_REF
IDENT "b"
COMMA ","
WHITESPACE " "
TARGET
NAME_REF
IDENT "c"
WHITESPACE "\n "
FROM_CLAUSE
FROM_KW "FROM"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "t"
WHITESPACE "\n "
ORDER_BY_CLAUSE
ORDER_KW "order"
WHITESPACE " "
BY_KW "by"
WHITESPACE " "
SORT_BY
NAME_REF
IDENT "a"
COMMA ","
WHITESPACE " "
SORT_BY
NAME_REF
IDENT "b"
WHITESPACE " "
SORT_DESC
DESC_KW "desc"
SEMICOLON ";"
WHITESPACE " \n\n"
COMMENT "-- group bys with missing commas"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
STAR "*"
WHITESPACE " "
FROM_CLAUSE
FROM_KW "from"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "t"
WHITESPACE " "
GROUP_BY_CLAUSE
GROUP_KW "group"
WHITESPACE " "
BY_KW "by"
WHITESPACE " "
GROUPING_ROLLUP
ROLLUP_KW "rollup"
WHITESPACE " "
L_PAREN "("
LITERAL
INT_NUMBER "1"
WHITESPACE " "
LITERAL
INT_NUMBER "2"
WHITESPACE " "
LITERAL
INT_NUMBER "3"
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
STAR "*"
WHITESPACE " "
FROM_CLAUSE
FROM_KW "from"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "t"
WHITESPACE " "
GROUP_BY_CLAUSE
GROUP_KW "group"
WHITESPACE " "
BY_KW "by"
WHITESPACE " "
GROUPING_CUBE
CUBE_KW "cube"
WHITESPACE " "
L_PAREN "("
LITERAL
INT_NUMBER "1"
WHITESPACE " "
LITERAL
INT_NUMBER "2"
WHITESPACE " "
LITERAL
INT_NUMBER "3"
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
STAR "*"
WHITESPACE " "
FROM_CLAUSE
FROM_KW "from"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "u"
WHITESPACE "\n "
GROUP_BY_CLAUSE
GROUP_KW "group"
WHITESPACE " "
BY_KW "by"
WHITESPACE " "
GROUPING_SETS
GROUPING_KW "grouping"
WHITESPACE " "
SETS_KW "sets"
L_PAREN "("
GROUPING_EXPR
TUPLE_EXPR
L_PAREN "("
LITERAL
INT_NUMBER "1"
WHITESPACE " "
LITERAL
INT_NUMBER "2"
R_PAREN ")"
WHITESPACE " "
GROUPING_SETS
GROUPING_KW "grouping"
WHITESPACE " "
SETS_KW "sets"
L_PAREN "("
GROUPING_EXPR
TUPLE_EXPR
L_PAREN "("
R_PAREN ")"
COMMA ","
WHITESPACE " "
GROUPING_SETS
GROUPING_KW "grouping"
WHITESPACE " "
SETS_KW "sets"
L_PAREN "("
GROUPING_EXPR
TUPLE_EXPR
L_PAREN "("
R_PAREN ")"
R_PAREN ")"
R_PAREN ")"
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- trailing comma in args"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
CALL_EXPR
NAME_REF
IDENT "f"
ARG_LIST
L_PAREN "("
LITERAL
INT_NUMBER "1"
ERROR
COMMA ","
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- missing args"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
CALL_EXPR
NAME_REF
IDENT "f"
ARG_LIST
L_PAREN "("
NAME_REF
IDENT "a"
COMMA ","
ERROR
COMMA ","
ERROR
COMMA ","
ERROR
COMMA ","
ERROR
COMMA ","
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- in can only be used with tuples / sub queries"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
BIN_EXPR
LITERAL
INT_NUMBER "1"
WHITESPACE " "
IN_KW "in"
WHITESPACE " "
NAME_REF
IDENT "c"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- type cast must use a string literal"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
NAME_REF
NUMERIC_KW "numeric"
WHITESPACE " "
TARGET
LITERAL
INT_NUMBER "1234"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- missing comma"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
ARRAY_EXPR
ARRAY_KW "array"
L_BRACK "["
LITERAL
INT_NUMBER "1"
WHITESPACE " "
LITERAL
INT_NUMBER "2"
COMMA ","
LITERAL
INT_NUMBER "3"
R_BRACK "]"
SEMICOLON ";"
WHITESPACE "\n"
COMMENT "-- extra comma"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
ARRAY_EXPR
ARRAY_KW "array"
L_BRACK "["
LITERAL
INT_NUMBER "1"
COMMA ","
WHITESPACE " "
ERROR
COMMA ","
LITERAL
INT_NUMBER "3"
R_BRACK "]"
SEMICOLON ";"
WHITESPACE "\n"
COMMENT "-- trailing comma"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
ARRAY_EXPR
ARRAY_KW "array"
L_BRACK "["
LITERAL
INT_NUMBER "1"
COMMA ","
LITERAL
INT_NUMBER "2"
COMMA ","
LITERAL
INT_NUMBER "3"
ERROR
COMMA ","
R_BRACK "]"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- cast with malformed type mod args"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
CAST_EXPR
CAST_KW "cast"
L_PAREN "("
NAME_REF
IDENT "x"
WHITESPACE " "
AS_KW "as"
WHITESPACE " "
CHAR_TYPE
VARCHAR_KW "varchar"
ARG_LIST
L_PAREN "("
ARG
LITERAL
INT_NUMBER "100"
WHITESPACE " "
ARG
LITERAL
INT_NUMBER "200"
R_PAREN ")"
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
CAST_EXPR
CAST_KW "cast"
L_PAREN "("
NAME_REF
IDENT "x"
WHITESPACE " "
AS_KW "as"
WHITESPACE " "
CHAR_TYPE
VARCHAR_KW "varchar"
ARG_LIST
L_PAREN "("
ARG
LITERAL
INT_NUMBER "100"
COMMA ","
WHITESPACE " "
ERROR
COMMA ","
WHITESPACE " "
ARG
LITERAL
INT_NUMBER "200"
R_PAREN ")"
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
CAST_EXPR
CAST_KW "cast"
L_PAREN "("
NAME_REF
IDENT "x"
WHITESPACE " "
AS_KW "as"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "t"
ARG_LIST
L_PAREN "("
ARG
NAME_REF
IDENT "a"
COMMA ","
WHITESPACE " "
ARG
NAME_REF
IDENT "b"
ERROR
COMMA ","
R_PAREN ")"
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- regression test: this would cause the parser to get stuck & panic, now it"
WHITESPACE "\n"
COMMENT "-- warns about a missing semicolon"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
SELECT
SELECT_CLAUSE
SELECT_KW "select"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- extra comma"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
NAME_REF
IDENT "a"
ERROR
COMMA ","
WHITESPACE " "
FROM_CLAUSE
FROM_KW "from"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "t"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- trailing comma at EOF"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
TARGET_LIST
TARGET
LITERAL
INT_NUMBER "1"
ERROR
COMMA ","
WHITESPACE "\n"
---
ERROR@124: unexpected trailing comma
ERROR@153: unexpected trailing comma
ERROR@213: unexpected trailing comma
ERROR@248: missing comma
ERROR@378: expected COMMA
ERROR@494: expected COMMA
ERROR@496: expected COMMA
ERROR@533: expected COMMA
ERROR@535: expected COMMA
ERROR@583: expected COMMA
ERROR@586: expected COMMA
ERROR@663: unexpected trailing comma
ERROR@695: expected expression
ERROR@696: expected expression
ERROR@697: expected expression
ERROR@698: expected expression
ERROR@821: missing comma
ERROR@860: expected COMMA
ERROR@898: unexpected comma
ERROR@939: unexpected trailing comma
ERROR@1009: expected COMMA
ERROR@1047: unexpected comma
ERROR@1079: unexpected trailing comma
ERROR@1203: expected SEMICOLON
ERROR@1236: unexpected trailing comma
ERROR@1280: unexpected trailing comma