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 15
15
// specific language governing permissions and limitations
16
16
// under the License.
17
17
18
+ use crate :: ast:: Statement ;
18
19
use crate :: dialect:: Dialect ;
19
20
use crate :: keywords:: Keyword ;
20
- use crate :: parser:: Parser ;
21
+ use crate :: parser:: { Parser , ParserError } ;
21
22
22
23
/// These keywords are disallowed as column identifiers. Such that
23
24
/// `SELECT 5 AS <col> FROM T` is rejected by BigQuery.
@@ -44,6 +45,14 @@ const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
44
45
pub struct BigQueryDialect ;
45
46
46
47
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
+
47
56
/// See <https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#identifiers>
48
57
fn is_delimited_identifier_start ( & self , ch : char ) -> bool {
49
58
ch == '`'
Original file line number Diff line number Diff line change @@ -131,6 +131,10 @@ impl Dialect for SnowflakeDialect {
131
131
}
132
132
133
133
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
+
134
138
if parser. parse_keywords ( & [ Keyword :: ALTER , Keyword :: SESSION ] ) {
135
139
// ALTER SESSION
136
140
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> {
15102
15102
}
15103
15103
15104
15104
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
-
15109
15105
let modifier = if !self.dialect.supports_start_transaction_modifier() {
15110
15106
None
15111
15107
} else if self.parse_keyword(Keyword::DEFERRED) {
Original file line number Diff line number Diff line change @@ -8592,7 +8592,10 @@ fn lateral_function() {
8592
8592
#[test]
8593
8593
fn parse_start_transaction() {
8594
8594
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>
8596
8599
d.is::<BigQueryDialect>() || d.is::<SnowflakeDialect>());
8597
8600
match dialects
8598
8601
.verified_stmt("START TRANSACTION READ ONLY, READ WRITE, ISOLATION LEVEL SERIALIZABLE")
You can’t perform that action at this time.
0 commit comments