Modified:
branches/5.0/CHANGES
branches/5.0/Driver/Source/StoredProcedure.cs
branches/5.0/TestSuite/Source/StoredProcedure.cs
Log:
Bug #27668 FillSchema and Stored Proc with an out parameter
Fixed this by only attempting to set the value of output parameters if the read was
successful. If the read is not successful, then the reason is that the user requested
SchemaOnly command behavior.
Modified: branches/5.0/CHANGES
===================================================================
--- branches/5.0/CHANGES 2007-05-01 21:12:25 UTC (rev 699)
+++ branches/5.0/CHANGES 2007-05-02 15:29:07 UTC (rev 700)
@@ -9,6 +9,7 @@
Bug #25947 CreateFormat/CreateParameters Column of DataTypes collection incorrect for
CHAR
Bug #27765 Logging does not work
Bug #27679 MySqlCommandBuilder.DeriveParameters ignores UNSIGNED flag
+ Bug #27668 FillSchema and Stored Proc with an out parameter
Other changes
-------------
Modified: branches/5.0/Driver/Source/StoredProcedure.cs
===================================================================
--- branches/5.0/Driver/Source/StoredProcedure.cs 2007-05-01 21:12:25 UTC (rev 699)
+++ branches/5.0/Driver/Source/StoredProcedure.cs 2007-05-02 15:29:07 UTC (rev 700)
@@ -209,14 +209,16 @@
reader.values[i] = MySqlField.GetIMySqlValue(Parameters[fieldName].MySqlDbType);
}
- reader.Read();
- for (int i = 0; i < reader.FieldCount; i++)
- {
- string fieldName = reader.GetName(i);
- fieldName = marker + fieldName.Remove(0, hash.Length + 1);
- Parameters[fieldName].Value = reader.GetValue(i);
- }
- reader.Close();
+ if (reader.Read())
+ {
+ for (int i = 0; i < reader.FieldCount; i++)
+ {
+ string fieldName = reader.GetName(i);
+ fieldName = marker + fieldName.Remove(0, hash.Length + 1);
+ Parameters[fieldName].Value = reader.GetValue(i);
+ }
+ }
+ reader.Close();
}
}
}
Modified: branches/5.0/TestSuite/Source/StoredProcedure.cs
===================================================================
--- branches/5.0/TestSuite/Source/StoredProcedure.cs 2007-05-01 21:12:25 UTC (rev 699)
+++ branches/5.0/TestSuite/Source/StoredProcedure.cs 2007-05-02 15:29:07 UTC (rev 700)
@@ -343,7 +343,7 @@
Assert.IsNull(fillError);
}
- private void da_FillError(object sender, FillErrorEventArgs e)
+ private static void da_FillError(object sender, FillErrorEventArgs e)
{
fillError = e.Errors.Message;
e.Continue = true;
@@ -508,7 +508,7 @@
cmd.CommandType = CommandType.StoredProcedure;
object val = cmd.ExecuteScalar();
Assert.AreEqual(1, val, "Checking value");
- Assert.IsTrue(val is System.Int32, "Checking type");
+ Assert.IsTrue(val is Int32, "Checking type");
}
/// <summary>
@@ -845,7 +845,7 @@
execSQL("CREATE PROCEDURE spTest(p int) BEGIN SELECT p; END");
MySqlParameter param1;
MySqlCommand command = new MySqlCommand("spTest", conn);
- command.CommandType = System.Data.CommandType.StoredProcedure;
+ command.CommandType = CommandType.StoredProcedure;
param1 = command.Parameters.Add("?p", MySqlDbType.Int32);
param1.Value = 3;
@@ -1080,6 +1080,7 @@
/// <summary>
/// Bug #25609 MySqlDataAdapter.FillSchema
+ /// Bug #27668 FillSchema and Stored Proc with an out parameter
/// </summary>
[Test]
public void GetSchema()
@@ -1099,6 +1100,23 @@
DataTable schema = new DataTable();
da.FillSchema(schema, SchemaType.Source);
Assert.AreEqual(2, schema.Columns.Count);
+
+ //Bug #27668 FillSchema and Stored Proc with an out parameter
+ execSQL("DROP TABLE IF EXISTS test");
+ execSQL(@"CREATE TABLE test(id INT AUTO_INCREMENT, PRIMARY KEY (id)) ");
+ execSQL("DROP PROCEDURE IF EXISTS spTest");
+ execSQL(@"CREATE PROCEDURE spTest (OUT id INT)
+ BEGIN INSERT INTO test VALUES (NULL); SET id=520; END");
+
+ cmd = new MySqlCommand("spTest", conn);
+ cmd.CommandType = CommandType.StoredProcedure;
+ cmd.Parameters.Add("?id", MySqlDbType.Int32);
+ cmd.Parameters[0].Direction = ParameterDirection.Output;
+ da = new MySqlDataAdapter(cmd);
+ DataTable dt = new DataTable();
+ cmd.ExecuteNonQuery();
+ da.Fill(dt);
+ da.FillSchema(dt, SchemaType.Mapped);
}
catch (Exception ex)
{
@@ -1208,7 +1226,7 @@
execSQL(@"CREATE PROCEDURE spTest(in _val bigint unsigned)
BEGIN insert into test set f1=_val; END");
- DbCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
+ DbCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "spTest";
| Thread |
|---|
| • Connector/NET commit: r700 - in branches/5.0: . Driver/Source TestSuite/Source | rburnett | 2 May |