mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-12-23 11:12:51 +00:00
Add validation for empty value lists in PARTITION OF syntax.
This commit is contained in:
parent
f6611715e0
commit
c9b5fde29a
2 changed files with 36 additions and 0 deletions
|
|
@ -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 })
|
||||
|
|
|
|||
|
|
@ -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}"
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue