@@ -2958,7 +2958,6 @@ pub enum Statement {
29582958 modes : Vec < TransactionMode > ,
29592959 begin : bool ,
29602960 transaction : Option < BeginTransactionKind > ,
2961- /// Only for SQLite
29622961 modifier : Option < TransactionModifier > ,
29632962 } ,
29642963 /// ```sql
@@ -2985,7 +2984,17 @@ pub enum Statement {
29852984 /// ```sql
29862985 /// COMMIT [ TRANSACTION | WORK ] [ AND [ NO ] CHAIN ]
29872986 /// ```
2988- Commit { chain : bool } ,
2987+ /// If `end` is false
2988+ ///
2989+ /// ```sql
2990+ /// END [ TRY | CATCH ]
2991+ /// ```
2992+ /// If `end` is true
2993+ Commit {
2994+ chain : bool ,
2995+ end : bool ,
2996+ modifier : Option < TransactionModifier > ,
2997+ } ,
29892998 /// ```sql
29902999 /// ROLLBACK [ TRANSACTION | WORK ] [ AND [ NO ] CHAIN ] [ TO [ SAVEPOINT ] savepoint_name ]
29913000 /// ```
@@ -4614,8 +4623,23 @@ impl fmt::Display for Statement {
46144623 }
46154624 Ok ( ( ) )
46164625 }
4617- Statement :: Commit { chain } => {
4618- write ! ( f, "COMMIT{}" , if * chain { " AND CHAIN" } else { "" } , )
4626+ Statement :: Commit {
4627+ chain,
4628+ end : end_syntax,
4629+ modifier,
4630+ } => {
4631+ if * end_syntax {
4632+ write ! ( f, "END" ) ?;
4633+ if let Some ( modifier) = * modifier {
4634+ write ! ( f, " {}" , modifier) ?;
4635+ }
4636+ if * chain {
4637+ write ! ( f, " AND CHAIN" ) ?;
4638+ }
4639+ } else {
4640+ write ! ( f, "COMMIT{}" , if * chain { " AND CHAIN" } else { "" } ) ?;
4641+ }
4642+ Ok ( ( ) )
46194643 }
46204644 Statement :: Rollback { chain, savepoint } => {
46214645 write ! ( f, "ROLLBACK" ) ?;
@@ -6388,16 +6412,19 @@ impl fmt::Display for TransactionIsolationLevel {
63886412 }
63896413}
63906414
6391- /// SQLite specific syntax
6415+ /// Modifier for the transaction in the `BEGIN` syntax
63926416///
6393- /// <https://sqlite.org/lang_transaction.html>
6417+ /// SQLite: <https://sqlite.org/lang_transaction.html>
6418+ /// MS-SQL: <https://learn.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql>
63946419#[ derive( Debug , Copy , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
63956420#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
63966421#[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
63976422pub enum TransactionModifier {
63986423 Deferred ,
63996424 Immediate ,
64006425 Exclusive ,
6426+ Try ,
6427+ Catch ,
64016428}
64026429
64036430impl fmt:: Display for TransactionModifier {
@@ -6407,6 +6434,8 @@ impl fmt::Display for TransactionModifier {
64076434 Deferred => "DEFERRED" ,
64086435 Immediate => "IMMEDIATE" ,
64096436 Exclusive => "EXCLUSIVE" ,
6437+ Try => "TRY" ,
6438+ Catch => "CATCH" ,
64106439 } )
64116440 }
64126441}
0 commit comments