@@ -6155,22 +6155,11 @@ impl<'a> Parser<'a> {
6155
6155
None
6156
6156
};
6157
6157
6158
- let on_commit: Option<OnCommit> =
6159
- if self.parse_keywords(&[Keyword::ON, Keyword::COMMIT, Keyword::DELETE, Keyword::ROWS])
6160
- {
6161
- Some(OnCommit::DeleteRows)
6162
- } else if self.parse_keywords(&[
6163
- Keyword::ON,
6164
- Keyword::COMMIT,
6165
- Keyword::PRESERVE,
6166
- Keyword::ROWS,
6167
- ]) {
6168
- Some(OnCommit::PreserveRows)
6169
- } else if self.parse_keywords(&[Keyword::ON, Keyword::COMMIT, Keyword::DROP]) {
6170
- Some(OnCommit::Drop)
6171
- } else {
6172
- None
6173
- };
6158
+ let on_commit = if self.parse_keywords(&[Keyword::ON, Keyword::COMMIT]) {
6159
+ Some(self.parse_create_table_on_commit()?)
6160
+ } else {
6161
+ None
6162
+ };
6174
6163
6175
6164
let strict = self.parse_keyword(Keyword::STRICT);
6176
6165
@@ -6226,6 +6215,21 @@ impl<'a> Parser<'a> {
6226
6215
.build())
6227
6216
}
6228
6217
6218
+ pub(crate) fn parse_create_table_on_commit(&mut self) -> Result<OnCommit, ParserError> {
6219
+ if self.parse_keywords(&[Keyword::DELETE, Keyword::ROWS]) {
6220
+ Ok(OnCommit::DeleteRows)
6221
+ } else if self.parse_keywords(&[Keyword::PRESERVE, Keyword::ROWS]) {
6222
+ Ok(OnCommit::PreserveRows)
6223
+ } else if self.parse_keywords(&[Keyword::DROP]) {
6224
+ Ok(OnCommit::Drop)
6225
+ } else {
6226
+ parser_err!(
6227
+ "Expecting DELETE ROWS, PRESERVE ROWS or DROP",
6228
+ self.peek_token()
6229
+ )
6230
+ }
6231
+ }
6232
+
6229
6233
/// Parse configuration like partitioning, clustering information during the table creation.
6230
6234
///
6231
6235
/// [BigQuery](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#syntax_2)
0 commit comments