---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_parser/tests/data/plpgsql/ok/dyn_execute_stmt.sql
---
PLPGSQL@0..559
WHITESPACE@0..1 "\n"
PLPGSQL_BLOCK@1..558
PLPGSQL_DECLARE_SECTION@1..87
DECLARE_KW@1..8 "declare"
WHITESPACE@8..11 "\n "
PLPGSQL_VAR_DECL@11..32
PLPGSQL_VAR_NAME@11..12
IDENT@11..12 "q"
WHITESPACE@12..13 " "
PATH_TYPE@13..17
PATH_REF@13..17
PATH_SEGMENT_REF@13..17
TEXT_KW@13..17 "text"
WHITESPACE@17..18 " "
PLPGSQL_VAR_INIT@18..31
COLON_EQ@18..20 ":="
WHITESPACE@20..21 " "
PLPGSQL_EXPR@21..31
TARGET_LIST@21..31
TARGET@21..31
LITERAL@21..31
STRING@21..31 "'select 1'"
SEMICOLON@31..32 ";"
WHITESPACE@32..35 "\n "
PLPGSQL_VAR_DECL@35..57
PLPGSQL_VAR_NAME@35..36
IDENT@35..36 "t"
WHITESPACE@36..37 " "
PATH_TYPE@37..41
PATH_REF@37..41
PATH_SEGMENT_REF@37..41
TEXT_KW@37..41 "text"
WHITESPACE@41..42 " "
PLPGSQL_VAR_INIT@42..56
COLON_EQ@42..44 ":="
WHITESPACE@44..45 " "
PLPGSQL_EXPR@45..56
TARGET_LIST@45..56
TARGET@45..56
LITERAL@45..56
STRING@45..56 "'dynexec_t'"
SEMICOLON@56..57 ";"
WHITESPACE@57..60 "\n "
PLPGSQL_VAR_DECL@60..66
PLPGSQL_VAR_NAME@60..61
IDENT@60..61 "x"
WHITESPACE@61..62 " "
PATH_TYPE@62..65
PATH_REF@62..65
PATH_SEGMENT_REF@62..65
INT_KW@62..65 "int"
SEMICOLON@65..66 ";"
WHITESPACE@66..69 "\n "
PLPGSQL_VAR_DECL@69..75
PLPGSQL_VAR_NAME@69..70
IDENT@69..70 "y"
WHITESPACE@70..71 " "
PATH_TYPE@71..74
PATH_REF@71..74
PATH_SEGMENT_REF@71..74
INT_KW@71..74 "int"
SEMICOLON@74..75 ";"
WHITESPACE@75..78 "\n "
PLPGSQL_VAR_DECL@78..87
PLPGSQL_VAR_NAME@78..79
IDENT@78..79 "r"
WHITESPACE@79..80 " "
PATH_TYPE@80..86
PATH_REF@80..86
PATH_SEGMENT_REF@80..86
IDENT@80..86 "record"
SEMICOLON@86..87 ";"
WHITESPACE@87..88 "\n"
BEGIN_KW@88..93 "begin"
WHITESPACE@93..96 "\n "
PLPGSQL_BODY@96..554
PLPGSQL_DYN_EXECUTE_STMT@96..115
EXECUTE_KW@96..103 "execute"
WHITESPACE@103..104 " "
PLPGSQL_EXPR@104..114
TARGET_LIST@104..114
TARGET@104..114
LITERAL@104..114
STRING@104..114 "'select 1'"
SEMICOLON@114..115 ";"
WHITESPACE@115..118 "\n "
PLPGSQL_DYN_EXECUTE_STMT@118..128
EXECUTE_KW@118..125 "execute"
WHITESPACE@125..126 " "
PLPGSQL_EXPR@126..127
TARGET_LIST@126..127
TARGET@126..127
NAME_REF@126..127
IDENT@126..127 "q"
SEMICOLON@127..128 ";"
WHITESPACE@128..131 "\n "
PLPGSQL_DYN_EXECUTE_STMT@131..174
EXECUTE_KW@131..138 "execute"
WHITESPACE@138..139 " "
PLPGSQL_EXPR@139..173
TARGET_LIST@139..173
TARGET@139..173
BIN_EXPR@139..173
LITERAL@139..155
STRING@139..155 "'select a from '"
WHITESPACE@155..156 " "
CUSTOM_OP@156..158
PIPE@156..157 "|"
PIPE@157..158 "|"
WHITESPACE@158..159 " "
CALL_EXPR@159..173
NAME_REF@159..170
IDENT@159..170 "quote_ident"
ARG_LIST@170..173
L_PAREN@170..171 "("
ARG@171..172
NAME_REF@171..172
IDENT@171..172 "t"
R_PAREN@172..173 ")"
SEMICOLON@173..174 ";"
WHITESPACE@174..177 "\n "
PLPGSQL_DYN_EXECUTE_STMT@177..194
EXECUTE_KW@177..184 "execute"
WHITESPACE@184..185 " "
PLPGSQL_EXPR@185..186
TARGET_LIST@185..186
TARGET@185..186
NAME_REF@185..186
IDENT@185..186 "q"
WHITESPACE@186..187 " "
PLPGSQL_INTO_CLAUSE@187..193
INTO_KW@187..191 "into"
WHITESPACE@191..192 " "
PLPGSQL_INTO_TARGET_LIST@192..193
PLPGSQL_INTO_TARGET@192..193
PLPGSQL_VAR_NAME_REF@192..193
IDENT@192..193 "x"
SEMICOLON@193..194 ";"
WHITESPACE@194..197 "\n "
PLPGSQL_DYN_EXECUTE_STMT@197..221
EXECUTE_KW@197..204 "execute"
WHITESPACE@204..205 " "
PLPGSQL_EXPR@205..206
TARGET_LIST@205..206
TARGET@205..206
NAME_REF@205..206
IDENT@205..206 "q"
WHITESPACE@206..207 " "
PLPGSQL_INTO_CLAUSE@207..220
INTO_KW@207..211 "into"
WHITESPACE@211..212 " "
STRICT_KW@212..218 "strict"
WHITESPACE@218..219 " "
PLPGSQL_INTO_TARGET_LIST@219..220
PLPGSQL_INTO_TARGET@219..220
PLPGSQL_VAR_NAME_REF@219..220
IDENT@219..220 "x"
SEMICOLON@220..221 ";"
WHITESPACE@221..224 "\n "
PLPGSQL_DYN_EXECUTE_STMT@224..241
EXECUTE_KW@224..231 "execute"
WHITESPACE@231..232 " "
PLPGSQL_EXPR@232..233
TARGET_LIST@232..233
TARGET@232..233
NAME_REF@232..233
IDENT@232..233 "q"
WHITESPACE@233..234 " "
PLPGSQL_INTO_CLAUSE@234..240
INTO_KW@234..238 "into"
WHITESPACE@238..239 " "
PLPGSQL_INTO_TARGET_LIST@239..240
PLPGSQL_INTO_TARGET@239..240
PLPGSQL_VAR_NAME_REF@239..240
IDENT@239..240 "r"
SEMICOLON@240..241 ";"
WHITESPACE@241..244 "\n "
PLPGSQL_DYN_EXECUTE_STMT@244..263
EXECUTE_KW@244..251 "execute"
WHITESPACE@251..252 " "
PLPGSQL_EXPR@252..253
TARGET_LIST@252..253
TARGET@252..253
NAME_REF@252..253
IDENT@252..253 "q"
WHITESPACE@253..254 " "
PLPGSQL_INTO_CLAUSE@254..262
INTO_KW@254..258 "into"
WHITESPACE@258..259 " "
PLPGSQL_INTO_TARGET_LIST@259..262
PLPGSQL_INTO_TARGET@259..262
PLPGSQL_VAR_NAME_REF@259..260
IDENT@259..260 "r"
FIELD_ACCESSOR@260..262
DOT@260..261 "."
COMPOSITE_FIELD_REF@261..262
IDENT@261..262 "a"
SEMICOLON@262..263 ";"
WHITESPACE@263..266 "\n "
PLPGSQL_DYN_EXECUTE_STMT@266..294
EXECUTE_KW@266..273 "execute"
WHITESPACE@273..274 " "
PLPGSQL_EXPR@274..285
TARGET_LIST@274..285
TARGET@274..285
LITERAL@274..285
STRING@274..285 "'select $1'"
WHITESPACE@285..286 " "
PLPGSQL_USING_CLAUSE@286..293
USING_KW@286..291 "using"
WHITESPACE@291..292 " "
PLPGSQL_EXPR@292..293
TARGET_LIST@292..293
TARGET@292..293
LITERAL@292..293
INT_NUMBER@292..293 "1"
SEMICOLON@293..294 ";"
WHITESPACE@294..297 "\n "
PLPGSQL_DYN_EXECUTE_STMT@297..332
EXECUTE_KW@297..304 "execute"
WHITESPACE@304..305 " "
PLPGSQL_EXPR@305..320
TARGET_LIST@305..320
TARGET@305..320
LITERAL@305..320
STRING@305..320 "'select $1, $2'"
WHITESPACE@320..321 " "
PLPGSQL_USING_CLAUSE@321..331
USING_KW@321..326 "using"
WHITESPACE@326..327 " "
PLPGSQL_EXPR@327..328
TARGET_LIST@327..328
TARGET@327..328
LITERAL@327..328
INT_NUMBER@327..328 "1"
COMMA@328..329 ","
WHITESPACE@329..330 " "
PLPGSQL_EXPR@330..331
TARGET_LIST@330..331
TARGET@330..331
LITERAL@330..331
INT_NUMBER@330..331 "2"
SEMICOLON@331..332 ";"
WHITESPACE@332..335 "\n "
PLPGSQL_DYN_EXECUTE_STMT@335..370
EXECUTE_KW@335..342 "execute"
WHITESPACE@342..343 " "
PLPGSQL_EXPR@343..354
TARGET_LIST@343..354
TARGET@343..354
LITERAL@343..354
STRING@343..354 "'select $1'"
WHITESPACE@354..355 " "
PLPGSQL_INTO_CLAUSE@355..361
INTO_KW@355..359 "into"
WHITESPACE@359..360 " "
PLPGSQL_INTO_TARGET_LIST@360..361
PLPGSQL_INTO_TARGET@360..361
PLPGSQL_VAR_NAME_REF@360..361
IDENT@360..361 "x"
WHITESPACE@361..362 " "
PLPGSQL_USING_CLAUSE@362..369
USING_KW@362..367 "using"
WHITESPACE@367..368 " "
PLPGSQL_EXPR@368..369
TARGET_LIST@368..369
TARGET@368..369
LITERAL@368..369
INT_NUMBER@368..369 "1"
SEMICOLON@369..370 ";"
WHITESPACE@370..373 "\n "
COMMENT@373..422 "-- postgres takes the ..."
WHITESPACE@422..425 "\n "
PLPGSQL_DYN_EXECUTE_STMT@425..460
EXECUTE_KW@425..432 "execute"
WHITESPACE@432..433 " "
PLPGSQL_EXPR@433..444
TARGET_LIST@433..444
TARGET@433..444
LITERAL@433..444
STRING@433..444 "'select $1'"
WHITESPACE@444..445 " "
PLPGSQL_USING_CLAUSE@445..452
USING_KW@445..450 "using"
WHITESPACE@450..451 " "
PLPGSQL_EXPR@451..452
TARGET_LIST@451..452
TARGET@451..452
LITERAL@451..452
INT_NUMBER@451..452 "1"
WHITESPACE@452..453 " "
PLPGSQL_INTO_CLAUSE@453..459
INTO_KW@453..457 "into"
WHITESPACE@457..458 " "
PLPGSQL_INTO_TARGET_LIST@458..459
PLPGSQL_INTO_TARGET@458..459
PLPGSQL_VAR_NAME_REF@458..459
IDENT@458..459 "x"
SEMICOLON@459..460 ";"
WHITESPACE@460..463 "\n "
PLPGSQL_DYN_EXECUTE_STMT@463..512
EXECUTE_KW@463..470 "execute"
WHITESPACE@470..471 " "
PLPGSQL_EXPR@471..486
TARGET_LIST@471..486
TARGET@471..486
LITERAL@471..486
STRING@471..486 "'select $1, $2'"
WHITESPACE@486..487 " "
PLPGSQL_INTO_CLAUSE@487..500
INTO_KW@487..491 "into"
WHITESPACE@491..492 " "
STRICT_KW@492..498 "strict"
WHITESPACE@498..499 " "
PLPGSQL_INTO_TARGET_LIST@499..500
PLPGSQL_INTO_TARGET@499..500
PLPGSQL_VAR_NAME_REF@499..500
IDENT@499..500 "x"
WHITESPACE@500..501 " "
PLPGSQL_USING_CLAUSE@501..511
USING_KW@501..506 "using"
WHITESPACE@506..507 " "
PLPGSQL_EXPR@507..508
TARGET_LIST@507..508
TARGET@507..508
LITERAL@507..508
INT_NUMBER@507..508 "1"
COMMA@508..509 ","
WHITESPACE@509..510 " "
PLPGSQL_EXPR@510..511
TARGET_LIST@510..511
TARGET@510..511
LITERAL@510..511
INT_NUMBER@510..511 "2"
SEMICOLON@511..512 ";"
WHITESPACE@512..515 "\n "
PLPGSQL_DYN_EXECUTE_STMT@515..554
EXECUTE_KW@515..522 "execute"
WHITESPACE@522..523 " "
PLPGSQL_EXPR@523..536
TARGET_LIST@523..536
TARGET@523..536
LITERAL@523..536
STRING@523..536 "'select 1, 2'"
WHITESPACE@536..537 " "
PLPGSQL_INTO_CLAUSE@537..553
INTO_KW@537..541 "into"
WHITESPACE@541..542 " "
STRICT_KW@542..548 "strict"
WHITESPACE@548..549 " "
PLPGSQL_INTO_TARGET_LIST@549..553
PLPGSQL_INTO_TARGET@549..550
PLPGSQL_VAR_NAME_REF@549..550
IDENT@549..550 "x"
COMMA@550..551 ","
WHITESPACE@551..552 " "
PLPGSQL_INTO_TARGET@552..553
PLPGSQL_VAR_NAME_REF@552..553
IDENT@552..553 "y"
SEMICOLON@553..554 ";"
WHITESPACE@554..555 "\n"
END_KW@555..558 "end"
WHITESPACE@558..559 "\n"
---
PLPGSQL@0..70
WHITESPACE@0..1 "\n"
PLPGSQL_BLOCK@1..69
PLPGSQL_DECLARE_SECTION@1..17
DECLARE_KW@1..8 "declare"
WHITESPACE@8..11 "\n "
PLPGSQL_VAR_DECL@11..17
PLPGSQL_VAR_NAME@11..12
IDENT@11..12 "x"
WHITESPACE@12..13 " "
PATH_TYPE@13..16
PATH_REF@13..16
PATH_SEGMENT_REF@13..16
INT_KW@13..16 "int"
SEMICOLON@16..17 ";"
WHITESPACE@17..18 "\n"
BEGIN_KW@18..23 "begin"
WHITESPACE@23..26 "\n "
PLPGSQL_BODY@26..65
PLPGSQL_DYN_EXECUTE_STMT@26..53
EXECUTE_KW@26..33 "execute"
WHITESPACE@33..34 " "
PLPGSQL_EXPR@34..36
TARGET_LIST@34..36
TARGET@34..36
LITERAL@34..36
POSITIONAL_PARAM@34..36 "$1"
WHITESPACE@36..37 " "
PLPGSQL_INTO_CLAUSE@37..43
INTO_KW@37..41 "into"
WHITESPACE@41..42 " "
PLPGSQL_INTO_TARGET_LIST@42..43
PLPGSQL_INTO_TARGET@42..43
PLPGSQL_VAR_NAME_REF@42..43
IDENT@42..43 "x"
WHITESPACE@43..44 " "
PLPGSQL_USING_CLAUSE@44..52
USING_KW@44..49 "using"
WHITESPACE@49..50 " "
PLPGSQL_EXPR@50..52
TARGET_LIST@50..52
TARGET@50..52
LITERAL@50..52
POSITIONAL_PARAM@50..52 "$1"
SEMICOLON@52..53 ";"
WHITESPACE@53..56 "\n "
PLPGSQL_RETURN_STMT@56..65
RETURN_KW@56..62 "return"
WHITESPACE@62..63 " "
PLPGSQL_EXPR@63..64
TARGET_LIST@63..64
TARGET@63..64
NAME_REF@63..64
IDENT@63..64 "x"
SEMICOLON@64..65 ";"
WHITESPACE@65..66 "\n"
END_KW@66..69 "end"
WHITESPACE@69..70 "\n"