---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_syntax/test_data/validation/join_clauses.sql
---
SOURCE_FILE@0..523
COMMENT@0..7 "-- errs"
WHITESPACE@7..8 "\n"
SELECT@8..30
SELECT_CLAUSE@8..16
SELECT_KW@8..14 "select"
WHITESPACE@14..15 " "
TARGET_LIST@15..16
TARGET@15..16
STAR@15..16 "*"
WHITESPACE@16..17 " "
FROM_CLAUSE@17..30
FROM_KW@17..21 "from"
WHITESPACE@21..22 " "
JOIN_EXPR@22..30
FROM_ITEM@22..23
NAME_REF@22..23
IDENT@22..23 "t"
WHITESPACE@23..24 " "
JOIN@24..30
JOIN_INNER@24..28
JOIN_KW@24..28 "join"
WHITESPACE@28..29 " "
FROM_ITEM@29..30
NAME_REF@29..30
IDENT@29..30 "u"
SEMICOLON@30..31 ";"
WHITESPACE@31..33 "\n\n"
SELECT@33..60
SELECT_CLAUSE@33..41
SELECT_KW@33..39 "select"
WHITESPACE@39..40 " "
TARGET_LIST@40..41
TARGET@40..41
STAR@40..41 "*"
WHITESPACE@41..42 " "
FROM_CLAUSE@42..60
FROM_KW@42..46 "from"
WHITESPACE@46..47 " "
JOIN_EXPR@47..60
FROM_ITEM@47..48
NAME_REF@47..48
IDENT@47..48 "t"
WHITESPACE@48..49 " "
JOIN@49..60
JOIN_LEFT@49..58
LEFT_KW@49..53 "left"
WHITESPACE@53..54 " "
JOIN_KW@54..58 "join"
WHITESPACE@58..59 " "
FROM_ITEM@59..60
NAME_REF@59..60
IDENT@59..60 "u"
SEMICOLON@60..61 ";"
WHITESPACE@61..63 "\n\n"
SELECT@63..91
SELECT_CLAUSE@63..71
SELECT_KW@63..69 "select"
WHITESPACE@69..70 " "
TARGET_LIST@70..71
TARGET@70..71
STAR@70..71 "*"
WHITESPACE@71..72 " "
FROM_CLAUSE@72..91
FROM_KW@72..76 "from"
WHITESPACE@76..77 " "
JOIN_EXPR@77..91
FROM_ITEM@77..78
NAME_REF@77..78
IDENT@77..78 "t"
WHITESPACE@78..79 " "
JOIN@79..91
JOIN_RIGHT@79..89
RIGHT_KW@79..84 "right"
WHITESPACE@84..85 " "
JOIN_KW@85..89 "join"
WHITESPACE@89..90 " "
FROM_ITEM@90..91
NAME_REF@90..91
IDENT@90..91 "u"
SEMICOLON@91..92 ";"
WHITESPACE@92..94 "\n\n"
SELECT@94..121
SELECT_CLAUSE@94..102
SELECT_KW@94..100 "select"
WHITESPACE@100..101 " "
TARGET_LIST@101..102
TARGET@101..102
STAR@101..102 "*"
WHITESPACE@102..103 " "
FROM_CLAUSE@103..121
FROM_KW@103..107 "from"
WHITESPACE@107..108 " "
JOIN_EXPR@108..121
FROM_ITEM@108..109
NAME_REF@108..109
IDENT@108..109 "t"
WHITESPACE@109..110 " "
JOIN@110..121
JOIN_FULL@110..119
FULL_KW@110..114 "full"
WHITESPACE@114..115 " "
JOIN_KW@115..119 "join"
WHITESPACE@119..120 " "
FROM_ITEM@120..121
NAME_REF@120..121
IDENT@120..121 "u"
SEMICOLON@121..122 ";"
WHITESPACE@122..125 "\n\n\n"
COMMENT@125..171 "-- err, can't use con ..."
WHITESPACE@171..172 "\n"
SELECT@172..213
SELECT_CLAUSE@172..180
SELECT_KW@172..178 "select"
WHITESPACE@178..179 " "
TARGET_LIST@179..180
TARGET@179..180
STAR@179..180 "*"
WHITESPACE@180..181 " "
FROM_CLAUSE@181..213
FROM_KW@181..185 "from"
WHITESPACE@185..186 " "
JOIN_EXPR@186..213
FROM_ITEM@186..187
NAME_REF@186..187
IDENT@186..187 "t"
WHITESPACE@187..188 " "
JOIN@188..213
NATURAL_KW@188..195 "natural"
WHITESPACE@195..196 " "
JOIN_INNER@196..200
JOIN_KW@196..200 "join"
WHITESPACE@200..201 " "
FROM_ITEM@201..202
NAME_REF@201..202
IDENT@201..202 "u"
WHITESPACE@202..203 " "
JOIN_USING_CLAUSE@203..213
USING_KW@203..208 "using"
WHITESPACE@208..209 " "
COLUMN_LIST@209..213
L_PAREN@209..210 "("
COLUMN@210..212
NAME_REF@210..212
IDENT@210..212 "id"
R_PAREN@212..213 ")"
SEMICOLON@213..214 ";"
WHITESPACE@214..216 "\n\n"
COMMENT@216..261 "-- err, can't use con ..."
WHITESPACE@261..262 "\n"
SELECT@262..301
SELECT_CLAUSE@262..270
SELECT_KW@262..268 "select"
WHITESPACE@268..269 " "
TARGET_LIST@269..270
TARGET@269..270
STAR@269..270 "*"
WHITESPACE@270..271 " "
FROM_CLAUSE@271..301
FROM_KW@271..275 "from"
WHITESPACE@275..276 " "
JOIN_EXPR@276..301
FROM_ITEM@276..277
NAME_REF@276..277
IDENT@276..277 "t"
WHITESPACE@277..278 " "
JOIN@278..301
JOIN_CROSS@278..288
CROSS_KW@278..283 "cross"
WHITESPACE@283..284 " "
JOIN_KW@284..288 "join"
WHITESPACE@288..289 " "
FROM_ITEM@289..290
NAME_REF@289..290
IDENT@289..290 "u"
WHITESPACE@290..291 " "
JOIN_USING_CLAUSE@291..301
USING_KW@291..296 "using"
WHITESPACE@296..297 " "
COLUMN_LIST@297..301
L_PAREN@297..298 "("
COLUMN@298..300
NAME_REF@298..300
IDENT@298..300 "id"
R_PAREN@300..301 ")"
SEMICOLON@301..302 ";"
WHITESPACE@302..304 "\n\n"
COMMENT@304..309 "-- ok"
WHITESPACE@309..310 "\n"
SELECT@310..340
SELECT_CLAUSE@310..318
SELECT_KW@310..316 "select"
WHITESPACE@316..317 " "
TARGET_LIST@317..318
TARGET@317..318
STAR@317..318 "*"
WHITESPACE@318..319 " "
FROM_CLAUSE@319..340
FROM_KW@319..323 "from"
WHITESPACE@323..324 " "
JOIN_EXPR@324..340
FROM_ITEM@324..325
NAME_REF@324..325
IDENT@324..325 "t"
WHITESPACE@325..326 " "
JOIN@326..340
NATURAL_KW@326..333 "natural"
WHITESPACE@333..334 " "
JOIN_INNER@334..338
JOIN_KW@334..338 "join"
WHITESPACE@338..339 " "
FROM_ITEM@339..340
NAME_REF@339..340
IDENT@339..340 "u"
SEMICOLON@340..341 ";"
WHITESPACE@341..343 "\n\n"
SELECT@343..391
SELECT_CLAUSE@343..351
SELECT_KW@343..349 "select"
WHITESPACE@349..350 " "
TARGET_LIST@350..351
TARGET@350..351
STAR@350..351 "*"
WHITESPACE@351..352 " "
FROM_CLAUSE@352..391
FROM_KW@352..356 "from"
WHITESPACE@356..357 " "
JOIN_EXPR@357..371
FROM_ITEM@357..358
NAME_REF@357..358
IDENT@357..358 "t"
WHITESPACE@358..359 " "
JOIN@359..371
JOIN_CROSS@359..369
CROSS_KW@359..364 "cross"
WHITESPACE@364..365 " "
JOIN_KW@365..369 "join"
WHITESPACE@369..370 " "
FROM_ITEM@370..371
NAME_REF@370..371
IDENT@370..371 "u"
COMMA@371..372 ","
WHITESPACE@372..373 " "
JOIN_EXPR@373..391
FROM_ITEM@373..374
NAME_REF@373..374
IDENT@373..374 "b"
WHITESPACE@374..375 " "
JOIN@375..391
JOIN_INNER@375..379
JOIN_KW@375..379 "join"
WHITESPACE@379..380 " "
FROM_ITEM@380..381
NAME_REF@380..381
IDENT@380..381 "c"
WHITESPACE@381..382 " "
JOIN_USING_CLAUSE@382..391
USING_KW@382..387 "using"
COLUMN_LIST@387..391
L_PAREN@387..388 "("
COLUMN@388..390
NAME_REF@388..390
IDENT@388..390 "id"
R_PAREN@390..391 ")"
SEMICOLON@391..392 ";"
WHITESPACE@392..394 "\n\n"
SELECT@394..431
SELECT_CLAUSE@394..402
SELECT_KW@394..400 "select"
WHITESPACE@400..401 " "
TARGET_LIST@401..402
TARGET@401..402
STAR@401..402 "*"
WHITESPACE@402..403 " "
FROM_CLAUSE@403..431
FROM_KW@403..407 "from"
WHITESPACE@407..408 " "
JOIN_EXPR@408..431
FROM_ITEM@408..409
NAME_REF@408..409
IDENT@408..409 "t"
WHITESPACE@409..410 " "
JOIN@410..431
JOIN_INNER@410..414
JOIN_KW@410..414 "join"
WHITESPACE@414..415 " "
FROM_ITEM@415..416
NAME_REF@415..416
IDENT@415..416 "u"
WHITESPACE@416..417 " "
ON_CLAUSE@417..431
ON_KW@417..419 "on"
WHITESPACE@419..420 " "
BIN_EXPR@420..431
FIELD_EXPR@420..424
NAME_REF@420..421
IDENT@420..421 "u"
DOT@421..422 "."
NAME_REF@422..424
IDENT@422..424 "id"
WHITESPACE@424..425 " "
EQ@425..426 "="
WHITESPACE@426..427 " "
FIELD_EXPR@427..431
NAME_REF@427..428
IDENT@427..428 "t"
DOT@428..429 "."
NAME_REF@429..431
IDENT@429..431 "id"
SEMICOLON@431..432 ";"
WHITESPACE@432..433 "\n"
SELECT@433..463
SELECT_CLAUSE@433..441
SELECT_KW@433..439 "select"
WHITESPACE@439..440 " "
TARGET_LIST@440..441
TARGET@440..441
STAR@440..441 "*"
WHITESPACE@441..442 " "
FROM_CLAUSE@442..463
FROM_KW@442..446 "from"
WHITESPACE@446..447 " "
JOIN_EXPR@447..463
FROM_ITEM@447..448
NAME_REF@447..448
IDENT@447..448 "t"
WHITESPACE@448..449 " "
JOIN@449..463
JOIN_INNER@449..453
JOIN_KW@449..453 "join"
WHITESPACE@453..454 " "
FROM_ITEM@454..455
NAME_REF@454..455
IDENT@454..455 "u"
WHITESPACE@455..456 " "
ON_CLAUSE@456..463
ON_KW@456..458 "on"
WHITESPACE@458..459 " "
LITERAL@459..463
TRUE_KW@459..463 "true"
SEMICOLON@463..464 ";"
WHITESPACE@464..466 "\n\n"
SELECT@466..521
SELECT_CLAUSE@466..474
SELECT_KW@466..472 "select"
WHITESPACE@472..473 " "
TARGET_LIST@473..474
TARGET@473..474
STAR@473..474 "*"
WHITESPACE@474..475 " "
FROM_CLAUSE@475..521
FROM_KW@475..479 "from"
WHITESPACE@479..480 " "
JOIN_EXPR@480..521
JOIN_EXPR@480..501
FROM_ITEM@480..481
NAME_REF@480..481
IDENT@480..481 "t"
WHITESPACE@481..484 "\n "
JOIN@484..501
JOIN_INNER@484..488
JOIN_KW@484..488 "join"
WHITESPACE@488..489 " "
FROM_ITEM@489..490
NAME_REF@489..490
IDENT@489..490 "u"
WHITESPACE@490..491 " "
JOIN_USING_CLAUSE@491..501
USING_KW@491..496 "using"
WHITESPACE@496..497 " "
COLUMN_LIST@497..501
L_PAREN@497..498 "("
COLUMN@498..500
NAME_REF@498..500
IDENT@498..500 "id"
R_PAREN@500..501 ")"
WHITESPACE@501..504 "\n "
JOIN@504..521
JOIN_INNER@504..508
JOIN_KW@504..508 "join"
WHITESPACE@508..509 " "
FROM_ITEM@509..510
NAME_REF@509..510
IDENT@509..510 "c"
WHITESPACE@510..511 " "
JOIN_USING_CLAUSE@511..521
USING_KW@511..516 "using"
WHITESPACE@516..517 " "
COLUMN_LIST@517..521
L_PAREN@517..518 "("
COLUMN@518..520
NAME_REF@518..520
IDENT@518..520 "id"
R_PAREN@520..521 ")"
SEMICOLON@521..522 ";"
WHITESPACE@522..523 "\n"
error[syntax-error]: Join missing condition.
╭▸
2 │ select * from t join u;
╰╴ ━
error[syntax-error]: Join missing condition.
╭▸
4 │ select * from t left join u;
╰╴ ━
error[syntax-error]: Join missing condition.
╭▸
6 │ select * from t right join u;
╰╴ ━
error[syntax-error]: Join missing condition.
╭▸
8 │ select * from t full join u;
╰╴ ━
error[syntax-error]: Join `using` clause is not allowed for natural joins.
╭▸
12 │ select * from t natural join u using (id);
╰╴ ━━━━━━━━━━
error[syntax-error]: Join `using` clause is not allowed for cross joins.
╭▸
15 │ select * from t cross join u using (id);
╰╴ ━━━━━━━━━━