Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions crates/squawk_parser/src/grammar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4482,6 +4482,10 @@ fn opt_where_clause(p: &mut Parser<'_>) -> Option<CompletedMarker> {
}
let m = p.start();
p.bump(WHERE_KW);
// TODO: we might want to be fancier, maybe all binary only operators?
if p.at(AND_KW) || p.at(OR_KW) {
p.err_and_bump(&format!("expected expression but got {:?}", p.current()));
}
expr(p);
Some(m.complete(p, WHERE_CLAUSE))
}
Expand Down
4 changes: 4 additions & 0 deletions crates/squawk_parser/tests/data/err/select.sql
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ do 'begin null; end';
select
grant select on t to u;

-- where with missing expr
select from t where and c > 10;
select from t where or c != 'b';

-- select end
select
end;
Expand Down
86 changes: 75 additions & 11 deletions crates/squawk_parser/tests/snapshots/tests__select_err.snap
Original file line number Diff line number Diff line change
Expand Up @@ -747,6 +747,62 @@ SOURCE_FILE
IDENT "u"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- where with missing expr"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
FROM_CLAUSE
FROM_KW "from"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "t"
WHITESPACE " "
WHERE_CLAUSE
WHERE_KW "where"
WHITESPACE " "
ERROR
AND_KW "and"
WHITESPACE " "
BIN_EXPR
NAME_REF
IDENT "c"
WHITESPACE " "
R_ANGLE ">"
WHITESPACE " "
LITERAL
INT_NUMBER "10"
SEMICOLON ";"
WHITESPACE "\n"
SELECT
SELECT_CLAUSE
SELECT_KW "select"
WHITESPACE " "
FROM_CLAUSE
FROM_KW "from"
WHITESPACE " "
FROM_ITEM
NAME_REF
IDENT "t"
WHITESPACE " "
WHERE_CLAUSE
WHERE_KW "where"
WHITESPACE " "
ERROR
OR_KW "or"
WHITESPACE " "
BIN_EXPR
NAME_REF
IDENT "c"
WHITESPACE " "
NEQ "!="
WHITESPACE " "
LITERAL
STRING "'b'"
SEMICOLON ";"
WHITESPACE "\n\n"
COMMENT "-- select end"
WHITESPACE "\n"
SELECT
Expand Down Expand Up @@ -957,31 +1013,39 @@ error[syntax-error]: expected SEMICOLON
╭▸
77 │ select
╰╴ ━
error[syntax-error]: expected expression but got AND_KW
╭▸
81 │ select from t where and c > 10;
╰╴ ━
error[syntax-error]: expected expression but got OR_KW
╭▸
82 │ select from t where or c != 'b';
╰╴ ━
error[syntax-error]: expected SEMICOLON
╭▸
81 │ select
85 │ select
│ ┏━━━━━━━┛
82 │ ┃ end;
86 │ ┃ end;
╰╴┗━┛
error[syntax-error]: expected SEMICOLON
╭▸
85 │ select
89 │ select
│ ┏━━━━━━━┛
86 │ ┃ analyze;
90 │ ┃ analyze;
╰╴┗━┛
error[syntax-error]: expected SEMICOLON
╭▸
88 │ select
92 │ select
│ ┏━━━━━━━┛
89 │ ┃ analyse;
93 │ ┃ analyse;
╰╴┗━┛
error[syntax-error]: expected SEMICOLON
╭▸
93 │ select
97 │ select
│ ┏━━━━━━━┛
94 │ ┃ with t as (select 1)
98 │ ┃ with t as (select 1)
╰╴┗━┛
error[syntax-error]: unexpected trailing comma
╭▸
98 │ select 1,
╰╴ ━
╭▸
102 │ select 1,
╰╴ ━
Loading