List:Commits« Previous MessageNext Message »
From:rburnett Date:July 22 2008 3:29pm
Subject:Connector/NET commit: r1347 - in branches/5.0: . Driver/Source/Types TestSuite/Source
View as plain text  
Modified:
   branches/5.0/CHANGES
   branches/5.0/Driver/Source/Types/MySqlDouble.cs
   branches/5.0/Driver/Source/Types/MySqlSingle.cs
   branches/5.0/TestSuite/Source/DataTypeTests.cs
Log:
Fixed writing of single and double values to write out the proper number of digits (bug
#33322)


Modified: branches/5.0/CHANGES
===================================================================
--- branches/5.0/CHANGES	2008-07-21 21:48:23 UTC (rev 1346)
+++ branches/5.0/CHANGES	2008-07-22 13:29:01 UTC (rev 1347)
@@ -11,6 +11,8 @@
     close the connection.  (bug #37991)
   - Fixed problem with byte and unsigned byte values writing more too many bytes when
     using prepared statements (bug #37968)   
+  - Fixed writing of single and double values to write out the proper number of digits
+    (bug #33322)
    
 Version 5.0.9 - 4/14/08
 

Modified: branches/5.0/Driver/Source/Types/MySqlDouble.cs
===================================================================
--- branches/5.0/Driver/Source/Types/MySqlDouble.cs	2008-07-21 21:48:23 UTC (rev 1346)
+++ branches/5.0/Driver/Source/Types/MySqlDouble.cs	2008-07-22 13:29:01 UTC (rev 1347)
@@ -83,11 +83,10 @@
 		void IMySqlValue.WriteValue(MySqlStream stream, bool binary, object val, int length)
 		{
 			double v = Convert.ToDouble(val);
-			if (binary)
-				stream.Write(BitConverter.GetBytes(v));
-			else
-				stream.WriteStringNoNull(v.ToString(
-					 CultureInfo.InvariantCulture));
+            if (binary)
+                stream.Write(BitConverter.GetBytes(v));
+            else
+                stream.WriteStringNoNull(v.ToString("R", CultureInfo.InvariantCulture));
 		}
 
 		IMySqlValue IMySqlValue.ReadValue(MySqlStream stream, long length,
@@ -102,7 +101,7 @@
 				stream.Read(b, 0, 8);
 				return new MySqlDouble(BitConverter.ToDouble(b, 0));
 			}
-			return new MySqlDouble(Double.Parse(stream.ReadString(length),
+			return new MySqlDouble(Double.Parse(stream.ReadString(length), 
 					 CultureInfo.InvariantCulture));
 		}
 

Modified: branches/5.0/Driver/Source/Types/MySqlSingle.cs
===================================================================
--- branches/5.0/Driver/Source/Types/MySqlSingle.cs	2008-07-21 21:48:23 UTC (rev 1346)
+++ branches/5.0/Driver/Source/Types/MySqlSingle.cs	2008-07-22 13:29:01 UTC (rev 1347)
@@ -85,7 +85,7 @@
 			if (binary)
 				stream.Write(BitConverter.GetBytes(v));
 			else
-				stream.WriteStringNoNull(v.ToString(
+				stream.WriteStringNoNull(v.ToString("R",
 					 CultureInfo.InvariantCulture));
 		}
 

Modified: branches/5.0/TestSuite/Source/DataTypeTests.cs
===================================================================
--- branches/5.0/TestSuite/Source/DataTypeTests.cs	2008-07-21 21:48:23 UTC (rev 1346)
+++ branches/5.0/TestSuite/Source/DataTypeTests.cs	2008-07-22 13:29:01 UTC (rev 1347)
@@ -759,5 +759,28 @@
 				Assert.AreEqual(0, reader.GetValue(0));
 			}
 		}
+
+        /// <summary>
+        /// Bug #33322 Incorrect Double/Single value saved to MySQL database using MySQL
Connector for  
+        /// </summary>
+        [Test]
+        public void StoringAndRetrievingDouble()
+        {
+            execSQL("DROP TABLE IF EXISTS Test");
+            execSQL("CREATE TABLE Test (v DOUBLE(25,20) NOT NULL)");
+
+            MySqlCommand cmd = new MySqlCommand("INSERT INTO Test VALUES (?v)", conn);
+            cmd.Parameters.Add("?v", MySqlDbType.Double);
+            cmd.Parameters[0].Value = Math.PI;
+            cmd.ExecuteNonQuery();
+
+            cmd.CommandText = "SELECT * FROM Test";
+            using (MySqlDataReader reader = cmd.ExecuteReader())
+            {
+                reader.Read();
+                double d = reader.GetDouble(0);
+                Assert.AreEqual(Math.PI, d);
+            }
+        }
 	}
 }

Thread
Connector/NET commit: r1347 - in branches/5.0: . Driver/Source/Types TestSuite/Sourcerburnett22 Jul