Modified:
branches/1.0/CHANGES
branches/1.0/TestSuite/StoredProcedure.cs
branches/1.0/mysqlclient/parameter_collection.cs
Log:
Bug #13927 Multiple Records to same Table in Transaction Problem [fixed]
Also added some other unit tests to the stored procedure test fixture
Modified: branches/1.0/CHANGES
===================================================================
--- branches/1.0/CHANGES 2005-11-15 07:13:28 UTC (rev 196)
+++ branches/1.0/CHANGES 2005-11-16 14:59:51 UTC (rev 197)
@@ -10,7 +10,8 @@
Bug #13632 the MySQLCommandBuilder.deriveparameters has not been updated for MySQL 5
Bug #13753 Exception calling stored procedure with special characters in parameters
Bug #11386 Numeric parameters with Precision and Scale not taken into account by
Connector [added test case]
- Bug #6902 Errors in parsing stored procedure parameters [fixed before, refixed]
+ Bug #6902 Errors in parsing stored procedure parameters [fixed before, refixed]
+ Bug #13927 Multiple Records to same Table in Transaction Problem [fixed]
Other changes
-------------------------
Modified: branches/1.0/TestSuite/StoredProcedure.cs
===================================================================
--- branches/1.0/TestSuite/StoredProcedure.cs 2005-11-15 07:13:28 UTC (rev 196)
+++ branches/1.0/TestSuite/StoredProcedure.cs 2005-11-16 14:59:51 UTC (rev 197)
@@ -550,6 +550,37 @@
}
/// <summary>
+ /// Bug #11386 Numeric parameters with Precision and Scale not taken into account by
Connector
+ /// </summary>
+ [Test]
+ public void DecimalAsParameter()
+ {
+ execSQL("CREATE PROCEDURE spTest(IN d DECIMAL(19,4)) BEGIN SELECT d; END");
+
+ MySqlCommand cmd = new MySqlCommand("spTest", conn);
+ cmd.CommandType = CommandType.StoredProcedure;
+ cmd.Parameters.Add("?d", 21);
+ decimal d = (decimal)cmd.ExecuteScalar();
+ Assert.AreEqual(21, d);
+ }
+
+ /// <summary>
+ /// Bug #6902 Errors in parsing stored procedure parameters
+ /// </summary>
+ [Test]
+ public void ParmWithCharacterSet()
+ {
+ execSQL("CREATE PROCEDURE spTest(P longtext character set utf8) " +
+ "BEGIN SELECT P; END");
+
+ MySqlCommand cmd = new MySqlCommand("spTest", conn);
+ cmd.CommandType = CommandType.StoredProcedure;
+ cmd.Parameters.Add("?P", "This is my value");
+ string p = (string)cmd.ExecuteScalar();
+ Assert.AreEqual("This is my value", p);
+ }
+
+ /// <summary>
/// Bug #13753 Exception calling stored procedure with special characters in
parameters
/// </summary>
[Test]
@@ -577,5 +608,51 @@
}
}
+ [Test]
+ [Category("NotWorking")]
+ public void CallingSPWithPrepare()
+ {
+ execSQL("DROP PROCEDURE IF EXISTS spTest");
+ execSQL("CREATE PROCEDURE spTest(P int) BEGIN SELECT P; END");
+
+ MySqlCommand cmd = new MySqlCommand("spTest", conn);
+ cmd.CommandType = CommandType.StoredProcedure;
+ cmd.Parameters.Add("?P", 33);
+ cmd.Prepare();
+
+ int p = (int)cmd.ExecuteScalar();
+ Assert.AreEqual(33, p);
+ }
+
+ /// <summary>
+ /// Bug #13927 Multiple Records to same Table in Transaction Problem
+ /// </summary>
+ [Test]
+ [Category("5.0")]
+ public void MultileRecords()
+ {
+ execSQL("DROP PROCEDURE IF EXISTS spTest");
+ execSQL("CREATE PROCEDURE spTest(id int, str VARCHAR(45)) BEGIN INSERT INTO test
VALUES(id, str); END");
+
+ MySqlCommand cmd = new MySqlCommand("spTest", conn);
+ cmd.CommandType = CommandType.StoredProcedure;
+
+ cmd.Parameters.Add("?id", 1);
+ cmd.Parameters.Add("?str", "First record");
+ cmd.ExecuteNonQuery();
+
+ cmd.Parameters.Add("?id", 2);
+ cmd.Parameters.Add("?str", "Second record");
+ cmd.ExecuteNonQuery();
+
+ MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM test", conn);
+ DataTable dt = new DataTable();
+ da.Fill(dt);
+
+ Assert.AreEqual(1, dt.Rows[0]["id"]);
+ Assert.AreEqual(2, dt.Rows[1]["id"]);
+ Assert.AreEqual("First record", dt.Rows[0]["name"]);
+ Assert.AreEqual("Second record", dt.Rows[1]["name"]);
+ }
}
}
Modified: branches/1.0/mysqlclient/parameter_collection.cs
===================================================================
--- branches/1.0/mysqlclient/parameter_collection.cs 2005-11-15 07:13:28 UTC (rev 196)
+++ branches/1.0/mysqlclient/parameter_collection.cs 2005-11-16 14:59:51 UTC (rev 197)
@@ -276,6 +276,23 @@
if (value == null)
throw new ArgumentException("The MySqlParameterCollection only accepts non-null
MySqlParameter type objects.", "value");
+ string inComingName = value.ParameterName.ToLower();
+ if (inComingName[0] == paramMarker)
+ inComingName = inComingName.Substring(1, inComingName.Length-1);
+
+ for (int i=0; i < _parms.Count; i++)
+ {
+ MySqlParameter p = (MySqlParameter)_parms[i];
+ string name = p.ParameterName.ToLower();
+ if (name[0] == paramMarker)
+ name = name.Substring(1, name.Length-1);
+ if (name == inComingName)
+ {
+ _parms[i] = value;
+ return value;
+ }
+ }
+
_parms.Add(value);
return value;
}
| Thread |
|---|
| • Connector/NET commit: r197 - in branches/1.0: . TestSuite mysqlclient | rburnett | 16 Nov |