File tree Expand file tree Collapse file tree 4 files changed +18
-6
lines changed Expand file tree Collapse file tree 4 files changed +18
-6
lines changed Original file line number Diff line number Diff line change 1515// specific language governing permissions and limitations
1616// under the License.
1717
18+ use crate :: ast:: Statement ;
1819use crate :: dialect:: Dialect ;
1920use 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] = &[
4445pub struct BigQueryDialect ;
4546
4647impl 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 == '`'
Original file line number Diff line number Diff 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 ] ) {
Original file line number Diff line number Diff 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) {
Original file line number Diff line number Diff line change @@ -8592,7 +8592,10 @@ fn lateral_function() {
85928592#[test]
85938593fn 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")
You can’t perform that action at this time.
0 commit comments