Modified:
branches/5.1/CHANGES
branches/5.1/Driver/Source/Field.cs
branches/5.1/Driver/Source/Types/MySqlBit.cs
branches/5.1/Driver/Source/Types/MySqlByte.cs
branches/5.1/TestSuite/Source/DataTypeTests.cs
Log:
- fixed code where we were returning bit(1) as boolean but mysql treats tinyint(1) as
boolean
(bug #27959)
Modified: branches/5.1/CHANGES
===================================================================
--- branches/5.1/CHANGES 2007-11-06 16:20:12 UTC (rev 1078)
+++ branches/5.1/CHANGES 2007-11-06 17:24:02 UTC (rev 1079)
@@ -14,7 +14,8 @@
- Fixed problem with installer where attempting to install over a failed uninstall
could
leave multiple clients registered in machine.config. (Bug #31731)
- Marked MySqlDbType.Datetime obsolete; replaced with DateTime (just corrected
capitalization) (Bug #26344)
-
+ - fixed code where we were returning bit(1) as boolean but mysql treats tinyint(1) as
boolean
+ (bug #27959)
Version 5.1.3 - 9/19/2007
- Fixed problem with using a stored procedure that takes a parameter as a select
routine
Modified: branches/5.1/Driver/Source/Field.cs
===================================================================
--- branches/5.1/Driver/Source/Field.cs 2007-11-06 16:20:12 UTC (rev 1078)
+++ branches/5.1/Driver/Source/Field.cs 2007-11-06 17:24:02 UTC (rev 1079)
@@ -277,7 +277,14 @@
public IMySqlValue GetValueObject()
{
- return GetIMySqlValue(Type);
+ IMySqlValue v = GetIMySqlValue(Type);
+ if (v is MySqlByte && ColumnLength == 1)
+ {
+ MySqlByte b = (MySqlByte)v;
+ b.TreatAsBoolean = true;
+ v = b;
+ }
+ return v;
}
public static IMySqlValue GetIMySqlValue(MySqlDbType type)
Modified: branches/5.1/Driver/Source/Types/MySqlBit.cs
===================================================================
--- branches/5.1/Driver/Source/Types/MySqlBit.cs 2007-11-06 16:20:12 UTC (rev 1078)
+++ branches/5.1/Driver/Source/Types/MySqlBit.cs 2007-11-06 17:24:02 UTC (rev 1079)
@@ -59,8 +59,6 @@
{
get
{
- if (mValue == 0 || mValue == 1)
- return Convert.ToBoolean(mValue);
return mValue;
}
}
@@ -69,8 +67,6 @@
{
get
{
- if (mValue == 0 || mValue == 1)
- return typeof(Boolean);
return typeof(UInt64);
}
}
Modified: branches/5.1/Driver/Source/Types/MySqlByte.cs
===================================================================
--- branches/5.1/Driver/Source/Types/MySqlByte.cs 2007-11-06 16:20:12 UTC (rev 1078)
+++ branches/5.1/Driver/Source/Types/MySqlByte.cs 2007-11-06 17:24:02 UTC (rev 1079)
@@ -29,18 +29,21 @@
{
private sbyte mValue;
private bool isNull;
+ private bool treatAsBool;
public MySqlByte(bool isNull)
{
this.isNull = isNull;
mValue = 0;
+ treatAsBool = false;
}
public MySqlByte(sbyte val)
{
this.isNull = false;
mValue = val;
- }
+ treatAsBool = false;
+ }
#region IMySqlValue Members
@@ -56,22 +59,38 @@
DbType IMySqlValue.DbType
{
- get { return DbType.SByte; }
+ get
+ {
+ if (TreatAsBoolean)
+ return DbType.Boolean;
+ return DbType.SByte;
+ }
}
object IMySqlValue.Value
{
- get { return mValue; }
+ get
+ {
+ if (TreatAsBoolean)
+ return Convert.ToBoolean(mValue);
+ return mValue;
+ }
}
public sbyte Value
{
get { return mValue; }
+ set { mValue = value; }
}
Type IMySqlValue.SystemType
{
- get { return typeof(sbyte); }
+ get
+ {
+ if (TreatAsBoolean)
+ return typeof(Boolean);
+ return typeof(sbyte);
+ }
}
string IMySqlValue.MySqlTypeName
@@ -98,7 +117,9 @@
else
{
string s = stream.ReadString(length);
- return new MySqlByte(SByte.Parse(s, NumberStyles.Any, CultureInfo.InvariantCulture));
+ MySqlByte b = new MySqlByte(SByte.Parse(s, NumberStyles.Any,
CultureInfo.InvariantCulture));
+ b.TreatAsBoolean = TreatAsBoolean;
+ return b;
}
}
@@ -109,6 +130,12 @@
#endregion
+ internal bool TreatAsBoolean
+ {
+ get { return treatAsBool; }
+ set { treatAsBool = value; }
+ }
+
internal static void SetDSInfo(DataTable dsTable)
{
// we use name indexing because this method will only be called
Modified: branches/5.1/TestSuite/Source/DataTypeTests.cs
===================================================================
--- branches/5.1/TestSuite/Source/DataTypeTests.cs 2007-11-06 16:20:12 UTC (rev 1078)
+++ branches/5.1/TestSuite/Source/DataTypeTests.cs 2007-11-06 17:24:02 UTC (rev 1079)
@@ -815,19 +815,27 @@
}
}
+ /// <summary>
+ /// Bug #27959 Bool datatype is not returned as System.Boolean by
MySqlDataAdapter
+ /// </summary>
[Test]
- public void BooleanForBit1()
+ public void Boolean()
{
if (version < new Version(5, 0)) return;
execSQL("DROP TABLE IF EXISTS Test");
- execSQL("CREATE TABLE Test (id INT, `on` BIT(1))");
- execSQL("INSERT INTO Test VALUES (1,1), (2,0)");
+ execSQL("CREATE TABLE Test (id INT, `on` BOOLEAN, v TINYINT(2))");
+ execSQL("INSERT INTO Test VALUES (1,1,1), (2,0,0)");
MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Test", conn);
DataTable dt = new DataTable();
da.Fill(dt);
Assert.AreEqual(typeof(Boolean), dt.Columns[1].DataType);
+ Assert.AreEqual(typeof(SByte), dt.Columns[2].DataType);
+ Assert.AreEqual(true, dt.Rows[0][1]);
+ Assert.AreEqual(false, dt.Rows[1][1]);
+ Assert.AreEqual(1, dt.Rows[0][2]);
+ Assert.AreEqual(0, dt.Rows[1][2]);
}
}
}
| Thread |
|---|
| • Connector/NET commit: r1079 - in branches/5.1: . Driver/Source Driver/Source/Types TestSuite/Source | rburnett | 6 Nov |