List:Commits« Previous MessageNext Message »
From:rburnett Date:September 22 2007 12:23am
Subject:Connector/NET commit: r1022 - in branches/1.0: . TestSuite mysqlclient
View as plain text  
Modified:
   branches/1.0/CHANGES
   branches/1.0/TestSuite/ConnectionTests.cs
   branches/1.0/mysqlclient/Connection.cs
   branches/1.0/mysqlclient/datareader.cs
Log:
Fixed problem that prevented commands from being executed from the state change handler. 
Not sure why you would want to do this but...  (bug #30964)

Modified: branches/1.0/CHANGES
===================================================================
--- branches/1.0/CHANGES	2007-09-21 22:22:20 UTC (rev 1021)
+++ branches/1.0/CHANGES	2007-09-21 22:23:49 UTC (rev 1022)
@@ -4,6 +4,8 @@
   - Changed from using Array.Copy to Buffer.BlockCopy in MySqlDataReader.GetBytes.  This
     helps with memory usage as we expect the source and destination arrays to not be
overlapping.
     (Bug #31090)
+  - Fixed problem that prevented commands from being executed from the state change
+    handler.  Not sure why you would want to do this but...  (bug #30964)
         
 Version 1.0.10
     Bugs

Modified: branches/1.0/TestSuite/ConnectionTests.cs
===================================================================
--- branches/1.0/TestSuite/ConnectionTests.cs	2007-09-21 22:22:20 UTC (rev 1021)
+++ branches/1.0/TestSuite/ConnectionTests.cs	2007-09-21 22:23:49 UTC (rev 1022)
@@ -339,5 +339,30 @@
                 Assert.Fail(e.Message);
             }
         }
+
+		/// <summary>
+		/// Bug #30964 StateChange imperfection 
+		/// </summary>
+		MySqlConnection rqConnection;
+		[Test]
+		public void RunningAQueryFromStateChangeHandler()
+		{
+			string connStr = GetConnectionString(true);
+			using (rqConnection = new MySqlConnection(connStr))
+			{
+				rqConnection.StateChange += new
StateChangeEventHandler(RunningQueryStateChangeHandler);
+				rqConnection.Open();
+			}
+		}
+
+		void RunningQueryStateChangeHandler(object sender, StateChangeEventArgs e)
+		{
+			if (e.CurrentState == ConnectionState.Open)
+			{
+				MySqlCommand cmd = new MySqlCommand("SELECT 1", rqConnection);
+				object o = cmd.ExecuteScalar();
+				Assert.AreEqual(1, o);
+			}
+		}
     }
 }

Modified: branches/1.0/mysqlclient/Connection.cs
===================================================================
--- branches/1.0/mysqlclient/Connection.cs	2007-09-21 22:22:20 UTC (rev 1021)
+++ branches/1.0/mysqlclient/Connection.cs	2007-09-21 22:23:49 UTC (rev 1022)
@@ -265,11 +265,11 @@
 			settings.Database = databaseName;
 		}
 
-		internal void SetState(ConnectionState newState)
+		internal void SetState(ConnectionState newState, bool broadcast)
 		{
 			ConnectionState oldState = state;
 			state = newState;
-			if (this.StateChange != null)
+			if (this.StateChange != null && broadcast)
 				StateChange(this, new StateChangeEventArgs(oldState, newState));
 		}
 
@@ -291,7 +291,7 @@
 			if (state == ConnectionState.Open)
 				throw new InvalidOperationException(Resources.ConnectionAlreadyOpen);
 
-			SetState(ConnectionState.Connecting);
+			SetState(ConnectionState.Connecting, true);
 
 			try
 			{
@@ -309,7 +309,7 @@
 			}
 			catch (Exception)
 			{
-				SetState(ConnectionState.Closed);
+				SetState(ConnectionState.Closed, true);
 				throw;
 			}
 
@@ -317,11 +317,12 @@
 			if (driver.Settings.UseOldSyntax)
 				Logger.LogWarning("You are using old syntax that will be removed in future
versions");
 
-			SetState(ConnectionState.Open);
+			SetState(ConnectionState.Open, false);
 			driver.Configure(this);
 			if (settings.Database != null && settings.Database.Length != 0)
 				ChangeDatabase(settings.Database);
 			hasBeenOpen = true;
+			SetState(ConnectionState.Open, true);
 		}
 
 		internal void Terminate()
@@ -335,7 +336,7 @@
 			}
 			catch (Exception) { }
 
-			SetState(ConnectionState.Closed);
+			SetState(ConnectionState.Closed, true);
 		}
 
 		/// <include file='docs/MySqlConnection.xml' path='docs/Close/*'/>

Modified: branches/1.0/mysqlclient/datareader.cs
===================================================================
--- branches/1.0/mysqlclient/datareader.cs	2007-09-21 22:22:20 UTC (rev 1021)
+++ branches/1.0/mysqlclient/datareader.cs	2007-09-21 22:23:49 UTC (rev 1022)
@@ -677,7 +677,7 @@
 				// When executing query statements, the result byte that is returned
 				// from MySql is the column count.  That is why we reference the LastResult
 				// property here to dimension our field array
-				connection.SetState(ConnectionState.Fetching);
+				connection.SetState(ConnectionState.Fetching, true);
 
 				// load in our field defs and set our internal variables so we know
 				// what we can do (canRead, hasRows)
@@ -688,7 +688,7 @@
 			catch (Exception ex)
 			{
 				if (ex is MySqlException && !(ex as MySqlException).IsFatal)
-					connection.SetState(ConnectionState.Open);
+					connection.SetState(ConnectionState.Open, true);
 				else
 					connection.Terminate();
 				throw;
@@ -696,7 +696,7 @@
 			finally
 			{
 				if (connection.State != ConnectionState.Closed && connection.State !=
ConnectionState.Open)
-					connection.SetState(ConnectionState.Open);
+					connection.SetState(ConnectionState.Open, true);
 			}
 		}
 
@@ -712,7 +712,7 @@
 			if (!canRead) return false;
 			readCount++;
 
-			connection.SetState(ConnectionState.Fetching);
+			connection.SetState(ConnectionState.Fetching, true);
 
 			try
 			{
@@ -743,7 +743,7 @@
 			}
 			finally
 			{
-				connection.SetState(ConnectionState.Open);
+				connection.SetState(ConnectionState.Open, true);
 			}
 			return true;
 		}

Thread
Connector/NET commit: r1022 - in branches/1.0: . TestSuite mysqlclientrburnett22 Sep