List:Commits« Previous MessageNext Message »
From:rburnett Date:November 6 2007 6:24pm
Subject:Connector/NET commit: r1079 - in branches/5.1: . Driver/Source Driver/Source/Types TestSuite/Source
View as plain text  
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/Sourcerburnett6 Nov