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/Source | rburnett | 5 Sep |