From: Dmitry Shulga Date: June 8 2011 3:06am Subject: bzr commit into mysql-5.1 branch (Dmitry.Shulga:3662) Bug#57156 Bug#11764334 List-Archive: http://lists.mysql.com/commits/138818 X-Bug: 57156,11764334 Message-Id: <201106080306.p5836MTG009086@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4034605331647498674==" --===============4034605331647498674== 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-08 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 statement CREATE EVENT is being processed or if this value was set in ALTER EVENT statement. Event_db_repository::create_event was modified: removed redundant setting of status field after return from call to mysql_event_fill_row(). @ 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-08 03:06:11 +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,20 @@ 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; +USE test; 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-08 03:06:11 +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-08 03:06:11 +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); /* @@ -680,8 +687,6 @@ Event_db_repository::create_event(THD *t if (mysql_event_fill_row(thd, table, parse_data, sp, saved_mode, FALSE)) goto end; - table->field[ET_FIELD_STATUS]->store((longlong)parse_data->status, TRUE); - if ((ret= table->file->ha_write_row(table->record[0]))) { table->file->print_error(ret, MYF(0)); === 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-08 03:06:11 +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)); @@ -569,7 +569,10 @@ void Event_parse_data::check_originator_ DBUG_PRINT("info", ("Invoked object status set to SLAVESIDE_DISABLED.")); if ((status == Event_parse_data::ENABLED) || (status == Event_parse_data::DISABLED)) - status = Event_parse_data::SLAVESIDE_DISABLED; + { + status= Event_parse_data::SLAVESIDE_DISABLED; + status_changed= true; + } originator = thd->server_id; } else === 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-08 03:06:11 +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-08 03:06:11 +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; } ; --===============4034605331647498674== 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\ # me14j3rjuhgcz2yh # target_branch: file:///Users/shulga/projects/mysql/mysql-5.1-\ # bug11764334/ # testament_sha1: ba8e71637cb4e4f53834e02f96c623ed380a4bf1 # timestamp: 2011-06-08 10:06:17 +0700 # base_revision_id: sergey.glukhov@stripped\ # f28fgp16937b2li4 # # Begin bundle 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 --===============4034605331647498674==--