squawk-syntax 2.63.0

Linter for Postgres migrations & SQL
Documentation
---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_syntax/test_data/validation/in_array_expr.sql
---
SOURCE_FILE@0..402
  SELECT@0..75
    SELECT_CLAUSE@0..8
      SELECT_KW@0..6 "SELECT"
      WHITESPACE@6..7 " "
      TARGET_LIST@7..8
        TARGET@7..8
          STAR@7..8 "*"
    WHITESPACE@8..9 " "
    FROM_CLAUSE@9..20
      FROM_KW@9..13 "FROM"
      WHITESPACE@13..14 " "
      RELATION_FROM_ITEM@14..20
        RELATION_NAME_REF@14..20
          PATH_REF@14..20
            PATH_SEGMENT_REF@14..20
              IDENT@14..20 "recipe"
    WHITESPACE@20..21 " "
    WHERE_CLAUSE@21..74
      WHERE_KW@21..26 "WHERE"
      WHITESPACE@26..27 " "
      BIN_EXPR@27..74
        NAME_REF@27..30
          IDENT@27..30 "tag"
        WHITESPACE@30..31 " "
        IN_KW@31..33 "IN"
        WHITESPACE@33..34 " "
        ARRAY_EXPR@34..74
          ARRAY_KW@34..39 "ARRAY"
          L_BRACK@39..40 "["
          LITERAL@40..51
            STRING@40..51 "'breakfast'"
          COMMA@51..52 ","
          WHITESPACE@52..53 " "
          LITERAL@53..60
            STRING@53..60 "'snack'"
          COMMA@60..61 ","
          WHITESPACE@61..62 " "
          LITERAL@62..73
            STRING@62..73 "'appetizer'"
          R_BRACK@73..74 "]"
    SEMICOLON@74..75 ";"
  WHITESPACE@75..76 "\n"
  SELECT@76..155
    SELECT_CLAUSE@76..84
      SELECT_KW@76..82 "SELECT"
      WHITESPACE@82..83 " "
      TARGET_LIST@83..84
        TARGET@83..84
          STAR@83..84 "*"
    WHITESPACE@84..85 " "
    FROM_CLAUSE@85..96
      FROM_KW@85..89 "FROM"
      WHITESPACE@89..90 " "
      RELATION_FROM_ITEM@90..96
        RELATION_NAME_REF@90..96
          PATH_REF@90..96
            PATH_SEGMENT_REF@90..96
              IDENT@90..96 "recipe"
    WHITESPACE@96..97 " "
    WHERE_CLAUSE@97..154
      WHERE_KW@97..102 "WHERE"
      WHITESPACE@102..103 " "
      BIN_EXPR@103..154
        NAME_REF@103..106
          IDENT@103..106 "tag"
        WHITESPACE@106..107 " "
        NOT_IN@107..113
          NOT_KW@107..110 "NOT"
          WHITESPACE@110..111 " "
          IN_KW@111..113 "IN"
        WHITESPACE@113..114 " "
        ARRAY_EXPR@114..154
          ARRAY_KW@114..119 "ARRAY"
          L_BRACK@119..120 "["
          LITERAL@120..131
            STRING@120..131 "'breakfast'"
          COMMA@131..132 ","
          WHITESPACE@132..133 " "
          LITERAL@133..140
            STRING@133..140 "'snack'"
          COMMA@140..141 ","
          WHITESPACE@141..142 " "
          LITERAL@142..153
            STRING@142..153 "'appetizer'"
          R_BRACK@153..154 "]"
    SEMICOLON@154..155 ";"
  WHITESPACE@155..156 "\n"
  SELECT@156..202
    SELECT_CLAUSE@156..164
      SELECT_KW@156..162 "SELECT"
      WHITESPACE@162..163 " "
      TARGET_LIST@163..164
        TARGET@163..164
          STAR@163..164 "*"
    WHITESPACE@164..165 " "
    FROM_CLAUSE@165..176
      FROM_KW@165..169 "FROM"
      WHITESPACE@169..170 " "
      RELATION_FROM_ITEM@170..176
        RELATION_NAME_REF@170..176
          PATH_REF@170..176
            PATH_SEGMENT_REF@170..176
              IDENT@170..176 "recipe"
    WHITESPACE@176..177 " "
    WHERE_CLAUSE@177..201
      WHERE_KW@177..182 "WHERE"
      WHITESPACE@182..183 " "
      BIN_EXPR@183..201
        NAME_REF@183..186
          IDENT@183..186 "tag"
        WHITESPACE@186..187 " "
        IN_KW@187..189 "IN"
        WHITESPACE@189..190 " "
        LITERAL@190..201
          STRING@190..201 "'breakfast'"
    SEMICOLON@201..202 ";"
  WHITESPACE@202..203 "\n"
  SELECT@203..244
    SELECT_CLAUSE@203..211
      SELECT_KW@203..209 "SELECT"
      WHITESPACE@209..210 " "
      TARGET_LIST@210..211
        TARGET@210..211
          STAR@210..211 "*"
    WHITESPACE@211..212 " "
    FROM_CLAUSE@212..223
      FROM_KW@212..216 "FROM"
      WHITESPACE@216..217 " "
      RELATION_FROM_ITEM@217..223
        RELATION_NAME_REF@217..223
          PATH_REF@217..223
            PATH_SEGMENT_REF@217..223
              IDENT@217..223 "recipe"
    WHITESPACE@223..224 " "
    WHERE_CLAUSE@224..243
      WHERE_KW@224..229 "WHERE"
      WHITESPACE@229..230 " "
      BIN_EXPR@230..243
        NAME_REF@230..233
          IDENT@230..233 "tag"
        WHITESPACE@233..234 " "
        NOT_IN@234..240
          NOT_KW@234..237 "NOT"
          WHITESPACE@237..238 " "
          IN_KW@238..240 "IN"
        WHITESPACE@240..241 " "
        LITERAL@241..243
          POSITIONAL_PARAM@241..243 "$1"
    SEMICOLON@243..244 ";"
  WHITESPACE@244..245 "\n"
  SELECT@245..287
    SELECT_CLAUSE@245..253
      SELECT_KW@245..251 "SELECT"
      WHITESPACE@251..252 " "
      TARGET_LIST@252..253
        TARGET@252..253
          STAR@252..253 "*"
    WHITESPACE@253..254 " "
    FROM_CLAUSE@254..265
      FROM_KW@254..258 "FROM"
      WHITESPACE@258..259 " "
      RELATION_FROM_ITEM@259..265
        RELATION_NAME_REF@259..265
          PATH_REF@259..265
            PATH_SEGMENT_REF@259..265
              IDENT@259..265 "recipe"
    WHITESPACE@265..266 " "
    WHERE_CLAUSE@266..286
      WHERE_KW@266..271 "WHERE"
      WHITESPACE@271..272 " "
      BIN_EXPR@272..286
        NAME_REF@272..275
          IDENT@272..275 "tag"
        WHITESPACE@275..276 " "
        IN_KW@276..278 "IN"
        WHITESPACE@278..279 " "
        NAME_REF@279..286
          IDENT@279..286 "choices"
    SEMICOLON@286..287 ";"
  WHITESPACE@287..288 "\n"
  SELECT@288..340
    SELECT_CLAUSE@288..296
      SELECT_KW@288..294 "SELECT"
      WHITESPACE@294..295 " "
      TARGET_LIST@295..296
        TARGET@295..296
          STAR@295..296 "*"
    WHITESPACE@296..297 " "
    FROM_CLAUSE@297..308
      FROM_KW@297..301 "FROM"
      WHITESPACE@301..302 " "
      RELATION_FROM_ITEM@302..308
        RELATION_NAME_REF@302..308
          PATH_REF@302..308
            PATH_SEGMENT_REF@302..308
              IDENT@302..308 "recipe"
    WHITESPACE@308..309 " "
    WHERE_CLAUSE@309..339
      WHERE_KW@309..314 "WHERE"
      WHITESPACE@314..315 " "
      BIN_EXPR@315..339
        NAME_REF@315..318
          IDENT@315..318 "tag"
        WHITESPACE@318..319 " "
        NOT_IN@319..325
          NOT_KW@319..322 "NOT"
          WHITESPACE@322..323 " "
          IN_KW@323..325 "IN"
        WHITESPACE@325..326 " "
        CALL_EXPR@326..339
          NAME_REF@326..337
            IDENT@326..337 "get_choices"
          ARG_LIST@337..339
            L_PAREN@337..338 "("
            R_PAREN@338..339 ")"
    SEMICOLON@339..340 ";"
  WHITESPACE@340..341 "\n"
  SELECT@341..401
    SELECT_CLAUSE@341..349
      SELECT_KW@341..347 "SELECT"
      WHITESPACE@347..348 " "
      TARGET_LIST@348..349
        TARGET@348..349
          STAR@348..349 "*"
    WHITESPACE@349..350 " "
    FROM_CLAUSE@350..361
      FROM_KW@350..354 "FROM"
      WHITESPACE@354..355 " "
      RELATION_FROM_ITEM@355..361
        RELATION_NAME_REF@355..361
          PATH_REF@355..361
            PATH_SEGMENT_REF@355..361
              IDENT@355..361 "recipe"
    WHITESPACE@361..362 " "
    WHERE_CLAUSE@362..400
      WHERE_KW@362..367 "WHERE"
      WHITESPACE@367..368 " "
      BIN_EXPR@368..400
        NAME_REF@368..371
          IDENT@368..371 "tag"
        WHITESPACE@371..372 " "
        IN_KW@372..374 "IN"
        WHITESPACE@374..375 " "
        TUPLE_EXPR@375..400
          ROW_KW@375..378 "ROW"
          L_PAREN@378..379 "("
          LITERAL@379..390
            STRING@379..390 "'breakfast'"
          COMMA@390..391 ","
          WHITESPACE@391..392 " "
          LITERAL@392..399
            STRING@392..399 "'snack'"
          R_PAREN@399..400 ")"
    SEMICOLON@400..401 ";"
  WHITESPACE@401..402 "\n"

error[syntax-error]: Expected a parenthesized value list or subquery.
  ╭▸ 
1 │ SELECT * FROM recipe WHERE tag IN ARRAY['breakfast', 'snack', 'appetizer'];
  ╰╴                                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
error[syntax-error]: Expected a parenthesized value list or subquery.
  ╭▸ 
2 │ SELECT * FROM recipe WHERE tag NOT IN ARRAY['breakfast', 'snack', 'appetizer'];
  ╰╴                                      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
error[syntax-error]: Expected a parenthesized value list or subquery.
  ╭▸ 
3 │ SELECT * FROM recipe WHERE tag IN 'breakfast';
  ╰╴                                  ━━━━━━━━━━━
error[syntax-error]: Expected a parenthesized value list or subquery.
  ╭▸ 
4 │ SELECT * FROM recipe WHERE tag NOT IN $1;
  ╰╴                                      ━━
error[syntax-error]: Expected a parenthesized value list or subquery.
  ╭▸ 
5 │ SELECT * FROM recipe WHERE tag IN choices;
  ╰╴                                  ━━━━━━━
error[syntax-error]: Expected a parenthesized value list or subquery.
  ╭▸ 
6 │ SELECT * FROM recipe WHERE tag NOT IN get_choices();
  ╰╴                                      ━━━━━━━━━━━━━
error[syntax-error]: Expected a parenthesized value list or subquery.
  ╭▸ 
7 │ SELECT * FROM recipe WHERE tag IN ROW('breakfast', 'snack');
  ╰╴                                  ━━━━━━━━━━━━━━━━━━━━━━━━━