Skip to content

Commit 23350bd

Browse files
committed
Use separate trait impl in favor of dialect_of! macro
1 parent 33979fb commit 23350bd

File tree

4 files changed

+18
-6
lines changed

4 files changed

+18
-6
lines changed

src/dialect/bigquery.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18+
use crate::ast::Statement;
1819
use crate::dialect::Dialect;
1920
use crate::keywords::Keyword;
20-
use crate::parser::Parser;
21+
use crate::parser::{Parser, ParserError};
2122

2223
/// These keywords are disallowed as column identifiers. Such that
2324
/// `SELECT 5 AS <col> FROM T` is rejected by BigQuery.
@@ -44,6 +45,14 @@ const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
4445
pub struct BigQueryDialect;
4546

4647
impl Dialect for BigQueryDialect {
48+
fn parse_statement(&self, parser: &mut Parser) -> Option<Result<Statement, ParserError>> {
49+
if parser.parse_keyword(Keyword::BEGIN) {
50+
return Some(parser.parse_begin_exception_end());
51+
}
52+
53+
None
54+
}
55+
4756
/// See <https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#identifiers>
4857
fn is_delimited_identifier_start(&self, ch: char) -> bool {
4958
ch == '`'

src/dialect/snowflake.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ impl Dialect for SnowflakeDialect {
131131
}
132132

133133
fn parse_statement(&self, parser: &mut Parser) -> Option<Result<Statement, ParserError>> {
134+
if parser.parse_keyword(Keyword::BEGIN) {
135+
return Some(parser.parse_begin_exception_end());
136+
}
137+
134138
if parser.parse_keywords(&[Keyword::ALTER, Keyword::SESSION]) {
135139
// ALTER SESSION
136140
let set = match parser.parse_one_of_keywords(&[Keyword::SET, Keyword::UNSET]) {

src/parser/mod.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15102,10 +15102,6 @@ impl<'a> Parser<'a> {
1510215102
}
1510315103

1510415104
pub fn parse_begin(&mut self) -> Result<Statement, ParserError> {
15105-
if dialect_of!(self is SnowflakeDialect | BigQueryDialect) {
15106-
return self.parse_begin_exception_end();
15107-
}
15108-
1510915105
let modifier = if !self.dialect.supports_start_transaction_modifier() {
1511015106
None
1511115107
} else if self.parse_keyword(Keyword::DEFERRED) {

tests/sqlparser_common.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8592,7 +8592,10 @@ fn lateral_function() {
85928592
#[test]
85938593
fn parse_start_transaction() {
85948594
let dialects = all_dialects_except(|d|
8595-
// BigQuery does not support this syntax
8595+
// BigQuery and Snowflake does not support this syntax
8596+
//
8597+
// BigQuery: <https://cloud.google.com/bigquery/docs/reference/standard-sql/procedural-language#begin_transaction>
8598+
// Snowflake: <https://docs.snowflake.com/en/sql-reference/sql/begin>
85968599
d.is::<BigQueryDialect>() || d.is::<SnowflakeDialect>());
85978600
match dialects
85988601
.verified_stmt("START TRANSACTION READ ONLY, READ WRITE, ISOLATION LEVEL SERIALIZABLE")

0 commit comments

Comments
 (0)