From: Dmitry Shulga Date: June 9 2011 5:25pm Subject: bzr push into mysql-5.5 branch (Dmitry.Shulga:3434 to 3435) Bug#11764334 List-Archive: http://lists.mysql.com/commits/138984 X-Bug: 11764334 Message-Id: <201106091725.p59HPmbu013459@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0448024676024623028==" --===============0448024676024623028== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3435 Dmitry Shulga 2011-06-10 [merge] Auto-merge of patch for bug#11764334 from mysql-5.1 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 3434 Dmitry Lenev 2011-06-09 Fix for bug #11759990 - "52354: 'CREATE TABLE .. LIKE ... ' STATEMENTS FAIL". Attempt to execute CREATE TABLE LIKE statement on a MyISAM table with INDEX or DATA DIRECTORY options specified as a source resulted in "MyISAM table '...' is in use..." error. According to our documentation such a statement should create a copy of source table with DATA/INDEX DIRECTORY options omitted. The problem was that new implementation of CREATE TABLE LIKE statement in 5.5 tried to copy value of INDEX and DATA DIRECTORY parameters from the source table. Since in description of source table this parameters also included name of this table, attempt to create target table with these parameter led to file name conflict and error. This fix addresses the problem by preserving documented and backward-compatible behavior. I.e. by ensuring that contents of DATA/INDEX DIRECTORY clauses for the source table is ignored when target table is created. @ mysql-test/r/symlink.result Added test for bug #11759990 - "52354: 'CREATE TABLE .. LIKE ... ' STATEMENTS FAIL". @ mysql-test/t/symlink.test Added test for bug #11759990 - "52354: 'CREATE TABLE .. LIKE ... ' STATEMENTS FAIL". @ sql/sql_table.cc Changed CREATE TABLE LIKE implementation to ignore contents of DATA/INDEX DIRECTORY clauses for source table when target table is created. This is documented and backward-compatible behavior. modified: mysql-test/r/symlink.result mysql-test/t/symlink.test sql/sql_table.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 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:42:28 +0000 +++ b/sql/event_db_repository.cc 2011-06-09 17:07:03 +0000 @@ -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)) 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); /* @@ -716,8 +723,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-03-31 14:05:33 +0000 +++ b/sql/event_parse_data.cc 2011-06-09 17:07:03 +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-03-31 14:05:33 +0000 +++ b/sql/event_parse_data.h 2011-06-09 17:07:03 +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-12 05:23:16 +0000 +++ b/sql/sql_yacc.yy 2011-06-09 17:07:03 +0000 @@ -2227,16 +2227,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; } ; --===============0448024676024623028== 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\ # lniwsmcv42pnjdij # target_branch: file:///Users/shulga/projects/mysql/mysql-5.5/ # testament_sha1: 627a962c25228112bb4694a38cb6f35c6511455b # timestamp: 2011-06-10 00:25:44 +0700 # source_branch: file:///Users/shulga/projects/mysql/mysql-5.1-\ # bug11749345/ # base_revision_id: dmitry.lenev@stripped\ # nqsmjkj7r87zqm6z # # Begin bundle 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 L7upgA== --===============0448024676024623028==--