---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_parser/tests/data/plpgsql/ok/exec_sql_stmt.sql
---
PLPGSQL@0..864
WHITESPACE@0..1 "\n"
PLPGSQL_BLOCK@1..863
BEGIN_KW@1..6 "begin"
WHITESPACE@6..9 "\n "
PLPGSQL_BODY@9..859
PLPGSQL_EXEC_SQL_STMT@9..41
INSERT@9..40
INSERT_KW@9..15 "insert"
WHITESPACE@15..16 " "
INTO_KW@16..20 "into"
WHITESPACE@20..21 " "
RELATION_NAME_REF@21..26
PATH_REF@21..26
PATH_SEGMENT_REF@21..26
IDENT@21..26 "exs_t"
WHITESPACE@26..27 " "
VALUES@27..40
VALUES_KW@27..33 "values"
WHITESPACE@33..34 " "
ROW_LIST@34..40
ROW@34..40
L_PAREN@34..35 "("
LITERAL@35..36
INT_NUMBER@35..36 "1"
COMMA@36..37 ","
WHITESPACE@37..38 " "
LITERAL@38..39
INT_NUMBER@38..39 "2"
R_PAREN@39..40 ")"
SEMICOLON@40..41 ";"
WHITESPACE@41..44 "\n "
PLPGSQL_EXEC_SQL_STMT@44..79
UPDATE@44..78
UPDATE_KW@44..50 "update"
WHITESPACE@50..51 " "
RELATION_NAME@51..56
RELATION_NAME_REF@51..56
PATH_REF@51..56
PATH_SEGMENT_REF@51..56
IDENT@51..56 "exs_t"
WHITESPACE@56..57 " "
SET_CLAUSE@57..66
SET_KW@57..60 "set"
WHITESPACE@60..61 " "
SET_COLUMN_LIST@61..66
SET_SINGLE_COLUMN@61..66
COLUMN_TARGET@61..62
COLUMN_NAME_REF@61..62
IDENT@61..62 "a"
WHITESPACE@62..63 " "
EQ@63..64 "="
WHITESPACE@64..65 " "
SET_EXPR@65..66
LITERAL@65..66
INT_NUMBER@65..66 "2"
WHITESPACE@66..67 " "
WHERE_CLAUSE@67..78
WHERE_KW@67..72 "where"
WHITESPACE@72..73 " "
BIN_EXPR@73..78
NAME_REF@73..74
IDENT@73..74 "b"
WHITESPACE@74..75 " "
EQ@75..76 "="
WHITESPACE@76..77 " "
LITERAL@77..78
INT_NUMBER@77..78 "2"
SEMICOLON@78..79 ";"
WHITESPACE@79..82 "\n "
PLPGSQL_EXEC_SQL_STMT@82..112
DELETE@82..111
DELETE_KW@82..88 "delete"
WHITESPACE@88..89 " "
FROM_KW@89..93 "from"
WHITESPACE@93..94 " "
RELATION_NAME@94..99
RELATION_NAME_REF@94..99
PATH_REF@94..99
PATH_SEGMENT_REF@94..99
IDENT@94..99 "exs_t"
WHITESPACE@99..100 " "
WHERE_CLAUSE@100..111
WHERE_KW@100..105 "where"
WHITESPACE@105..106 " "
BIN_EXPR@106..111
NAME_REF@106..107
IDENT@106..107 "a"
WHITESPACE@107..108 " "
EQ@108..109 "="
WHITESPACE@109..110 " "
LITERAL@110..111
INT_NUMBER@110..111 "2"
SEMICOLON@111..112 ";"
WHITESPACE@112..115 "\n "
PLPGSQL_EXEC_SQL_STMT@115..130
TRUNCATE@115..129
TRUNCATE_KW@115..123 "truncate"
WHITESPACE@123..124 " "
TABLE_LIST@124..129
TABLE_RELATION_NAME@124..129
TABLE_NAME_REF@124..129
PATH_REF@124..129
PATH_SEGMENT_REF@124..129
IDENT@124..129 "exs_t"
SEMICOLON@129..130 ";"
WHITESPACE@130..133 "\n "
PLPGSQL_EXEC_SQL_STMT@133..160
CREATE_TABLE@133..159
CREATE_KW@133..139 "create"
WHITESPACE@139..140 " "
TABLE_KW@140..145 "table"
WHITESPACE@145..146 " "
TABLE_NAME@146..151
PATH@146..151
PATH_SEGMENT@146..151
IDENT@146..151 "exs_u"
WHITESPACE@151..152 " "
TABLE_ARG_LIST@152..159
L_PAREN@152..153 "("
COLUMN@153..158
COLUMN_NAME@153..154
IDENT@153..154 "a"
WHITESPACE@154..155 " "
PATH_TYPE@155..158
PATH_REF@155..158
PATH_SEGMENT_REF@155..158
INT_KW@155..158 "int"
R_PAREN@158..159 ")"
SEMICOLON@159..160 ";"
WHITESPACE@160..163 "\n "
PLPGSQL_EXEC_SQL_STMT@163..180
DROP_TABLE@163..179
DROP_KW@163..167 "drop"
WHITESPACE@167..168 " "
TABLE_KW@168..173 "table"
WHITESPACE@173..174 " "
TABLE_NAME_REF@174..179
PATH_REF@174..179
PATH_SEGMENT_REF@174..179
IDENT@174..179 "exs_u"
SEMICOLON@179..180 ";"
WHITESPACE@180..183 "\n "
PLPGSQL_EXEC_SQL_STMT@183..194
VALUES@183..193
VALUES_KW@183..189 "values"
WHITESPACE@189..190 " "
ROW_LIST@190..193
ROW@190..193
L_PAREN@190..191 "("
LITERAL@191..192
INT_NUMBER@191..192 "1"
R_PAREN@192..193 ")"
SEMICOLON@193..194 ";"
WHITESPACE@194..197 "\n "
PLPGSQL_EXEC_SQL_STMT@197..239
SELECT@197..238
WITH_CLAUSE@197..222
WITH_KW@197..201 "with"
WHITESPACE@201..202 " "
WITH_TABLE@202..222
CTE_NAME@202..203
IDENT@202..203 "x"
WHITESPACE@203..204 " "
AS_KW@204..206 "as"
WHITESPACE@206..207 " "
L_PAREN@207..208 "("
SELECT@208..221
SELECT_CLAUSE@208..221
SELECT_KW@208..214 "select"
WHITESPACE@214..215 " "
TARGET_LIST@215..221
TARGET@215..221
LITERAL@215..216
INT_NUMBER@215..216 "1"
WHITESPACE@216..217 " "
AS_NAME@217..221
AS_KW@217..219 "as"
WHITESPACE@219..220 " "
COLUMN_NAME@220..221
IDENT@220..221 "a"
R_PAREN@221..222 ")"
WHITESPACE@222..223 " "
SELECT_CLAUSE@223..231
SELECT_KW@223..229 "select"
WHITESPACE@229..230 " "
TARGET_LIST@230..231
TARGET@230..231
STAR@230..231 "*"
WHITESPACE@231..232 " "
FROM_CLAUSE@232..238
FROM_KW@232..236 "from"
WHITESPACE@236..237 " "
RELATION_FROM_ITEM@237..238
RELATION_NAME_REF@237..238
PATH_REF@237..238
PATH_SEGMENT_REF@237..238
IDENT@237..238 "x"
SEMICOLON@238..239 ";"
WHITESPACE@239..242 "\n "
COMMENT@242..317 "-- the trailing `;` b ..."
WHITESPACE@317..320 "\n "
PLPGSQL_EXEC_SQL_STMT@320..402
CREATE_FUNCTION@320..401
CREATE_KW@320..326 "create"
WHITESPACE@326..327 " "
OR_REPLACE@327..337
OR_KW@327..329 "or"
WHITESPACE@329..330 " "
REPLACE_KW@330..337 "replace"
WHITESPACE@337..338 " "
FUNCTION_KW@338..346 "function"
WHITESPACE@346..347 " "
FUNCTION_NAME@347..352
PATH@347..352
PATH_SEGMENT@347..352
IDENT@347..352 "exs_f"
PARAM_LIST@352..357
L_PAREN@352..353 "("
PARAM@353..356
PATH_TYPE@353..356
PATH_REF@353..356
PATH_SEGMENT_REF@353..356
INT_KW@353..356 "int"
R_PAREN@356..357 ")"
WHITESPACE@357..358 " "
RET_TYPE@358..369
RETURNS_KW@358..365 "returns"
WHITESPACE@365..366 " "
PATH_TYPE@366..369
PATH_REF@366..369
PATH_SEGMENT_REF@366..369
INT_KW@366..369 "int"
WHITESPACE@369..370 " "
FUNC_OPTION_LIST@370..401
LANGUAGE_FUNC_OPTION@370..382
LANGUAGE_KW@370..378 "language"
WHITESPACE@378..379 " "
LANGUAGE_REF@379..382
SQL_KW@379..382 "sql"
WHITESPACE@382..383 " "
AS_FUNC_OPTION@383..401
AS_KW@383..385 "as"
WHITESPACE@385..386 " "
AS_DEFINITION@386..401
LITERAL@386..401
STRING@386..401 "'select $1 + 1'"
SEMICOLON@401..402 ";"
WHITESPACE@402..405 "\n "
COMMENT@405..459 "-- a `;` inside BEGIN ..."
WHITESPACE@459..462 "\n "
PLPGSQL_EXEC_SQL_STMT@462..549
CREATE_FUNCTION@462..548
CREATE_KW@462..468 "create"
WHITESPACE@468..469 " "
OR_REPLACE@469..479
OR_KW@469..471 "or"
WHITESPACE@471..472 " "
REPLACE_KW@472..479 "replace"
WHITESPACE@479..480 " "
FUNCTION_KW@480..488 "function"
WHITESPACE@488..489 " "
FUNCTION_NAME@489..494
PATH@489..494
PATH_SEGMENT@489..494
IDENT@489..494 "exs_g"
PARAM_LIST@494..496
L_PAREN@494..495 "("
R_PAREN@495..496 ")"
WHITESPACE@496..497 " "
RET_TYPE@497..508
RETURNS_KW@497..504 "returns"
WHITESPACE@504..505 " "
PATH_TYPE@505..508
PATH_REF@505..508
PATH_SEGMENT_REF@505..508
INT_KW@505..508 "int"
WHITESPACE@508..509 " "
FUNC_OPTION_LIST@509..521
LANGUAGE_FUNC_OPTION@509..521
LANGUAGE_KW@509..517 "language"
WHITESPACE@517..518 " "
LANGUAGE_REF@518..521
SQL_KW@518..521 "sql"
WHITESPACE@521..522 " "
ATOMIC_BODY@522..548
BEGIN_KW@522..527 "begin"
WHITESPACE@527..528 " "
ATOMIC_KW@528..534 "atomic"
WHITESPACE@534..535 " "
SELECT@535..544
SELECT_CLAUSE@535..543
SELECT_KW@535..541 "select"
WHITESPACE@541..542 " "
TARGET_LIST@542..543
TARGET@542..543
LITERAL@542..543
INT_NUMBER@542..543 "1"
SEMICOLON@543..544 ";"
WHITESPACE@544..545 " "
END_KW@545..548 "end"
SEMICOLON@548..549 ";"
WHITESPACE@549..552 "\n "
COMMENT@552..581 "-- nor does one insid ..."
WHITESPACE@581..584 "\n "
PLPGSQL_EXEC_SQL_STMT@584..703
CREATE_RULE@584..702
CREATE_KW@584..590 "create"
WHITESPACE@590..591 " "
RULE_KW@591..595 "rule"
WHITESPACE@595..596 " "
RULE@596..601
IDENT@596..601 "exs_r"
WHITESPACE@601..602 " "
AS_KW@602..604 "as"
WHITESPACE@604..605 " "
RULE_ON@605..623
ON_KW@605..607 "on"
WHITESPACE@607..608 " "
RULE_EVENT@608..614
INSERT_KW@608..614 "insert"
WHITESPACE@614..615 " "
TO_KW@615..617 "to"
WHITESPACE@617..618 " "
RELATION_NAME_REF@618..623
PATH_REF@618..623
PATH_SEGMENT_REF@618..623
IDENT@618..623 "exs_t"
WHITESPACE@623..628 "\n "
RULE_DO@628..702
DO_KW@628..630 "do"
WHITESPACE@630..631 " "
ALSO_KW@631..635 "also"
WHITESPACE@635..636 " "
RULE_STMT_LIST@636..702
L_PAREN@636..637 "("
INSERT@637..669
INSERT_KW@637..643 "insert"
WHITESPACE@643..644 " "
INTO_KW@644..648 "into"
WHITESPACE@648..649 " "
RELATION_NAME_REF@649..654
PATH_REF@649..654
PATH_SEGMENT_REF@649..654
IDENT@649..654 "exs_t"
WHITESPACE@654..655 " "
VALUES@655..668
VALUES_KW@655..661 "values"
WHITESPACE@661..662 " "
ROW_LIST@662..668
ROW@662..668
L_PAREN@662..663 "("
LITERAL@663..664
INT_NUMBER@663..664 "3"
COMMA@664..665 ","
WHITESPACE@665..666 " "
LITERAL@666..667
INT_NUMBER@666..667 "3"
R_PAREN@667..668 ")"
SEMICOLON@668..669 ";"
WHITESPACE@669..670 " "
INSERT@670..701
INSERT_KW@670..676 "insert"
WHITESPACE@676..677 " "
INTO_KW@677..681 "into"
WHITESPACE@681..682 " "
RELATION_NAME_REF@682..687
PATH_REF@682..687
PATH_SEGMENT_REF@682..687
IDENT@682..687 "exs_t"
WHITESPACE@687..688 " "
VALUES@688..701
VALUES_KW@688..694 "values"
WHITESPACE@694..695 " "
ROW_LIST@695..701
ROW@695..701
L_PAREN@695..696 "("
LITERAL@696..697
INT_NUMBER@696..697 "4"
COMMA@697..698 ","
WHITESPACE@698..699 " "
LITERAL@699..700
INT_NUMBER@699..700 "4"
R_PAREN@700..701 ")"
R_PAREN@701..702 ")"
SEMICOLON@702..703 ";"
WHITESPACE@703..706 "\n "
COMMENT@706..784 "-- `abort` is not a P ..."
WHITESPACE@784..787 "\n "
COMMENT@787..850 "-- when it compiles t ..."
WHITESPACE@850..853 "\n "
PLPGSQL_EXEC_SQL_STMT@853..859
ROLLBACK_TRANSACTION@853..858
ABORT_KW@853..858 "abort"
SEMICOLON@858..859 ";"
WHITESPACE@859..860 "\n"
END_KW@860..863 "end"
WHITESPACE@863..864 "\n"