From: Christopher Powers Date: March 10 2011 3:04pm Subject: bzr commit into mysql-trunk branch (chris.powers:3247) List-Archive: http://lists.mysql.com/commits/132766 Message-Id: <20110310150509.D73361DB0335@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3272555955350758385==" --===============3272555955350758385== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/cpowers/work/dev/mysql-trunk-wl4896/ based on revid:chris.powers@stripped 3247 Christopher Powers 2011-03-10 [merge] Merge with mysql-trunk added: mysql-test/suite/perfschema/r/relaylog.result mysql-test/suite/perfschema/t/relaylog.test modified: include/my_sys.h mysql-test/collections/default.weekly mysql-test/r/sp.result mysql-test/r/trigger.result mysql-test/t/disabled.def mysql-test/t/sp.test mysql-test/t/trigger.test mysys/my_conio.c sql/binlog.cc sql/binlog.h sql/item_strfunc.cc sql/item_strfunc.h sql/mysqld.cc sql/mysqld.h sql/rpl_rli.cc sql/sql_trigger.cc === modified file 'include/my_sys.h' --- a/include/my_sys.h 2011-03-09 20:54:55 +0000 +++ b/include/my_sys.h 2011-03-10 08:49:21 +0000 @@ -947,12 +947,12 @@ void my_security_attr_free(SECURITY_ATTR /* implemented in my_conio.c */ my_bool my_win_is_console(FILE *file); -char *my_win_console_readline(CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize); -void my_win_console_write(CHARSET_INFO *cs, const char *data, size_t datalen); -void my_win_console_fputs(CHARSET_INFO *cs, const char *data); -void my_win_console_putc(CHARSET_INFO *cs, int c); -void my_win_console_vfprintf(CHARSET_INFO *cs, const char *fmt, va_list args); -int my_win_translate_command_line_args(CHARSET_INFO *cs, int *ac, char ***av); +char *my_win_console_readline(const CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize); +void my_win_console_write(const CHARSET_INFO *cs, const char *data, size_t datalen); +void my_win_console_fputs(const CHARSET_INFO *cs, const char *data); +void my_win_console_putc(const CHARSET_INFO *cs, int c); +void my_win_console_vfprintf(const CHARSET_INFO *cs, const char *fmt, va_list args); +int my_win_translate_command_line_args(const CHARSET_INFO *cs, int *ac, char ***av); #endif /* __WIN__ */ #include === modified file 'mysql-test/collections/default.weekly' --- a/mysql-test/collections/default.weekly 2011-02-08 13:56:25 +0000 +++ b/mysql-test/collections/default.weekly 2011-03-10 04:29:36 +0000 @@ -1,8 +1,8 @@ -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=big-tests --experimental=collections/default.experimental --vardir=var-big-tests --big-test --testcase-timeout=60 --suite-timeout=600 main.alter_table-big main.archive-big main.count_distinct3 main.create-big main.events_stress main.events_time_zone main.information_schema-big main.log_tables-big main.merge-big main.mysqlbinlog_row_big main.read_many_rows_innodb main.ssl-big main.sum_distinct-big main.type_newdecimal-big main.variables-big parts.part_supported_sql_func_innodb parts.partition_alter1_1_2_innodb parts.partition_alter1_2_innodb parts.partition_alter2_1_1_innodb parts.partition_alter2_1_2_innodb parts.partition_alter2_2_2_innodb parts.partition_alter4_innodb funcs_1.myisam_views-big -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=row -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=mixed -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=row -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=mixed -perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=all_binlog_checksum --experimental=collections/default.experimental --mysqld=--binlog-checksum=CRC32 --vardir=var-all_binlog_checksum --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=big-tests --experimental=collections/default.experimental --vardir=var-big-tests --big-test --testcase-timeout=60 --suite-timeout=600 main.alter_table-big main.archive-big main.count_distinct3 main.create-big main.events_stress main.events_time_zone main.information_schema-big main.log_tables-big main.merge-big main.mysqlbinlog_row_big main.read_many_rows_innodb main.ssl-big main.sum_distinct-big main.type_newdecimal-big main.variables-big parts.part_supported_sql_func_innodb parts.partition_alter1_1_2_innodb parts.partition_alter1_2_innodb parts.partition_alter2_1_1_innodb parts.partition_alter2_1_2_innodb parts.partition_alter2_2_2_innodb parts.partition_alter4_innodb funcs_1.myisam_views-big --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=row --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=mixed --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=row --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=mixed --skip-test-list=collections/disabled-weekly.list +perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=all_binlog_checksum --experimental=collections/default.experimental --mysqld=--binlog-checksum=CRC32 --vardir=var-all_binlog_checksum --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema --skip-test-list=collections/disabled-weekly.list === modified file 'mysql-test/r/sp.result' --- a/mysql-test/r/sp.result 2010-11-10 11:26:45 +0000 +++ b/mysql-test/r/sp.result 2011-03-10 08:33:54 +0000 @@ -7452,4 +7452,34 @@ c1 # Cleanup drop table t1; drop procedure p1; + +# -- +# -- Bug 11765684 - 58674: SP-cache does not detect changes in +# -- pre-locking list caused by triggers +# --- +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +DROP TABLE IF EXISTS t3; +DROP PROCEDURE IF EXISTS p1; +CREATE TABLE t1(a INT); +CREATE TABLE t2(a INT); +CREATE TABLE t3(a INT); +CREATE PROCEDURE p1() +INSERT INTO t1(a) VALUES (1); + +CREATE TRIGGER t1_ai AFTER INSERT ON t1 +FOR EACH ROW +INSERT INTO t2(a) VALUES (new.a); + +CALL p1(); + +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 +FOR EACH ROW +INSERT INTO t3(a) VALUES (new.a); + +CALL p1(); + +DROP TABLE t1, t2, t3; +DROP PROCEDURE p1; + # End of 5.5 test === modified file 'mysql-test/r/trigger.result' --- a/mysql-test/r/trigger.result 2011-02-15 11:47:33 +0000 +++ b/mysql-test/r/trigger.result 2011-03-10 08:33:54 +0000 @@ -809,7 +809,6 @@ drop trigger t1_bi; create trigger t1_bi after insert on t1 for each row insert into t3 values (new.id); execute stmt1; call p1(); -ERROR 42S02: Table 'test.t3' doesn't exist deallocate prepare stmt1; drop procedure p1; drop table t1, t2, t3; === added file 'mysql-test/suite/perfschema/r/relaylog.result' --- a/mysql-test/suite/perfschema/r/relaylog.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/relaylog.result 2011-03-10 12:30:05 +0000 @@ -0,0 +1,161 @@ +include/master-slave.inc +[connection master] +drop table if exists test.t1; +reset master; +create table test.t1(a int); +drop table test.t1; +show binlog events from ; +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Query # # use `test`; create table test.t1(a int) +slave-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ +"============ Performance schema on master ============" +select +substring(file_name, locate("master-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where file_name like "%master-%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +master-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY +master-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +select * from performance_schema.file_summary_by_instance +where file_name like "%slave-%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +"Expect a master binlog + binlog_index" +select +substring(file_name, locate("master-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where event_name like "%binlog%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +master-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY +master-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +select +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_event_name +where event_name like "%binlog%" order by event_name; +EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +wait/io/file/sql/binlog MANY MANY MANY MANY +wait/io/file/sql/binlog_index MANY NONE NONE NONE +select +EVENT_NAME, +if (count_star > 0, "MANY", "NONE") as COUNT_STAR +from performance_schema.events_waits_summary_global_by_event_name +where event_name like "%MYSQL_BIN_LOG%" order by event_name; +EVENT_NAME COUNT_STAR +wait/synch/cond/sql/MYSQL_BIN_LOG::COND_prep_xids NONE +wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond MANY +wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index MANY +wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_prep_xids NONE +"Expect no slave relay log" +select * from performance_schema.file_summary_by_instance +where event_name like "%relaylog%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +select * from performance_schema.file_summary_by_event_name +where event_name like "%relaylog%" order by event_name; +EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +wait/io/file/sql/relaylog 0 0 0 0 +wait/io/file/sql/relaylog_index 0 0 0 0 +select * from performance_schema.events_waits_summary_global_by_event_name +where event_name like "%MYSQL_RELAY_LOG%" order by event_name; +EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT +wait/synch/cond/sql/MYSQL_RELAY_LOG::update_cond 0 0 0 0 0 +wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_index 0 0 0 0 0 +"============ Performance schema on slave ============" +select * from performance_schema.file_summary_by_instance +where file_name like "%master-%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +select +substring(file_name, locate("slave-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where file_name like "%slave-%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +slave-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY +slave-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +slave-relay-bin.000001 wait/io/file/sql/relaylog MANY MANY MANY MANY +slave-relay-bin.000002 wait/io/file/sql/relaylog MANY MANY MANY MANY +slave-relay-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +"Expect a slave binlog + binlog_index" +select +substring(file_name, locate("slave-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where event_name like "%binlog%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +slave-bin.000001 wait/io/file/sql/binlog MANY MANY MANY MANY +slave-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +slave-relay-bin.index wait/io/file/sql/binlog_index NONE NONE NONE NONE +select +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_event_name +where event_name like "%binlog%" order by event_name; +EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +wait/io/file/sql/binlog MANY MANY MANY MANY +wait/io/file/sql/binlog_index MANY NONE MANY NONE +select +EVENT_NAME, +if (count_star > 0, "MANY", "NONE") as COUNT_STAR +from performance_schema.events_waits_summary_global_by_event_name +where event_name like "%MYSQL_BIN_LOG%" order by event_name; +EVENT_NAME COUNT_STAR +wait/synch/cond/sql/MYSQL_BIN_LOG::COND_prep_xids NONE +wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond NONE +wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index MANY +wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_prep_xids NONE +"Expect a slave relay log" +select +substring(file_name, locate("slave-", file_name)) as FILE_NAME, +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_instance +where event_name like "%relaylog%" order by file_name; +FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +slave-relay-bin.000001 wait/io/file/sql/relaylog MANY MANY MANY MANY +slave-relay-bin.000002 wait/io/file/sql/relaylog MANY MANY MANY MANY +select +EVENT_NAME, +if (count_read > 0, "MANY", "NONE") as COUNT_READ, +if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, +if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, +if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE +from performance_schema.file_summary_by_event_name +where event_name like "%relaylog%" order by event_name; +EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE +wait/io/file/sql/relaylog MANY MANY MANY MANY +wait/io/file/sql/relaylog_index MANY NONE NONE NONE +select +EVENT_NAME, +if (count_star > 0, "MANY", "NONE") as COUNT_STAR +from performance_schema.events_waits_summary_global_by_event_name +where event_name like "%MYSQL_RELAY_LOG%" order by event_name; +EVENT_NAME COUNT_STAR +wait/synch/cond/sql/MYSQL_RELAY_LOG::update_cond MANY +wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_index MANY +include/stop_slave.inc === added file 'mysql-test/suite/perfschema/t/relaylog.test' --- a/mysql-test/suite/perfschema/t/relaylog.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/relaylog.test 2011-03-10 12:02:28 +0000 @@ -0,0 +1,159 @@ +# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA + +--source include/have_log_bin.inc +--source include/not_embedded.inc +--source include/have_perfschema.inc +--source include/master-slave.inc + +--disable_warnings +drop table if exists test.t1; +--sync_slave_with_master +reset master; +--enable_warnings + +create table test.t1(a int); +drop table test.t1; + +--source include/show_binlog_events.inc + +connection master; +-- echo "============ Performance schema on master ============" + +select + substring(file_name, locate("master-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where file_name like "%master-%" order by file_name; + +select * from performance_schema.file_summary_by_instance + where file_name like "%slave-%" order by file_name; + +-- echo "Expect a master binlog + binlog_index" + +select + substring(file_name, locate("master-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where event_name like "%binlog%" order by file_name; + +select + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_event_name + where event_name like "%binlog%" order by event_name; + +select + EVENT_NAME, + if (count_star > 0, "MANY", "NONE") as COUNT_STAR + from performance_schema.events_waits_summary_global_by_event_name + where event_name like "%MYSQL_BIN_LOG%" order by event_name; + +-- echo "Expect no slave relay log" + +select * from performance_schema.file_summary_by_instance + where event_name like "%relaylog%" order by file_name; + +select * from performance_schema.file_summary_by_event_name + where event_name like "%relaylog%" order by event_name; + +select * from performance_schema.events_waits_summary_global_by_event_name + where event_name like "%MYSQL_RELAY_LOG%" order by event_name; + +sync_slave_with_master; +-- echo "============ Performance schema on slave ============" + +select * from performance_schema.file_summary_by_instance + where file_name like "%master-%" order by file_name; + +select + substring(file_name, locate("slave-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where file_name like "%slave-%" order by file_name; + +-- echo "Expect a slave binlog + binlog_index" + +select + substring(file_name, locate("slave-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where event_name like "%binlog%" order by file_name; + +select + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_event_name + where event_name like "%binlog%" order by event_name; + +select + EVENT_NAME, + if (count_star > 0, "MANY", "NONE") as COUNT_STAR + from performance_schema.events_waits_summary_global_by_event_name + where event_name like "%MYSQL_BIN_LOG%" order by event_name; + +-- echo "Expect a slave relay log" + +select + substring(file_name, locate("slave-", file_name)) as FILE_NAME, + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_instance + where event_name like "%relaylog%" order by file_name; + +select + EVENT_NAME, + if (count_read > 0, "MANY", "NONE") as COUNT_READ, + if (count_write > 0,"MANY", "NONE") as COUNT_WRITE, + if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ, + if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE + from performance_schema.file_summary_by_event_name + where event_name like "%relaylog%" order by event_name; + +select + EVENT_NAME, + if (count_star > 0, "MANY", "NONE") as COUNT_STAR + from performance_schema.events_waits_summary_global_by_event_name + where event_name like "%MYSQL_RELAY_LOG%" order by event_name; + +--source include/stop_slave.inc + === modified file 'mysql-test/t/disabled.def' --- a/mysql-test/t/disabled.def 2011-03-01 14:47:01 +0000 +++ b/mysql-test/t/disabled.def 2011-03-10 04:19:54 +0000 @@ -16,3 +16,4 @@ read_many_rows_innodb : Bug#37635 201 sum_distinct-big : Bug#56927 2010-11-15 mattiasj was not tested alter_table-big : Bug#37248 2010-11-15 mattiasj was not tested create-big : Bug#37248 2010-11-15 mattiasj was not tested +archive-big : Bug#11817185 2011-03-10 Anitha Disabled since this leads to timeout on Solaris Sparc === modified file 'mysql-test/t/sp.test' --- a/mysql-test/t/sp.test 2010-08-04 10:34:01 +0000 +++ b/mysql-test/t/sp.test 2011-03-10 08:33:54 +0000 @@ -8713,4 +8713,45 @@ call p1(3, 2); drop table t1; drop procedure p1; +--echo +--echo # -- +--echo # -- Bug 11765684 - 58674: SP-cache does not detect changes in +--echo # -- pre-locking list caused by triggers +--echo # --- + +--disable_warnings +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +DROP TABLE IF EXISTS t3; +DROP PROCEDURE IF EXISTS p1; +--enable_warnings + +CREATE TABLE t1(a INT); +CREATE TABLE t2(a INT); +CREATE TABLE t3(a INT); + +CREATE PROCEDURE p1() + INSERT INTO t1(a) VALUES (1); + +--echo +CREATE TRIGGER t1_ai AFTER INSERT ON t1 + FOR EACH ROW + INSERT INTO t2(a) VALUES (new.a); + +--echo +CALL p1(); + +--echo +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 + FOR EACH ROW + INSERT INTO t3(a) VALUES (new.a); + +--echo +CALL p1(); + +--echo +DROP TABLE t1, t2, t3; +DROP PROCEDURE p1; +--echo + --echo # End of 5.5 test === modified file 'mysql-test/t/trigger.test' --- a/mysql-test/t/trigger.test 2011-02-15 11:47:33 +0000 +++ b/mysql-test/t/trigger.test 2011-03-10 08:33:54 +0000 @@ -984,10 +984,6 @@ call p1(); drop trigger t1_bi; create trigger t1_bi after insert on t1 for each row insert into t3 values (new.id); execute stmt1; -# Until we implement proper mechanism for invalidation of SP statements -# invoked whenever a table used in SP changes, this statement will fail with -# 'Table ... does not exist' error. ---error ER_NO_SUCH_TABLE call p1(); deallocate prepare stmt1; drop procedure p1; === modified file 'mysys/my_conio.c' --- a/mysys/my_conio.c 2011-02-23 04:53:07 +0000 +++ b/mysys/my_conio.c 2011-03-10 08:49:21 +0000 @@ -59,7 +59,7 @@ my_win_is_console(FILE *file) @rerval Pointer to mbbuf, or NULL on I/0 error. */ char * -my_win_console_readline(CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize) +my_win_console_readline(const CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize) { uint dummy_errors; static wchar_t u16buf[MAX_CONSOLE_LINE_SIZE + 1], *pos; @@ -109,10 +109,10 @@ my_win_console_readline(CHARSET_INFO *cs @param to_chars Number of characters available in "to" */ static size_t -my_mbstou16s(CHARSET_INFO *cs, const uchar * from, size_t from_length, +my_mbstou16s(const CHARSET_INFO *cs, const uchar * from, size_t from_length, wchar_t *to, size_t to_chars) { - CHARSET_INFO *to_cs= &my_charset_utf16le_bin; + const CHARSET_INFO *to_cs= &my_charset_utf16le_bin; const uchar *from_end= from + from_length; wchar_t *to_orig= to, *to_end= to + to_chars; my_charset_conv_mb_wc mb_wc= cs->cset->mb_wc; @@ -179,7 +179,7 @@ outp: @param datalen Length of input string in bytes */ void -my_win_console_write(CHARSET_INFO *cs, const char *data, size_t datalen) +my_win_console_write(const CHARSET_INFO *cs, const char *data, size_t datalen) { static wchar_t u16buf[MAX_CONSOLE_LINE_SIZE + 1]; size_t nchars= my_mbstou16s(cs, (const uchar *) data, datalen, @@ -200,7 +200,7 @@ my_win_console_write(CHARSET_INFO *cs, c @param c Character (single byte) */ void -my_win_console_putc(CHARSET_INFO *cs, int c) +my_win_console_putc(const CHARSET_INFO *cs, int c) { char ch= (char) c; my_win_console_write(cs, &ch, 1); @@ -214,7 +214,7 @@ my_win_console_putc(CHARSET_INFO *cs, in @param data String to print */ void -my_win_console_fputs(CHARSET_INFO *cs, const char *data) +my_win_console_fputs(const CHARSET_INFO *cs, const char *data) { my_win_console_write(cs, data, strlen(data)); } @@ -224,7 +224,7 @@ my_win_console_fputs(CHARSET_INFO *cs, c Handle formatted output on the Windows console. */ void -my_win_console_vfprintf(CHARSET_INFO *cs, const char *fmt, va_list args) +my_win_console_vfprintf(const CHARSET_INFO *cs, const char *fmt, va_list args) { static char buff[MAX_CONSOLE_LINE_SIZE + 1]; size_t len= vsnprintf(buff, sizeof(buff) - 1, fmt, args); @@ -244,7 +244,7 @@ my_win_console_vfprintf(CHARSET_INFO *cs @param[OUT] argv Write pointer to allocated parameters here. */ int -my_win_translate_command_line_args(CHARSET_INFO *cs, int *argc, char ***argv) +my_win_translate_command_line_args(const CHARSET_INFO *cs, int *argc, char ***argv) { int i, ac; char **av; === modified file 'sql/binlog.cc' --- a/sql/binlog.cc 2011-01-10 06:17:31 +0000 +++ b/sql/binlog.cc 2011-03-10 10:08:09 +0000 @@ -1602,11 +1602,9 @@ void MYSQL_BIN_LOG::init(bool no_auto_ev void MYSQL_BIN_LOG::init_pthread_objects() { - DBUG_ASSERT(inited == 0); - inited= 1; - mysql_mutex_init(key_LOG_LOCK_log, &LOCK_log, MY_MUTEX_INIT_SLOW); - mysql_mutex_init(key_BINLOG_LOCK_index, &LOCK_index, MY_MUTEX_INIT_SLOW); - mysql_cond_init(key_BINLOG_update_cond, &update_cond, 0); + MYSQL_LOG::init_pthread_objects(); + mysql_mutex_init(m_key_LOCK_index, &LOCK_index, MY_MUTEX_INIT_SLOW); + mysql_cond_init(m_key_update_cond, &update_cond, 0); } @@ -1650,7 +1648,7 @@ bool MYSQL_BIN_LOG::open_index_file(cons return TRUE; } - if ((index_file_nr= mysql_file_open(key_file_binlog_index, + if ((index_file_nr= mysql_file_open(m_key_file_log_index, index_file_name, O_RDWR | O_CREAT | O_BINARY, MYF(MY_WME))) < 0 || @@ -1766,7 +1764,7 @@ bool MYSQL_BIN_LOG::open(const char *log /* open the main log file */ if (MYSQL_LOG::open( #ifdef HAVE_PSI_INTERFACE - key_file_binlog, + m_key_file_log, #endif log_name, log_type_arg, new_name, io_cache_type_arg)) { @@ -2909,7 +2907,7 @@ int MYSQL_BIN_LOG::purge_index_entry(THD /* Get rid of the trailing '\n' */ log_info.log_file_name[length-1]= 0; - if (!mysql_file_stat(key_file_binlog, log_info.log_file_name, &s, MYF(0))) + if (!mysql_file_stat(m_key_file_log, log_info.log_file_name, &s, MYF(0))) { if (my_errno == ENOENT) { @@ -3084,7 +3082,7 @@ int MYSQL_BIN_LOG::purge_logs_before_dat !is_active(log_info.log_file_name) && !log_in_use(log_info.log_file_name)) { - if (!mysql_file_stat(key_file_binlog, + if (!mysql_file_stat(m_key_file_log, log_info.log_file_name, &stat_area, MYF(0))) { if (my_errno == ENOENT) === modified file 'sql/binlog.h' --- a/sql/binlog.h 2011-01-10 06:17:31 +0000 +++ b/sql/binlog.h 2011-03-10 10:08:09 +0000 @@ -26,6 +26,16 @@ class Format_description_log_event; class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG { private: +#ifdef HAVE_PSI_INTERFACE + /** The instrumentation key to use for @ LOCK_index. */ + PSI_mutex_key m_key_LOCK_index; + /** The instrumentation key to use for @ update_cond. */ + PSI_cond_key m_key_update_cond; + /** The instrumentation key to use for opening the log file. */ + PSI_file_key m_key_file_log; + /** The instrumentation key to use for opening the log index file. */ + PSI_file_key m_key_file_log_index; +#endif /* LOCK_log and LOCK_index are inited by init_pthread_objects() */ mysql_mutex_t LOCK_index; mysql_mutex_t LOCK_prep_xids; @@ -155,6 +165,19 @@ public: on exit() - but only during the correct shutdown process */ +#ifdef HAVE_PSI_INTERFACE + void set_psi_keys(PSI_mutex_key key_LOCK_index, + PSI_cond_key key_update_cond, + PSI_file_key key_file_log, + PSI_file_key key_file_log_index) + { + m_key_LOCK_index= key_LOCK_index; + m_key_update_cond= key_update_cond; + m_key_file_log= key_file_log; + m_key_file_log_index= key_file_log_index; + } +#endif + int open(const char *opt_name); void close(); int log_xid(THD *thd, my_xid xid); === modified file 'sql/item_strfunc.cc' --- a/sql/item_strfunc.cc 2011-03-09 20:54:55 +0000 +++ b/sql/item_strfunc.cc 2011-03-10 08:23:14 +0000 @@ -2075,7 +2075,7 @@ void Item_func_decode::crypto_transform( } -Item *Item_func_sysconst::safe_charset_converter(CHARSET_INFO *tocs) +Item *Item_func_sysconst::safe_charset_converter(const CHARSET_INFO *tocs) { Item_string *conv; uint conv_errors; === modified file 'sql/item_strfunc.h' --- a/sql/item_strfunc.h 2011-03-09 20:54:55 +0000 +++ b/sql/item_strfunc.h 2011-03-10 08:23:14 +0000 @@ -454,7 +454,7 @@ class Item_func_sysconst :public Item_st public: Item_func_sysconst() { collation.set(system_charset_info,DERIVATION_SYSCONST); } - Item *safe_charset_converter(CHARSET_INFO *tocs); + Item *safe_charset_converter(const CHARSET_INFO *tocs); /* Used to create correct Item name in new converted item in safe_charset_converter, return string representation of this function === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2011-03-09 23:28:32 +0000 +++ b/sql/mysqld.cc 2011-03-10 15:04:18 +0000 @@ -3179,6 +3179,18 @@ int init_common_variables() */ global_system_variables.time_zone= my_tz_SYSTEM; +#ifdef HAVE_PSI_INTERFACE + /* + Complete the mysql_bin_log initialization. + Instrumentation keys are known only after the performance schema initialization, + and can not be set in the MYSQL_BIN_LOG constructor (called before main()). + */ + mysql_bin_log.set_psi_keys(key_BINLOG_LOCK_index, + key_BINLOG_update_cond, + key_file_binlog, + key_file_binlog_index); +#endif + /* Init mutexes for the global MYSQL_BIN_LOG objects. As safe_mutex depends on what MY_INIT() does, we can't init the mutexes of @@ -7968,6 +7980,7 @@ PSI_mutex_key key_BINLOG_LOCK_index, key key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data, key_LOCK_error_messages, key_LOG_INFO_lock, key_LOCK_thread_count, key_PARTITION_LOCK_auto_inc; +PSI_mutex_key key_RELAYLOG_LOCK_index; static PSI_mutex_info all_server_mutexes[]= { @@ -7984,6 +7997,7 @@ static PSI_mutex_info all_server_mutexes { &key_BINLOG_LOCK_index, "MYSQL_BIN_LOG::LOCK_index", 0}, { &key_BINLOG_LOCK_prep_xids, "MYSQL_BIN_LOG::LOCK_prep_xids", 0}, + { &key_RELAYLOG_LOCK_index, "MYSQL_RELAY_LOG::LOCK_index", 0}, { &key_delayed_insert_mutex, "Delayed_insert::mutex", 0}, { &key_hash_filo_lock, "hash_filo::lock", 0}, { &key_LOCK_active_mi, "LOCK_active_mi", PSI_FLAG_GLOBAL}, @@ -8050,6 +8064,7 @@ PSI_cond_key key_BINLOG_COND_prep_xids, key_relay_log_info_start_cond, key_relay_log_info_stop_cond, key_TABLE_SHARE_cond, key_user_level_lock_cond, key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache; +PSI_cond_key key_RELAYLOG_update_cond; static PSI_cond_info all_server_conds[]= { @@ -8063,6 +8078,7 @@ static PSI_cond_info all_server_conds[]= #endif /* HAVE_MMAP */ { &key_BINLOG_COND_prep_xids, "MYSQL_BIN_LOG::COND_prep_xids", 0}, { &key_BINLOG_update_cond, "MYSQL_BIN_LOG::update_cond", 0}, + { &key_RELAYLOG_update_cond, "MYSQL_RELAY_LOG::update_cond", 0}, { &key_COND_cache_status_changed, "Query_cache::COND_cache_status_changed", 0}, { &key_COND_manager, "COND_manager", PSI_FLAG_GLOBAL}, { &key_COND_server_started, "COND_server_started", PSI_FLAG_GLOBAL}, @@ -8125,6 +8141,7 @@ PSI_file_key key_file_binlog, key_file_b key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog, key_file_trg, key_file_trn, key_file_init; PSI_file_key key_file_query_log, key_file_slow_log; +PSI_file_key key_file_relaylog, key_file_relaylog_index; static PSI_file_info all_server_files[]= { @@ -8133,6 +8150,8 @@ static PSI_file_info all_server_files[]= #endif /* HAVE_MMAP */ { &key_file_binlog, "binlog", 0}, { &key_file_binlog_index, "binlog_index", 0}, + { &key_file_relaylog, "relaylog", 0}, + { &key_file_relaylog_index, "relaylog_index", 0}, { &key_file_casetest, "casetest", 0}, { &key_file_dbopt, "dbopt", 0}, { &key_file_des_key_file, "des_key_file", 0}, === modified file 'sql/mysqld.h' --- a/sql/mysqld.h 2011-03-09 21:42:42 +0000 +++ b/sql/mysqld.h 2011-03-10 15:04:18 +0000 @@ -254,6 +254,7 @@ extern PSI_mutex_key key_BINLOG_LOCK_ind key_relay_log_info_log_space_lock, key_relay_log_info_run_lock, key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data, key_LOCK_error_messages, key_LOCK_thread_count, key_PARTITION_LOCK_auto_inc; +extern PSI_mutex_key key_RELAYLOG_LOCK_index; extern PSI_rwlock_key key_rwlock_LOCK_grant, key_rwlock_LOCK_logger, key_rwlock_LOCK_sys_init_connect, key_rwlock_LOCK_sys_init_slave, @@ -273,6 +274,7 @@ extern PSI_cond_key key_BINLOG_COND_prep key_relay_log_info_start_cond, key_relay_log_info_stop_cond, key_TABLE_SHARE_cond, key_user_level_lock_cond, key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache; +extern PSI_cond_key key_RELAYLOG_update_cond; extern PSI_thread_key key_thread_bootstrap, key_thread_delayed_insert, key_thread_handle_manager, key_thread_kill_server, key_thread_main, @@ -290,6 +292,7 @@ extern PSI_file_key key_file_binlog, key key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog, key_file_trg, key_file_trn, key_file_init; extern PSI_file_key key_file_query_log, key_file_slow_log; +extern PSI_file_key key_file_relaylog, key_file_relaylog_index; extern PSI_socket_key key_socket_tcpip, key_socket_unix, key_socket_client_connection; void init_server_psi_keys(); === modified file 'sql/rpl_rli.cc' --- a/sql/rpl_rli.cc 2010-12-21 09:33:41 +0000 +++ b/sql/rpl_rli.cc 2011-03-10 10:08:09 +0000 @@ -77,6 +77,13 @@ Relay_log_info::Relay_log_info(bool is_s { DBUG_ENTER("Relay_log_info::Relay_log_info"); +#ifdef HAVE_PSI_INTERFACE + relay_log.set_psi_keys(key_RELAYLOG_LOCK_index, + key_RELAYLOG_update_cond, + key_file_relaylog, + key_file_relaylog_index); +#endif + group_relay_log_name[0]= event_relay_log_name[0]= group_master_log_name[0]= 0; until_log_name[0]= ign_master_log_name_end[0]= 0; @@ -104,7 +111,7 @@ static inline int add_relay_log(Relay_lo { MY_STAT s; DBUG_ENTER("add_relay_log"); - if (!mysql_file_stat(key_file_binlog, + if (!mysql_file_stat(key_file_relaylog, linfo->log_file_name, &s, MYF(0))) { sql_print_error("log %s listed in the index, but failed to stat", === modified file 'sql/sql_trigger.cc' --- a/sql/sql_trigger.cc 2011-03-09 20:54:55 +0000 +++ b/sql/sql_trigger.cc 2011-03-10 08:33:54 +0000 @@ -30,6 +30,7 @@ #include "sql_db.h" // get_default_db_collation #include "sql_acl.h" // *_ACL, is_acl_user #include "sql_handler.h" // mysql_ha_rm_tables +#include "sp_cache.h" // sp_invalidate_cache /*************************************************************************/ @@ -517,6 +518,12 @@ bool mysql_create_or_drop_trigger(THD *t */ thd->locked_tables_list.reopen_tables(thd); + /* + Invalidate SP-cache. That's needed because triggers may change list of + pre-locking tables. + */ + sp_cache_invalidate(); + end: if (!result) { --===============3272555955350758385== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/chris.powers@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: chris.powers@stripped # target_branch: file:///home/cpowers/work/dev/mysql-trunk-wl4896/ # testament_sha1: 9c6e82f20313222da7ff373e1d9285e83aa54519 # timestamp: 2011-03-10 09:05:09 -0600 # source_branch: file:///home/cpowers/work/dev/mysql-trunk/ # base_revision_id: chris.powers@stripped\ # yf7mts4qqwmr0mv7 # # Begin bundle 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 --===============3272555955350758385==--