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/fetch_stmt.sql
---
PLPGSQL@0..350
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..349
    PLPGSQL_DECLARE_SECTION@1..42
      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..42
        PLPGSQL_VAR_NAME@36..37
          IDENT@36..37 "x"
        WHITESPACE@37..38 " "
        PATH_TYPE@38..41
          PATH_REF@38..41
            PATH_SEGMENT_REF@38..41
              INT_KW@38..41 "int"
        SEMICOLON@41..42 ";"
    WHITESPACE@42..43 "\n"
    BEGIN_KW@43..48 "begin"
    WHITESPACE@48..51 "\n  "
    PLPGSQL_BODY@51..345
      PLPGSQL_FETCH_STMT@51..59
        FETCH_KW@51..56 "fetch"
        WHITESPACE@56..57 " "
        PLPGSQL_CURSOR_VARIABLE_REF@57..58
          IDENT@57..58 "c"
        SEMICOLON@58..59 ";"
      WHITESPACE@59..62 "\n  "
      PLPGSQL_FETCH_STMT@62..82
        FETCH_KW@62..67 "fetch"
        WHITESPACE@67..68 " "
        NEXT@68..72
          NEXT_KW@68..72 "next"
        WHITESPACE@72..73 " "
        PLPGSQL_CURSOR_VARIABLE_REF@73..74
          IDENT@73..74 "c"
        WHITESPACE@74..75 " "
        PLPGSQL_INTO_CLAUSE@75..81
          INTO_KW@75..79 "into"
          WHITESPACE@79..80 " "
          PLPGSQL_INTO_TARGET_LIST@80..81
            PLPGSQL_INTO_TARGET@80..81
              PLPGSQL_VAR_NAME_REF@80..81
                IDENT@80..81 "x"
        SEMICOLON@81..82 ";"
      WHITESPACE@82..85 "\n  "
      PLPGSQL_FETCH_STMT@85..98
        FETCH_KW@85..90 "fetch"
        WHITESPACE@90..91 " "
        PLPGSQL_CURSOR_VARIABLE_REF@91..92
          IDENT@91..92 "c"
        WHITESPACE@92..93 " "
        PLPGSQL_INTO_CLAUSE@93..97
          INTO_KW@93..97 "into"
          PLPGSQL_INTO_TARGET_LIST@97..97
        SEMICOLON@97..98 ";"
      WHITESPACE@98..101 "\n  "
      PLPGSQL_FETCH_STMT@101..119
        FETCH_KW@101..106 "fetch"
        WHITESPACE@106..107 " "
        PLPGSQL_CURSOR_VARIABLE_REF@107..108
          IDENT@107..108 "c"
        WHITESPACE@108..109 " "
        PLPGSQL_INTO_CLAUSE@109..118
          INTO_KW@109..113 "into"
          WHITESPACE@113..114 " "
          PLPGSQL_INTO_TARGET_LIST@114..118
            PLPGSQL_INTO_TARGET@114..118
              PLPGSQL_VAR_NAME_REF@114..115
                IDENT@114..115 "x"
              ERROR@115..118
                INDEX_ACCESSOR@115..118
                  L_BRACK@115..116 "["
                  LITERAL@116..117
                    INT_NUMBER@116..117 "1"
                  R_BRACK@117..118 "]"
        SEMICOLON@118..119 ";"
      WHITESPACE@119..122 "\n  "
      PLPGSQL_FETCH_STMT@122..144
        FETCH_KW@122..127 "fetch"
        WHITESPACE@127..128 " "
        PLPGSQL_CURSOR_VARIABLE_REF@128..129
          IDENT@128..129 "c"
        WHITESPACE@129..130 " "
        PLPGSQL_INTO_CLAUSE@130..143
          INTO_KW@130..134 "into"
          WHITESPACE@134..135 " "
          STRICT_KW@135..141 "strict"
          WHITESPACE@141..142 " "
          PLPGSQL_INTO_TARGET_LIST@142..143
            PLPGSQL_INTO_TARGET@142..143
              PLPGSQL_VAR_NAME_REF@142..143
                IDENT@142..143 "x"
        SEMICOLON@143..144 ";"
      WHITESPACE@144..147 "\n  "
      COMMENT@147..224 "-- FETCH can only ret ..."
      WHITESPACE@224..227 "\n  "
      PLPGSQL_FETCH_STMT@227..251
        FETCH_KW@227..232 "fetch"
        WHITESPACE@232..233 " "
        ALL@233..236
          ALL_KW@233..236 "all"
        WHITESPACE@236..237 " "
        FROM_KW@237..241 "from"
        WHITESPACE@241..242 " "
        PLPGSQL_CURSOR_VARIABLE_REF@242..243
          IDENT@242..243 "c"
        WHITESPACE@243..244 " "
        PLPGSQL_INTO_CLAUSE@244..250
          INTO_KW@244..248 "into"
          WHITESPACE@248..249 " "
          PLPGSQL_INTO_TARGET_LIST@249..250
            PLPGSQL_INTO_TARGET@249..250
              PLPGSQL_VAR_NAME_REF@249..250
                IDENT@249..250 "x"
        SEMICOLON@250..251 ";"
      WHITESPACE@251..254 "\n  "
      PLPGSQL_FETCH_STMT@254..276
        FETCH_KW@254..259 "fetch"
        WHITESPACE@259..260 " "
        LITERAL@260..261
          INT_NUMBER@260..261 "2"
        WHITESPACE@261..262 " "
        FROM_KW@262..266 "from"
        WHITESPACE@266..267 " "
        PLPGSQL_CURSOR_VARIABLE_REF@267..268
          IDENT@267..268 "c"
        WHITESPACE@268..269 " "
        PLPGSQL_INTO_CLAUSE@269..275
          INTO_KW@269..273 "into"
          WHITESPACE@273..274 " "
          PLPGSQL_INTO_TARGET_LIST@274..275
            PLPGSQL_INTO_TARGET@274..275
              PLPGSQL_VAR_NAME_REF@274..275
                IDENT@274..275 "x"
        SEMICOLON@275..276 ";"
      WHITESPACE@276..279 "\n  "
      PLPGSQL_FETCH_STMT@279..311
        FETCH_KW@279..284 "fetch"
        WHITESPACE@284..285 " "
        FORWARD@285..296
          FORWARD_KW@285..292 "forward"
          WHITESPACE@292..293 " "
          ALL_KW@293..296 "all"
        WHITESPACE@296..297 " "
        FROM_KW@297..301 "from"
        WHITESPACE@301..302 " "
        PLPGSQL_CURSOR_VARIABLE_REF@302..303
          IDENT@302..303 "c"
        WHITESPACE@303..304 " "
        PLPGSQL_INTO_CLAUSE@304..310
          INTO_KW@304..308 "into"
          WHITESPACE@308..309 " "
          PLPGSQL_INTO_TARGET_LIST@309..310
            PLPGSQL_INTO_TARGET@309..310
              PLPGSQL_VAR_NAME_REF@309..310
                IDENT@309..310 "x"
        SEMICOLON@310..311 ";"
      WHITESPACE@311..314 "\n  "
      PLPGSQL_FETCH_STMT@314..345
        FETCH_KW@314..319 "fetch"
        WHITESPACE@319..320 " "
        BACKWARD@320..330
          BACKWARD_KW@320..328 "backward"
          WHITESPACE@328..329 " "
          LITERAL@329..330
            INT_NUMBER@329..330 "2"
        WHITESPACE@330..331 " "
        FROM_KW@331..335 "from"
        WHITESPACE@335..336 " "
        PLPGSQL_CURSOR_VARIABLE_REF@336..337
          IDENT@336..337 "c"
        WHITESPACE@337..338 " "
        PLPGSQL_INTO_CLAUSE@338..344
          INTO_KW@338..342 "into"
          WHITESPACE@342..343 " "
          PLPGSQL_INTO_TARGET_LIST@343..344
            PLPGSQL_INTO_TARGET@343..344
              PLPGSQL_VAR_NAME_REF@343..344
                IDENT@343..344 "x"
        SEMICOLON@344..345 ";"
    WHITESPACE@345..346 "\n"
    END_KW@346..349 "end"
  WHITESPACE@349..350 "\n"

error[syntax-error]: expected INTO, got SEMICOLON
  ╭▸ 
6 │   fetch c;
  ╰╴         ━
error[syntax-error]: expected FROM or IN
  ╭▸ 
7 │   fetch next c into x;
  ╰╴            ━
error[syntax-error]: expected an INTO target, got SEMICOLON
  ╭▸ 
8 │   fetch c into;
  ╰╴              ━
error[syntax-error]: subscript not allowed
  ╭▸ 
9 │   fetch c into x[1];
  ╰╴                ━
error[syntax-error]: FETCH does not support STRICT
   ╭▸ 
10 │   fetch c into strict x;
   ╰╴               ━━━━━━
error[syntax-error]: FETCH statement cannot return multiple rows
   ╭▸ 
12 │   fetch all from c into x;
   ╰╴        ━━━
error[syntax-error]: FETCH statement cannot return multiple rows
   ╭▸ 
13 │   fetch 2 from c into x;
   ╰╴        ━
error[syntax-error]: FETCH statement cannot return multiple rows
   ╭▸ 
14 │   fetch forward all from c into x;
   ╰╴        ━━━━━━━━━━━
error[syntax-error]: FETCH statement cannot return multiple rows
   ╭▸ 
15 │   fetch backward 2 from c into x;
   ╰╴        ━━━━━━━━━━