2
// Mono.Data.Sqlite.SQLiteEnlistment.cs
5
// Robert Simpson (robert@blackcastlesoft.com)
7
// Adapted and modified for the Mono Project by
8
// Marek Habersack (grendello@gmail.com)
11
// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
12
// Copyright (C) 2007 Marek Habersack
14
// Permission is hereby granted, free of charge, to any person obtaining
15
// a copy of this software and associated documentation files (the
16
// "Software"), to deal in the Software without restriction, including
17
// without limitation the rights to use, copy, modify, merge, publish,
18
// distribute, sublicense, and/or sell copies of the Software, and to
19
// permit persons to whom the Software is furnished to do so, subject to
20
// the following conditions:
22
// The above copyright notice and this permission notice shall be
23
// included in all copies or substantial portions of the Software.
25
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34
/*******************************************************
35
* ADO.NET 2.0 Data Provider for Sqlite Version 3.X
36
* Written by Robert Simpson (robert@blackcastlesoft.com)
38
* Released to the public domain, use at your own risk!
39
********************************************************/
41
#if !PLATFORM_COMPACTFRAMEWORK
42
namespace Mono.Data.Sqlite
46
using System.Data.Common;
47
using System.Transactions;
49
internal class SqliteEnlistment : IEnlistmentNotification
51
internal SqliteTransaction _transaction;
52
internal Transaction _scope;
53
internal bool _disposeConnection;
55
internal SqliteEnlistment(SqliteConnection cnn, Transaction scope)
57
_transaction = cnn.BeginTransaction();
59
_disposeConnection = false;
61
_scope.EnlistVolatile(this, System.Transactions.EnlistmentOptions.None);
64
private void Cleanup(SqliteConnection cnn)
66
if (_disposeConnection)
73
#region IEnlistmentNotification Members
75
public void Commit(Enlistment enlistment)
77
SqliteConnection cnn = _transaction.Connection;
78
cnn._enlistment = null;
82
_transaction.IsValid(true);
83
_transaction.Connection._transactionLevel = 1;
84
_transaction.Commit();
94
public void InDoubt(Enlistment enlistment)
99
public void Prepare(PreparingEnlistment preparingEnlistment)
101
if (_transaction.IsValid(false) == false)
102
preparingEnlistment.ForceRollback();
104
preparingEnlistment.Prepared();
107
public void Rollback(Enlistment enlistment)
109
SqliteConnection cnn = _transaction.Connection;
110
cnn._enlistment = null;
114
_transaction.Rollback();
126
#endif // !PLATFORM_COMPACT_FRAMEWORK