List:Commits« Previous MessageNext Message »
From:rburnett Date:September 8 2008 8:50pm
Subject:Connector/NET commit: r1408 - in branches/5.2/MySql.Data: Provider/Source/Types Tests/Source
View as plain text  
Modified:
   branches/5.2/MySql.Data/Provider/Source/Types/MySqlTime.cs
   branches/5.2/MySql.Data/Tests/Source/PreparedStatements.cs
Log:
fixed time case that was not handled properly by the initial fix.  The case was where the
hour component was zero and the minute was less than zero.  we've now applied a better
fix and adding more test cases.  thanks Michal!  (bug #39275)

Modified: branches/5.2/MySql.Data/Provider/Source/Types/MySqlTime.cs
===================================================================
--- branches/5.2/MySql.Data/Provider/Source/Types/MySqlTime.cs	2008-09-08 18:33:05 UTC
(rev 1407)
+++ branches/5.2/MySql.Data/Provider/Source/Types/MySqlTime.cs	2008-09-08 18:50:51 UTC
(rev 1408)
@@ -84,11 +84,13 @@
 				throw new MySqlException("Only TimeSpan objects can be serialized by MySqlTimeSpan");
 
 			TimeSpan ts = (TimeSpan)val;
+            bool negative = ts.TotalMilliseconds < 0;
+            ts = ts.Duration();
+
 			if (binary)
 			{
 				stream.WriteByte(8);
-				stream.WriteByte((byte)(ts.TotalSeconds < 0 ? 1 : 0));
-                ts = ts.Duration();
+				stream.WriteByte((byte)(negative ? 1 : 0));
 				stream.WriteInteger(ts.Days, 4);
 				stream.WriteByte((byte)ts.Hours);
 				stream.WriteByte((byte)ts.Minutes);
@@ -96,11 +98,8 @@
 			}
 			else
 			{
-                string s = String.Format("'{0} {1:00}:{2:00}:{3:00}.{4}'",
-                    ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds);
-                if (ts.Days == 0)
-                    s = String.Format("'{0:00}:{1:00}:{2:00}.{3}'",
-			            ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds);
+                String s = String.Format("'{0}{1} {2:00}:{3:00}:{4:00}.{5}'",
+                    negative ? "-" : "", ts.Days, ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds);
 
 				stream.WriteStringNoNull(s);
 			}

Modified: branches/5.2/MySql.Data/Tests/Source/PreparedStatements.cs
===================================================================
--- branches/5.2/MySql.Data/Tests/Source/PreparedStatements.cs	2008-09-08 18:33:05 UTC
(rev 1407)
+++ branches/5.2/MySql.Data/Tests/Source/PreparedStatements.cs	2008-09-08 18:50:51 UTC
(rev 1408)
@@ -849,31 +849,30 @@
 
             MySqlCommand cmd = new MySqlCommand(@"INSERT INTO Test VALUES (1, @t)",
conn);
             cmd.Parameters.Add("@t", MySqlDbType.Time);
-            TimeSpan t1 = new TimeSpan(-10, 0, 0);
-            TimeSpan t2 = new TimeSpan(2, -5, 10, 20);
-            TimeSpan t3 = new TimeSpan(20, -10, 10);
+
+            TimeSpan[] times = new TimeSpan[8] { 
+                new TimeSpan(-10, 0, 0), new TimeSpan(2, -5, 10, 20),
+                new TimeSpan(20, -10, 10), new TimeSpan(0, -15, 25),
+                new TimeSpan(-4, -10, 20, -10), new TimeSpan(3, 17, 23, 6),
+                new TimeSpan(-1,-2,-3,-4), new TimeSpan(0,0,0,-15) };
             if (prepared)
                 cmd.Prepare();
-            cmd.Parameters[0].Value = t1;
-            cmd.ExecuteNonQuery();
-            cmd.Parameters[0].Value = t2;
-            cmd.ExecuteNonQuery();
-            cmd.Parameters[0].Value = t3;
-            cmd.ExecuteNonQuery();
+            foreach (TimeSpan ts in times)
+            {
+                cmd.Parameters[0].Value = ts;
+                cmd.ExecuteNonQuery();
+            }
 
             cmd.CommandText = "SELECT * FROM Test";
             cmd.Parameters.Clear();
             using (MySqlDataReader reader = cmd.ExecuteReader())
             {
-                reader.Read();
-                TimeSpan t = reader.GetTimeSpan(1);
-                Assert.AreEqual(t1, t);
-                reader.Read();
-                t = reader.GetTimeSpan(1);
-                Assert.AreEqual(t2, t);
-                reader.Read();
-                t = reader.GetTimeSpan(1);
-                Assert.AreEqual(t3, t);
+                foreach (TimeSpan ts in times)
+                {
+                    reader.Read();
+                    TimeSpan t = reader.GetTimeSpan(1);
+                    Assert.AreEqual(ts, t);
+                }
             }
         }
 

Thread
Connector/NET commit: r1408 - in branches/5.2/MySql.Data: Provider/Source/Types Tests/Sourcerburnett8 Sep