List:Commits« Previous MessageNext Message »
From:rburnett Date:September 5 2008 6:43pm
Subject:Connector/NET commit: r1405 - in branches/5.2: . MySql.Data/Provider/Source/Types MySql.Data/Tests/Source
View as plain text  
Modified:
   branches/5.2/CHANGES
   branches/5.2/MySql.Data/Provider/Source/Types/MySqlTime.cs
   branches/5.2/MySql.Data/Tests/Source/PreparedStatements.cs
Log:
- fixed time data type so that negative values are handled properly (bug #39275)


Modified: branches/5.2/CHANGES
===================================================================
--- branches/5.2/CHANGES	2008-09-05 15:34:43 UTC (rev 1404)
+++ branches/5.2/CHANGES	2008-09-05 16:43:27 UTC (rev 1405)
@@ -4,6 +4,7 @@
 - backported fix for lingering problem related to bug #37239.  If two columns had the same name but
   different case then an exception would be thrown.  
 - fixed stored procedure parameter parsing when used inside server explorer.  (bug #39252)
+- fixed time data type so that negative values are handled properly (bug #39275)
   
 Version 5.2.3 - 8/14/08
 - Increased the speed of MySqlDataReader.GetOrdinal dramatically by using a couple

Modified: branches/5.2/MySql.Data/Provider/Source/Types/MySqlTime.cs
===================================================================
--- branches/5.2/MySql.Data/Provider/Source/Types/MySqlTime.cs	2008-09-05 15:34:43 UTC (rev 1404)
+++ branches/5.2/MySql.Data/Provider/Source/Types/MySqlTime.cs	2008-09-05 16:43:27 UTC (rev 1405)
@@ -88,6 +88,7 @@
 			{
 				stream.WriteByte(8);
 				stream.WriteByte((byte)(ts.TotalSeconds < 0 ? 1 : 0));
+                ts = ts.Duration();
 				stream.WriteInteger(ts.Days, 4);
 				stream.WriteByte((byte)ts.Hours);
 				stream.WriteByte((byte)ts.Minutes);
@@ -95,8 +96,13 @@
 			}
 			else
 			{
-				stream.WriteStringNoNull(String.Format("'{0} {1:00}:{2:00}:{3:00}.{4}'",
-			  ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds));
+                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);
+
+				stream.WriteStringNoNull(s);
 			}
 		}
 

Modified: branches/5.2/MySql.Data/Tests/Source/PreparedStatements.cs
===================================================================
--- branches/5.2/MySql.Data/Tests/Source/PreparedStatements.cs	2008-09-05 15:34:43 UTC (rev 1404)
+++ branches/5.2/MySql.Data/Tests/Source/PreparedStatements.cs	2008-09-05 16:43:27 UTC (rev 1405)
@@ -818,6 +818,60 @@
             Assert.AreEqual(2, dt.Rows[0][2]);
             Assert.AreEqual(3, dt.Rows[0][3]);
         }
+
+        /// <summary>
+        /// Bug #39275	Inserting negative time value through the use of MySqlParameter throws exception
+        /// </summary>
+        [Test]
+        public void NegativeTimePrepared()
+        {
+            NegativeTime(true);
+        }
+
+        /// <summary>
+        /// Bug #39275	Inserting negative time value through the use of MySqlParameter throws exception
+        /// </summary>
+        [Test]
+        public void NegativeTimeNonPrepared()
+        {
+            NegativeTime(false);
+        }
+
+        [Test]
+        public void NegativeTime(bool prepared)
+        {
+            execSQL("DROP TABLE IF EXISTS Test");
+            execSQL(@"CREATE TABLE Test(id int, t time)");
+
+            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);
+            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();
+
+            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);
+            }
+        }
     }
 
     #region Configs

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