2002-08-25 Rodrigo Moya <rodrigo@ximian.com>
authorRodrigo Moya <rodrigo@mono-cvs.ximian.com>
Mon, 26 Aug 2002 01:23:20 +0000 (01:23 -0000)
committerRodrigo Moya <rodrigo@mono-cvs.ximian.com>
Mon, 26 Aug 2002 01:23:20 +0000 (01:23 -0000)
* System.Data.OleDb/OleDbTransaction.cs (OleDbTransaction): manage
correctly the isolation level.
(IsolationLevel): likewise.
(~OleDbTransaction): implemented.

* System.Data.OleDb/libgda.cs: added more needed stuff.

svn path=/trunk/mcs/; revision=7043

mcs/class/System.Data/ChangeLog
mcs/class/System.Data/System.Data.OleDb/OleDbTransaction.cs
mcs/class/System.Data/System.Data.OleDb/libgda.cs

index 9292cea95626f7a276b89260a6a2493fccbafec7..1f140fda9d482317bba0865fcd3c594a8c01efde 100644 (file)
@@ -1,3 +1,12 @@
+2002-08-25  Rodrigo Moya <rodrigo@ximian.com>
+
+       * System.Data.OleDb/OleDbTransaction.cs (OleDbTransaction): manage
+       correctly the isolation level.
+       (IsolationLevel): likewise.
+       (~OleDbTransaction): implemented.
+
+       * System.Data.OleDb/libgda.cs: added more needed stuff.
+
 2002-08-22  Daniel Morgan <danmorg@sc.rr.com>
 
        * System.Data.SqlClient/SqlParameter.cs: flush
index 5a61cb9c6a8e96dac6a6688c5188ba2f15366c1c..68386f5cddacce15ff71e8685c28a4fb6e33c0a0 100644 (file)
@@ -19,7 +19,6 @@ namespace System.Data.OleDb
                #region Fields
 
                OleDbConnection connection;
-               IsolationLevel isolationLevel;
                IntPtr gdaTransaction;
                int depth;
 
@@ -28,12 +27,8 @@ namespace System.Data.OleDb
                #region Constructors
 
                internal OleDbTransaction (OleDbConnection connection, int depth)
+                       : this (connection, depth, IsolationLevel.ReadCommitted)
                {
-                       this.connection = connection;
-                       isolationLevel = IsolationLevel.ReadCommitted;
-
-                       gdaTransaction = libgda.gda_transaction_new (depth.ToString ());
-                       libgda.gda_connection_begin_transaction (connection.GdaConnection, gdaTransaction);
                }
 
                internal OleDbTransaction (OleDbConnection connection)
@@ -42,9 +37,31 @@ namespace System.Data.OleDb
                }
 
                internal OleDbTransaction (OleDbConnection connection, int depth, IsolationLevel isolevel) 
-                       : this (connection, depth)
                {
-                       isolationLevel = isolevel;
+                       this.connection = connection;
+
+                       gdaTransaction = libgda.gda_transaction_new (depth.ToString ());
+                       
+                       switch (isolevel) {
+                       case IsolationLevel.ReadCommitted :
+                               libgda.gda_transaction_set_isolation_level (gdaTransaction,
+                                                                           GdaTransactionIsolation.ReadCommitted);
+                               break;
+                       case IsolationLevel.ReadUncommitted :
+                               libgda.gda_transaction_set_isolation_level (gdaTransaction,
+                                                                           GdaTransactionIsolation.ReadUncommitted);
+                               break;
+                       case IsolationLevel.RepeatableRead :
+                               libgda.gda_transaction_set_isolation_level (gdaTransaction,
+                                                                           GdaTransactionIsolation.RepeatableRead);
+                               break;
+                       case IsolationLevel.Serializable :
+                               libgda.gda_transaction_set_isolation_level (gdaTransaction,
+                                                                           GdaTransactionIsolation.Serializable);
+                               break;
+                       }
+                       
+                       libgda.gda_connection_begin_transaction (connection.GdaConnection, gdaTransaction);
                }
 
                internal OleDbTransaction (OleDbConnection connection, IsolationLevel isolevel) 
@@ -71,7 +88,18 @@ namespace System.Data.OleDb
                
                public IsolationLevel IsolationLevel {
                        get {
-                               return isolationLevel;
+                               switch (libgda.gda_transaction_get_isolation_level (gdaTransaction)) {
+                               case GdaTransactionIsolation.ReadCommitted :
+                                       return IsolationLevel.ReadCommitted;
+                               case GdaTransactionIsolation.ReadUncommitted :
+                                       return IsolationLevel.ReadUncommitted;
+                               case GdaTransactionIsolation.RepeatableRead :
+                                       return IsolationLevel.RepeatableRead;
+                               case GdaTransactionIsolation.Serializable :
+                                       return IsolationLevel.Serializable;
+                               }
+
+                               return IsolationLevel.Unspecified;
                        }
                }
 
@@ -99,6 +127,8 @@ namespace System.Data.OleDb
                [MonoTODO]
                ~OleDbTransaction ()
                {
+                       libgda.FreeObject (gdaTransaction);
+                       gdaTransaction = IntPtr.Zero;
                }
 
                [MonoTODO]
index 873dcf7f9cdbd0372e0ffbb0a9664aab6a2c91c4..09609545fbf25b4dd87490967579e29b04505abd 100644 (file)
@@ -30,6 +30,14 @@ namespace System.Data.OleDb
                Invalid = 5
        };
 
+       internal enum GdaTransactionIsolation {
+               Unknown,
+               ReadCommitted,
+               ReadUncommitted,
+               RepeatableRead,
+               Serializable
+       };
+       
        internal enum GdaValueType {
                Null = 0,
                Bigint = 1,
@@ -229,7 +237,14 @@ namespace System.Data.OleDb
 
                [DllImport("gda-2")]
                public static extern IntPtr gda_transaction_set_name (IntPtr xaction, string name);
-       
+
+               [DllImport("gda-2")]
+               public static extern GdaTransactionIsolation gda_transaction_get_isolation_level (IntPtr xaction);
+
+               [DllImport("gda-2")]
+               public static extern void gda_transaction_set_isolation_level (IntPtr xaction,
+                                                                              GdaTransactionIsolation level);
+               
                [DllImport("gda-2")]
                public static extern bool gda_connection_begin_transaction (IntPtr cnc, IntPtr xaction);