@@ -2976,7 +2976,6 @@ pub enum Statement {
2976
2976
modes : Vec < TransactionMode > ,
2977
2977
begin : bool ,
2978
2978
transaction : Option < BeginTransactionKind > ,
2979
- /// Only for SQLite
2980
2979
modifier : Option < TransactionModifier > ,
2981
2980
} ,
2982
2981
/// ```sql
@@ -3003,7 +3002,17 @@ pub enum Statement {
3003
3002
/// ```sql
3004
3003
/// COMMIT [ TRANSACTION | WORK ] [ AND [ NO ] CHAIN ]
3005
3004
/// ```
3006
- Commit { chain : bool } ,
3005
+ /// If `end` is false
3006
+ ///
3007
+ /// ```sql
3008
+ /// END [ TRY | CATCH ]
3009
+ /// ```
3010
+ /// If `end` is true
3011
+ Commit {
3012
+ chain : bool ,
3013
+ end : bool ,
3014
+ modifier : Option < TransactionModifier > ,
3015
+ } ,
3007
3016
/// ```sql
3008
3017
/// ROLLBACK [ TRANSACTION | WORK ] [ AND [ NO ] CHAIN ] [ TO [ SAVEPOINT ] savepoint_name ]
3009
3018
/// ```
@@ -4632,8 +4641,23 @@ impl fmt::Display for Statement {
4632
4641
}
4633
4642
Ok ( ( ) )
4634
4643
}
4635
- Statement :: Commit { chain } => {
4636
- write ! ( f, "COMMIT{}" , if * chain { " AND CHAIN" } else { "" } , )
4644
+ Statement :: Commit {
4645
+ chain,
4646
+ end : end_syntax,
4647
+ modifier,
4648
+ } => {
4649
+ if * end_syntax {
4650
+ write ! ( f, "END" ) ?;
4651
+ if let Some ( modifier) = * modifier {
4652
+ write ! ( f, " {}" , modifier) ?;
4653
+ }
4654
+ if * chain {
4655
+ write ! ( f, " AND CHAIN" ) ?;
4656
+ }
4657
+ } else {
4658
+ write ! ( f, "COMMIT{}" , if * chain { " AND CHAIN" } else { "" } ) ?;
4659
+ }
4660
+ Ok ( ( ) )
4637
4661
}
4638
4662
Statement :: Rollback { chain, savepoint } => {
4639
4663
write ! ( f, "ROLLBACK" ) ?;
@@ -6406,16 +6430,19 @@ impl fmt::Display for TransactionIsolationLevel {
6406
6430
}
6407
6431
}
6408
6432
6409
- /// SQLite specific syntax
6433
+ /// Modifier for the transaction in the `BEGIN` syntax
6410
6434
///
6411
- /// <https://sqlite.org/lang_transaction.html>
6435
+ /// SQLite: <https://sqlite.org/lang_transaction.html>
6436
+ /// MS-SQL: <https://learn.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql>
6412
6437
#[ derive( Debug , Copy , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
6413
6438
#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
6414
6439
#[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
6415
6440
pub enum TransactionModifier {
6416
6441
Deferred ,
6417
6442
Immediate ,
6418
6443
Exclusive ,
6444
+ Try ,
6445
+ Catch ,
6419
6446
}
6420
6447
6421
6448
impl fmt:: Display for TransactionModifier {
@@ -6425,6 +6452,8 @@ impl fmt::Display for TransactionModifier {
6425
6452
Deferred => "DEFERRED" ,
6426
6453
Immediate => "IMMEDIATE" ,
6427
6454
Exclusive => "EXCLUSIVE" ,
6455
+ Try => "TRY" ,
6456
+ Catch => "CATCH" ,
6428
6457
} )
6429
6458
}
6430
6459
}
0 commit comments