#region Fields
OleDbConnection connection;
- IsolationLevel isolationLevel;
IntPtr gdaTransaction;
int depth;
#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)
}
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)
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;
}
}
[MonoTODO]
~OleDbTransaction ()
{
+ libgda.FreeObject (gdaTransaction);
+ gdaTransaction = IntPtr.Zero;
}
[MonoTODO]
Invalid = 5
};
+ internal enum GdaTransactionIsolation {
+ Unknown,
+ ReadCommitted,
+ ReadUncommitted,
+ RepeatableRead,
+ Serializable
+ };
+
internal enum GdaValueType {
Null = 0,
Bigint = 1,
[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);