From: Date: May 19 2006 5:56pm
Subject: Connector/NET commit: r238 - in branches/1.0: . TestSuite mysqlclient
List-Archive: http://lists.mysql.com/commits/6645
X-Bug: 16934
Message-Id: <200605191556.k4JFuZE1018978@bk-internal.mysql.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Modified:
branches/1.0/CHANGES
branches/1.0/MySql.Data.csproj
branches/1.0/TestSuite/DataTypeTests.cs
branches/1.0/TestSuite/MySql.Data.Tests.csproj
branches/1.0/TestSuite/PreparedStatements.cs
branches/1.0/mysqlclient/parameter.cs
Log:
Bug #16934 Unsigned values > 2^63 (UInt64) cannot be used in prepared statements
The problem here is that we were not sending the proper type codes when using unsigned values.
This is fixed by fixing the GetPSType() method to return the write type code with the unsigned bit enabled.
Modified: branches/1.0/CHANGES
===================================================================
--- branches/1.0/CHANGES 2006-05-19 13:40:34 UTC (rev 237)
+++ branches/1.0/CHANGES 2006-05-19 15:56:33 UTC (rev 238)
@@ -7,6 +7,7 @@
Bug #19261 Supplying Input Parameters [fixed]
Bug #19481 Where clause with datetime throws exception [any warning causes the exception] [fixed]
Bug #15077 Error MySqlCommandBuilder.DeriveParameters for sp without parameters. [fixed]
+ Bug #16934 Unsigned values > 2^63 (UInt64) cannot be used in prepared statements
x-xx-05 - Version 1.0.7
Modified: branches/1.0/MySql.Data.csproj
===================================================================
--- branches/1.0/MySql.Data.csproj 2006-05-19 13:40:34 UTC (rev 237)
+++ branches/1.0/MySql.Data.csproj 2006-05-19 15:56:33 UTC (rev 238)
@@ -28,7 +28,7 @@
- bin\net-1.1\Debug\
+ bin\net-2.0\Debug\
false
285212672
false
@@ -50,7 +50,7 @@
prompt
- bin\net-1.1\Release\
+ bin\net-2.0\Release\
false
285212672
false
Modified: branches/1.0/TestSuite/DataTypeTests.cs
===================================================================
--- branches/1.0/TestSuite/DataTypeTests.cs 2006-05-19 13:40:34 UTC (rev 237)
+++ branches/1.0/TestSuite/DataTypeTests.cs 2006-05-19 15:56:33 UTC (rev 238)
@@ -1,21 +1,21 @@
-// Copyright (C) 2004-2005 MySQL AB
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as published by
-// the Free Software Foundation
-//
-// There are special exceptions to the terms and conditions of the GPL
-// as it is applied to this software. View the full text of the
-// exception in file EXCEPTIONS in the directory of this software
-// distribution.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
+// Copyright (C) 2004-2006 MySQL AB
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License version 2 as published by
+// the Free Software Foundation
+//
+// There are special exceptions to the terms and conditions of the GPL
+// as it is applied to this software. View the full text of the
+// exception in file EXCEPTIONS in the directory of this software
+// distribution.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
using System;
Modified: branches/1.0/TestSuite/MySql.Data.Tests.csproj
===================================================================
--- branches/1.0/TestSuite/MySql.Data.Tests.csproj 2006-05-19 13:40:34 UTC (rev 237)
+++ branches/1.0/TestSuite/MySql.Data.Tests.csproj 2006-05-19 15:56:33 UTC (rev 238)
@@ -75,9 +75,9 @@
prompt
-
- MySQL.Data
- ..\bin\net-1.1\Debug\MySQL.Data.dll
+
+ False
+ ..\bin\net-2.0\Debug\MySql.Data.dll
nunit.framework
Modified: branches/1.0/TestSuite/PreparedStatements.cs
===================================================================
--- branches/1.0/TestSuite/PreparedStatements.cs 2006-05-19 13:40:34 UTC (rev 237)
+++ branches/1.0/TestSuite/PreparedStatements.cs 2006-05-19 15:56:33 UTC (rev 238)
@@ -618,5 +618,51 @@
count = command.ExecuteScalar();
Assert.AreEqual(1, count);
}
+
+ ///
+ /// Bug #16934 Unsigned values > 2^63 (UInt64) cannot be used in prepared statements
+ ///
+ [Test]
+ [Category("4.1")]
+ public void UnsignedValues()
+ {
+ execSQL("DROP TABLE IF EXISTS test");
+ execSQL("CREATE TABLE test (ulVal BIGINT UNSIGNED, lVal INT UNSIGNED, " +
+ "mVal MEDIUMINT UNSIGNED, sVal SMALLINT UNSIGNED)");
+
+ MySqlCommand cmd = new MySqlCommand("INSERT INTO test VALUES (?ulVal, " +
+ "?lVal, ?mVal, ?sVal)", conn);
+ cmd.Parameters.Add("?ulVal", MySqlDbType.UInt64);
+ cmd.Parameters.Add("?lVal", MySqlDbType.UInt32);
+ cmd.Parameters.Add("?mVal", MySqlDbType.UInt32);
+ cmd.Parameters.Add("?sVal", MySqlDbType.UInt16);
+ cmd.Prepare();
+ cmd.Parameters[0].Value = UInt64.MaxValue;
+ cmd.Parameters[1].Value = UInt32.MaxValue;
+ cmd.Parameters[2].Value = 16777215;
+ cmd.Parameters[3].Value = UInt16.MaxValue;
+ Assert.AreEqual(1, cmd.ExecuteNonQuery());
+ cmd.CommandText = "SELECT * FROM test";
+ cmd.CommandType = CommandType.Text;
+ MySqlDataReader reader = null;
+ try
+ {
+ reader = cmd.ExecuteReader();
+ reader.Read();
+ Assert.AreEqual(UInt64.MaxValue, reader.GetUInt64(0));
+ Assert.AreEqual(UInt32.MaxValue, reader.GetUInt32(1));
+ Assert.AreEqual(16777215, reader.GetUInt32(2));
+ Assert.AreEqual(UInt16.MaxValue, reader.GetUInt16(3));
+ }
+ catch (Exception ex)
+ {
+ Assert.Fail(ex.Message);
+ }
+ finally
+ {
+ if (reader != null)
+ reader.Close();
+ }
+ }
}
}
Modified: branches/1.0/mysqlclient/parameter.cs
===================================================================
--- branches/1.0/mysqlclient/parameter.cs 2006-05-19 13:40:34 UTC (rev 237)
+++ branches/1.0/mysqlclient/parameter.cs 2006-05-19 15:56:33 UTC (rev 238)
@@ -304,12 +304,23 @@
internal int GetPSType()
{
- if (this.mySqlDbType == MySqlDbType.Bit)
- return (int)MySqlDbType.Int64 | 0x8000;
- else if (this.mySqlDbType == MySqlDbType.UByte)
- return (int)MySqlDbType.Byte | 0x8000;
- else
- return (int)this.mySqlDbType;
+ switch (mySqlDbType)
+ {
+ case MySqlDbType.Bit:
+ return (int)MySqlDbType.Int64 | 0x8000;
+ case MySqlDbType.UByte:
+ return (int)MySqlDbType.Byte | 0x8000;
+ case MySqlDbType.UInt64:
+ return (int)MySqlDbType.Int64 | 0x8000;
+ case MySqlDbType.UInt32:
+ return (int)MySqlDbType.Int32 | 0x8000;
+ case MySqlDbType.UInt24:
+ return (int)MySqlDbType.Int64 | 0x8000;
+ case MySqlDbType.UInt16:
+ return (int)MySqlDbType.Int16 | 0x8000;
+ default:
+ return (int)this.mySqlDbType;
+ }
}
internal void Serialize( PacketWriter writer, bool binary )