Commit 1be4de54 authored by Dmitry Shulga's avatar Dmitry Shulga

Auto-merge of patch for bug#11764334 from mysql-5.1 tree.

parents 600647c7 fa913a0b
...@@ -419,7 +419,7 @@ SET TIME_ZONE= '+04:00'; ...@@ -419,7 +419,7 @@ SET TIME_ZONE= '+04:00';
ALTER EVENT e1 DO SELECT 2; ALTER EVENT e1 DO SELECT 2;
SHOW EVENTS; SHOW EVENTS;
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
events_test e1 root@localhost -03:00 RECURRING NULL 1 DAY 2005-12-31 20:58:59 2030-01-03 00:00:00 ENABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci events_test e1 root@localhost -03:00 RECURRING NULL 1 DAY 2005-12-31 20:58:59 2030-01-03 00:00:00 DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
DROP EVENT e1; DROP EVENT e1;
SET TIME_ZONE='+05:00'; SET TIME_ZONE='+05:00';
CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY STARTS '2006-01-01 00:00:00' DO CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY STARTS '2006-01-01 00:00:00' DO
...@@ -796,6 +796,20 @@ COUNT(*) ...@@ -796,6 +796,20 @@ COUNT(*)
DROP EVENT IF EXISTS event_Bug12546938; DROP EVENT IF EXISTS event_Bug12546938;
DROP TABLE table_bug12546938; DROP TABLE table_bug12546938;
SET GLOBAL EVENT_SCHEDULER = OFF; SET GLOBAL EVENT_SCHEDULER = OFF;
DROP DATABASE IF EXISTS event_test11764334;
CREATE DATABASE event_test11764334;
USE event_test11764334;
CREATE EVENT ev1 ON SCHEDULE EVERY 3 SECOND DISABLE DO SELECT 1;
SHOW EVENTS IN event_test11764334 WHERE NAME='ev1';
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
event_test11764334 ev1 root@localhost SYSTEM RECURRING NULL 3 SECOND 2011-06-09 19:59:01 NULL DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
ALTER EVENT ev1 ON SCHEDULE EVERY 4 SECOND;
SHOW EVENTS IN event_test11764334 WHERE NAME='ev1';
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
event_test11764334 ev1 root@localhost SYSTEM RECURRING NULL 4 SECOND 2011-06-09 19:59:01 NULL DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
DROP EVENT ev1;
DROP DATABASE event_test11764334;
USE test;
DROP DATABASE events_test; DROP DATABASE events_test;
SET GLOBAL event_scheduler= 'ON'; SET GLOBAL event_scheduler= 'ON';
SET @@global.concurrent_insert= @concurrent_insert; SET @@global.concurrent_insert= @concurrent_insert;
...@@ -1286,6 +1286,21 @@ DROP EVENT IF EXISTS event_Bug12546938; ...@@ -1286,6 +1286,21 @@ DROP EVENT IF EXISTS event_Bug12546938;
DROP TABLE table_bug12546938; DROP TABLE table_bug12546938;
SET GLOBAL EVENT_SCHEDULER = OFF; SET GLOBAL EVENT_SCHEDULER = OFF;
#
# Bug#11764334 - 57156: ALTER EVENT CHANGES THE EVENT STATUS
#
--disable_warnings
DROP DATABASE IF EXISTS event_test11764334;
--enable_warnings
CREATE DATABASE event_test11764334;
USE event_test11764334;
CREATE EVENT ev1 ON SCHEDULE EVERY 3 SECOND DISABLE DO SELECT 1;
SHOW EVENTS IN event_test11764334 WHERE NAME='ev1';
ALTER EVENT ev1 ON SCHEDULE EVERY 4 SECOND;
SHOW EVENTS IN event_test11764334 WHERE NAME='ev1';
DROP EVENT ev1;
DROP DATABASE event_test11764334;
USE test;
########################################################################### ###########################################################################
# #
# End of tests # End of tests
......
...@@ -235,9 +235,16 @@ mysql_event_fill_row(THD *thd, ...@@ -235,9 +235,16 @@ mysql_event_fill_row(THD *thd,
if (fields[f_num= ET_FIELD_NAME]->store(et->name.str, et->name.length, scs)) if (fields[f_num= ET_FIELD_NAME]->store(et->name.str, et->name.length, scs))
goto err_truncate; goto err_truncate;
/* both ON_COMPLETION and STATUS are NOT NULL thus not calling set_notnull()*/ /* ON_COMPLETION field is NOT NULL thus not calling set_notnull()*/
rs|= fields[ET_FIELD_ON_COMPLETION]->store((longlong)et->on_completion, TRUE); rs|= fields[ET_FIELD_ON_COMPLETION]->store((longlong)et->on_completion, TRUE);
rs|= fields[ET_FIELD_STATUS]->store((longlong)et->status, TRUE);
/*
Set STATUS value unconditionally in case of CREATE EVENT.
For ALTER EVENT set it only if value of this field was changed.
Since STATUS field is NOT NULL call to set_notnull() is not needed.
*/
if (!is_update || et->status_changed)
rs|= fields[ET_FIELD_STATUS]->store((longlong)et->status, TRUE);
rs|= fields[ET_FIELD_ORIGINATOR]->store((longlong)et->originator, TRUE); rs|= fields[ET_FIELD_ORIGINATOR]->store((longlong)et->originator, TRUE);
/* /*
...@@ -716,8 +723,6 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data, ...@@ -716,8 +723,6 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
if (mysql_event_fill_row(thd, table, parse_data, sp, saved_mode, FALSE)) if (mysql_event_fill_row(thd, table, parse_data, sp, saved_mode, FALSE))
goto end; goto end;
table->field[ET_FIELD_STATUS]->store((longlong)parse_data->status, TRUE);
if ((ret= table->file->ha_write_row(table->record[0]))) if ((ret= table->file->ha_write_row(table->record[0])))
{ {
table->file->print_error(ret, MYF(0)); table->file->print_error(ret, MYF(0));
......
...@@ -48,9 +48,8 @@ Event_parse_data::new_instance(THD *thd) ...@@ -48,9 +48,8 @@ Event_parse_data::new_instance(THD *thd)
Event_parse_data::Event_parse_data() Event_parse_data::Event_parse_data()
:on_completion(Event_parse_data::ON_COMPLETION_DEFAULT), :on_completion(Event_parse_data::ON_COMPLETION_DEFAULT),
status(Event_parse_data::ENABLED), status(Event_parse_data::ENABLED), status_changed(false),
do_not_create(FALSE), do_not_create(FALSE), body_changed(FALSE),
body_changed(FALSE),
item_starts(NULL), item_ends(NULL), item_execute_at(NULL), item_starts(NULL), item_ends(NULL), item_execute_at(NULL),
starts_null(TRUE), ends_null(TRUE), execute_at_null(TRUE), starts_null(TRUE), ends_null(TRUE), execute_at_null(TRUE),
item_expression(NULL), expression(0) item_expression(NULL), expression(0)
...@@ -142,6 +141,7 @@ Event_parse_data::check_if_in_the_past(THD *thd, my_time_t ltime_utc) ...@@ -142,6 +141,7 @@ Event_parse_data::check_if_in_the_past(THD *thd, my_time_t ltime_utc)
else if (status == Event_parse_data::ENABLED) else if (status == Event_parse_data::ENABLED)
{ {
status= Event_parse_data::DISABLED; status= Event_parse_data::DISABLED;
status_changed= true;
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
ER_EVENT_EXEC_TIME_IN_THE_PAST, ER_EVENT_EXEC_TIME_IN_THE_PAST,
ER(ER_EVENT_EXEC_TIME_IN_THE_PAST)); ER(ER_EVENT_EXEC_TIME_IN_THE_PAST));
...@@ -571,7 +571,10 @@ void Event_parse_data::check_originator_id(THD *thd) ...@@ -571,7 +571,10 @@ void Event_parse_data::check_originator_id(THD *thd)
DBUG_PRINT("info", ("Invoked object status set to SLAVESIDE_DISABLED.")); DBUG_PRINT("info", ("Invoked object status set to SLAVESIDE_DISABLED."));
if ((status == Event_parse_data::ENABLED) || if ((status == Event_parse_data::ENABLED) ||
(status == Event_parse_data::DISABLED)) (status == Event_parse_data::DISABLED))
status = Event_parse_data::SLAVESIDE_DISABLED; {
status= Event_parse_data::SLAVESIDE_DISABLED;
status_changed= true;
}
originator = thd->server_id; originator = thd->server_id;
} }
else else
......
...@@ -55,6 +55,7 @@ public: ...@@ -55,6 +55,7 @@ public:
int on_completion; int on_completion;
int status; int status;
bool status_changed;
longlong originator; longlong originator;
/* /*
do_not_create will be set if STARTS time is in the past and do_not_create will be set if STARTS time is in the past and
......
...@@ -2227,16 +2227,19 @@ opt_ev_status: ...@@ -2227,16 +2227,19 @@ opt_ev_status:
| ENABLE_SYM | ENABLE_SYM
{ {
Lex->event_parse_data->status= Event_parse_data::ENABLED; Lex->event_parse_data->status= Event_parse_data::ENABLED;
Lex->event_parse_data->status_changed= true;
$$= 1; $$= 1;
} }
| DISABLE_SYM ON SLAVE | DISABLE_SYM ON SLAVE
{ {
Lex->event_parse_data->status= Event_parse_data::SLAVESIDE_DISABLED; Lex->event_parse_data->status= Event_parse_data::SLAVESIDE_DISABLED;
Lex->event_parse_data->status_changed= true;
$$= 1; $$= 1;
} }
| DISABLE_SYM | DISABLE_SYM
{ {
Lex->event_parse_data->status= Event_parse_data::DISABLED; Lex->event_parse_data->status= Event_parse_data::DISABLED;
Lex->event_parse_data->status_changed= true;
$$= 1; $$= 1;
} }
; ;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment