From: Date: May 1 2007 11:12pm Subject: Connector/NET commit: r699 - in trunk: . Driver/Source Driver/Source/Types TestSuite/Source List-Archive: http://lists.mysql.com/commits/25854 X-Bug: 27679 Message-Id: <200705012112.l41LCQR2003977@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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"]); } + /// + /// Bug #27679 MySqlCommandBuilder.DeriveParameters ignores UNSIGNED flag + /// + [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() {