From: Dmitry Shulga Date: June 9 2011 6:20pm Subject: bzr push into mysql-trunk branch (Dmitry.Shulga:3176 to 3177) Bug#11764334 List-Archive: http://lists.mysql.com/commits/139004 X-Bug: 11764334 Message-Id: <201106091820.p59IKr7P007263@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2191505803088538829==" --===============2191505803088538829== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3177 Dmitry Shulga 2011-06-10 [merge] Auto-merge of patch and follow-up 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 3176 Luis Soares 2011-06-09 BUG#11747577 Reverted the patch. Pushbuild showed a few errors that need proper investigation. removed: mysql-test/r/mysql_binary_mode.result mysql-test/t/mysql_binary_mode.test modified: client/client_priv.h client/my_readline.h client/mysql.cc client/readline.cc === 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 18:08:38 +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 # # 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 # # 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 18:08:38 +0000 @@ -1286,6 +1286,23 @@ 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; +--replace_column 9 # 10 # +SHOW EVENTS IN event_test11764334 WHERE NAME='ev1'; +ALTER EVENT ev1 ON SCHEDULE EVERY 4 SECOND; +--replace_column 9 # 10 # +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 18:18:22 +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 18:18:22 +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 18:18:22 +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 18:18:22 +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; } ; --===============2191505803088538829== 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\ # 31azhx0e1qg3msyn # target_branch: file:///Users/shulga/projects/mysql/mysql-trunk/ # testament_sha1: 95c14e73e3cccd5b4379768ad00f339ed460edcd # timestamp: 2011-06-10 01:20:45 +0700 # source_branch: file:///Users/shulga/projects/mysql/mysql-5.5-\ # bug11763757/ # base_revision_id: luis.soares@stripped\ # 0viq72mc1g4rf3ql # # Begin bundle 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 vGKAdIdxtTEpW59gev56apf/i7kinChIa48/XoA= --===============2191505803088538829==--