List:Commits« Previous MessageNext Message »
From:Tor Didriksen Date:May 19 2010 9:27am
Subject:bzr push into mysql-5.1-bugteam branch (tor.didriksen:3386 to 3387)
View as plain text  
 3387 Tor Didriksen	2010-05-19
      Backport from next-mr-bugfixing of tor.didriksen@stripped
      
      Bug #50087 Interval arithmetic for Event_queue_element is not portable.
      
      Subtraction of two unsigned months yielded a (very large) positive value.
      Conversion of this to a signed value was not necessarily well defined.
                    
      Solution: do the subtraction on signed values.
     @ mysql-test/r/events_scheduling.result
        Add test case.
     @ mysql-test/t/events_scheduling.test
        Add test case.
     @ sql/event_data_objects.cc
        Convert month to signed before doing the subtraction.

    modified:
      mysql-test/r/events_scheduling.result
      mysql-test/t/events_scheduling.test
      sql/event_data_objects.cc
 3386 Sergey Glukhov	2010-05-18
      Bug#48729 SELECT ... FROM INFORMATION_SCHEMA.ROUTINES causes memory to grow
      Analysis showed that in case of accessing I_S table
      ROUTINES we perform unnecessary allocations
      with get_field() function for every processed row that
      in their turn causes significant memory growth.
      the fix is to avoid use of get_field().
     @ sql/sql_show.cc
        Functions store_schema_proc() are changed
        to avoid use of get_field() function.

    modified:
      sql/sql_show.cc
=== modified file 'mysql-test/r/events_scheduling.result'
--- a/mysql-test/r/events_scheduling.result	2008-12-16 18:09:09 +0000
+++ b/mysql-test/r/events_scheduling.result	2010-05-19 09:18:59 +0000
@@ -82,5 +82,24 @@ DROP TABLE table_1;
 DROP TABLE table_2;
 DROP TABLE table_3;
 DROP TABLE table_4;
+
+Bug #50087 Interval arithmetic for Event_queue_element is not portable.
+
+CREATE TABLE t1(a int);
+CREATE EVENT e1 ON SCHEDULE EVERY 1 MONTH
+STARTS NOW() - INTERVAL 1 MONTH
+ENDS NOW() + INTERVAL 2 MONTH
+ON COMPLETION PRESERVE
+DO
+INSERT INTO t1 VALUES (1);
+CREATE EVENT e2 ON SCHEDULE EVERY 1 MONTH
+STARTS NOW()
+ENDS NOW() + INTERVAL 11 MONTH
+ON COMPLETION PRESERVE
+DO
+INSERT INTO t1 VALUES (1);
+DROP TABLE t1;
+DROP EVENT e1;
+DROP EVENT e2;
 DROP DATABASE events_test;
 SET GLOBAL event_scheduler=@event_scheduler;

=== modified file 'mysql-test/t/events_scheduling.test'
--- a/mysql-test/t/events_scheduling.test	2008-12-16 18:09:09 +0000
+++ b/mysql-test/t/events_scheduling.test	2010-05-19 09:18:59 +0000
@@ -108,6 +108,32 @@ DROP TABLE table_1;
 DROP TABLE table_2;
 DROP TABLE table_3;
 DROP TABLE table_4;
+
+-- echo
+-- echo Bug #50087 Interval arithmetic for Event_queue_element is not portable.
+-- echo
+
+CREATE TABLE t1(a int);
+
+CREATE EVENT e1 ON SCHEDULE EVERY 1 MONTH
+STARTS NOW() - INTERVAL 1 MONTH
+ENDS NOW() + INTERVAL 2 MONTH
+ON COMPLETION PRESERVE
+DO
+  INSERT INTO t1 VALUES (1);
+
+CREATE EVENT e2 ON SCHEDULE EVERY 1 MONTH
+STARTS NOW()
+ENDS NOW() + INTERVAL 11 MONTH
+ON COMPLETION PRESERVE
+DO
+  INSERT INTO t1 VALUES (1);
+
+DROP TABLE t1;
+DROP EVENT e1;
+DROP EVENT e2;
+
+
 DROP DATABASE events_test;
 SET GLOBAL event_scheduler=@event_scheduler;
 

=== modified file 'sql/event_data_objects.cc'
--- a/sql/event_data_objects.cc	2010-01-19 09:03:40 +0000
+++ b/sql/event_data_objects.cc	2010-05-19 09:18:59 +0000
@@ -834,8 +834,9 @@ bool get_next_time(const Time_zone *time
   }
   else
   {
-    long diff_months= (long) (local_now.year - local_start.year)*12 +
-                      (local_now.month - local_start.month);
+    long diff_months= ((long) local_now.year - (long) local_start.year)*12 +
+                      ((long) local_now.month - (long) local_start.month);
+
     /*
       Unlike for seconds above, the formula below returns the interval
       that, when added to the local_start, will give the time in the


Attachment: [text/bzr-bundle] bzr/tor.didriksen@sun.com-20100519091859-rwwjn5kjrgmoypic.bundle
Thread
bzr push into mysql-5.1-bugteam branch (tor.didriksen:3386 to 3387) Tor Didriksen19 May