Skip to content

Commit cd66034

Browse files
mskrzypkowsMaciej Skrzypkowski
and
Maciej Skrzypkowski
authored
MERGE INTO semicolon handling (#508)
* SGA-4181 MERGE INTO semicolon handling * fixed lint warning Co-authored-by: Maciej Skrzypkowski <[email protected]>
1 parent 09bdb6b commit cd66034

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4250,7 +4250,7 @@ impl<'a> Parser<'a> {
42504250
pub fn parse_merge_clauses(&mut self) -> Result<Vec<MergeClause>, ParserError> {
42514251
let mut clauses: Vec<MergeClause> = vec![];
42524252
loop {
4253-
if self.peek_token() == Token::EOF {
4253+
if self.peek_token() == Token::EOF || self.peek_token() == Token::SemiColon {
42544254
break;
42554255
}
42564256
self.expect_keyword(Keyword::WHEN)?;

tests/sqlparser_common.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4574,6 +4574,21 @@ fn test_merge_into_using_table() {
45744574
verified_stmt(sql);
45754575
}
45764576

4577+
#[test]
4578+
fn test_merge_with_delimiter() {
4579+
let sql = "MERGE INTO target_table USING source_table \
4580+
ON target_table.id = source_table.oooid \
4581+
WHEN MATCHED THEN \
4582+
UPDATE SET target_table.description = source_table.description \
4583+
WHEN NOT MATCHED THEN \
4584+
INSERT (ID, description) VALUES (source_table.id, source_table.description);";
4585+
4586+
match parse_sql_statements(sql) {
4587+
Ok(_) => {}
4588+
_ => unreachable!(),
4589+
}
4590+
}
4591+
45774592
#[test]
45784593
fn test_lock() {
45794594
let sql = "SELECT * FROM student WHERE id = '1' FOR UPDATE";

0 commit comments

Comments
 (0)