Add validation for empty value lists in PARTITION OF syntax.

This commit is contained in:
Filipe Guerreiro 2025-12-23 09:45:32 +09:00
parent f6611715e0
commit c9b5fde29a
2 changed files with 36 additions and 0 deletions

View file

@ -8088,16 +8088,25 @@ impl<'a> Parser<'a> {
if self.parse_keyword(Keyword::IN) {
// FOR VALUES IN (expr, ...)
self.expect_token(&Token::LParen)?;
if self.peek_token() == Token::RParen {
return self.expected("at least one value", self.peek_token());
}
let values = self.parse_comma_separated(Parser::parse_expr)?;
self.expect_token(&Token::RParen)?;
Ok(ForValues::In(values))
} else if self.parse_keyword(Keyword::FROM) {
// FOR VALUES FROM (...) TO (...)
self.expect_token(&Token::LParen)?;
if self.peek_token() == Token::RParen {
return self.expected("at least one value", self.peek_token());
}
let from = self.parse_comma_separated(Parser::parse_partition_bound_value)?;
self.expect_token(&Token::RParen)?;
self.expect_keyword(Keyword::TO)?;
self.expect_token(&Token::LParen)?;
if self.peek_token() == Token::RParen {
return self.expected("at least one value", self.peek_token());
}
let to = self.parse_comma_separated(Parser::parse_partition_bound_value)?;
self.expect_token(&Token::RParen)?;
Ok(ForValues::From { from, to })

View file

@ -8142,4 +8142,31 @@ fn parse_create_table_partition_of_errors() {
err.contains("TO"),
"Expected error about missing TO clause, got: {err}"
);
let sql = "CREATE TABLE p PARTITION OF parent FOR VALUES IN ()";
let result = pg_and_generic().parse_sql_statements(sql);
assert!(result.is_err());
let err = result.unwrap_err().to_string();
assert!(
err.contains("at least one value"),
"Expected error about empty value list in IN clause, got: {err}"
);
let sql = "CREATE TABLE p PARTITION OF parent FOR VALUES FROM () TO (10)";
let result = pg_and_generic().parse_sql_statements(sql);
assert!(result.is_err());
let err = result.unwrap_err().to_string();
assert!(
err.contains("at least one value"),
"Expected error about empty FROM list, got: {err}"
);
let sql = "CREATE TABLE p PARTITION OF parent FOR VALUES FROM (1) TO ()";
let result = pg_and_generic().parse_sql_statements(sql);
assert!(result.is_err());
let err = result.unwrap_err().to_string();
assert!(
err.contains("at least one value"),
"Expected error about empty TO list, got: {err}"
);
}