Skip to content

Commit 5412417

Browse files
committed
Add validation for empty value lists in PARTITION OF syntax.
1 parent 0e731b4 commit 5412417

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

src/parser/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8088,16 +8088,25 @@ impl<'a> Parser<'a> {
80888088
if self.parse_keyword(Keyword::IN) {
80898089
// FOR VALUES IN (expr, ...)
80908090
self.expect_token(&Token::LParen)?;
8091+
if self.peek_token() == Token::RParen {
8092+
return self.expected("at least one value", self.peek_token());
8093+
}
80918094
let values = self.parse_comma_separated(Parser::parse_expr)?;
80928095
self.expect_token(&Token::RParen)?;
80938096
Ok(ForValues::In(values))
80948097
} else if self.parse_keyword(Keyword::FROM) {
80958098
// FOR VALUES FROM (...) TO (...)
80968099
self.expect_token(&Token::LParen)?;
8100+
if self.peek_token() == Token::RParen {
8101+
return self.expected("at least one value", self.peek_token());
8102+
}
80978103
let from = self.parse_comma_separated(Parser::parse_partition_bound_value)?;
80988104
self.expect_token(&Token::RParen)?;
80998105
self.expect_keyword(Keyword::TO)?;
81008106
self.expect_token(&Token::LParen)?;
8107+
if self.peek_token() == Token::RParen {
8108+
return self.expected("at least one value", self.peek_token());
8109+
}
81018110
let to = self.parse_comma_separated(Parser::parse_partition_bound_value)?;
81028111
self.expect_token(&Token::RParen)?;
81038112
Ok(ForValues::From { from, to })

tests/sqlparser_postgres.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8150,4 +8150,31 @@ fn parse_create_table_partition_of_errors() {
81508150
err.contains("TO"),
81518151
"Expected error about missing TO clause, got: {err}"
81528152
);
8153+
8154+
let sql = "CREATE TABLE p PARTITION OF parent FOR VALUES IN ()";
8155+
let result = pg_and_generic().parse_sql_statements(sql);
8156+
assert!(result.is_err());
8157+
let err = result.unwrap_err().to_string();
8158+
assert!(
8159+
err.contains("at least one value"),
8160+
"Expected error about empty value list in IN clause, got: {err}"
8161+
);
8162+
8163+
let sql = "CREATE TABLE p PARTITION OF parent FOR VALUES FROM () TO (10)";
8164+
let result = pg_and_generic().parse_sql_statements(sql);
8165+
assert!(result.is_err());
8166+
let err = result.unwrap_err().to_string();
8167+
assert!(
8168+
err.contains("at least one value"),
8169+
"Expected error about empty FROM list, got: {err}"
8170+
);
8171+
8172+
let sql = "CREATE TABLE p PARTITION OF parent FOR VALUES FROM (1) TO ()";
8173+
let result = pg_and_generic().parse_sql_statements(sql);
8174+
assert!(result.is_err());
8175+
let err = result.unwrap_err().to_string();
8176+
assert!(
8177+
err.contains("at least one value"),
8178+
"Expected error about empty TO list, got: {err}"
8179+
);
81538180
}

0 commit comments

Comments
 (0)