**** Merged from MCS ****
[mono-project.git] / mcs / class / Mono.Data.SqliteClient / Mono.Data.SqliteClient / SqliteTransaction.cs
blobd1b4772a2dd3c66f62196a0e174076432b5ac5d4
1 //
2 // Mono.Data.SqliteClient.SqliteTransaction.cs
3 //
4 // Mono.Data.SqliteClient data access components for .Net
5 // Derived from ByteFX.Data
6 // With permission from Reggie Burnett to relicense under MIT/X11
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining
9 // a copy of this software and associated documentation files (the
10 // "Software"), to deal in the Software without restriction, including
11 // without limitation the rights to use, copy, modify, merge, publish,
12 // distribute, sublicense, and/or sell copies of the Software, and to
13 // permit persons to whom the Software is furnished to do so, subject to
14 // the following conditions:
15 //
16 // The above copyright notice and this permission notice shall be
17 // included in all copies or substantial portions of the Software.
18 //
19 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 using System;
29 using System.Data;
31 namespace Mono.Data.SqliteClient
33 public sealed class SqliteTransaction : IDbTransaction
36 #region Fields
38 private IsolationLevel _isolationLevel;
39 private SqliteConnection _connection;
40 private bool _open;
42 #endregion
44 #region Contructors and destructors
46 internal SqliteTransaction()
48 _open = true;
51 void System.IDisposable.Dispose()
55 #endregion
57 #region Public Properties
59 public IDbConnection Connection
61 get { return _connection; }
62 set { _connection = (SqliteConnection)value; }
65 public IsolationLevel IsolationLevel
67 get { return _isolationLevel; }
68 set { _isolationLevel = value; }
71 #endregion
73 #region Public Methods
75 public void Commit()
77 if (_connection == null || _connection.State != ConnectionState.Open)
78 throw new InvalidOperationException("Connection must be valid and open to commit transaction");
79 if (!_open)
80 throw new InvalidOperationException("Transaction has already been committed or is not pending");
81 try
83 SqliteCommand cmd = _connection.CreateCommand();
84 cmd.CommandText = "COMMIT";
85 cmd.ExecuteNonQuery();
86 _open = false;
88 catch (Exception ex)
90 throw ex;
94 public void Rollback()
96 if (_connection == null || _connection.State != ConnectionState.Open)
97 throw new InvalidOperationException("Connection must be valid and open to commit transaction");
98 if (!_open)
99 throw new InvalidOperationException("Transaction has already been rolled back or is not pending");
100 try
102 SqliteCommand cmd = _connection.CreateCommand();
103 cmd.CommandText = "COMMIT";
104 cmd.ExecuteNonQuery();
105 _open = false;
107 catch (Exception ex)
109 throw ex;
113 #endregion