1 /********************************************************
\r
2 * ADO.NET 2.0 Data Provider for SQLite Version 3.X
\r
3 * Written by Robert Simpson (robert@blackcastlesoft.com)
\r
5 * Released to the public domain, use at your own risk!
\r
6 ********************************************************/
\r
8 #if !PLATFORM_COMPACTFRAMEWORK
\r
9 namespace Mono.Data.Sqlite
\r
13 using System.Data.Common;
\r
14 using System.Transactions;
\r
16 internal class SQLiteEnlistment : IEnlistmentNotification
\r
18 internal SqliteTransaction _transaction;
\r
19 internal Transaction _scope;
\r
20 internal bool _disposeConnection;
\r
22 internal SQLiteEnlistment(SqliteConnection cnn, Transaction scope)
\r
24 _transaction = cnn.BeginTransaction();
\r
26 _disposeConnection = false;
\r
28 _scope.EnlistVolatile(this, System.Transactions.EnlistmentOptions.None);
\r
31 private void Cleanup(SqliteConnection cnn)
\r
33 if (_disposeConnection)
\r
36 _transaction = null;
\r
40 #region IEnlistmentNotification Members
\r
42 public void Commit(Enlistment enlistment)
\r
44 SqliteConnection cnn = _transaction.Connection;
\r
45 cnn._enlistment = null;
\r
49 _transaction.IsValid(true);
\r
50 _transaction.Connection._transactionLevel = 1;
\r
51 _transaction.Commit();
\r
61 public void InDoubt(Enlistment enlistment)
\r
66 public void Prepare(PreparingEnlistment preparingEnlistment)
\r
68 if (_transaction.IsValid(false) == false)
\r
69 preparingEnlistment.ForceRollback();
\r
71 preparingEnlistment.Prepared();
\r
74 public void Rollback(Enlistment enlistment)
\r
76 SqliteConnection cnn = _transaction.Connection;
\r
77 cnn._enlistment = null;
\r
81 _transaction.Rollback();
\r
93 #endif // !PLATFORM_COMPACT_FRAMEWORK