List:Commits« Previous MessageNext Message »
From:rburnett Date:December 29 2006 4:37pm
Subject:Connector/NET commit: r515 - in branches/1.0: . TestSuite mysqlclient mysqlclient/docs
View as plain text  
Modified:
   branches/1.0/CHANGES
   branches/1.0/TestSuite/SimpleTransactions.cs
   branches/1.0/mysqlclient/Connection.cs
   branches/1.0/mysqlclient/docs/MySqlConnection.xml
   branches/1.0/mysqlclient/transaction.cs
Log:
Bug #22400 Nested transactions 

Fixed this by checking the server status reported by the server and throwing an exception
if we are in a pending transaction.

Modified: branches/1.0/CHANGES
===================================================================
--- branches/1.0/CHANGES	2006-12-29 15:31:54 UTC (rev 514)
+++ branches/1.0/CHANGES	2006-12-29 15:37:53 UTC (rev 515)
@@ -16,6 +16,7 @@
 	   are required. This will be fixed when the server exposes procedure parameters via
  	   information schema.]
     Bug #25013 Return Value parameter not found 
+    Bug #22400 Nested transactions 
 		
     Other changes
     -------------

Modified: branches/1.0/TestSuite/SimpleTransactions.cs
===================================================================
--- branches/1.0/TestSuite/SimpleTransactions.cs	2006-12-29 15:31:54 UTC (rev 514)
+++ branches/1.0/TestSuite/SimpleTransactions.cs	2006-12-29 15:37:53 UTC (rev 515)
@@ -87,10 +87,10 @@
 			try
 			{
 				MySqlTransaction t2 = conn.BeginTransaction();
-				t2.Rollback();
-				Assert.Fail("Exception should have been thrown");
+                Assert.Fail("Exception should have been thrown");
+                t2.Rollback();
 			}
-			catch (NotSupportedException)
+			catch (InvalidOperationException)
 			{
 			}
 			catch (Exception ex)

Modified: branches/1.0/mysqlclient/Connection.cs
===================================================================
--- branches/1.0/mysqlclient/Connection.cs	2006-12-29 15:31:54 UTC (rev 514)
+++ branches/1.0/mysqlclient/Connection.cs	2006-12-29 15:37:53 UTC (rev 515)
@@ -40,7 +40,6 @@
 		private MySqlConnectionString settings;
 		private bool hasBeenOpen;
 		private ProcedureCache procedureCache;
-		internal MySqlTransaction activeLegacyTransaction;
 
 		/// <include file='docs/MySqlConnection.xml' path='docs/StateChange/*'/>
 		public event StateChangeEventHandler StateChange;
@@ -214,8 +213,9 @@
 			if (state != ConnectionState.Open)
 				throw new InvalidOperationException(Resources.ConnectionNotOpen);
 
-			if (activeLegacyTransaction != null)
-				throw new NotSupportedException(Resources.NoNestedTransactions);
+            // First check to see if we are in a current transaction
+            if ((driver.ServerStatus & ServerStatusFlags.InTransaction) != 0)
+                throw new InvalidOperationException(Resources.NoNestedTransactions);
 
 			MySqlTransaction t = new MySqlTransaction(this, iso);
 
@@ -240,8 +240,6 @@
 
 			cmd.CommandText = "BEGIN";
 			cmd.ExecuteNonQuery();
-
-			activeLegacyTransaction = t;
 			return t;
 		}
 
@@ -347,7 +345,6 @@
 				dataReader.Close();
 
 			Terminate();
-			activeLegacyTransaction = null;
 		}
 
 		IDbCommand IDbConnection.CreateCommand()

Modified: branches/1.0/mysqlclient/docs/MySqlConnection.xml
===================================================================
--- branches/1.0/mysqlclient/docs/MySqlConnection.xml	2006-12-29 15:31:54 UTC (rev 514)
+++ branches/1.0/mysqlclient/docs/MySqlConnection.xml	2006-12-29 15:37:53 UTC (rev 515)
@@ -325,6 +325,8 @@
         <note>
           If you do not specify an isolation level, the default isolation level is used.
To specify an isolation
           level with the <see cref="BeginTransaction()"/> method, use the overload
that takes the <I>iso</I> parameter.
+          Also note that any attempt to begin a transaction while a transaction is in
progress will throw an exception on MySQL 4.1 and higher.
+          On MySQL 4.0, an exception will not be thrown because servers 4.0 and earlier
did not report their transacation status.
         </note>
       </para>
     </remarks>
@@ -438,6 +440,8 @@
         <note>
           If you do not specify an isolation level, the default isolation level is used.
To specify an isolation
           level with the <see cref="BeginTransaction()"/> method, use the overload
that takes the <I>iso</I> parameter.
+          Also note that any attempt to begin a transaction while a transaction is in
progress will throw an exception on MySQL 4.1 and higher.
+          On MySQL 4.0, an exception will not be thrown because servers 4.0 and earlier
did not report their transacation status.
         </note>
       </para>
     </remarks>

Modified: branches/1.0/mysqlclient/transaction.cs
===================================================================
--- branches/1.0/mysqlclient/transaction.cs	2006-12-29 15:31:54 UTC (rev 514)
+++ branches/1.0/mysqlclient/transaction.cs	2006-12-29 15:37:53 UTC (rev 515)
@@ -97,10 +97,6 @@
 			{
 				throw;
 			}
-			finally
-			{
-				conn.activeLegacyTransaction = null;
-			}
 		}
 
 		/// <include file='docs/MySqlTransaction.xml' path='docs/Rollback/*'/>
@@ -120,10 +116,6 @@
 			{
 				throw;
 			}
-			finally
-			{
-				conn.activeLegacyTransaction = null;
-			}
 		}
 	}
 }

Thread
Connector/NET commit: r515 - in branches/1.0: . TestSuite mysqlclient mysqlclient/docsrburnett29 Dec