diff options
author | unknown <thek@adventure.(none)> | 2007-07-25 09:47:03 +0200 |
---|---|---|
committer | unknown <thek@adventure.(none)> | 2007-07-25 09:47:03 +0200 |
commit | 3232f483a1d30f8ec6122a23747d1db1397b50f1 (patch) | |
tree | 975754bb413104760943417d0ffd9be378a3aeb9 | |
parent | 35438afb1dc973bac4ee03321a26a2f2e8b2b133 (diff) | |
parent | cfdd203549bf8676d4aefb527bb43f8429a39c4d (diff) | |
download | mariadb-git-3232f483a1d30f8ec6122a23747d1db1397b50f1.tar.gz |
Merge adventure.(none):/home/thek/Development/cpp/bug28641/my51-bug28641
into adventure.(none):/home/thek/Development/cpp/mysql-5.1-runtime
mysql-test/r/events_bugs.result:
Auto merged
-rw-r--r-- | mysql-test/r/events_bugs.result | 7 | ||||
-rw-r--r-- | mysql-test/t/events_bugs.test | 15 | ||||
-rw-r--r-- | sql/event_data_objects.cc | 9 | ||||
-rw-r--r-- | sql/event_db_repository.cc | 8 | ||||
-rw-r--r-- | sql/event_queue.cc | 2 | ||||
-rw-r--r-- | sql/tztime.cc | 15 | ||||
-rw-r--r-- | sql/tztime.h | 1 |
7 files changed, 35 insertions, 22 deletions
diff --git a/mysql-test/r/events_bugs.result b/mysql-test/r/events_bugs.result index 557c8e0b477..1bfa0e84f72 100644 --- a/mysql-test/r/events_bugs.result +++ b/mysql-test/r/events_bugs.result @@ -611,3 +611,10 @@ id ev_nm ev_cnt DROP TABLE event_log; SET GLOBAL event_scheduler = OFF; DROP DATABASE events_test; +SET GLOBAL event_scheduler= ON; +CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00' + DO BEGIN +SELECT 1; +END;| +SET GLOBAL event_scheduler= OFF; +DROP EVENT bug28641; diff --git a/mysql-test/t/events_bugs.test b/mysql-test/t/events_bugs.test index 4186b4701fa..36052fdb9af 100644 --- a/mysql-test/t/events_bugs.test +++ b/mysql-test/t/events_bugs.test @@ -722,3 +722,18 @@ let $wait_condition= --source include/wait_condition.inc DROP DATABASE events_test; + + +# +# Bug#28641 CREATE EVENT with '2038.01.18 03:00:00' let server crash. +# +SET GLOBAL event_scheduler= ON; +DELIMITER |; +CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00' + DO BEGIN + SELECT 1; + END;| + +DELIMITER ;| +SET GLOBAL event_scheduler= OFF; +DROP EVENT bug28641; diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc index 7b58c10079a..144a87e13f6 100644 --- a/sql/event_data_objects.cc +++ b/sql/event_data_objects.cc @@ -979,17 +979,18 @@ Event_queue_element::load_from_row(THD *thd, TABLE *table) DBUG_RETURN(TRUE); starts_null= table->field[ET_FIELD_STARTS]->is_null(); + my_bool not_used= FALSE; if (!starts_null) { table->field[ET_FIELD_STARTS]->get_date(&time, TIME_NO_ZERO_DATE); - starts= sec_since_epoch_TIME(&time); + starts= my_tz_OFFSET0->TIME_to_gmt_sec(&time,¬_used); } ends_null= table->field[ET_FIELD_ENDS]->is_null(); if (!ends_null) { table->field[ET_FIELD_ENDS]->get_date(&time, TIME_NO_ZERO_DATE); - ends= sec_since_epoch_TIME(&time); + ends= my_tz_OFFSET0->TIME_to_gmt_sec(&time,¬_used); } if (!table->field[ET_FIELD_INTERVAL_EXPR]->is_null()) @@ -1007,7 +1008,7 @@ Event_queue_element::load_from_row(THD *thd, TABLE *table) if (table->field[ET_FIELD_EXECUTE_AT]->get_date(&time, TIME_NO_ZERO_DATE)) DBUG_RETURN(TRUE); - execute_at= sec_since_epoch_TIME(&time); + execute_at= my_tz_OFFSET0->TIME_to_gmt_sec(&time,¬_used); } /* @@ -1039,7 +1040,7 @@ Event_queue_element::load_from_row(THD *thd, TABLE *table) { table->field[ET_FIELD_LAST_EXECUTED]->get_date(&time, TIME_NO_ZERO_DATE); - last_executed= sec_since_epoch_TIME(&time); + last_executed= my_tz_OFFSET0->TIME_to_gmt_sec(&time,¬_used); } last_executed_changed= FALSE; diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc index a16a04739e2..b7bcb6344fd 100644 --- a/sql/event_db_repository.cc +++ b/sql/event_db_repository.cc @@ -250,7 +250,7 @@ mysql_event_fill_row(THD *thd, if (!et->starts_null) { MYSQL_TIME time; - my_tz_UTC->gmt_sec_to_TIME(&time, et->starts); + my_tz_OFFSET0->gmt_sec_to_TIME(&time, et->starts); fields[ET_FIELD_STARTS]->set_notnull(); fields[ET_FIELD_STARTS]->store_time(&time, MYSQL_TIMESTAMP_DATETIME); @@ -259,7 +259,7 @@ mysql_event_fill_row(THD *thd, if (!et->ends_null) { MYSQL_TIME time; - my_tz_UTC->gmt_sec_to_TIME(&time, et->ends); + my_tz_OFFSET0->gmt_sec_to_TIME(&time, et->ends); fields[ET_FIELD_ENDS]->set_notnull(); fields[ET_FIELD_ENDS]->store_time(&time, MYSQL_TIMESTAMP_DATETIME); @@ -278,7 +278,7 @@ mysql_event_fill_row(THD *thd, fields[ET_FIELD_ENDS]->set_null(); MYSQL_TIME time; - my_tz_UTC->gmt_sec_to_TIME(&time, et->execute_at); + my_tz_OFFSET0->gmt_sec_to_TIME(&time, et->execute_at); fields[ET_FIELD_EXECUTE_AT]->set_notnull(); fields[ET_FIELD_EXECUTE_AT]-> @@ -1004,7 +1004,7 @@ update_timing_fields_for_event(THD *thd, if (update_last_executed) { MYSQL_TIME time; - my_tz_UTC->gmt_sec_to_TIME(&time, last_executed); + my_tz_OFFSET0->gmt_sec_to_TIME(&time, last_executed); fields[ET_FIELD_LAST_EXECUTED]->set_notnull(); fields[ET_FIELD_LAST_EXECUTED]->store_time(&time, diff --git a/sql/event_queue.cc b/sql/event_queue.cc index 634cc764d74..04449dd48a1 100644 --- a/sql/event_queue.cc +++ b/sql/event_queue.cc @@ -740,7 +740,7 @@ Event_queue::dump_internal_status() printf("WOC : %s\n", waiting_on_cond? "YES":"NO"); MYSQL_TIME time; - my_tz_UTC->gmt_sec_to_TIME(&time, next_activation_at); + my_tz_OFFSET0->gmt_sec_to_TIME(&time, next_activation_at); if (time.year != 1970) printf("Next activation : %04d-%02d-%02d %02d:%02d:%02d\n", time.year, time.month, time.day, time.hour, time.minute, time.second); diff --git a/sql/tztime.cc b/sql/tztime.cc index 0c717dd2ece..14192d06978 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -807,19 +807,6 @@ sec_since_epoch(int year, int mon, int mday, int hour, int min ,int sec) SECS_PER_MIN + sec; } - - /* - Works like sec_since_epoch but expects MYSQL_TIME structure as parameter. -*/ - -my_time_t -sec_since_epoch_TIME(MYSQL_TIME *t) -{ - return sec_since_epoch(t->year, t->month, t->day, - t->hour, t->minute, t->second); -} - - /* Converts local time in broken down MYSQL_TIME representation to my_time_t representation. @@ -1425,7 +1412,9 @@ Time_zone_offset::get_name() const static Time_zone_utc tz_UTC; static Time_zone_system tz_SYSTEM; +static Time_zone_offset tz_OFFSET0(0); +Time_zone *my_tz_OFFSET0= &tz_OFFSET0; Time_zone *my_tz_UTC= &tz_UTC; Time_zone *my_tz_SYSTEM= &tz_SYSTEM; diff --git a/sql/tztime.h b/sql/tztime.h index f7cc7042d79..ddd80b88bf2 100644 --- a/sql/tztime.h +++ b/sql/tztime.h @@ -59,6 +59,7 @@ public: extern Time_zone * my_tz_UTC; extern Time_zone * my_tz_SYSTEM; +extern Time_zone * my_tz_OFFSET0; extern Time_zone * my_tz_find(THD *thd, const String *name); extern my_bool my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap); extern void my_tz_free(); |