List:Commits« Previous MessageNext Message »
From:rburnett Date:May 2 2007 5:29pm
Subject:Connector/NET commit: r700 - in branches/5.0: . Driver/Source TestSuite/Source
View as plain text  
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/Sourcerburnett2 May