From 49f4f066e88bcfddd068711577d7bc6823fd8ae0 Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Mon, 26 Aug 2002 01:23:20 +0000 Subject: [PATCH] 2002-08-25 Rodrigo Moya * 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 | 9 ++++ .../System.Data.OleDb/OleDbTransaction.cs | 48 +++++++++++++++---- .../System.Data/System.Data.OleDb/libgda.cs | 17 ++++++- 3 files changed, 64 insertions(+), 10 deletions(-) diff --git a/mcs/class/System.Data/ChangeLog b/mcs/class/System.Data/ChangeLog index 9292cea9562..1f140fda9d4 100644 --- a/mcs/class/System.Data/ChangeLog +++ b/mcs/class/System.Data/ChangeLog @@ -1,3 +1,12 @@ +2002-08-25 Rodrigo Moya + + * 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 * System.Data.SqlClient/SqlParameter.cs: flush diff --git a/mcs/class/System.Data/System.Data.OleDb/OleDbTransaction.cs b/mcs/class/System.Data/System.Data.OleDb/OleDbTransaction.cs index 5a61cb9c6a8..68386f5cdda 100644 --- a/mcs/class/System.Data/System.Data.OleDb/OleDbTransaction.cs +++ b/mcs/class/System.Data/System.Data.OleDb/OleDbTransaction.cs @@ -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] diff --git a/mcs/class/System.Data/System.Data.OleDb/libgda.cs b/mcs/class/System.Data/System.Data.OleDb/libgda.cs index 873dcf7f9cd..09609545fbf 100644 --- a/mcs/class/System.Data/System.Data.OleDb/libgda.cs +++ b/mcs/class/System.Data/System.Data.OleDb/libgda.cs @@ -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); -- 2.25.1