---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_parser/tests/data/plpgsql/ok/perform_stmt.sql
---
PLPGSQL@0..297
WHITESPACE@0..1 "\n"
PLPGSQL_BLOCK@1..296
PLPGSQL_DECLARE_SECTION@1..28
DECLARE_KW@1..8 "declare"
WHITESPACE@8..11 "\n "
PLPGSQL_VAR_DECL@11..28
PLPGSQL_VAR_NAME@11..18
IDENT@11..18 "perform"
WHITESPACE@18..19 " "
PATH_TYPE@19..22
PATH_REF@19..22
PATH_SEGMENT_REF@19..22
INT_KW@19..22 "int"
WHITESPACE@22..23 " "
PLPGSQL_VAR_INIT@23..27
COLON_EQ@23..25 ":="
WHITESPACE@25..26 " "
PLPGSQL_EXPR@26..27
TARGET_LIST@26..27
TARGET@26..27
LITERAL@26..27
INT_NUMBER@26..27 "1"
SEMICOLON@27..28 ";"
WHITESPACE@28..29 "\n"
BEGIN_KW@29..34 "begin"
WHITESPACE@34..37 "\n "
PLPGSQL_BODY@37..292
PLPGSQL_PERFORM_STMT@37..47
SELECT@37..46
SELECT_CLAUSE@37..46
PERFORM_KW@37..44 "perform"
WHITESPACE@44..45 " "
TARGET_LIST@45..46
TARGET@45..46
LITERAL@45..46
INT_NUMBER@45..46 "1"
SEMICOLON@46..47 ";"
WHITESPACE@47..50 "\n "
PLPGSQL_PERFORM_STMT@50..58
SELECT@50..57
SELECT_CLAUSE@50..57
PERFORM_KW@50..57 "perform"
SEMICOLON@57..58 ";"
WHITESPACE@58..61 "\n "
PLPGSQL_PERFORM_STMT@61..93
SELECT@61..92
SELECT_CLAUSE@61..80
PERFORM_KW@61..68 "perform"
WHITESPACE@68..69 " "
DISTINCT_CLAUSE@69..77
DISTINCT_KW@69..77 "distinct"
WHITESPACE@77..78 " "
TARGET_LIST@78..80
TARGET@78..80
NAME_REF@78..80
IDENT@78..80 "f1"
WHITESPACE@80..81 " "
FROM_CLAUSE@81..92
FROM_KW@81..85 "from"
WHITESPACE@85..86 " "
RELATION_FROM_ITEM@86..92
RELATION_NAME_REF@86..92
PATH_REF@86..92
PATH_SEGMENT_REF@86..92
IDENT@86..92 "onecol"
SEMICOLON@92..93 ";"
WHITESPACE@93..96 "\n "
PLPGSQL_PERFORM_STMT@96..137
SELECT@96..136
SELECT_CLAUSE@96..105
PERFORM_KW@96..103 "perform"
WHITESPACE@103..104 " "
TARGET_LIST@104..105
TARGET@104..105
STAR@104..105 "*"
WHITESPACE@105..106 " "
FROM_CLAUSE@106..117
FROM_KW@106..110 "from"
WHITESPACE@110..111 " "
RELATION_FROM_ITEM@111..117
RELATION_NAME_REF@111..117
PATH_REF@111..117
PATH_SEGMENT_REF@111..117
IDENT@111..117 "onecol"
WHITESPACE@117..118 " "
ORDER_BY_CLAUSE@118..128
ORDER_KW@118..123 "order"
WHITESPACE@123..124 " "
BY_KW@124..126 "by"
WHITESPACE@126..127 " "
SORT_BY_LIST@127..128
SORT_BY@127..128
LITERAL@127..128
INT_NUMBER@127..128 "1"
WHITESPACE@128..129 " "
LIMIT_CLAUSE@129..136
LIMIT_KW@129..134 "limit"
WHITESPACE@134..135 " "
LITERAL@135..136
INT_NUMBER@135..136 "1"
SEMICOLON@136..137 ";"
WHITESPACE@137..140 "\n "
PLPGSQL_PERFORM_STMT@140..165
COMPOUND_SELECT@140..164
SELECT@140..149
SELECT_CLAUSE@140..149
PERFORM_KW@140..147 "perform"
WHITESPACE@147..148 " "
TARGET_LIST@148..149
TARGET@148..149
LITERAL@148..149
INT_NUMBER@148..149 "1"
WHITESPACE@149..150 " "
UNION@150..155
UNION_KW@150..155 "union"
WHITESPACE@155..156 " "
SELECT@156..164
SELECT_CLAUSE@156..164
SELECT_KW@156..162 "select"
WHITESPACE@162..163 " "
TARGET_LIST@163..164
TARGET@163..164
LITERAL@163..164
INT_NUMBER@163..164 "2"
SEMICOLON@164..165 ";"
WHITESPACE@165..168 "\n "
PLPGSQL_PERFORM_STMT@168..205
SELECT@168..204
SELECT_CLAUSE@168..204
PERFORM_KW@168..175 "perform"
WHITESPACE@175..176 " "
TARGET_LIST@176..204
TARGET@176..204
PAREN_EXPR@176..204
L_PAREN@176..177 "("
SELECT@177..203
SELECT_CLAUSE@177..191
SELECT_KW@177..183 "select"
WHITESPACE@183..184 " "
TARGET_LIST@184..191
TARGET@184..191
CALL_EXPR@184..191
NAME_REF@184..187
IDENT@184..187 "max"
ARG_LIST@187..191
L_PAREN@187..188 "("
ARG@188..190
NAME_REF@188..190
IDENT@188..190 "f1"
R_PAREN@190..191 ")"
WHITESPACE@191..192 " "
FROM_CLAUSE@192..203
FROM_KW@192..196 "from"
WHITESPACE@196..197 " "
RELATION_FROM_ITEM@197..203
RELATION_NAME_REF@197..203
PATH_REF@197..203
PATH_SEGMENT_REF@197..203
IDENT@197..203 "onecol"
R_PAREN@203..204 ")"
SEMICOLON@204..205 ";"
WHITESPACE@205..208 "\n "
PLPGSQL_PERFORM_STMT@208..276
SELECT@208..275
SELECT_CLAUSE@208..218
PERFORM_KW@208..215 "perform"
WHITESPACE@215..216 " "
TARGET_LIST@216..218
TARGET@216..218
NAME_REF@216..218
IDENT@216..218 "f1"
WHITESPACE@218..219 " "
FROM_CLAUSE@219..230
FROM_KW@219..223 "from"
WHITESPACE@223..224 " "
RELATION_FROM_ITEM@224..230
RELATION_NAME_REF@224..230
PATH_REF@224..230
PATH_SEGMENT_REF@224..230
IDENT@224..230 "onecol"
WHITESPACE@230..231 " "
WHERE_CLAUSE@231..243
WHERE_KW@231..236 "where"
WHITESPACE@236..237 " "
BIN_EXPR@237..243
NAME_REF@237..239
IDENT@237..239 "f1"
WHITESPACE@239..240 " "
R_ANGLE@240..241 ">"
WHITESPACE@241..242 " "
LITERAL@242..243
INT_NUMBER@242..243 "0"
WHITESPACE@243..244 " "
GROUP_BY_CLAUSE@244..255
GROUP_KW@244..249 "group"
WHITESPACE@249..250 " "
BY_KW@250..252 "by"
WHITESPACE@252..253 " "
GROUP_BY_LIST@253..255
GROUPING_EXPR@253..255
NAME_REF@253..255
IDENT@253..255 "f1"
WHITESPACE@255..256 " "
HAVING_CLAUSE@256..275
HAVING_KW@256..262 "having"
WHITESPACE@262..263 " "
BIN_EXPR@263..275
CALL_EXPR@263..271
NAME_REF@263..268
IDENT@263..268 "count"
ARG_LIST@268..271
L_PAREN@268..269 "("
STAR@269..270 "*"
R_PAREN@270..271 ")"
WHITESPACE@271..272 " "
R_ANGLE@272..273 ">"
WHITESPACE@273..274 " "
LITERAL@274..275
INT_NUMBER@274..275 "1"
SEMICOLON@275..276 ";"
WHITESPACE@276..279 "\n "
PLPGSQL_ASSIGN_STMT@279..292
PLPGSQL_ASSIGN_TARGET@279..286
PLPGSQL_VAR_NAME_REF@279..286
IDENT@279..286 "perform"
WHITESPACE@286..287 " "
COLON_EQ@287..289 ":="
WHITESPACE@289..290 " "
PLPGSQL_EXPR@290..291
TARGET_LIST@290..291
TARGET@290..291
LITERAL@290..291
INT_NUMBER@290..291 "2"
SEMICOLON@291..292 ";"
WHITESPACE@292..293 "\n"
END_KW@293..296 "end"
WHITESPACE@296..297 "\n"