* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / System.Data.OracleClient / System.Data.OracleClient / OracleTransaction.cs
1 //
2 // OracleTransaction.cs 
3 //
4 // Part of the Mono class libraries at
5 // mcs/class/System.Data.OracleClient/System.Data.OracleClient
6 //
7 // Assembly: System.Data.OracleClient.dll
8 // Namespace: System.Data.OracleClient
9 //
10 // Author: Tim Coleman <tim@timcoleman.com>
11 //
12 // Copyright (C) Tim Coleman, 2003
13 //
14 // Licensed under the MIT/X11 License.
15 //
16
17 using System;
18 using System.ComponentModel;
19 using System.Data;
20 using System.Data.OracleClient.Oci;
21
22 namespace System.Data.OracleClient {
23         public sealed class OracleTransaction : MarshalByRefObject, IDbTransaction, IDisposable
24         {
25                 #region Fields
26
27                 OracleConnection connection;
28                 IsolationLevel isolationLevel;
29                 bool disposed = false;
30                 OciTransactionHandle transaction;
31                 bool isOpen;
32
33                 #endregion // Fields
34
35                 #region Constructors
36
37                 internal OracleTransaction (OracleConnection connection, IsolationLevel isolevel, OciTransactionHandle transaction)
38                 {
39                         this.connection = connection;
40                         this.isolationLevel = isolevel;
41                         this.transaction = transaction;
42                         isOpen = true;
43                 }
44
45                 #endregion // Constructors
46
47                 #region Properties
48
49                 internal bool IsOpen {
50                         get { return isOpen; }
51                 }
52
53                 public OracleConnection Connection {
54                         get { return connection; }
55                 }
56
57                 public IsolationLevel IsolationLevel {
58                         get { return isolationLevel; }
59                 }
60
61                 IDbConnection IDbTransaction.Connection {
62                         get { return Connection; }
63                 }
64
65                 #endregion // Properties
66
67                 #region Methods
68
69                 internal void AttachToServiceContext ()
70                 {
71                         transaction.AttachToServiceContext ();
72                 }
73
74                 public void Commit ()
75                 {
76                         transaction.Commit ();
77                         Connection.Transaction = null;
78                         isOpen = false;
79                 }
80
81                 private void Dispose (bool disposing)
82                 {
83                         if (!disposed) {
84                                 if (disposing) {
85                                         if (isOpen)
86                                                 Rollback ();
87
88                                         transaction.Dispose();
89                                 }
90                                 disposed = true;
91                         }
92                 }
93
94                 public void Dispose ()
95                 {
96                         Dispose (true);
97                         GC.SuppressFinalize (this);
98                 }
99
100                 public void Rollback ()
101                 {
102                         transaction.Rollback ();
103                         Connection.Transaction = null;
104                         isOpen = false;
105                 }
106
107                 #endregion // Methods
108         }
109 }