From: Dmitry Shulga Date: June 2 2011 5:26pm Subject: bzr commit into mysql-5.1 branch (Dmitry.Shulga:3662) Bug#57156 Bug#11764334 List-Archive: http://lists.mysql.com/commits/138599 X-Bug: 57156,11764334 Message-Id: <201106021726.p52HQHOF011705@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4663282433056417505==" --===============4663282433056417505== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/shulga/projects/mysql/mysql-5.1-bug11764334/ based on revid:sergey.glukhov@stripped 3662 Dmitry Shulga 2011-06-03 Fixed bug#11764334 (formerly bug#57156): ALTER EVENT CHANGES THE EVENT STATUS. Any ALTER EVENT statement on a disabled event enabled it back (unless this ALTER EVENT statement explicitly disabled the event). The problem was that during processing of an ALTER EVENT statement value of status field was overwritten unconditionally even if new value was not specified explicitly. As a consequence this field was set to default value for status which corresponds to ENABLE. The solution is to check if status field was explicitly specified in ALTER EVENT statement before assigning new value to status field. @ mysql-test/r/events_bugs.result test's result for Bug#11764334 was added. @ mysql-test/t/events_bugs.test new test for Bug#11764334 was added. @ sql/event_db_repository.cc mysql_event_fill_row() was modified: set value for status field in events tables only in case if this value was set in ALTER EVENT statement. @ sql/event_parse_data.h Event_parse_data structure was modified: added flag status_changed that is set to true if status's value was changed in ALTER EVENT statement. @ sql/sql_yacc.yy Set flag status_changed if status was set in ALTER EVENT statement. modified: mysql-test/r/events_bugs.result mysql-test/t/events_bugs.test sql/event_db_repository.cc sql/event_parse_data.cc sql/event_parse_data.h sql/sql_yacc.yy === modified file 'mysql-test/r/events_bugs.result' --- a/mysql-test/r/events_bugs.result 2011-03-28 15:31:37 +0000 +++ b/mysql-test/r/events_bugs.result 2011-06-02 17:25:52 +0000 @@ -419,7 +419,7 @@ SET TIME_ZONE= '+04:00'; ALTER EVENT e1 DO SELECT 2; 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 -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; SET TIME_ZONE='+05:00'; CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY STARTS '2006-01-01 00:00:00' DO @@ -756,6 +756,19 @@ 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 DROP DATABASE event_test1; DROP DATABASE event_test12; +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 2006-01-01 02: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 2006-01-01 02:59:01 NULL DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci +DROP EVENT ev1; +DROP DATABASE event_test11764334; DROP DATABASE events_test; SET GLOBAL event_scheduler= 'ON'; SET @@global.concurrent_insert= @concurrent_insert; === modified file 'mysql-test/t/events_bugs.test' --- a/mysql-test/t/events_bugs.test 2011-03-28 15:31:37 +0000 +++ b/mysql-test/t/events_bugs.test 2011-06-02 17:25:52 +0000 @@ -1236,6 +1236,21 @@ DROP DATABASE event_test1; DROP DATABASE event_test12; +# +# 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 === modified file 'sql/event_db_repository.cc' --- a/sql/event_db_repository.cc 2011-03-21 16:02:47 +0000 +++ b/sql/event_db_repository.cc 2011-06-02 17:25:52 +0000 @@ -226,9 +226,16 @@ mysql_event_fill_row(THD *thd, if (fields[f_num= ET_FIELD_NAME]->store(et->name.str, et->name.length, scs)) 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_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); /* === modified file 'sql/event_parse_data.cc' --- a/sql/event_parse_data.cc 2009-02-13 16:41:47 +0000 +++ b/sql/event_parse_data.cc 2011-06-02 17:25:52 +0000 @@ -46,9 +46,8 @@ Event_parse_data::new_instance(THD *thd) Event_parse_data::Event_parse_data() :on_completion(Event_parse_data::ON_COMPLETION_DEFAULT), - status(Event_parse_data::ENABLED), - do_not_create(FALSE), - body_changed(FALSE), + status(Event_parse_data::ENABLED), status_changed(false), + do_not_create(FALSE), body_changed(FALSE), item_starts(NULL), item_ends(NULL), item_execute_at(NULL), starts_null(TRUE), ends_null(TRUE), execute_at_null(TRUE), item_expression(NULL), expression(0) @@ -140,6 +139,7 @@ Event_parse_data::check_if_in_the_past(T else if (status == Event_parse_data::ENABLED) { status= Event_parse_data::DISABLED; + status_changed= true; push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_EVENT_EXEC_TIME_IN_THE_PAST, ER(ER_EVENT_EXEC_TIME_IN_THE_PAST)); === modified file 'sql/event_parse_data.h' --- a/sql/event_parse_data.h 2008-11-10 20:21:49 +0000 +++ b/sql/event_parse_data.h 2011-06-02 17:25:52 +0000 @@ -49,6 +49,7 @@ public: int on_completion; int status; + bool status_changed; longlong originator; /* do_not_create will be set if STARTS time is in the past and === modified file 'sql/sql_yacc.yy' --- a/sql/sql_yacc.yy 2010-10-13 05:28:58 +0000 +++ b/sql/sql_yacc.yy 2011-06-02 17:25:52 +0000 @@ -2024,16 +2024,19 @@ opt_ev_status: | ENABLE_SYM { Lex->event_parse_data->status= Event_parse_data::ENABLED; + Lex->event_parse_data->status_changed= true; $$= 1; } | DISABLE_SYM ON SLAVE { Lex->event_parse_data->status= Event_parse_data::SLAVESIDE_DISABLED; + Lex->event_parse_data->status_changed= true; $$= 1; } | DISABLE_SYM { Lex->event_parse_data->status= Event_parse_data::DISABLED; + Lex->event_parse_data->status_changed= true; $$= 1; } ; --===============4663282433056417505== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/dmitry.shulga@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: dmitry.shulga@stripped\ # xttbld7q7g1p2c5s # target_branch: file:///Users/shulga/projects/mysql/mysql-5.1-\ # bug11764334/ # testament_sha1: 212eaacca40e0454d6b70f3bcedba52e626efd13 # timestamp: 2011-06-03 00:26:11 +0700 # base_revision_id: sergey.glukhov@stripped\ # f28fgp16937b2li4 # # Begin bundle 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 --===============4663282433056417505==--