Add the alter table ON COMMIT option to Snowflake (#1606)

This commit is contained in:
Yoav Cohen 2024-12-17 08:39:59 +01:00 committed by GitHub
parent 7867ba3cf0
commit c69839102a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 33 additions and 16 deletions

View file

@ -377,6 +377,10 @@ pub fn parse_create_table(
parser.expect_token(&Token::RParen)?;
builder = builder.with_tags(Some(tags));
}
Keyword::ON if parser.parse_keyword(Keyword::COMMIT) => {
let on_commit = Some(parser.parse_create_table_on_commit()?);
builder = builder.on_commit(on_commit);
}
_ => {
return parser.expected("end of statement", next_token);
}

View file

@ -6155,22 +6155,11 @@ impl<'a> Parser<'a> {
None
};
let on_commit: Option<OnCommit> =
if self.parse_keywords(&[Keyword::ON, Keyword::COMMIT, Keyword::DELETE, Keyword::ROWS])
{
Some(OnCommit::DeleteRows)
} else if self.parse_keywords(&[
Keyword::ON,
Keyword::COMMIT,
Keyword::PRESERVE,
Keyword::ROWS,
]) {
Some(OnCommit::PreserveRows)
} else if self.parse_keywords(&[Keyword::ON, Keyword::COMMIT, Keyword::DROP]) {
Some(OnCommit::Drop)
} else {
None
};
let on_commit = if self.parse_keywords(&[Keyword::ON, Keyword::COMMIT]) {
Some(self.parse_create_table_on_commit()?)
} else {
None
};
let strict = self.parse_keyword(Keyword::STRICT);
@ -6226,6 +6215,21 @@ impl<'a> Parser<'a> {
.build())
}
pub(crate) fn parse_create_table_on_commit(&mut self) -> Result<OnCommit, ParserError> {
if self.parse_keywords(&[Keyword::DELETE, Keyword::ROWS]) {
Ok(OnCommit::DeleteRows)
} else if self.parse_keywords(&[Keyword::PRESERVE, Keyword::ROWS]) {
Ok(OnCommit::PreserveRows)
} else if self.parse_keywords(&[Keyword::DROP]) {
Ok(OnCommit::Drop)
} else {
parser_err!(
"Expecting DELETE ROWS, PRESERVE ROWS or DROP",
self.peek_token()
)
}
}
/// Parse configuration like partitioning, clustering information during the table creation.
///
/// [BigQuery](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#syntax_2)

View file

@ -355,6 +355,15 @@ fn test_snowflake_create_table_column_comment() {
}
}
#[test]
fn test_snowflake_create_table_on_commit() {
snowflake().verified_stmt(
r#"CREATE LOCAL TEMPORARY TABLE "AAA"."foo" ("bar" INTEGER) ON COMMIT PRESERVE ROWS"#,
);
snowflake().verified_stmt(r#"CREATE TABLE "AAA"."foo" ("bar" INTEGER) ON COMMIT DELETE ROWS"#);
snowflake().verified_stmt(r#"CREATE TABLE "AAA"."foo" ("bar" INTEGER) ON COMMIT DROP"#);
}
#[test]
fn test_snowflake_create_local_table() {
match snowflake().verified_stmt("CREATE TABLE my_table (a INT)") {