mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-10-09 21:42:05 +00:00
Fix "BEGIN TRANSACTION" being serialized as "START TRANSACTION" (#935)
This commit is contained in:
parent
0ddb853410
commit
10a6ec5637
3 changed files with 25 additions and 9 deletions
|
@ -1540,8 +1540,15 @@ pub enum Statement {
|
|||
///
|
||||
/// Note: This is a MySQL-specific statement.
|
||||
Use { db_name: Ident },
|
||||
/// `{ BEGIN [ TRANSACTION | WORK ] | START TRANSACTION } ...`
|
||||
StartTransaction { modes: Vec<TransactionMode> },
|
||||
/// `START [ TRANSACTION | WORK ] | START TRANSACTION } ...`
|
||||
/// If `begin` is false.
|
||||
///
|
||||
/// `BEGIN [ TRANSACTION | WORK ] | START TRANSACTION } ...`
|
||||
/// If `begin` is true
|
||||
StartTransaction {
|
||||
modes: Vec<TransactionMode>,
|
||||
begin: bool,
|
||||
},
|
||||
/// `SET TRANSACTION ...`
|
||||
SetTransaction {
|
||||
modes: Vec<TransactionMode>,
|
||||
|
@ -2720,8 +2727,15 @@ impl fmt::Display for Statement {
|
|||
}
|
||||
Ok(())
|
||||
}
|
||||
Statement::StartTransaction { modes } => {
|
||||
write!(f, "START TRANSACTION")?;
|
||||
Statement::StartTransaction {
|
||||
modes,
|
||||
begin: syntax_begin,
|
||||
} => {
|
||||
if *syntax_begin {
|
||||
write!(f, "BEGIN TRANSACTION")?;
|
||||
} else {
|
||||
write!(f, "START TRANSACTION")?;
|
||||
}
|
||||
if !modes.is_empty() {
|
||||
write!(f, " {}", display_comma_separated(modes))?;
|
||||
}
|
||||
|
|
|
@ -6905,6 +6905,7 @@ impl<'a> Parser<'a> {
|
|||
self.expect_keyword(Keyword::TRANSACTION)?;
|
||||
Ok(Statement::StartTransaction {
|
||||
modes: self.parse_transaction_modes()?,
|
||||
begin: false,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -6912,6 +6913,7 @@ impl<'a> Parser<'a> {
|
|||
let _ = self.parse_one_of_keywords(&[Keyword::TRANSACTION, Keyword::WORK]);
|
||||
Ok(Statement::StartTransaction {
|
||||
modes: self.parse_transaction_modes()?,
|
||||
begin: true,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -5732,7 +5732,7 @@ fn lateral_derived() {
|
|||
#[test]
|
||||
fn parse_start_transaction() {
|
||||
match verified_stmt("START TRANSACTION READ ONLY, READ WRITE, ISOLATION LEVEL SERIALIZABLE") {
|
||||
Statement::StartTransaction { modes } => assert_eq!(
|
||||
Statement::StartTransaction { modes, .. } => assert_eq!(
|
||||
modes,
|
||||
vec![
|
||||
TransactionMode::AccessMode(TransactionAccessMode::ReadOnly),
|
||||
|
@ -5749,7 +5749,7 @@ fn parse_start_transaction() {
|
|||
"START TRANSACTION READ ONLY READ WRITE ISOLATION LEVEL SERIALIZABLE",
|
||||
"START TRANSACTION READ ONLY, READ WRITE, ISOLATION LEVEL SERIALIZABLE",
|
||||
) {
|
||||
Statement::StartTransaction { modes } => assert_eq!(
|
||||
Statement::StartTransaction { modes, .. } => assert_eq!(
|
||||
modes,
|
||||
vec![
|
||||
TransactionMode::AccessMode(TransactionAccessMode::ReadOnly),
|
||||
|
@ -5761,9 +5761,9 @@ fn parse_start_transaction() {
|
|||
}
|
||||
|
||||
verified_stmt("START TRANSACTION");
|
||||
one_statement_parses_to("BEGIN", "START TRANSACTION");
|
||||
one_statement_parses_to("BEGIN WORK", "START TRANSACTION");
|
||||
one_statement_parses_to("BEGIN TRANSACTION", "START TRANSACTION");
|
||||
one_statement_parses_to("BEGIN", "BEGIN TRANSACTION");
|
||||
one_statement_parses_to("BEGIN WORK", "BEGIN TRANSACTION");
|
||||
one_statement_parses_to("BEGIN TRANSACTION", "BEGIN TRANSACTION");
|
||||
|
||||
verified_stmt("START TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
|
||||
verified_stmt("START TRANSACTION ISOLATION LEVEL READ COMMITTED");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue