From: Marc Alff Date: January 6 2012 8:40am Subject: bzr push into mysql-trunk-pfs-tuning branch (marc.alff:3460 to 3462) List-Archive: http://lists.mysql.com/commits/142315 Message-Id: <201201060840.q068ej4Q016820@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3462 Marc Alff 2012-01-06 Code cleanup modified: storage/perfschema/pfs_instr.h 3461 Marc Alff 2012-01-06 [merge] Merge mysql-trunk --> mysql-trunk-pfs-tuning modified: include/mysql/psi/psi.h include/mysql/psi/psi_abi_v1.h.pp mysql-test/include/show_slave_status.inc mysql-test/suite/perfschema/r/dml_handler.result mysql-test/suite/perfschema/r/innodb_table_io.result mysql-test/suite/perfschema/r/misc.result mysql-test/suite/perfschema/r/temp_table_io.result mysql-test/suite/perfschema/t/dml_handler.test mysql-test/suite/perfschema/t/misc.test mysql-test/suite/rpl/r/rpl_log_pos.result mysql-test/suite/rpl/r/rpl_manual_change_index_file.result mysql-test/suite/rpl/t/rpl_log_pos.test mysql-test/suite/rpl/t/rpl_manual_change_index_file.test mysys/psi_noop.c sql/handler.cc sql/sql_table.cc storage/perfschema/pfs.cc storage/perfschema/unittest/pfs_benchmark-t.cc 3460 Marc Alff 2012-01-06 Windows build break modified: storage/perfschema/unittest/pfs_benchmark_helper.cc === modified file 'include/mysql/psi/psi.h' --- a/include/mysql/psi/psi.h 2011-11-10 02:03:57 +0000 +++ b/include/mysql/psi/psi.h 2012-01-06 08:33:36 +0000 @@ -1161,13 +1161,14 @@ typedef void (*release_table_share_v1_t) /** Drop a table share. + @param temporary True for temporary tables @param schema_name the table schema name @param schema_name_length the table schema name length @param table_name the table name @param table_name_length the table name length */ typedef void (*drop_table_share_v1_t) - (const char *schema_name, int schema_name_length, + (my_bool temporary, const char *schema_name, int schema_name_length, const char *table_name, int table_name_length); /** === modified file 'include/mysql/psi/psi_abi_v1.h.pp' --- a/include/mysql/psi/psi_abi_v1.h.pp 2011-11-10 02:03:57 +0000 +++ b/include/mysql/psi/psi_abi_v1.h.pp 2012-01-06 08:33:36 +0000 @@ -307,7 +307,7 @@ typedef struct PSI_table_share* (*get_ta (my_bool temporary, struct TABLE_SHARE *share); typedef void (*release_table_share_v1_t)(struct PSI_table_share *share); typedef void (*drop_table_share_v1_t) - (const char *schema_name, int schema_name_length, + (my_bool temporary, const char *schema_name, int schema_name_length, const char *table_name, int table_name_length); typedef struct PSI_table* (*open_table_v1_t) (struct PSI_table_share *share, const void *identity); === modified file 'mysql-test/include/show_slave_status.inc' --- a/mysql-test/include/show_slave_status.inc 2010-12-20 14:57:35 +0000 +++ b/mysql-test/include/show_slave_status.inc 2012-01-04 15:48:00 +0000 @@ -55,6 +55,11 @@ # comma-separated list. Example: # # --let $status_items= Master_Log_File, Relay_Master_Log_File +# +# $slave_io_error_replace +# If set, one or more regex patterns for replacing variable +# text in the error message. Syntax as --replace-regex +# --let $_show_slave_status_items= $status_items @@ -70,6 +75,7 @@ while ($_show_slave_status_items) --let $_show_slave_status_items= `SELECT LTRIM(SUBSTRING('$_show_slave_status_items', LENGTH('$_show_slave_status_name') + 2))` --let $_show_slave_status_value= query_get_value(SHOW SLAVE STATUS, $_show_slave_status_name, 1) + --replace_regex $slave_io_error_replace --let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')` --echo $_show_slave_status_name = '$_show_slave_status_value' } === modified file 'mysql-test/suite/perfschema/r/dml_handler.result' --- a/mysql-test/suite/perfschema/r/dml_handler.result 2011-08-11 03:11:58 +0000 +++ b/mysql-test/suite/perfschema/r/dml_handler.result 2012-01-04 18:29:43 +0000 @@ -153,3 +153,4 @@ ERROR HY000: Table storage engine for 'c SELECT TABLE_NAME INTO @table_name FROM table_list WHERE id=1; HANDLER performance_schema.accounts OPEN; ERROR HY000: Table storage engine for 'accounts' doesn't have this option +DROP TEMPORARY TABLE table_list; === modified file 'mysql-test/suite/perfschema/r/innodb_table_io.result' --- a/mysql-test/suite/perfschema/r/innodb_table_io.result 2011-08-11 03:11:58 +0000 +++ b/mysql-test/suite/perfschema/r/innodb_table_io.result 2012-01-04 18:29:43 +0000 @@ -107,9 +107,7 @@ wait/io/table/sql/handler handler.cc: TA wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test #sql-XXXX insert NULL wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test #sql-XXXX insert NULL wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL wait/io/table/sql/handler handler.cc: TABLE test no_index_tab fetch NULL === modified file 'mysql-test/suite/perfschema/r/misc.result' --- a/mysql-test/suite/perfschema/r/misc.result 2011-04-20 17:56:53 +0000 +++ b/mysql-test/suite/perfschema/r/misc.result 2012-01-04 18:29:43 +0000 @@ -1,3 +1,24 @@ +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type +WHERE object_schema='test'; +object_schema object_name +CREATE TABLE test.t_before(a INT); +INSERT INTO test.t_before VALUES (1); +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type +WHERE object_schema='test'; +object_schema object_name +test t_before +RENAME TABLE test.t_before TO test.t_after; +SELECT COUNT(*) FROM test.t_after; +COUNT(*) +1 +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type +WHERE object_schema='test'; +object_schema object_name +test t_after +DROP TABLE test.t_after; +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type +WHERE object_schema='test'; +object_schema object_name SELECT EVENT_ID FROM performance_schema.events_waits_current WHERE THREAD_ID IN (SELECT THREAD_ID FROM performance_schema.threads) @@ -7,10 +28,19 @@ WHERE NAME LIKE "wait/synch/%") LIMIT 1; create table test.t1(a int) engine=performance_schema; ERROR HY000: Can't create table 'test.t1' (errno: 131) +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type +WHERE object_schema='test'; +object_schema object_name create table test.t1 like performance_schema.events_waits_current; ERROR HY000: Can't create table 'test.t1' (errno: 131) +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type +WHERE object_schema='test'; +object_schema object_name create table performance_schema.t1(a int); ERROR 42000: CREATE command denied to user 'root'@'localhost' for table 't1' +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type +WHERE object_schema='test'; +object_schema object_name drop table if exists test.ghost; create table test.ghost (a int, b int); alter table test.ghost add index index_a(a); === modified file 'mysql-test/suite/perfschema/r/temp_table_io.result' --- a/mysql-test/suite/perfschema/r/temp_table_io.result 2011-08-11 03:11:58 +0000 +++ b/mysql-test/suite/perfschema/r/temp_table_io.result 2012-01-04 18:29:43 +0000 @@ -73,42 +73,15 @@ event_name short_source object_type obje wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab insert NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab insert NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab insert NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab update NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab update NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab update NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab delete NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL -wait/io/table/sql/handler handler.cc: TEMPORARY TABLE test no_index_tab fetch NULL +wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL +wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL +wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL +wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL +wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL +wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL wait/io/table/sql/handler handler.cc: TABLE test marker insert NULL show status like 'performance_schema_%'; === modified file 'mysql-test/suite/perfschema/t/dml_handler.test' --- a/mysql-test/suite/perfschema/t/dml_handler.test 2011-10-19 21:49:22 +0000 +++ b/mysql-test/suite/perfschema/t/dml_handler.test 2012-01-04 18:29:43 +0000 @@ -15,7 +15,7 @@ --echo --echo # Create a temporary table of performance schema table names --echo - + CREATE TEMPORARY TABLE table_list (id INT AUTO_INCREMENT, PRIMARY KEY (id)) AS SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='performance_schema'; @@ -38,3 +38,5 @@ while ($count > 0) dec $count; } +DROP TEMPORARY TABLE table_list; + === modified file 'mysql-test/suite/perfschema/t/misc.test' --- a/mysql-test/suite/perfschema/t/misc.test 2011-10-19 21:49:22 +0000 +++ b/mysql-test/suite/perfschema/t/misc.test 2012-01-04 18:29:43 +0000 @@ -5,6 +5,40 @@ --source include/have_perfschema.inc # +# Bug#12790483 OBJECTS_SUMMARY_GLOBAL_BY_TYPE AND RENAME TABLE +# +# Rename table leaves old tables names behind in +# performance_schema.objects_summary_global_by_type +# +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type + WHERE object_schema='test'; + +CREATE TABLE test.t_before(a INT); +INSERT INTO test.t_before VALUES (1); + +# The new table should appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE. + +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type + WHERE object_schema='test'; + +RENAME TABLE test.t_before TO test.t_after; + +# The renamed table should appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE, but only +# after it is accessed. + +SELECT COUNT(*) FROM test.t_after; + +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type + WHERE object_schema='test'; + +DROP TABLE test.t_after; + +# The renamed table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE. + +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type + WHERE object_schema='test'; + +# # Bug#45496 Performance schema: assertion fails in # ha_perfschema::rnd_init:223 # @@ -26,6 +60,11 @@ LIMIT 1; --error ER_CANT_CREATE_TABLE create table test.t1(a int) engine=performance_schema; +# The table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE + +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type + WHERE object_schema='test'; + # # Bug#44897 Performance Schema: can create a ghost table in another database # @@ -33,6 +72,11 @@ create table test.t1(a int) engine=perfo --error ER_CANT_CREATE_TABLE create table test.t1 like performance_schema.events_waits_current; +# The table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE + +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type + WHERE object_schema='test'; + # # Bug#44898 PerformanceSchema: can create a table in db performance_schema, cannot insert # @@ -40,6 +84,11 @@ create table test.t1 like performance_sc --error ER_TABLEACCESS_DENIED_ERROR create table performance_schema.t1(a int); +# The table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE + +SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type + WHERE object_schema='test'; + # # Bug#51447 performance schema evil twin files # === modified file 'mysql-test/suite/rpl/r/rpl_log_pos.result' --- a/mysql-test/suite/rpl/r/rpl_log_pos.result 2011-11-19 08:08:03 +0000 +++ b/mysql-test/suite/rpl/r/rpl_log_pos.result 2012-01-04 15:48:00 +0000 @@ -12,6 +12,7 @@ change master to master_log_pos=MASTER_L Read_Master_Log_Pos = '75' start slave; include/wait_for_slave_io_error.inc [errno=1236] +Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the last event was read from 'master-bin.000001' at XXX, the last byte read was read from 'master-bin.000001' at XXX.'' include/stop_slave_sql.inc show master status; File Position Binlog_Do_DB Binlog_Ignore_DB === modified file 'mysql-test/suite/rpl/r/rpl_manual_change_index_file.result' --- a/mysql-test/suite/rpl/r/rpl_manual_change_index_file.result 2011-11-19 08:08:03 +0000 +++ b/mysql-test/suite/rpl/r/rpl_manual_change_index_file.result 2012-01-04 15:48:00 +0000 @@ -8,6 +8,7 @@ CREATE TABLE t1(c1 INT); FLUSH LOGS; call mtr.add_suppression('Got fatal error 1236 from master when reading data from binary log: .*could not find next log'); include/wait_for_slave_io_error.inc [errno=1236] +Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'could not find next log; the last event was read from 'master-bin.000002' at XXX, the last byte read was read from 'master-bin.000002' at XXX.'' CREATE TABLE t2(c1 INT); FLUSH LOGS; CREATE TABLE t3(c1 INT); === modified file 'mysql-test/suite/rpl/t/rpl_log_pos.test' --- a/mysql-test/suite/rpl/t/rpl_log_pos.test 2011-10-28 21:22:19 +0000 +++ b/mysql-test/suite/rpl/t/rpl_log_pos.test 2012-01-04 15:48:00 +0000 @@ -22,12 +22,9 @@ let $status_items= Read_Master_Log_Pos; source include/show_slave_status.inc; start slave; let $slave_io_errno= 1236; -# -# Win and Unix path is printed differently: BUG#13055685. So -# show_slave_io_error is made 0 until the bug fixes provide necessary -# facilities -# -let $show_slave_io_error= 0; +--let $show_slave_io_error= 1 +# Mask line numbers, and whether master-bin is preceded by "./" or "." +--let $slave_io_error_replace= / at [0-9]*/ at XXX/ /\.\/*master-bin/master-bin/ source include/wait_for_slave_io_error.inc; source include/stop_slave_sql.inc; === modified file 'mysql-test/suite/rpl/t/rpl_manual_change_index_file.test' --- a/mysql-test/suite/rpl/t/rpl_manual_change_index_file.test 2011-10-28 21:22:19 +0000 +++ b/mysql-test/suite/rpl/t/rpl_manual_change_index_file.test 2012-01-04 15:48:00 +0000 @@ -61,12 +61,9 @@ call mtr.add_suppression('Got fatal erro connection slave; # 1236 = ER_MASTER_FATAL_ERROR_READING_BINLOG --let $slave_io_errno= 1236 -# -# Win and Unix path is printed differently: BUG#13055685. So -# show_slave_io_error is made 0 until the bug fixes provide necessary -# facilities -# ---let $show_slave_io_error= 0 +--let $show_slave_io_error= 1 +# Mask line numbers, and whether master-bin is preceded by "./" or "." +--let $slave_io_error_replace= / at [0-9]*/ at XXX/ /\.\/*master-bin/master-bin/ --source include/wait_for_slave_io_error.inc connection master; === modified file 'mysys/psi_noop.c' --- a/mysys/psi_noop.c 2011-11-10 02:03:57 +0000 +++ b/mysys/psi_noop.c 2012-01-06 08:33:36 +0000 @@ -141,8 +141,9 @@ static void release_table_share_noop(PSI } static void -drop_table_share_noop(const char *schema_name NNN, int schema_name_length NNN, - const char *table_name NNN, int table_name_length NNN) +drop_table_share_noop(my_bool temporary NNN, const char *schema_name NNN, + int schema_name_length NNN, const char *table_name NNN, + int table_name_length NNN) { return; } === modified file 'sql/handler.cc' --- a/sql/handler.cc 2012-01-05 15:45:51 +0000 +++ b/sql/handler.cc 2012-01-06 08:33:36 +0000 @@ -2119,7 +2119,11 @@ int ha_delete_table(THD *thd, handlerton #ifdef HAVE_PSI_TABLE_INTERFACE if (likely(error == 0)) - PSI_CALL(drop_table_share)(db, strlen(db), alias, strlen(alias)); + { + my_bool temp_table= (my_bool)is_prefix(alias, tmp_file_prefix); + PSI_CALL(drop_table_share)(temp_table, db, strlen(db), + alias, strlen(alias)); + } #endif DBUG_RETURN(error); @@ -3927,7 +3931,7 @@ void handler::get_dynamic_partition_info int ha_create_table(THD *thd, const char *path, const char *db, const char *table_name, HA_CREATE_INFO *create_info, - bool update_create_info) + bool update_create_info) { int error= 1; TABLE table; @@ -3935,16 +3939,17 @@ int ha_create_table(THD *thd, const char const char *name; TABLE_SHARE share; DBUG_ENTER("ha_create_table"); +#ifdef HAVE_PSI_TABLE_INTERFACE + my_bool temp_table= (my_bool)is_prefix(table_name, tmp_file_prefix) || + (create_info->options & HA_LEX_CREATE_TMP_TABLE ? TRUE : FALSE); +#endif init_tmp_table_share(thd, &share, db, 0, table_name, path); if (open_table_def(thd, &share, 0)) goto err; #ifdef HAVE_PSI_TABLE_INTERFACE - { - my_bool temp= (create_info->options & HA_LEX_CREATE_TMP_TABLE ? TRUE : FALSE); - share.m_psi= PSI_CALL(get_table_share)(temp, &share); - } + share.m_psi= PSI_CALL(get_table_share)(temp_table, &share); #endif if (open_table_from_share(thd, &share, "", 0, (uint) READ_ALL, 0, &table, @@ -3962,6 +3967,10 @@ int ha_create_table(THD *thd, const char { strxmov(name_buff, db, ".", table_name, NullS); my_error(ER_CANT_CREATE_TABLE, MYF(ME_BELL+ME_WAITTANG), name_buff, error); +#ifdef HAVE_PSI_TABLE_INTERFACE + PSI_CALL(drop_table_share)(temp_table, db, strlen(db), table_name, + strlen(table_name)); +#endif } err: free_table_share(&share); === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2012-01-05 12:12:18 +0000 +++ b/sql/sql_table.cc 2012-01-05 17:57:53 +0000 @@ -54,6 +54,7 @@ #include "transaction.h" #include "datadict.h" // dd_frm_type() #include "sql_resolver.h" // setup_order, fix_inner_refs +#include #ifdef __WIN__ #include @@ -2395,9 +2396,9 @@ int mysql_rm_table_no_locks(THD *thd, TA tbl_name.append('.'); tbl_name.append(String(table->table_name,system_charset_info)); - push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE, - ER_BAD_TABLE_ERROR, ER(ER_BAD_TABLE_ERROR), - tbl_name.c_ptr()); + push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE, + ER_BAD_TABLE_ERROR, ER(ER_BAD_TABLE_ERROR), + tbl_name.c_ptr()); } else { @@ -2423,21 +2424,21 @@ int mysql_rm_table_no_locks(THD *thd, TA /* No error if non existent table and 'IF EXIST' clause or view */ if ((error == ENOENT || error == HA_ERR_NO_SUCH_TABLE) && - (if_exists || table_type == NULL)) + (if_exists || table_type == NULL)) { - error= 0; + error= 0; thd->clear_error(); } if (error == HA_ERR_ROW_IS_REFERENCED) { - /* the table is referenced by a foreign key constraint */ - foreign_key_error= 1; + /* the table is referenced by a foreign key constraint */ + foreign_key_error= 1; } if (!error || error == ENOENT || error == HA_ERR_NO_SUCH_TABLE) { int new_error; - /* Delete the table definition file */ - strmov(end,reg_ext); + /* Delete the table definition file */ + strmov(end,reg_ext); if (!(new_error= mysql_file_delete(key_file_frm, path, MYF(MY_WME)))) { non_tmp_table_deleted= TRUE; @@ -2451,7 +2452,7 @@ int mysql_rm_table_no_locks(THD *thd, TA if (error) { if (wrong_tables.length()) - wrong_tables.append(','); + wrong_tables.append(','); wrong_tables.append(String(db,system_charset_info)); wrong_tables.append('.'); @@ -2464,6 +2465,11 @@ int mysql_rm_table_no_locks(THD *thd, TA my_printf_error(ER_BAD_TABLE_ERROR, ER(ER_BAD_TABLE_ERROR), MYF(0), table->table_name);); +#ifdef HAVE_PSI_TABLE_INTERFACE + if (drop_temporary && likely(error == 0)) + PSI_CALL(drop_table_share)(true, table->db, table->db_length, + table->table_name, table->table_name_length); +#endif } DEBUG_SYNC(thd, "rm_table_no_locks_before_binlog"); thd->thread_specific_used|= (trans_tmp_table_deleted || @@ -4725,6 +4731,21 @@ mysql_rename_table(handlerton *base, con my_error(ER_ERROR_ON_RENAME, MYF(0), from, to, error, my_strerror(errbuf, sizeof(errbuf), error)); } + +#ifdef HAVE_PSI_TABLE_INTERFACE + /* + Remove the old table share from the pfs table share array. The new table + share will be created when the renamed table is first accessed. + */ + if (likely(error == 0)) + { + my_bool temp_table= (my_bool)is_prefix(old_name, tmp_file_prefix); + PSI_CALL(drop_table_share)(temp_table, old_db, strlen(old_db), + old_name, strlen(old_name)); + } +#endif + + DBUG_RETURN(error != 0); } === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2011-12-19 08:58:41 +0000 +++ b/storage/perfschema/pfs.cc 2012-01-06 08:33:36 +0000 @@ -1479,6 +1479,9 @@ static void destroy_cond_v1(PSI_cond* co static PSI_table_share* get_table_share_v1(my_bool temporary, TABLE_SHARE *share) { + /* Ignore temporary tables. */ + if (temporary) + return NULL; /* An instrumented thread is required, for LF_PINS. */ PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS); if (unlikely(pfs_thread == NULL)) @@ -1507,14 +1510,18 @@ static void release_table_share_v1(PSI_t @sa PSI_v1::drop_table_share. */ static void -drop_table_share_v1(const char *schema_name, int schema_name_length, +drop_table_share_v1(my_bool temporary, + const char *schema_name, int schema_name_length, const char *table_name, int table_name_length) { + /* Ignore temporary tables. */ + if (temporary) + return; PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS); if (unlikely(pfs_thread == NULL)) return; /* TODO: temporary tables */ - drop_table_share(pfs_thread, false, schema_name, schema_name_length, + drop_table_share(pfs_thread, temporary, schema_name, schema_name_length, table_name, table_name_length); } === modified file 'storage/perfschema/pfs_instr.h' --- a/storage/perfschema/pfs_instr.h 2011-11-08 22:45:59 +0000 +++ b/storage/perfschema/pfs_instr.h 2012-01-06 08:39:30 +0000 @@ -377,10 +377,7 @@ struct PFS_thread : PFS_connection_slice /** Thread instrumentation flag. */ bool m_enabled; -#ifdef NEVER - /** Size of @c m_events_waits_stack. */ - uint m_events_waits_count; -#endif + /** Current wait event in the event stack. */ PFS_events_waits *m_events_waits_current; /** Event ID counter */ ulonglong m_event_id; === modified file 'storage/perfschema/unittest/pfs_benchmark-t.cc' --- a/storage/perfschema/unittest/pfs_benchmark-t.cc 2011-11-16 09:12:07 +0000 +++ b/storage/perfschema/unittest/pfs_benchmark-t.cc 2012-01-06 08:33:36 +0000 @@ -435,7 +435,8 @@ void benchmark_create_table_share(uint c { that= PSI_CALL(get_table_share)(false, &table_share); do_some_work(); - PSI_CALL(drop_table_share)(table_share.db.str, table_share.db.length, + PSI_CALL(drop_table_share)(false, + table_share.db.str, table_share.db.length, table_share.table_name.str, table_share.table_name.length); } @@ -477,7 +478,8 @@ void benchmark_find_table_share(uint cou do_some_work(); PSI_CALL(release_table_share)(that_2); } - PSI_CALL(drop_table_share)(table_share.db.str, table_share.db.length, + PSI_CALL(drop_table_share)(false, + table_share.db.str, table_share.db.length, table_share.table_name.str, table_share.table_name.length); timer_end= my_timer_cycles(); @@ -522,7 +524,8 @@ void benchmark_open_table(uint count, co timer_end= my_timer_cycles(); timer_cycles= timer_end-timer_start; - PSI_CALL(drop_table_share)(table_share.db.str, table_share.db.length, + PSI_CALL(drop_table_share)(false, + table_share.db.str, table_share.db.length, table_share.table_name.str, table_share.table_name.length); // ok(get_work_done() == count, "work done"); @@ -576,7 +579,8 @@ void benchmark_table_io(uint count, cons // ok(get_work_done() == count, "work done"); PSI_CALL(close_table)(that); - PSI_CALL(drop_table_share)(table_share.db.str, table_share.db.length, + PSI_CALL(drop_table_share)(false, + table_share.db.str, table_share.db.length, table_share.table_name.str, table_share.table_name.length); diag("TABLE_IO benchmark: %s, object %s, %d calls, %13llu cycles, %13llu avg", @@ -628,7 +632,8 @@ void benchmark_table_lock(uint count, co // ok(get_work_done() == count, "work done"); PSI_CALL(close_table)(that); - PSI_CALL(drop_table_share)(table_share.db.str, table_share.db.length, + PSI_CALL(drop_table_share)(false, + table_share.db.str, table_share.db.length, table_share.table_name.str, table_share.table_name.length); diag("TABLE_LOCK benchmark: %s, object %s, %d calls, %13llu cycles, %13llu avg", No bundle (reason: useless for push emails).