Modified:
trunk/CHANGES
trunk/Driver/Source/CommandBuilder.cs
trunk/Driver/Source/Types/MetaData.cs
trunk/TestSuite/Source/CommandBuilderTests.cs
Log:
Bug #27679 MySqlCommandBuilder.DeriveParameters ignores UNSIGNED flag
MySqlCommandBuilder.DeriveParameters was not taking unsigned or real_as_float into
consideration when determine final parameter data types.
Modified: trunk/CHANGES
===================================================================
--- trunk/CHANGES 2007-05-01 21:05:33 UTC (rev 698)
+++ trunk/CHANGES 2007-05-01 21:12:25 UTC (rev 699)
@@ -22,6 +22,7 @@
Bug #27240 Property value characterset not retrieved/fetched in conn wizard
Bug #25947 CreateFormat/CreateParameters Column of DataTypes collection incorrect for
CHAR
Bug #27765 Logging does not work
+ Bug #27679 MySqlCommandBuilder.DeriveParameters ignores UNSIGNED flag
Other changes
-------------
Modified: trunk/Driver/Source/CommandBuilder.cs
===================================================================
--- trunk/Driver/Source/CommandBuilder.cs 2007-05-01 21:05:33 UTC (rev 698)
+++ trunk/Driver/Source/CommandBuilder.cs 2007-05-01 21:12:25 UTC (rev 699)
@@ -116,6 +116,7 @@
DataSet ds =
command.Connection.ProcedureCache.GetProcedure(command.Connection, spName);
DataTable parameters = ds.Tables["Procedure Parameters"];
+ DataTable procTable = ds.Tables["Procedures"];
command.Parameters.Clear();
foreach (DataRow row in parameters.Rows)
{
@@ -123,8 +124,10 @@
p.ParameterName = row["PARAMETER_NAME"].ToString();
p.Direction = GetDirection(row["PARAMETER_MODE"].ToString(),
row["IS_RESULT"].ToString());
+ bool unsigned = row["FLAGS"].ToString().IndexOf("UNSIGNED") != -1;
+ bool real_as_float =
procTable.Rows[0]["SQL_MODE"].ToString().IndexOf("REAL_AS_FLOAT") != -1;
p.MySqlDbType = MetaData.NameToType(row["DATA_TYPE"].ToString(),
- false, false, command.Connection);
+ unsigned, real_as_float, command.Connection);
if (!row["CHARACTER_MAXIMUM_LENGTH"].Equals(DBNull.Value))
p.Size = (int)row["CHARACTER_MAXIMUM_LENGTH"];
if (!row["NUMERIC_PRECISION"].Equals(DBNull.Value))
Modified: trunk/Driver/Source/Types/MetaData.cs
===================================================================
--- trunk/Driver/Source/Types/MetaData.cs 2007-05-01 21:05:33 UTC (rev 698)
+++ trunk/Driver/Source/Types/MetaData.cs 2007-05-01 21:12:25 UTC (rev 699)
@@ -77,6 +77,7 @@
case "bit": return MySqlDbType.Bit;
case "tinyint":
+ return unsigned ? MySqlDbType.UByte : MySqlDbType.Byte;
case "bool":
case "boolean":
return MySqlDbType.Byte;
Modified: trunk/TestSuite/Source/CommandBuilderTests.cs
===================================================================
--- trunk/TestSuite/Source/CommandBuilderTests.cs 2007-05-01 21:05:33 UTC (rev 698)
+++ trunk/TestSuite/Source/CommandBuilderTests.cs 2007-05-01 21:12:25 UTC (rev 699)
@@ -338,7 +338,21 @@
Assert.AreEqual(1, dt.Rows[0]["id"]);
}
+ /// <summary>
+ /// Bug #27679 MySqlCommandBuilder.DeriveParameters ignores UNSIGNED flag
+ /// </summary>
+ [Category("5.0")]
+ [Test]
+ public void UnsignedParametersInSP()
+ {
+ execSQL("CREATE PROCEDURE spTest(testid TINYINT UNSIGNED) BEGIN SELECT
testid; END");
+ MySqlCommand cmd = new MySqlCommand("spTest", conn);
+ MySqlCommandBuilder.DeriveParameters(cmd);
+ Assert.AreEqual(MySqlDbType.UByte, cmd.Parameters[0].MySqlDbType);
+ Assert.AreEqual(DbType.Byte, cmd.Parameters[0].DbType);
+ }
+
[Test]
public void MultiUpdate()
{
| Thread |
|---|
| • Connector/NET commit: r699 - in trunk: . Driver/Source Driver/Source/Types TestSuite/Source | rburnett | 1 May |