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 mysqlclient | rburnett | 22 Sep |