@@ -1905,6 +1905,8 @@ pub enum Statement {
1905
1905
StartTransaction {
1906
1906
modes : Vec < TransactionMode > ,
1907
1907
begin : bool ,
1908
+ /// Only for SQLite
1909
+ modifier : Option < TransactionModifier > ,
1908
1910
} ,
1909
1911
/// ```sql
1910
1912
/// SET TRANSACTION ...
@@ -3253,9 +3255,14 @@ impl fmt::Display for Statement {
3253
3255
Statement :: StartTransaction {
3254
3256
modes,
3255
3257
begin : syntax_begin,
3258
+ modifier,
3256
3259
} => {
3257
3260
if * syntax_begin {
3258
- write ! ( f, "BEGIN TRANSACTION" ) ?;
3261
+ if let Some ( modifier) = * modifier {
3262
+ write ! ( f, "BEGIN {} TRANSACTION" , modifier) ?;
3263
+ } else {
3264
+ write ! ( f, "BEGIN TRANSACTION" ) ?;
3265
+ }
3259
3266
} else {
3260
3267
write ! ( f, "START TRANSACTION" ) ?;
3261
3268
}
@@ -4444,6 +4451,29 @@ impl fmt::Display for TransactionIsolationLevel {
4444
4451
}
4445
4452
}
4446
4453
4454
+ /// SQLite specific syntax
4455
+ ///
4456
+ /// <https://sqlite.org/lang_transaction.html>
4457
+ #[ derive( Debug , Copy , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
4458
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
4459
+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
4460
+ pub enum TransactionModifier {
4461
+ Deferred ,
4462
+ Immediate ,
4463
+ Exclusive ,
4464
+ }
4465
+
4466
+ impl fmt:: Display for TransactionModifier {
4467
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
4468
+ use TransactionModifier :: * ;
4469
+ f. write_str ( match self {
4470
+ Deferred => "DEFERRED" ,
4471
+ Immediate => "IMMEDIATE" ,
4472
+ Exclusive => "EXCLUSIVE" ,
4473
+ } )
4474
+ }
4475
+ }
4476
+
4447
4477
#[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
4448
4478
#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
4449
4479
#[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
0 commit comments