From: Dmitry Shulga Date: June 9 2011 5:15pm Subject: bzr commit into mysql-trunk branch (Dmitry.Shulga:3176) Bug#11764334 List-Archive: http://lists.mysql.com/commits/138979 X-Bug: 11764334 Message-Id: <201106091715.p59HFwZw020091@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2466877805665451816==" --===============2466877805665451816== 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-trunk/ based on revid:luis.soares@stripped 3176 Dmitry Shulga 2011-06-10 [merge] Auto-merge of patch for bug#11764334 from mysql-5.5 tree. 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-05-27 11:42:28 +0000 +++ b/mysql-test/r/events_bugs.result 2011-06-09 17:07:03 +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 @@ -796,6 +796,20 @@ COUNT(*) DROP EVENT IF EXISTS event_Bug12546938; DROP TABLE table_bug12546938; 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; 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-05-27 11:42:28 +0000 +++ b/mysql-test/t/events_bugs.test 2011-06-09 17:07:03 +0000 @@ -1286,6 +1286,21 @@ DROP EVENT IF EXISTS event_Bug12546938; DROP TABLE table_bug12546938; 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 === modified file 'sql/event_db_repository.cc' --- a/sql/event_db_repository.cc 2011-05-27 11:50:52 +0000 +++ b/sql/event_db_repository.cc 2011-06-09 17:14:14 +0000 @@ -236,9 +236,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); /* @@ -717,8 +724,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 2010-07-02 02:58:51 +0000 +++ b/sql/event_parse_data.cc 2011-06-09 17:14:14 +0000 @@ -48,9 +48,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) @@ -142,6 +141,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)); @@ -571,7 +571,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 2010-07-02 02:58:51 +0000 +++ b/sql/event_parse_data.h 2011-06-09 17:14:14 +0000 @@ -55,6 +55,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 2011-05-26 15:20:09 +0000 +++ b/sql/sql_yacc.yy 2011-06-09 17:14:14 +0000 @@ -2262,16 +2262,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; } ; --===============2466877805665451816== 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\ # mkf1ay4o5fm2bldw # target_branch: file:///Users/shulga/projects/mysql/mysql-trunk/ # testament_sha1: 3aee6e800c560b232e43334d816a703e3c69cf19 # timestamp: 2011-06-10 00:15:52 +0700 # source_branch: file:///Users/shulga/projects/mysql/mysql-5.5-\ # bug11763757/ # base_revision_id: luis.soares@stripped\ # p7p7ldaekppldc2c # # Begin bundle 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 IpwoSDq7/38A --===============2466877805665451816==--