List:Internals« Previous MessageNext Message »
From:rburnett Date:November 16 2005 3:59pm
Subject:Connector/NET commit: r197 - in branches/1.0: . TestSuite mysqlclient
View as plain text  
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 mysqlclientrburnett16 Nov