squawk-syntax 2.66.0

Linter for Postgres migrations & SQL
Documentation
---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_parser/tests/data/plpgsql/err/dyn_execute_stmt.sql
---
PLPGSQL@0..22
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..21
    BEGIN_KW@1..6 "begin"
    WHITESPACE@6..9 "\n  "
    PLPGSQL_BODY@9..17
      PLPGSQL_DYN_EXECUTE_STMT@9..17
        EXECUTE_KW@9..16 "execute"
        SEMICOLON@16..17 ";"
    WHITESPACE@17..18 "\n"
    END_KW@18..21 "end"
  WHITESPACE@21..22 "\n"
---
PLPGSQL@0..46
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..45
    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..41
      PLPGSQL_DYN_EXECUTE_STMT@26..41
        EXECUTE_KW@26..33 "execute"
        WHITESPACE@33..34 " "
        PLPGSQL_INTO_CLAUSE@34..40
          INTO_KW@34..38 "into"
          WHITESPACE@38..39 " "
          PLPGSQL_INTO_TARGET_LIST@39..40
            PLPGSQL_INTO_TARGET@39..40
              PLPGSQL_VAR_NAME_REF@39..40
                IDENT@39..40 "x"
        SEMICOLON@40..41 ";"
    WHITESPACE@41..42 "\n"
    END_KW@42..45 "end"
  WHITESPACE@45..46 "\n"
---
PLPGSQL@0..30
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..29
    BEGIN_KW@1..6 "begin"
    WHITESPACE@6..9 "\n  "
    PLPGSQL_BODY@9..25
      PLPGSQL_DYN_EXECUTE_STMT@9..25
        EXECUTE_KW@9..16 "execute"
        WHITESPACE@16..17 " "
        PLPGSQL_USING_CLAUSE@17..24
          USING_KW@17..22 "using"
          WHITESPACE@22..23 " "
          PLPGSQL_EXPR@23..24
            TARGET_LIST@23..24
              TARGET@23..24
                LITERAL@23..24
                  INT_NUMBER@23..24 "1"
        SEMICOLON@24..25 ";"
    WHITESPACE@25..26 "\n"
    END_KW@26..29 "end"
  WHITESPACE@29..30 "\n"
---
PLPGSQL@0..61
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..60
    PLPGSQL_DECLARE_SECTION@1..32
      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..33 "\n"
    BEGIN_KW@33..38 "begin"
    WHITESPACE@38..41 "\n  "
    PLPGSQL_BODY@41..56
      PLPGSQL_DYN_EXECUTE_STMT@41..56
        EXECUTE_KW@41..48 "execute"
        WHITESPACE@48..49 " "
        PLPGSQL_EXPR@49..50
          TARGET_LIST@49..50
            TARGET@49..50
              NAME_REF@49..50
                IDENT@49..50 "q"
        WHITESPACE@50..51 " "
        PLPGSQL_INTO_CLAUSE@51..55
          INTO_KW@51..55 "into"
          PLPGSQL_INTO_TARGET_LIST@55..55
        SEMICOLON@55..56 ";"
    WHITESPACE@56..57 "\n"
    END_KW@57..60 "end"
  WHITESPACE@60..61 "\n"
---
PLPGSQL@0..88
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..87
    PLPGSQL_DECLARE_SECTION@1..50
      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..41
        PLPGSQL_VAR_NAME@35..36
          IDENT@35..36 "x"
        WHITESPACE@36..37 " "
        PATH_TYPE@37..40
          PATH_REF@37..40
            PATH_SEGMENT_REF@37..40
              INT_KW@37..40 "int"
        SEMICOLON@40..41 ";"
      WHITESPACE@41..44 "\n  "
      PLPGSQL_VAR_DECL@44..50
        PLPGSQL_VAR_NAME@44..45
          IDENT@44..45 "y"
        WHITESPACE@45..46 " "
        PATH_TYPE@46..49
          PATH_REF@46..49
            PATH_SEGMENT_REF@46..49
              INT_KW@46..49 "int"
        SEMICOLON@49..50 ";"
    WHITESPACE@50..51 "\n"
    BEGIN_KW@51..56 "begin"
    WHITESPACE@56..59 "\n  "
    PLPGSQL_BODY@59..83
      PLPGSQL_DYN_EXECUTE_STMT@59..75
        EXECUTE_KW@59..66 "execute"
        WHITESPACE@66..67 " "
        PLPGSQL_EXPR@67..68
          TARGET_LIST@67..68
            TARGET@67..68
              NAME_REF@67..68
                IDENT@67..68 "q"
        WHITESPACE@68..69 " "
        PLPGSQL_INTO_CLAUSE@69..75
          INTO_KW@69..73 "into"
          WHITESPACE@73..74 " "
          PLPGSQL_INTO_TARGET_LIST@74..75
            PLPGSQL_INTO_TARGET@74..75
              PLPGSQL_VAR_NAME_REF@74..75
                IDENT@74..75 "x"
      WHITESPACE@75..76 " "
      ERROR@76..83
        INTO_KW@76..80 "into"
        WHITESPACE@80..81 " "
        IDENT@81..82 "y"
        SEMICOLON@82..83 ";"
    WHITESPACE@83..84 "\n"
    END_KW@84..87 "end"
  WHITESPACE@87..88 "\n"

error[syntax-error]: expected an expression
  ╭▸ 
4 │   execute;
  ╰╴         ━
error[syntax-error]: expected an expression
   ╭▸ 
13 │   execute into x;
   ╰╴         ━
error[syntax-error]: expected an expression
   ╭▸ 
20 │   execute using 1;
   ╰╴         ━
error[syntax-error]: expected an INTO target, got SEMICOLON
   ╭▸ 
29 │   execute q into;
   ╰╴                ━
error[syntax-error]: expected SEMICOLON
   ╭▸ 
40 │   execute q into x into y;
   ╰╴                  ━
error[syntax-error]: expected a statement, got INTO_KW
   ╭▸ 
40 │   execute q into x into y;
   ╰╴                   ━