@@ -1905,6 +1905,8 @@ pub enum Statement {
19051905 StartTransaction {
19061906 modes : Vec < TransactionMode > ,
19071907 begin : bool ,
1908+ /// Only for SQLite
1909+ modifier : Option < TransactionModifier > ,
19081910 } ,
19091911 /// ```sql
19101912 /// SET TRANSACTION ...
@@ -3253,9 +3255,14 @@ impl fmt::Display for Statement {
32533255 Statement :: StartTransaction {
32543256 modes,
32553257 begin : syntax_begin,
3258+ modifier,
32563259 } => {
32573260 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+ }
32593266 } else {
32603267 write ! ( f, "START TRANSACTION" ) ?;
32613268 }
@@ -4444,6 +4451,29 @@ impl fmt::Display for TransactionIsolationLevel {
44444451 }
44454452}
44464453
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+
44474477#[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
44484478#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
44494479#[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
0 commit comments