diff --git a/src/dialect/bigquery.rs b/src/dialect/bigquery.rs
index d53c9db05..27fd3cca3 100644
--- a/src/dialect/bigquery.rs
+++ b/src/dialect/bigquery.rs
@@ -19,6 +19,7 @@ use crate::ast::Statement;
use crate::dialect::Dialect;
use crate::keywords::Keyword;
use crate::parser::{Parser, ParserError};
+use crate::tokenizer::Token;
/// These keywords are disallowed as column identifiers. Such that
/// `SELECT 5 AS
FROM T` is rejected by BigQuery.
@@ -47,6 +48,13 @@ pub struct BigQueryDialect;
impl Dialect for BigQueryDialect {
fn parse_statement(&self, parser: &mut Parser) -> Option> {
if parser.parse_keyword(Keyword::BEGIN) {
+ if parser.peek_keyword(Keyword::TRANSACTION)
+ || parser.peek_token_ref().token == Token::SemiColon
+ || parser.peek_token_ref().token == Token::EOF
+ {
+ parser.prev_token();
+ return None;
+ }
return Some(parser.parse_begin_exception_end());
}
diff --git a/tests/sqlparser_bigquery.rs b/tests/sqlparser_bigquery.rs
index 2ba54d3e1..bc03011d8 100644
--- a/tests/sqlparser_bigquery.rs
+++ b/tests/sqlparser_bigquery.rs
@@ -2566,3 +2566,13 @@ fn test_struct_trailing_and_nested_bracket() {
)
);
}
+
+#[test]
+fn test_begin_transaction() {
+ bigquery().verified_stmt("BEGIN TRANSACTION");
+}
+
+#[test]
+fn test_begin_statement() {
+ bigquery().verified_stmt("BEGIN");
+}