From 74396a12fd46f2a0c326589ea8e8ff6afb8ad2fb Mon Sep 17 00:00:00 2001 From: Yoav Cohen Date: Thu, 25 Dec 2025 14:58:49 +0100 Subject: [PATCH 1/2] Key Value Options: add support for trailing semicolon --- src/parser/mod.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 54fb32737..36a31a33e 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -18409,7 +18409,7 @@ impl<'a> Parser<'a> { return self.expected(" another option or EOF", self.peek_token()); } } - Token::EOF => break, + Token::EOF | Token::SemiColon => break, Token::Comma => { delimiter = KeyValueOptionsDelimiter::Comma; continue; @@ -18421,7 +18421,7 @@ impl<'a> Parser<'a> { self.prev_token(); break; } - _ => return self.expected("another option, EOF, Comma or ')'", self.peek_token()), + _ => return self.expected("another option, EOF, SemiColon, Comma or ')'", self.peek_token()), }; } @@ -19306,4 +19306,11 @@ mod tests { assert!(Parser::parse_sql(&GenericDialect, &sql).is_err()); } } + + #[test] + fn test_key_value_options_trailing_semicolon() { + let sql = "CREATE USER u1 option1 = 'value1' option2 = 'value2';"; + let ast = Parser::parse_sql(&GenericDialect, sql); + assert!(ast.is_ok()); + } } From 23dc580de5e4cd4e865a36292cf0a39cb7dc706a Mon Sep 17 00:00:00 2001 From: Yoav Cohen Date: Thu, 25 Dec 2025 15:05:53 +0100 Subject: [PATCH 2/2] Key Value Options: add support for trailing semicolon --- src/parser/mod.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 36a31a33e..954b723e2 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -18421,7 +18421,12 @@ impl<'a> Parser<'a> { self.prev_token(); break; } - _ => return self.expected("another option, EOF, SemiColon, Comma or ')'", self.peek_token()), + _ => { + return self.expected( + "another option, EOF, SemiColon, Comma or ')'", + self.peek_token(), + ) + } }; }