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/open_stmt.sql
---
PLPGSQL@0..138
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..137
    PLPGSQL_DECLARE_SECTION@1..49
      DECLARE_KW@1..8 "declare"
      WHITESPACE@8..11 "\n  "
      PLPGSQL_CURSOR_DECL@11..33
        PLPGSQL_VAR_NAME@11..12
          IDENT@11..12 "c"
        WHITESPACE@12..13 " "
        CURSOR_KW@13..19 "cursor"
        WHITESPACE@19..20 " "
        FOR_KW@20..23 "for"
        WHITESPACE@23..24 " "
        SELECT@24..32
          SELECT_CLAUSE@24..32
            SELECT_KW@24..30 "select"
            WHITESPACE@30..31 " "
            TARGET_LIST@31..32
              TARGET@31..32
                LITERAL@31..32
                  INT_NUMBER@31..32 "1"
        SEMICOLON@32..33 ";"
      WHITESPACE@33..36 "\n  "
      PLPGSQL_VAR_DECL@36..49
        PLPGSQL_VAR_NAME@36..38
          IDENT@36..38 "rc"
        WHITESPACE@38..39 " "
        PATH_TYPE@39..48
          PATH_REF@39..48
            PATH_SEGMENT_REF@39..48
              IDENT@39..48 "refcursor"
        SEMICOLON@48..49 ";"
    WHITESPACE@49..50 "\n"
    BEGIN_KW@50..55 "begin"
    WHITESPACE@55..58 "\n  "
    PLPGSQL_BODY@58..133
      PLPGSQL_OPEN_STMT@58..63
        OPEN_KW@58..62 "open"
        SEMICOLON@62..63 ";"
      WHITESPACE@63..66 "\n  "
      PLPGSQL_OPEN_STMT@66..78
        OPEN_KW@66..70 "open"
        WHITESPACE@70..71 " "
        PLPGSQL_CURSOR_VARIABLE_REF@71..73
          IDENT@71..73 "rc"
        WHITESPACE@73..74 " "
        PLPGSQL_OPEN_QUERY@74..77
          FOR_KW@74..77 "for"
        SEMICOLON@77..78 ";"
      WHITESPACE@78..81 "\n  "
      PLPGSQL_OPEN_STMT@81..101
        OPEN_KW@81..85 "open"
        WHITESPACE@85..86 " "
        PLPGSQL_CURSOR_VARIABLE_REF@86..88
          IDENT@86..88 "rc"
        WHITESPACE@88..89 " "
        PLPGSQL_OPEN_EXECUTE@89..100
          FOR_KW@89..92 "for"
          WHITESPACE@92..93 " "
          EXECUTE_KW@93..100 "execute"
        SEMICOLON@100..101 ";"
      WHITESPACE@101..104 "\n  "
      PLPGSQL_OPEN_STMT@104..111
        OPEN_KW@104..108 "open"
        WHITESPACE@108..109 " "
        PLPGSQL_CURSOR_VARIABLE_REF@109..111
          IDENT@109..111 "rc"
      WHITESPACE@111..112 " "
      PLPGSQL_EXEC_SQL_STMT@112..121
        SELECT@112..120
          SELECT_CLAUSE@112..120
            SELECT_KW@112..118 "select"
            WHITESPACE@118..119 " "
            TARGET_LIST@119..120
              TARGET@119..120
                LITERAL@119..120
                  INT_NUMBER@119..120 "1"
        SEMICOLON@120..121 ";"
      WHITESPACE@121..124 "\n  "
      PLPGSQL_OPEN_STMT@124..133
        OPEN_KW@124..128 "open"
        WHITESPACE@128..129 " "
        PLPGSQL_CURSOR_VARIABLE_REF@129..130
          IDENT@129..130 "c"
        ERROR@130..132
          FIELD_ACCESSOR@130..132
            DOT@130..131 "."
            COMPOSITE_FIELD_REF@131..132
              IDENT@131..132 "x"
        SEMICOLON@132..133 ";"
    WHITESPACE@133..134 "\n"
    END_KW@134..137 "end"
  WHITESPACE@137..138 "\n"

error[syntax-error]: expected a cursor variable, got SEMICOLON
  ╭▸ 
6 │   open;
  ╰╴      ━
error[syntax-error]: expected a query
  ╭▸ 
7 │   open rc for;
  ╰╴             ━
error[syntax-error]: expected an expression
  ╭▸ 
8 │   open rc for execute;
  ╰╴                     ━
error[syntax-error]: expected SEMICOLON
  ╭▸ 
9 │   open rc select 1;
  ╰╴         ━
error[syntax-error]: a cursor variable must be a simple variable
   ╭▸ 
10 │   open c.x;
   ╰╴        ━