Skip to content

Commit bf99997

Browse files
Error on a trailing END instead of dropping the rest of the input (#2838)
1 parent 65972d7 commit bf99997

4 files changed

Lines changed: 24 additions & 9 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
SELECT 1 END

‎src/parser/mod.rs‎

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -554,15 +554,8 @@ impl<'a> Parser<'a> {
554554
expecting_statement_delimiter = false;
555555
}
556556

557-
match &self.peek_token_ref().token {
558-
Token::EOF => break,
559-
// end of statement
560-
Token::Word(word)
561-
if expecting_statement_delimiter && word.keyword == Keyword::END =>
562-
{
563-
break;
564-
}
565-
_ => {}
557+
if self.peek_token_ref().token == Token::EOF {
558+
break;
566559
}
567560

568561
if expecting_statement_delimiter {

‎tests/sqlparser_common.rs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23470,3 +23470,14 @@ fn parse_do_statement() {
2347023470
ParserError::ParserError("Expected: an SQL statement, found: DO".to_string())
2347123471
);
2347223472
}
23473+
23474+
#[test]
23475+
fn parse_trailing_end_keyword_is_not_silently_dropped() {
23476+
let dialects = all_dialects();
23477+
assert_eq!(
23478+
dialects
23479+
.parse_sql_statements("SELECT a FROM t1 WHERE a = b END")
23480+
.unwrap_err(),
23481+
ParserError::ParserError("Expected: end of statement, found: END".to_string())
23482+
);
23483+
}

‎tests/sqlparser_postgres.rs‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13430,3 +13430,13 @@ fn display_maintain_privilege_propagates_formatter_errors() {
1343013430
Err(fmt::Error)
1343113431
);
1343213432
}
13433+
13434+
#[test]
13435+
fn parse_case_ending_in_end_keyword_is_not_silently_dropped() {
13436+
// PostgreSQL reads the second `END` as a bare column alias
13437+
assert_eq!(
13438+
pg().parse_sql_statements("SELECT CASE 1 WHEN 1 THEN 1 END END FROM t")
13439+
.unwrap_err(),
13440+
ParserError::ParserError("Expected: end of statement, found: END".to_string())
13441+
);
13442+
}

0 commit comments

Comments
 (0)