From: Dmitry Shulga Date: June 7 2011 5:43pm Subject: bzr commit into mysql-5.1 branch (Dmitry.Shulga:3662) Bug#57156 Bug#11764334 List-Archive: http://lists.mysql.com/commits/138810 X-Bug: 57156,11764334 Message-Id: <201106071744.p57Hi2iB023599@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0579876483767505065==" --===============0579876483767505065== 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-07 17:43:51 +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-07 17:43:51 +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-07 17:43:51 +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-07 17:43:51 +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-07 17:43:51 +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-07 17:43:51 +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; } ; --===============0579876483767505065== 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\ # gkgolf736gu7r3s6 # target_branch: file:///Users/shulga/projects/mysql/mysql-5.1-\ # bug11764334/ # testament_sha1: 7c825ebc71c596494f4ee5c58280c2da6a4bc870 # timestamp: 2011-06-08 00:43:57 +0700 # base_revision_id: sergey.glukhov@stripped\ # f28fgp16937b2li4 # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWfuZFzYABwTfgFBwePf//3/n 3+q////+YA7l945tdxnIB0Ww0ND5m7anOVt7zh6673dqTd3vOm5b3mhV6u0JJIE1PIT1BmKYBNlT YKeKaYIDQYg0AAkojIp+mlN6JhJ6JDR5TQNGgBo0aaaaNAA0HMJoDQGjRhGgxGmJkxNBhGgZAMmA kREaJpCfoR6mlNqNpNMamnimnqaBkAAZNDRoIlQTTRU3lT2JlPTRT09pTyg00GKep6MSAZNME0NA kkAQCZACYgSntKep5T01PUMTQAD1AGnqQL1sg8dNa6mMLxPO48CM8RgjNSiPYQFjaYcVg7SE8SQY fUBvC7kyryKrNaicaS7nGatpKnf6EHfX9+Hz1/jcsJNt4GcGDq+lkyd22lt2HDyd/7MhS/FoTbmy NtDNUS3a3oJpOLGWpgxtHJhImyRcO0KMONlx0fDDfOsaTI8L79Mfvvv6JOePZ4MPfBZjAWCQerPg pDPKL1C2iY2NpsbY0G7beaAtm7uWqPmpBuvikbhmFDjdnERZlps+oi0FZbq41YaWwqo80XsvdmZ0 huZHHjvnUaXYc7sWWA4y5TgPivaN5hxrbuBgYfGE75Awe89jjmBg4CyXg2dwYy+d5DNwunl2xBLR S40TyK0hT0lb/r7J2lDj1/y51LJn0zFC7DYG/WMjCuE/9jlKcBvwFdeoPl1Y8DpS6O9dJeOBnbN8 xis+wU6dtVqgYgPm1sxRkR4ylJJxrYhZOlb52sFjlNnNjTjr3V+TGQKawZKoymLIDm5sEXTuHvKY 6J9REpoxbMx2pjl8NljFq17oKL/XF2b5580LtoNDtkFKS+qA5EiBkhdKto0g8Frj5bl+8zP0vtAU SPc7yywtukftv2+wwysWWHWSYsFx3uu0q0LoVJeWLGAsdIYCh1o/qkOZfmKbrKxKyngE/W3XBQWC vXY1fZfsgF6zIr3ezu7/fQ1WByweTiZSNya/XrSRKCij4LvQ9AMjmj5HgBWNRWGmB3hTHETvzxAD RocZ+O9FfKSi5XpBNMiZOdEXqwQJDMHvnUJibWBzWm5PKFCnYcdFq7qJ7x6RAAtUckw4AvRN0hYJ mR0L5yUiRGLAVVhMoRIFZp1DxeMty0/8aJE7HX2PtgrBjBYxKgRXk8AsUvqiG1oMmEjeaaz3XYKU xI2WmKi3A+0YGPY4D534cqLOpecnfGmPwpjXU53FVfPZPHi1FeTNoiFSybwZU3ffpCeGb0xuHh6Y wwqovYAZIOOJ3wwI7kzqOgXczAqLoLcax5gJxveMWrad0kB2NOrXHJ2Ncxz9UHPzCfZawCLJIrUU VFg5NiVorGVlTvPOQ8FRV4uN5QdI5PU91NmQnXPG1NmUKk9+Y3ZSWZ5WyNGmse6CCQ8YaHA9p8fJ bOBU5ril6uNZbYzwLtbokJ2W7qYotmPDlnLaNSl5TZWJYOXHElbCJURBkGOBRUIsgZb2HIKndQAw dC2eNcwCwwM8VetyYpZ34u0tuKjwtMB5EozHSqSmewrDsKCwDZrWndANpxpoImV0zDBpyUIS2taA amuUvM3ctKmGCkc6GhxIyxSCACIQGln8eS6zhIwawoWK02xIseaMEpQA58TXyGNprPCrb2umsu4N vmvJd25PVp1WZablljRjlLnbSgyejmVgpICbaLnm1ST0qs85/IMsS9cJF813HruoxBeT8aRG8TWm NOkO+HcvfYuxobSyw17W81rJnUoVWzQrzeztI6ttrcZ0nyGiqaKliQVwL75Gd6wix0pV2JBBccnH PVwD08tmfEjrZXqIXV2nN83pyUMLAeMbSJTdqKm+wA6Lv8FqD6Jy8B+eq1/KwuHHJSUmfPIkuAA7 WN6l5Bv6AEd+7hVFoA2pW8B1ljySQMUhEzOnSyV6OOufHH1yAyUVcFrHNbloqX4gHOu/nfq03w27 cblbUXQZqZLbS8wUUgqowpUGbOekTI3GhIlVbvZlhdEe3KEFiK7KVg1MiQyxLiUCBFywILviXTMi Zeao3E34DrzMqe2GityaZZa8zeORgcXcYXuZ+ep1kb7nzQ+1i6jlATJVJDqwAkh0Xpz0qQJPlZRk FZSdkscav+TvmyoOTUyUumvR0LxdeBL14bR2jVSkBnMGvpHp3IS11X3meIQ6B+864ydpmDMQkag/ o2j3RyDanZNrbSBNJnrEr6IyD2yKpRjhDGsgYyBfT/kEK6C4VwaqkjPF/XAVHxDUBkfiDQeyfSEB aoigPTImGMChhb94CeCkDg/wNT6TElfIsh8HTlZMXO/OCOkkMD6BajTEVyfmF/jMFqVt/uG8HA0e qUu6Jf6qkB/KOQHJwhApVCSgCtQ4i4vM4BNwnZC0OYTKC6WAFBQU1YLWtlwQ4BshZCyDWpGnmYFB bwtpIcvrMSZXjOf73xDWtQxoMksRb0MJjIFXLJ0giSRCJUNNAmlatAkmmCVLgtB4+oWnuayNLYg7 oB6x8Jyk2iwZ2FBQlNA0K/nQgesbLLD3lYPMMrgsvlafrlKwbKzlLQOog4Q7TsHx5lQefegc4S5T kJFogaOOeQ4w2xjG4osTua9AnxOUasVf7cSa0cKlBxBYuhisIzpFXWJxW1bWlHK9nC9rwVnuzq+8 guE4KRcLpMpi/6H2YSYhdgzORArQ7QhZydJEyw1SUy9FRuh8lfrNxQOhPsedQ8DFbnZRHnI2H9Co mCpviUPEpz8SR3Fh0UW1PBP2sNxme80lXUJswOt86D9p4YvCaNRnM5n9wxQRGggKSAjHDiknXEh2 ieXoClDXjeHlWTF7i1nkq+bhYNi7SIFmUWJEQkiSprQLhsULG8il5gPKCqGAxoaa4xMI0JN++a8h s2FlBoRLTNZAeY5QU2uAjIegihOT8hL2YuEx4EVO0viboMa2lqLEtyqu0ygryf8Tkkwt5KCitM7a ydsT/YYHAqNwMvL1HngKRJmYeScSYqTe0piS2HTuvPV2LiD/6ptQ3Yr4e0nsJUOnkSIHeQPMpBdk dAxRvi0CnzsxYhuIlNikQQMNZdk7IsMcTmS5nzVvWV7uboY/je9gkvV1LcqtYpi4a+YtHPNPTOH4 YL7aAm1GGw2NyaOlof06YFd4QJsRQ9ory2DKoWGLDk4BwmSEMJdMiuFrlWIU7QCt9trpC5khCh0F 2mAvTwwinjJD0gw63sXX10ORTQbVOwuQqqmqihoqtQ0PW2ONHa72bzEJJCQ2oHk8RieMe2YgyGQq wAEOgiCE1HfHsKy2ZyyP7EuBKsHk5G8F8xfHoJkPF4F44+BtA6jwgxLU7ZaQ1rpVfGUciUzy5ed1 KGtvhshcxC1Gl53E7G4Aj9S9/ipdAyAGU5moRE1AHkGKy4e/AG2I8k3KNMFitBlZ1HBVZlOi8Gk1 MHO6MjlfRjAJL/QXnuDsEKh14XjfuulLw8WwQnGgVFtwHiXuDKBwsNW8uUlYIXEtLUtTkHQ2b0HZ UJarb67MdUTy89LKIqAwzG3UQcOTfTWg4IIDjcqC8UgttcXg+KbKdLYolUZ1OsiwlPKn1vrkTYE8 o1CpQkDzZgFV0IMg5TZ0nTuIGbkjWEKqB6SvtqUIkuOlCgOJ5CxTyOyjUulUiByLq3gDfULCpWrh XUUCwk5Uky11lcQe9hxLLtOWWSfQloK3pFFP8GHm6WwZxKW1kCp6Ki/EuCgaDCmBGAoG1al9Z1QH h5LMMAwD0V+F6WAR6qJBcGnYVMmGsXDWNpb5HRBsXOvBRBcMxFcpwsSgdTzjLgTdFDr2cA+aEzi/ NX4ElbMOKqvNTCYRwKMJC/aDK5gRyHL9Xpvgk166rION/VMPTd/Q0R4VbnAPcbDJb8JhC31eEGCU xr7qkOJ1mpReeXOXobFSpCiQLMFKEHO43IyaKDa1OjD3sRTnd9U23roMA1ixLrF8BYY8YYXxsat6 4bbQ8acq1F2S2K8Ky/DCAIerlfIMSydMLhPa0w9Lz1gDfL1DjCaSKDIOtyeyfra82kUleLg/ehp9 TkrKIe0k2vyhSD8pmC2psexSvsbloUkYlux2ninZklVVCrmqGxoBjOAsc50rqsQ1WG2oTiLP0NTa OjClXejAR5OnqPCAcSuwyEQIZh42p3q8WzF4Z9hKPHqHQXAY63C0ilEXZAUIoOUVBdeYG3Qy84vE 8ohuIiIiIiJNnxLhBhRMrKukqBtetNIVkdwYj0e2Jcv3oKOuSCLXUF2V5lsFpx2GaDZDtyRw0gpX lgo61uiVWjuIhQpLUDOgB3epRjgrDvEoGJU7ATgSqAcT/rGAYZCOi7ESbe3GTwOnrb2lwZ3+G5l0 ICUNRSAUaGpGlAPEE7qYkoNesgzZyl7TMEpNQjIihmm97RFBILCCQzIHG2TTSRHcoqpgDM0awCxp br+RJBiejdX+TAdJvtjiUN4hpcwtC/8/CEdsWAqwBtLcwf8TcC9hsW1MGKN0ZKa0PwhIpCC5WA04 b+NqQwOZ87Zkebn1qqNQj9M5McDIGbjXFunLQoOdQZlZVx05kmVKukQBdxssTMD/cD3sKKYQPWuv jOOfTYjmsFZzOy+0iVQFYVJrRfUlDlhU4rI1zkLvDUUeX7YYnv+LuSKcKEh9zIubAA== --===============0579876483767505065==--