From: Marc Alff Date: July 26 2010 6:14pm Subject: bzr push into mysql-next-mr branch (marc.alff:3169 to 3171) List-Archive: http://lists.mysql.com/commits/114375 Message-Id: <20100726181445.112D145E81@linux-su11.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1870446511738784741==" --===============1870446511738784741== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3171 Marc Alff 2010-07-26 Fix branch name modified: .bzr-mysql/default.conf 3170 Marc Alff 2010-07-26 [merge] WL#5291 MySQL Install / Upgrade script format Merge mysql-next-mr-wl5291 into mysql-next-mr-stage removed: mysql-test/suite/perfschema/r/pfs_upgrade.result mysql-test/suite/perfschema/t/pfs_upgrade.test added: mysql-test/suite/perfschema/include/pfs_upgrade.inc mysql-test/suite/perfschema/r/pfs_upgrade_lc0.result mysql-test/suite/perfschema/r/pfs_upgrade_lc1.result mysql-test/suite/perfschema/r/pfs_upgrade_lc2.result mysql-test/suite/perfschema/t/pfs_upgrade_lc0.test mysql-test/suite/perfschema/t/pfs_upgrade_lc1.test mysql-test/suite/perfschema/t/pfs_upgrade_lc2.test sql/sql_bootstrap.cc sql/sql_bootstrap.h modified: .bzr-mysql/default.conf .bzrignore client/mysql_upgrade.c libmysqld/CMakeLists.txt libmysqld/Makefile.am mysql-test/mysql-test-run.pl scripts/Makefile.am scripts/comp_sql.c scripts/mysql_system_tables.sql sql/CMakeLists.txt sql/Makefile.am sql/sql_parse.cc 3169 Marc Alff 2010-07-26 Fixed build break when compiling without the performance schema modified: include/mysql/psi/mysql_table.h mysys/thr_lock.c sql/handler.cc === modified file '.bzrignore' --- a/.bzrignore 2010-06-23 11:01:12 +0000 +++ b/.bzrignore 2010-06-30 23:15:47 +0000 @@ -3114,3 +3114,4 @@ libmysqld/merge_archives_mysqlserver.cma libmysqld/mysqlserver_depends.c libmysqld/examples/mysql_embedded sql/.empty +libmysqld/sql_bootstrap.cc === modified file 'client/mysql_upgrade.c' --- a/client/mysql_upgrade.c 2010-07-15 11:13:30 +0000 +++ b/client/mysql_upgrade.c 2010-07-23 17:20:00 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 MySQL AB +/* Copyright (c) 2000, 2010, 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 @@ -10,8 +10,8 @@ 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ #include "client_priv.h" #include @@ -753,17 +753,35 @@ static void print_line(char* line) static int run_sql_fix_privilege_tables(void) { int found_real_errors= 0; + const char **query_ptr; + DYNAMIC_STRING ds_script; DYNAMIC_STRING ds_result; DBUG_ENTER("run_sql_fix_privilege_tables"); + if (init_dynamic_string(&ds_script, "", 65536, 1024)) + die("Out of memory"); + if (init_dynamic_string(&ds_result, "", 512, 512)) die("Out of memory"); verbose("Running 'mysql_fix_privilege_tables'..."); - run_query(mysql_fix_privilege_tables, + + /* + Individual queries can not be executed independently by invoking + a forked mysql client, because the script uses session variables + and prepared statements. + */ + for ( query_ptr= &mysql_fix_privilege_tables[0]; + *query_ptr != NULL; + query_ptr++ + ) + { + dynstr_append(&ds_script, *query_ptr); + } + + run_query(ds_script.str, &ds_result, /* Collect result */ TRUE); - { /* Scan each line of the result for real errors @@ -788,6 +806,7 @@ static int run_sql_fix_privilege_tables( } dynstr_free(&ds_result); + dynstr_free(&ds_script); return found_real_errors; } === modified file 'libmysqld/CMakeLists.txt' --- a/libmysqld/CMakeLists.txt 2010-07-18 13:23:58 +0000 +++ b/libmysqld/CMakeLists.txt 2010-07-23 17:20:00 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2006 MySQL AB +# Copyright (c) 2006, 2010, 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 @@ -86,7 +86,7 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc l ../sql/rpl_utility.cc ../sql/binlog.cc ../sql/sys_vars.cc ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc - ../sql/mdl.cc ../sql/transaction.cc + ../sql/mdl.cc ../sql/transaction.cc ../sql/sql_bootstrap.cc ${GEN_SOURCES} ${MYSYS_LIBWRAP_SOURCE} ) === modified file 'libmysqld/Makefile.am' --- a/libmysqld/Makefile.am 2010-07-16 21:00:50 +0000 +++ b/libmysqld/Makefile.am 2010-07-23 17:20:00 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2006 MySQL AB +# Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public @@ -81,6 +81,7 @@ sqlsources = derror.cc field.cc field_co debug_sync.cc sql_tablespace.cc transaction.cc \ rpl_injector.cc my_user.c partition_info.cc \ sql_servers.cc event_parse_data.cc sql_signal.cc \ + sql_bootstrap.cc \ binlog.cc rpl_handler.cc mdl.cc keycaches.cc sql_audit.cc libmysqld_int_a_SOURCES= $(libmysqld_sources) === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-07-20 08:10:38 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-07-23 17:20:00 +0000 @@ -1,7 +1,7 @@ #!/usr/bin/perl # -*- cperl -*- -# Copyright (C) 2009 Sun Microsystems, Inc +# Copyright (c) 2009, 2010, 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 @@ -13,8 +13,8 @@ # 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA # ############################################################################## @@ -2890,7 +2890,7 @@ sub mysql_install_db { { my $sql_dir= dirname($path_sql); # Use the mysql database for system tables - mtr_tofile($bootstrap_sql_file, "use mysql\n"); + mtr_tofile($bootstrap_sql_file, "use mysql;\n"); # Add the offical mysql system tables # for a production system === added file 'mysql-test/suite/perfschema/include/pfs_upgrade.inc' --- a/mysql-test/suite/perfschema/include/pfs_upgrade.inc 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/include/pfs_upgrade.inc 2010-06-30 14:05:18 +0000 @@ -0,0 +1,134 @@ +# Copyright (c) 2010, 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 +# Make sure mysql_upgrade does not destroy data in a 'performance_schema' +# database. +# + +--disable_warnings +drop table if exists test.user_table; +drop procedure if exists test.user_proc; +drop function if exists test.user_func; +drop event if exists test.user_event; +--enable_warnings + +--echo "Testing mysql_upgrade with TABLE performance_schema.user_table" + +create table test.user_table(a int); + +let $MYSQLD_DATADIR= `SELECT @@datadir`; +--copy_file $MYSQLD_DATADIR/test/user_table.frm $MYSQLD_DATADIR/performance_schema/user_table.frm + +# Make sure the table is visible +use performance_schema; +show tables like "user_table"; + +--error 1 +--exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +# Verify that mysql_upgrade complained about the performance_schema +--cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +# Make sure the table is still visible +show tables like "user_table"; + +use test; + +--remove_file $MYSQLD_DATADIR/performance_schema/user_table.frm +drop table test.user_table; + +--echo "Testing mysql_upgrade with VIEW performance_schema.user_view" + +create view test.user_view as select "Not supposed to be here"; + +let $MYSQLD_DATADIR= `SELECT @@datadir`; +--copy_file $MYSQLD_DATADIR/test/user_view.frm $MYSQLD_DATADIR/performance_schema/user_view.frm + +# Make sure the view is visible +use performance_schema; +show tables like "user_view"; + +--error 1 +--exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +# Verify that mysql_upgrade complained about the performance_schema +--cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +# Make sure the view is still visible +show tables like "user_view"; + +use test; + +--remove_file $MYSQLD_DATADIR/performance_schema/user_view.frm +drop view test.user_view; + +--echo "Testing mysql_upgrade with PROCEDURE performance_schema.user_proc" + +create procedure test.user_proc() + select "Not supposed to be here"; + +update mysql.proc set db='performance_schema' where name='user_proc'; + +--error 1 +--exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +# Verify that mysql_upgrade complained about the performance_schema +--cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +select name from mysql.proc where db='performance_schema'; + +update mysql.proc set db='test' where name='user_proc'; +drop procedure test.user_proc; + +--echo "Testing mysql_upgrade with FUNCTION performance_schema.user_func" + +create function test.user_func() returns integer + return 0; + +update mysql.proc set db='performance_schema' where name='user_func'; + +--error 1 +--exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +# Verify that mysql_upgrade complained about the performance_schema +--cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +select name from mysql.proc where db='performance_schema'; + +update mysql.proc set db='test' where name='user_func'; +drop function test.user_func; + +--echo "Testing mysql_upgrade with EVENT performance_schema.user_event" + +create event test.user_event on schedule every 1 day do + select "not supposed to be here"; + +update mysql.event set db='performance_schema' where name='user_event'; + +--error 1 +--exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +# Verify that mysql_upgrade complained about the performance_schema +--cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + +select name from mysql.event where db='performance_schema'; + +update mysql.event set db='test' where name='user_event'; +drop event test.user_event; + +--remove_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out +--remove_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err + === removed file 'mysql-test/suite/perfschema/r/pfs_upgrade.result' --- a/mysql-test/suite/perfschema/r/pfs_upgrade.result 2010-07-15 21:57:47 +0000 +++ b/mysql-test/suite/perfschema/r/pfs_upgrade.result 1970-01-01 00:00:00 +0000 @@ -1,153 +0,0 @@ -drop table if exists test.user_table; -drop procedure if exists test.user_proc; -drop function if exists test.user_func; -drop event if exists test.user_event; -"Testing mysql_upgrade with TABLE performance_schema.user_table" -create table test.user_table(a int); -use performance_schema; -show tables like "user_table"; -Tables_in_performance_schema (user_table) -user_table -ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists -ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists -ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists -ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists -ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists -ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists -ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists -ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists -ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists -ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists -ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists -ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists -ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists -ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database. -FATAL ERROR: Upgrade failed -show tables like "user_table"; -Tables_in_performance_schema (user_table) -user_table -use test; -drop table test.user_table; -"Testing mysql_upgrade with VIEW performance_schema.user_view" -create view test.user_view as select "Not supposed to be here"; -use performance_schema; -show tables like "user_view"; -Tables_in_performance_schema (user_view) -user_view -ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists -ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists -ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists -ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists -ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists -ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists -ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists -ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists -ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists -ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists -ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists -ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists -ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists -ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database. -FATAL ERROR: Upgrade failed -show tables like "user_view"; -Tables_in_performance_schema (user_view) -user_view -use test; -drop view test.user_view; -"Testing mysql_upgrade with PROCEDURE performance_schema.user_proc" -create procedure test.user_proc() -select "Not supposed to be here"; -update mysql.proc set db='performance_schema' where name='user_proc'; -ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists -ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists -ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists -ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists -ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists -ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists -ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists -ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists -ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists -ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists -ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists -ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists -ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists -ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database. -FATAL ERROR: Upgrade failed -select name from mysql.proc where db='performance_schema'; -name -user_proc -update mysql.proc set db='test' where name='user_proc'; -drop procedure test.user_proc; -"Testing mysql_upgrade with FUNCTION performance_schema.user_func" -create function test.user_func() returns integer -return 0; -update mysql.proc set db='performance_schema' where name='user_func'; -ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists -ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists -ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists -ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists -ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists -ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists -ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists -ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists -ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists -ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists -ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists -ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists -ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists -ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database. -FATAL ERROR: Upgrade failed -select name from mysql.proc where db='performance_schema'; -name -user_func -update mysql.proc set db='test' where name='user_func'; -drop function test.user_func; -"Testing mysql_upgrade with EVENT performance_schema.user_event" -create event test.user_event on schedule every 1 day do -select "not supposed to be here"; -update mysql.event set db='performance_schema' where name='user_event'; -ERROR 1050 (42S01) at line 183: Table 'COND_INSTANCES' already exists -ERROR 1050 (42S01) at line 213: Table 'EVENTS_WAITS_CURRENT' already exists -ERROR 1050 (42S01) at line 227: Table 'EVENTS_WAITS_HISTORY' already exists -ERROR 1050 (42S01) at line 241: Table 'EVENTS_WAITS_HISTORY_LONG' already exists -ERROR 1050 (42S01) at line 261: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 282: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 303: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 320: Table 'FILE_INSTANCES' already exists -ERROR 1050 (42S01) at line 339: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists -ERROR 1050 (42S01) at line 359: Table 'FILE_SUMMARY_BY_INSTANCE' already exists -ERROR 1050 (42S01) at line 376: Table 'MUTEX_INSTANCES' already exists -ERROR 1050 (42S01) at line 394: Table 'PERFORMANCE_TIMERS' already exists -ERROR 1050 (42S01) at line 411: Table 'PROCESSLIST' already exists -ERROR 1050 (42S01) at line 429: Table 'RWLOCK_INSTANCES' already exists -ERROR 1050 (42S01) at line 445: Table 'SETUP_CONSUMERS' already exists -ERROR 1050 (42S01) at line 462: Table 'SETUP_INSTRUMENTS' already exists -ERROR 1050 (42S01) at line 482: Table 'SETUP_OBJECTS' already exists -ERROR 1050 (42S01) at line 498: Table 'SETUP_TIMERS' already exists -ERROR 1644 (HY000) at line 1138: Unexpected content found in the performance_schema database. -FATAL ERROR: Upgrade failed -select name from mysql.event where db='performance_schema'; -name -user_event -update mysql.event set db='test' where name='user_event'; -drop event test.user_event; === added file 'mysql-test/suite/perfschema/r/pfs_upgrade_lc0.result' --- a/mysql-test/suite/perfschema/r/pfs_upgrade_lc0.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/pfs_upgrade_lc0.result 2010-07-23 17:20:00 +0000 @@ -0,0 +1,153 @@ +drop table if exists test.user_table; +drop procedure if exists test.user_proc; +drop function if exists test.user_func; +drop event if exists test.user_event; +"Testing mysql_upgrade with TABLE performance_schema.user_table" +create table test.user_table(a int); +use performance_schema; +show tables like "user_table"; +Tables_in_performance_schema (user_table) +user_table +ERROR 1050 (42S01) at line 67: Table 'COND_INSTANCES' already exists +ERROR 1050 (42S01) at line 89: Table 'EVENTS_WAITS_CURRENT' already exists +ERROR 1050 (42S01) at line 111: Table 'EVENTS_WAITS_HISTORY' already exists +ERROR 1050 (42S01) at line 133: Table 'EVENTS_WAITS_HISTORY_LONG' already exists +ERROR 1050 (42S01) at line 145: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 158: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 171: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 180: Table 'FILE_INSTANCES' already exists +ERROR 1050 (42S01) at line 191: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 203: Table 'FILE_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 212: Table 'MUTEX_INSTANCES' already exists +ERROR 1050 (42S01) at line 222: Table 'PERFORMANCE_TIMERS' already exists +ERROR 1050 (42S01) at line 231: Table 'PROCESSLIST' already exists +ERROR 1050 (42S01) at line 241: Table 'RWLOCK_INSTANCES' already exists +ERROR 1050 (42S01) at line 249: Table 'SETUP_CONSUMERS' already exists +ERROR 1050 (42S01) at line 261: Table 'SETUP_OBJECTS' already exists +ERROR 1050 (42S01) at line 270: Table 'SETUP_INSTRUMENTS' already exists +ERROR 1050 (42S01) at line 278: Table 'SETUP_TIMERS' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +show tables like "user_table"; +Tables_in_performance_schema (user_table) +user_table +use test; +drop table test.user_table; +"Testing mysql_upgrade with VIEW performance_schema.user_view" +create view test.user_view as select "Not supposed to be here"; +use performance_schema; +show tables like "user_view"; +Tables_in_performance_schema (user_view) +user_view +ERROR 1050 (42S01) at line 67: Table 'COND_INSTANCES' already exists +ERROR 1050 (42S01) at line 89: Table 'EVENTS_WAITS_CURRENT' already exists +ERROR 1050 (42S01) at line 111: Table 'EVENTS_WAITS_HISTORY' already exists +ERROR 1050 (42S01) at line 133: Table 'EVENTS_WAITS_HISTORY_LONG' already exists +ERROR 1050 (42S01) at line 145: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 158: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 171: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 180: Table 'FILE_INSTANCES' already exists +ERROR 1050 (42S01) at line 191: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 203: Table 'FILE_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 212: Table 'MUTEX_INSTANCES' already exists +ERROR 1050 (42S01) at line 222: Table 'PERFORMANCE_TIMERS' already exists +ERROR 1050 (42S01) at line 231: Table 'PROCESSLIST' already exists +ERROR 1050 (42S01) at line 241: Table 'RWLOCK_INSTANCES' already exists +ERROR 1050 (42S01) at line 249: Table 'SETUP_CONSUMERS' already exists +ERROR 1050 (42S01) at line 261: Table 'SETUP_OBJECTS' already exists +ERROR 1050 (42S01) at line 270: Table 'SETUP_INSTRUMENTS' already exists +ERROR 1050 (42S01) at line 278: Table 'SETUP_TIMERS' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +show tables like "user_view"; +Tables_in_performance_schema (user_view) +user_view +use test; +drop view test.user_view; +"Testing mysql_upgrade with PROCEDURE performance_schema.user_proc" +create procedure test.user_proc() +select "Not supposed to be here"; +update mysql.proc set db='performance_schema' where name='user_proc'; +ERROR 1050 (42S01) at line 67: Table 'COND_INSTANCES' already exists +ERROR 1050 (42S01) at line 89: Table 'EVENTS_WAITS_CURRENT' already exists +ERROR 1050 (42S01) at line 111: Table 'EVENTS_WAITS_HISTORY' already exists +ERROR 1050 (42S01) at line 133: Table 'EVENTS_WAITS_HISTORY_LONG' already exists +ERROR 1050 (42S01) at line 145: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 158: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 171: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 180: Table 'FILE_INSTANCES' already exists +ERROR 1050 (42S01) at line 191: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 203: Table 'FILE_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 212: Table 'MUTEX_INSTANCES' already exists +ERROR 1050 (42S01) at line 222: Table 'PERFORMANCE_TIMERS' already exists +ERROR 1050 (42S01) at line 231: Table 'PROCESSLIST' already exists +ERROR 1050 (42S01) at line 241: Table 'RWLOCK_INSTANCES' already exists +ERROR 1050 (42S01) at line 249: Table 'SETUP_CONSUMERS' already exists +ERROR 1050 (42S01) at line 261: Table 'SETUP_OBJECTS' already exists +ERROR 1050 (42S01) at line 270: Table 'SETUP_INSTRUMENTS' already exists +ERROR 1050 (42S01) at line 278: Table 'SETUP_TIMERS' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.proc where db='performance_schema'; +name +user_proc +update mysql.proc set db='test' where name='user_proc'; +drop procedure test.user_proc; +"Testing mysql_upgrade with FUNCTION performance_schema.user_func" +create function test.user_func() returns integer +return 0; +update mysql.proc set db='performance_schema' where name='user_func'; +ERROR 1050 (42S01) at line 67: Table 'COND_INSTANCES' already exists +ERROR 1050 (42S01) at line 89: Table 'EVENTS_WAITS_CURRENT' already exists +ERROR 1050 (42S01) at line 111: Table 'EVENTS_WAITS_HISTORY' already exists +ERROR 1050 (42S01) at line 133: Table 'EVENTS_WAITS_HISTORY_LONG' already exists +ERROR 1050 (42S01) at line 145: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 158: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 171: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 180: Table 'FILE_INSTANCES' already exists +ERROR 1050 (42S01) at line 191: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 203: Table 'FILE_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 212: Table 'MUTEX_INSTANCES' already exists +ERROR 1050 (42S01) at line 222: Table 'PERFORMANCE_TIMERS' already exists +ERROR 1050 (42S01) at line 231: Table 'PROCESSLIST' already exists +ERROR 1050 (42S01) at line 241: Table 'RWLOCK_INSTANCES' already exists +ERROR 1050 (42S01) at line 249: Table 'SETUP_CONSUMERS' already exists +ERROR 1050 (42S01) at line 261: Table 'SETUP_OBJECTS' already exists +ERROR 1050 (42S01) at line 270: Table 'SETUP_INSTRUMENTS' already exists +ERROR 1050 (42S01) at line 278: Table 'SETUP_TIMERS' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.proc where db='performance_schema'; +name +user_func +update mysql.proc set db='test' where name='user_func'; +drop function test.user_func; +"Testing mysql_upgrade with EVENT performance_schema.user_event" +create event test.user_event on schedule every 1 day do +select "not supposed to be here"; +update mysql.event set db='performance_schema' where name='user_event'; +ERROR 1050 (42S01) at line 67: Table 'COND_INSTANCES' already exists +ERROR 1050 (42S01) at line 89: Table 'EVENTS_WAITS_CURRENT' already exists +ERROR 1050 (42S01) at line 111: Table 'EVENTS_WAITS_HISTORY' already exists +ERROR 1050 (42S01) at line 133: Table 'EVENTS_WAITS_HISTORY_LONG' already exists +ERROR 1050 (42S01) at line 145: Table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 158: Table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 171: Table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 180: Table 'FILE_INSTANCES' already exists +ERROR 1050 (42S01) at line 191: Table 'FILE_SUMMARY_BY_EVENT_NAME' already exists +ERROR 1050 (42S01) at line 203: Table 'FILE_SUMMARY_BY_INSTANCE' already exists +ERROR 1050 (42S01) at line 212: Table 'MUTEX_INSTANCES' already exists +ERROR 1050 (42S01) at line 222: Table 'PERFORMANCE_TIMERS' already exists +ERROR 1050 (42S01) at line 231: Table 'PROCESSLIST' already exists +ERROR 1050 (42S01) at line 241: Table 'RWLOCK_INSTANCES' already exists +ERROR 1050 (42S01) at line 249: Table 'SETUP_CONSUMERS' already exists +ERROR 1050 (42S01) at line 261: Table 'SETUP_OBJECTS' already exists +ERROR 1050 (42S01) at line 270: Table 'SETUP_INSTRUMENTS' already exists +ERROR 1050 (42S01) at line 278: Table 'SETUP_TIMERS' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.event where db='performance_schema'; +name +user_event +update mysql.event set db='test' where name='user_event'; +drop event test.user_event; === added file 'mysql-test/suite/perfschema/r/pfs_upgrade_lc1.result' --- a/mysql-test/suite/perfschema/r/pfs_upgrade_lc1.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/pfs_upgrade_lc1.result 2010-07-23 17:20:00 +0000 @@ -0,0 +1,153 @@ +drop table if exists test.user_table; +drop procedure if exists test.user_proc; +drop function if exists test.user_func; +drop event if exists test.user_event; +"Testing mysql_upgrade with TABLE performance_schema.user_table" +create table test.user_table(a int); +use performance_schema; +show tables like "user_table"; +Tables_in_performance_schema (user_table) +user_table +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +show tables like "user_table"; +Tables_in_performance_schema (user_table) +user_table +use test; +drop table test.user_table; +"Testing mysql_upgrade with VIEW performance_schema.user_view" +create view test.user_view as select "Not supposed to be here"; +use performance_schema; +show tables like "user_view"; +Tables_in_performance_schema (user_view) +user_view +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +show tables like "user_view"; +Tables_in_performance_schema (user_view) +user_view +use test; +drop view test.user_view; +"Testing mysql_upgrade with PROCEDURE performance_schema.user_proc" +create procedure test.user_proc() +select "Not supposed to be here"; +update mysql.proc set db='performance_schema' where name='user_proc'; +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.proc where db='performance_schema'; +name +user_proc +update mysql.proc set db='test' where name='user_proc'; +drop procedure test.user_proc; +"Testing mysql_upgrade with FUNCTION performance_schema.user_func" +create function test.user_func() returns integer +return 0; +update mysql.proc set db='performance_schema' where name='user_func'; +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.proc where db='performance_schema'; +name +user_func +update mysql.proc set db='test' where name='user_func'; +drop function test.user_func; +"Testing mysql_upgrade with EVENT performance_schema.user_event" +create event test.user_event on schedule every 1 day do +select "not supposed to be here"; +update mysql.event set db='performance_schema' where name='user_event'; +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.event where db='performance_schema'; +name +user_event +update mysql.event set db='test' where name='user_event'; +drop event test.user_event; === added file 'mysql-test/suite/perfschema/r/pfs_upgrade_lc2.result' --- a/mysql-test/suite/perfschema/r/pfs_upgrade_lc2.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/pfs_upgrade_lc2.result 2010-07-23 17:20:00 +0000 @@ -0,0 +1,153 @@ +drop table if exists test.user_table; +drop procedure if exists test.user_proc; +drop function if exists test.user_func; +drop event if exists test.user_event; +"Testing mysql_upgrade with TABLE performance_schema.user_table" +create table test.user_table(a int); +use performance_schema; +show tables like "user_table"; +Tables_in_performance_schema (user_table) +user_table +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +show tables like "user_table"; +Tables_in_performance_schema (user_table) +user_table +use test; +drop table test.user_table; +"Testing mysql_upgrade with VIEW performance_schema.user_view" +create view test.user_view as select "Not supposed to be here"; +use performance_schema; +show tables like "user_view"; +Tables_in_performance_schema (user_view) +user_view +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +show tables like "user_view"; +Tables_in_performance_schema (user_view) +user_view +use test; +drop view test.user_view; +"Testing mysql_upgrade with PROCEDURE performance_schema.user_proc" +create procedure test.user_proc() +select "Not supposed to be here"; +update mysql.proc set db='performance_schema' where name='user_proc'; +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.proc where db='performance_schema'; +name +user_proc +update mysql.proc set db='test' where name='user_proc'; +drop procedure test.user_proc; +"Testing mysql_upgrade with FUNCTION performance_schema.user_func" +create function test.user_func() returns integer +return 0; +update mysql.proc set db='performance_schema' where name='user_func'; +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.proc where db='performance_schema'; +name +user_func +update mysql.proc set db='test' where name='user_func'; +drop function test.user_func; +"Testing mysql_upgrade with EVENT performance_schema.user_event" +create event test.user_event on schedule every 1 day do +select "not supposed to be here"; +update mysql.event set db='performance_schema' where name='user_event'; +ERROR 1050 (42S01) at line 67: Table 'cond_instances' already exists +ERROR 1050 (42S01) at line 89: Table 'events_waits_current' already exists +ERROR 1050 (42S01) at line 111: Table 'events_waits_history' already exists +ERROR 1050 (42S01) at line 133: Table 'events_waits_history_long' already exists +ERROR 1050 (42S01) at line 145: Table 'events_waits_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 158: Table 'events_waits_summary_by_instance' already exists +ERROR 1050 (42S01) at line 171: Table 'events_waits_summary_by_thread_by_event_name' already exists +ERROR 1050 (42S01) at line 180: Table 'file_instances' already exists +ERROR 1050 (42S01) at line 191: Table 'file_summary_by_event_name' already exists +ERROR 1050 (42S01) at line 203: Table 'file_summary_by_instance' already exists +ERROR 1050 (42S01) at line 212: Table 'mutex_instances' already exists +ERROR 1050 (42S01) at line 222: Table 'performance_timers' already exists +ERROR 1050 (42S01) at line 231: Table 'processlist' already exists +ERROR 1050 (42S01) at line 241: Table 'rwlock_instances' already exists +ERROR 1050 (42S01) at line 249: Table 'setup_consumers' already exists +ERROR 1050 (42S01) at line 261: Table 'setup_objects' already exists +ERROR 1050 (42S01) at line 270: Table 'setup_instruments' already exists +ERROR 1050 (42S01) at line 278: Table 'setup_timers' already exists +ERROR 1644 (HY000) at line 694: Unexpected content found in the performance_schema database. +FATAL ERROR: Upgrade failed +select name from mysql.event where db='performance_schema'; +name +user_event +update mysql.event set db='test' where name='user_event'; +drop event test.user_event; === removed file 'mysql-test/suite/perfschema/t/pfs_upgrade.test' --- a/mysql-test/suite/perfschema/t/pfs_upgrade.test 2010-06-03 13:30:54 +0000 +++ b/mysql-test/suite/perfschema/t/pfs_upgrade.test 1970-01-01 00:00:00 +0000 @@ -1,138 +0,0 @@ -# Copyright (C) 2010 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 -# Make sure mysql_upgrade does not destroy data in a 'performance_schema' -# database. -# - ---source include/not_embedded.inc ---source include/have_perfschema.inc ---source include/have_lowercase0.inc - ---disable_warnings -drop table if exists test.user_table; -drop procedure if exists test.user_proc; -drop function if exists test.user_func; -drop event if exists test.user_event; ---enable_warnings - ---echo "Testing mysql_upgrade with TABLE performance_schema.user_table" - -create table test.user_table(a int); - -let $MYSQLD_DATADIR= `SELECT @@datadir`; ---copy_file $MYSQLD_DATADIR/test/user_table.frm $MYSQLD_DATADIR/performance_schema/user_table.frm - -# Make sure the table is visible -use performance_schema; -show tables like "user_table"; - ---error 1 ---exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -# Verify that mysql_upgrade complained about the performance_schema ---cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -# Make sure the table is still visible -show tables like "user_table"; - -use test; - ---remove_file $MYSQLD_DATADIR/performance_schema/user_table.frm -drop table test.user_table; - ---echo "Testing mysql_upgrade with VIEW performance_schema.user_view" - -create view test.user_view as select "Not supposed to be here"; - -let $MYSQLD_DATADIR= `SELECT @@datadir`; ---copy_file $MYSQLD_DATADIR/test/user_view.frm $MYSQLD_DATADIR/performance_schema/user_view.frm - -# Make sure the view is visible -use performance_schema; -show tables like "user_view"; - ---error 1 ---exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -# Verify that mysql_upgrade complained about the performance_schema ---cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -# Make sure the view is still visible -show tables like "user_view"; - -use test; - ---remove_file $MYSQLD_DATADIR/performance_schema/user_view.frm -drop view test.user_view; - ---echo "Testing mysql_upgrade with PROCEDURE performance_schema.user_proc" - -create procedure test.user_proc() - select "Not supposed to be here"; - -update mysql.proc set db='performance_schema' where name='user_proc'; - ---error 1 ---exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -# Verify that mysql_upgrade complained about the performance_schema ---cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -select name from mysql.proc where db='performance_schema'; - -update mysql.proc set db='test' where name='user_proc'; -drop procedure test.user_proc; - ---echo "Testing mysql_upgrade with FUNCTION performance_schema.user_func" - -create function test.user_func() returns integer - return 0; - -update mysql.proc set db='performance_schema' where name='user_func'; - ---error 1 ---exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -# Verify that mysql_upgrade complained about the performance_schema ---cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -select name from mysql.proc where db='performance_schema'; - -update mysql.proc set db='test' where name='user_func'; -drop function test.user_func; - ---echo "Testing mysql_upgrade with EVENT performance_schema.user_event" - -create event test.user_event on schedule every 1 day do - select "not supposed to be here"; - -update mysql.event set db='performance_schema' where name='user_event'; - ---error 1 ---exec $MYSQL_UPGRADE --skip-verbose > $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out 2> $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -# Verify that mysql_upgrade complained about the performance_schema ---cat_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - -select name from mysql.event where db='performance_schema'; - -update mysql.event set db='test' where name='user_event'; -drop event test.user_event; - ---remove_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.out ---remove_file $MYSQLTEST_VARDIR/tmp/pfs_upgrade.err - === added file 'mysql-test/suite/perfschema/t/pfs_upgrade_lc0.test' --- a/mysql-test/suite/perfschema/t/pfs_upgrade_lc0.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/pfs_upgrade_lc0.test 2010-06-30 14:05:18 +0000 @@ -0,0 +1,26 @@ +# Copyright (c) 2010, 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 +# Make sure mysql_upgrade does not destroy data in a 'performance_schema' +# database. +# + +--source include/not_embedded.inc +--source include/have_perfschema.inc +--source include/have_lowercase0.inc +--source ../include/pfs_upgrade.inc + + === added file 'mysql-test/suite/perfschema/t/pfs_upgrade_lc1.test' --- a/mysql-test/suite/perfschema/t/pfs_upgrade_lc1.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/pfs_upgrade_lc1.test 2010-06-30 14:05:18 +0000 @@ -0,0 +1,26 @@ +# Copyright (c) 2010, 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 +# Make sure mysql_upgrade does not destroy data in a 'performance_schema' +# database. +# + +--source include/not_embedded.inc +--source include/have_perfschema.inc +--source include/have_lowercase1.inc +--source ../include/pfs_upgrade.inc + + === added file 'mysql-test/suite/perfschema/t/pfs_upgrade_lc2.test' --- a/mysql-test/suite/perfschema/t/pfs_upgrade_lc2.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/pfs_upgrade_lc2.test 2010-06-30 14:05:18 +0000 @@ -0,0 +1,26 @@ +# Copyright (c) 2010, 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 +# Make sure mysql_upgrade does not destroy data in a 'performance_schema' +# database. +# + +--source include/not_embedded.inc +--source include/have_perfschema.inc +--source include/have_lowercase2.inc +--source ../include/pfs_upgrade.inc + + === modified file 'scripts/Makefile.am' --- a/scripts/Makefile.am 2010-05-20 12:41:01 +0000 +++ b/scripts/Makefile.am 2010-06-30 14:05:18 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2000-2006 MySQL AB +# Copyright (c) 2000, 2010, 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 @@ -10,8 +10,8 @@ # 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA ## Process this file with automake to create Makefile.in @@ -111,14 +111,15 @@ mysql_fix_privilege_tables.sql: mysql_sy @echo "Building $@"; @cat mysql_system_tables.sql mysql_system_tables_fix.sql > $@ +comp_sql_SOURCES= comp_sql.c + # # Build mysql_fix_privilege_tables_sql.c from # mysql_fix_privileges_tables.sql using comp_sql # The "sleep" ensures the generated file has a younger timestamp than its source # (which may have been generated in this very same "make" run). # -mysql_fix_privilege_tables_sql.c: comp_sql.c mysql_fix_privilege_tables.sql - $(MAKE) $(AM_MAKEFLAGS) comp_sql$(EXEEXT) +mysql_fix_privilege_tables_sql.c: comp_sql$(EXEEXT) mysql_fix_privilege_tables.sql sleep 2 $(top_builddir)/scripts/comp_sql$(EXEEXT) \ mysql_fix_privilege_tables \ === modified file 'scripts/comp_sql.c' --- a/scripts/comp_sql.c 2007-04-23 12:01:48 +0000 +++ b/scripts/comp_sql.c 2010-06-30 14:05:18 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 MySQL AB +/* Copyright (c) 2004, 2010, 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 @@ -10,12 +10,8 @@ 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Written by Magnus Svensson -*/ + along with this program; if not, write to the Free Software Foundation, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ /* Converts a SQL file into a C file that can be compiled and linked @@ -26,7 +22,20 @@ #include #include -FILE *in, *out; +#include "../sql/sql_bootstrap.h" + +/* + This is an internal tool used during the build process only, + - do not make a library just for this, + which would make the Makefiles and the server link + more complex than necessary, + - do not duplicate the code either. + so just add the sql_bootstrap.cc code as is. +*/ +#include "../sql/sql_bootstrap.cc" + +FILE *in; +FILE *out; static void die(const char *fmt, ...) { @@ -54,13 +63,60 @@ static void die(const char *fmt, ...) exit(1); } +char *fgets_fn(char *buffer, size_t size, fgets_input_t input) +{ + return fgets(buffer, size, (FILE*) input); +} + +static void print_query(FILE *out, const char *query) +{ + const char *ptr= query; + int column= 0; + + fprintf(out, "\""); + while (*ptr) + { + if (column >= 120) + { + /* Wrap to the next line, tabulated. */ + fprintf(out, "\"\n \""); + column= 2; + } + switch(*ptr) + { + case '\n': + /* + Preserve the \n character in the query text, + and wrap to the next line, tabulated. + */ + fprintf(out, "\\n\"\n \""); + column= 2; + break; + case '\r': + /* Skipped */ + break; + case '\"': + fprintf(out, "\\\""); + column++; + break; + default: + putc(*ptr, out); + column++; + break; + } + ptr++; + } + fprintf(out, "\\n\",\n"); +} int main(int argc, char *argv[]) { - char buff[512]; + char query[MAX_BOOTSTRAP_QUERY_SIZE]; char* struct_name= argv[1]; char* infile_name= argv[2]; char* outfile_name= argv[3]; + int rc; + int query_length; if (argc != 4) die("Usage: comp_sql "); @@ -71,55 +127,31 @@ int main(int argc, char *argv[]) if (!(out= fopen(outfile_name, "w"))) die("Failed to open output file '%s'", outfile_name); - fprintf(out, "const char* %s={\n\"", struct_name); + fprintf(out, "/*\n"); + fprintf(out, " Do not edit this file, it is automatically generated from:\n"); + fprintf(out, " <%s>\n", infile_name); + fprintf(out, "*/\n"); + fprintf(out, "const char* %s[]={\n", struct_name); - while (fgets(buff, sizeof(buff), in)) + for ( ; ; ) { - char *curr= buff; - while (*curr) - { - if (*curr == '\n') - { - /* - Reached end of line, add escaped newline, escaped - backslash and a newline to outfile - */ - fprintf(out, "\\n \"\n\""); - curr++; - } - else if (*curr == '\r') - { - curr++; /* Skip */ - } - else - { - if (*curr == '"') - { - /* Needs escape */ - fputc('\\', out); - } - - fputc(*curr, out); - curr++; - } - } - if (*(curr-1) != '\n') - { - /* - Some compilers have a max string length, - insert a newline at every 512th char in long - strings - */ - fprintf(out, "\"\n\""); - } + rc= read_bootstrap_query(query, &query_length, + (fgets_input_t) in, fgets_fn); + + if (rc == READ_BOOTSTRAP_ERROR) + die("Failed to read the bootstrap input file.\n"); + + if (rc == READ_BOOTSTRAP_EOF) + break; + + print_query(out, query); } - fprintf(out, "\\\n\"};\n"); + fprintf(out, "NULL\n};\n"); fclose(in); fclose(out); exit(0); - } === modified file 'scripts/mysql_system_tables.sql' --- a/scripts/mysql_system_tables.sql 2010-04-14 16:40:04 +0000 +++ b/scripts/mysql_system_tables.sql 2010-06-30 14:05:18 +0000 @@ -1,4 +1,4 @@ --- Copyright (C) 2008, 2010 Oracle and/or its affiliates. All rights reserved. +-- Copyright (c) 2008, 2010, 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 @@ -10,8 +10,8 @@ -- 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +-- along with this program; if not, write to the Free Software Foundation, +-- 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA -- -- The system tables of MySQL Server @@ -113,9 +113,8 @@ CREATE TABLE IF NOT EXISTS ndb_binlog_in set @have_old_pfs= (select count(*) from information_schema.schemata where schema_name='performance_schema'); -SET @l1="SET @broken_tables = (select count(*) from information_schema.tables"; -SET @l2=" where engine != \'PERFORMANCE_SCHEMA\' and table_schema=\'performance_schema\')"; -SET @cmd=concat(@l1,@l2); +SET @cmd="SET @broken_tables = (select count(*) from information_schema.tables" + " where engine != \'PERFORMANCE_SCHEMA\' and table_schema=\'performance_schema\')"; -- Work around for bug#49542 SET @str = IF(@have_old_pfs = 1, @cmd, 'SET @broken_tables = 0'); @@ -123,9 +122,8 @@ PREPARE stmt FROM @str; EXECUTE stmt; DROP PREPARE stmt; -SET @l1="SET @broken_views = (select count(*) from information_schema.views"; -SET @l2=" where table_schema='performance_schema')"; -SET @cmd=concat(@l1,@l2); +SET @cmd="SET @broken_views = (select count(*) from information_schema.views" + " where table_schema='performance_schema')"; -- Work around for bug#49542 SET @str = IF(@have_old_pfs = 1, @cmd, 'SET @broken_views = 0'); @@ -171,12 +169,10 @@ set @have_pfs= (select count(engine) fro -- TABLE COND_INSTANCES -- -SET @l1="CREATE TABLE performance_schema.COND_INSTANCES("; -SET @l2="NAME VARCHAR(128) not null,"; -SET @l3="OBJECT_INSTANCE_BEGIN BIGINT not null"; -SET @l4=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4); +SET @cmd="CREATE TABLE performance_schema.COND_INSTANCES(" + "NAME VARCHAR(128) not null," + "OBJECT_INSTANCE_BEGIN BIGINT not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -187,26 +183,24 @@ DROP PREPARE stmt; -- TABLE EVENTS_WAITS_CURRENT -- -SET @l1="CREATE TABLE performance_schema.EVENTS_WAITS_CURRENT("; -SET @l2="THREAD_ID INTEGER not null,"; -SET @l3="EVENT_ID BIGINT unsigned not null,"; -SET @l4="EVENT_NAME VARCHAR(128) not null,"; -SET @l5="SOURCE VARCHAR(64),"; -SET @l6="TIMER_START BIGINT unsigned,"; -SET @l7="TIMER_END BIGINT unsigned,"; -SET @l8="TIMER_WAIT BIGINT unsigned,"; -SET @l9="SPINS INTEGER unsigned,"; -SET @l10="OBJECT_SCHEMA VARCHAR(64),"; -SET @l11="OBJECT_NAME VARCHAR(512),"; -SET @l12="OBJECT_TYPE VARCHAR(64),"; -SET @l13="OBJECT_INSTANCE_BEGIN BIGINT not null,"; -SET @l14="NESTING_EVENT_ID BIGINT unsigned,"; -SET @l15="OPERATION VARCHAR(16) not null,"; -SET @l16="NUMBER_OF_BYTES BIGINT unsigned,"; -SET @l17="FLAGS INTEGER unsigned"; -SET @l18=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8,@l9,@l10,@l11,@l12,@l13,@l14,@l15,@l16,@l17,@l18); +SET @cmd="CREATE TABLE performance_schema.EVENTS_WAITS_CURRENT(" + "THREAD_ID INTEGER not null," + "EVENT_ID BIGINT unsigned not null," + "EVENT_NAME VARCHAR(128) not null," + "SOURCE VARCHAR(64)," + "TIMER_START BIGINT unsigned," + "TIMER_END BIGINT unsigned," + "TIMER_WAIT BIGINT unsigned," + "SPINS INTEGER unsigned," + "OBJECT_SCHEMA VARCHAR(64)," + "OBJECT_NAME VARCHAR(512)," + "OBJECT_TYPE VARCHAR(64)," + "OBJECT_INSTANCE_BEGIN BIGINT not null," + "NESTING_EVENT_ID BIGINT unsigned," + "OPERATION VARCHAR(16) not null," + "NUMBER_OF_BYTES BIGINT unsigned," + "FLAGS INTEGER unsigned" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -217,10 +211,24 @@ DROP PREPARE stmt; -- TABLE EVENTS_WAITS_HISTORY -- -SET @l1="CREATE TABLE performance_schema.EVENTS_WAITS_HISTORY("; --- lines 2 to 18 are unchanged from EVENTS_WAITS_CURRENT - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8,@l9,@l10,@l11,@l12,@l13,@l14,@l15,@l16,@l17,@l18); +SET @cmd="CREATE TABLE performance_schema.EVENTS_WAITS_HISTORY(" + "THREAD_ID INTEGER not null," + "EVENT_ID BIGINT unsigned not null," + "EVENT_NAME VARCHAR(128) not null," + "SOURCE VARCHAR(64)," + "TIMER_START BIGINT unsigned," + "TIMER_END BIGINT unsigned," + "TIMER_WAIT BIGINT unsigned," + "SPINS INTEGER unsigned," + "OBJECT_SCHEMA VARCHAR(64)," + "OBJECT_NAME VARCHAR(512)," + "OBJECT_TYPE VARCHAR(64)," + "OBJECT_INSTANCE_BEGIN BIGINT not null," + "NESTING_EVENT_ID BIGINT unsigned," + "OPERATION VARCHAR(16) not null," + "NUMBER_OF_BYTES BIGINT unsigned," + "FLAGS INTEGER unsigned" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -231,10 +239,24 @@ DROP PREPARE stmt; -- TABLE EVENTS_WAITS_HISTORY_LONG -- -SET @l1="CREATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG("; --- lines 2 to 18 are unchanged from EVENTS_WAITS_CURRENT - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8,@l9,@l10,@l11,@l12,@l13,@l14,@l15,@l16,@l17,@l18); +SET @cmd="CREATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG(" + "THREAD_ID INTEGER not null," + "EVENT_ID BIGINT unsigned not null," + "EVENT_NAME VARCHAR(128) not null," + "SOURCE VARCHAR(64)," + "TIMER_START BIGINT unsigned," + "TIMER_END BIGINT unsigned," + "TIMER_WAIT BIGINT unsigned," + "SPINS INTEGER unsigned," + "OBJECT_SCHEMA VARCHAR(64)," + "OBJECT_NAME VARCHAR(512)," + "OBJECT_TYPE VARCHAR(64)," + "OBJECT_INSTANCE_BEGIN BIGINT not null," + "NESTING_EVENT_ID BIGINT unsigned," + "OPERATION VARCHAR(16) not null," + "NUMBER_OF_BYTES BIGINT unsigned," + "FLAGS INTEGER unsigned" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -245,16 +267,14 @@ DROP PREPARE stmt; -- TABLE EVENTS_WAITS_SUMMARY_BY_EVENT_NAME -- -SET @l1="CREATE TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME("; -SET @l2="EVENT_NAME VARCHAR(128) not null,"; -SET @l3="COUNT_STAR BIGINT unsigned not null,"; -SET @l4="SUM_TIMER_WAIT BIGINT unsigned not null,"; -SET @l5="MIN_TIMER_WAIT BIGINT unsigned not null,"; -SET @l6="AVG_TIMER_WAIT BIGINT unsigned not null,"; -SET @l7="MAX_TIMER_WAIT BIGINT unsigned not null"; -SET @l8=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8); +SET @cmd="CREATE TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME(" + "EVENT_NAME VARCHAR(128) not null," + "COUNT_STAR BIGINT unsigned not null," + "SUM_TIMER_WAIT BIGINT unsigned not null," + "MIN_TIMER_WAIT BIGINT unsigned not null," + "AVG_TIMER_WAIT BIGINT unsigned not null," + "MAX_TIMER_WAIT BIGINT unsigned not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -265,17 +285,15 @@ DROP PREPARE stmt; -- TABLE EVENTS_WAITS_SUMMARY_BY_INSTANCE -- -SET @l1="CREATE TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE("; -SET @l2="EVENT_NAME VARCHAR(128) not null,"; -SET @l3="OBJECT_INSTANCE_BEGIN BIGINT not null,"; -SET @l4="COUNT_STAR BIGINT unsigned not null,"; -SET @l5="SUM_TIMER_WAIT BIGINT unsigned not null,"; -SET @l6="MIN_TIMER_WAIT BIGINT unsigned not null,"; -SET @l7="AVG_TIMER_WAIT BIGINT unsigned not null,"; -SET @l8="MAX_TIMER_WAIT BIGINT unsigned not null"; -SET @l9=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8,@l9); +SET @cmd="CREATE TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE(" + "EVENT_NAME VARCHAR(128) not null," + "OBJECT_INSTANCE_BEGIN BIGINT not null," + "COUNT_STAR BIGINT unsigned not null," + "SUM_TIMER_WAIT BIGINT unsigned not null," + "MIN_TIMER_WAIT BIGINT unsigned not null," + "AVG_TIMER_WAIT BIGINT unsigned not null," + "MAX_TIMER_WAIT BIGINT unsigned not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -286,17 +304,15 @@ DROP PREPARE stmt; -- TABLE EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME -- -SET @l1="CREATE TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME("; -SET @l2="THREAD_ID INTEGER not null,"; -SET @l3="EVENT_NAME VARCHAR(128) not null,"; -SET @l4="COUNT_STAR BIGINT unsigned not null,"; -SET @l5="SUM_TIMER_WAIT BIGINT unsigned not null,"; -SET @l6="MIN_TIMER_WAIT BIGINT unsigned not null,"; -SET @l7="AVG_TIMER_WAIT BIGINT unsigned not null,"; -SET @l8="MAX_TIMER_WAIT BIGINT unsigned not null"; -SET @l9=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8,@l9); +SET @cmd="CREATE TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME(" + "THREAD_ID INTEGER not null," + "EVENT_NAME VARCHAR(128) not null," + "COUNT_STAR BIGINT unsigned not null," + "SUM_TIMER_WAIT BIGINT unsigned not null," + "MIN_TIMER_WAIT BIGINT unsigned not null," + "AVG_TIMER_WAIT BIGINT unsigned not null," + "MAX_TIMER_WAIT BIGINT unsigned not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -307,13 +323,11 @@ DROP PREPARE stmt; -- TABLE FILE_INSTANCES -- -SET @l1="CREATE TABLE performance_schema.FILE_INSTANCES("; -SET @l2="FILE_NAME VARCHAR(512) not null,"; -SET @l3="EVENT_NAME VARCHAR(128) not null,"; -SET @l4="OPEN_COUNT INTEGER unsigned not null"; -SET @l5=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5); +SET @cmd="CREATE TABLE performance_schema.FILE_INSTANCES(" + "FILE_NAME VARCHAR(512) not null," + "EVENT_NAME VARCHAR(128) not null," + "OPEN_COUNT INTEGER unsigned not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -324,15 +338,13 @@ DROP PREPARE stmt; -- TABLE FILE_SUMMARY_BY_EVENT_NAME -- -SET @l1="CREATE TABLE performance_schema.FILE_SUMMARY_BY_EVENT_NAME("; -SET @l2="EVENT_NAME VARCHAR(128) not null,"; -SET @l3="COUNT_READ BIGINT unsigned not null,"; -SET @l4="COUNT_WRITE BIGINT unsigned not null,"; -SET @l5="SUM_NUMBER_OF_BYTES_READ BIGINT unsigned not null,"; -SET @l6="SUM_NUMBER_OF_BYTES_WRITE BIGINT unsigned not null"; -SET @l7=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7); +SET @cmd="CREATE TABLE performance_schema.FILE_SUMMARY_BY_EVENT_NAME(" + "EVENT_NAME VARCHAR(128) not null," + "COUNT_READ BIGINT unsigned not null," + "COUNT_WRITE BIGINT unsigned not null," + "SUM_NUMBER_OF_BYTES_READ BIGINT unsigned not null," + "SUM_NUMBER_OF_BYTES_WRITE BIGINT unsigned not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -343,16 +355,14 @@ DROP PREPARE stmt; -- TABLE FILE_SUMMARY_BY_INSTANCE -- -SET @l1="CREATE TABLE performance_schema.FILE_SUMMARY_BY_INSTANCE("; -SET @l2="FILE_NAME VARCHAR(512) not null,"; -SET @l3="EVENT_NAME VARCHAR(128) not null,"; -SET @l4="COUNT_READ BIGINT unsigned not null,"; -SET @l5="COUNT_WRITE BIGINT unsigned not null,"; -SET @l6="SUM_NUMBER_OF_BYTES_READ BIGINT unsigned not null,"; -SET @l7="SUM_NUMBER_OF_BYTES_WRITE BIGINT unsigned not null"; -SET @l8=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8); +SET @cmd="CREATE TABLE performance_schema.FILE_SUMMARY_BY_INSTANCE(" + "FILE_NAME VARCHAR(512) not null," + "EVENT_NAME VARCHAR(128) not null," + "COUNT_READ BIGINT unsigned not null," + "COUNT_WRITE BIGINT unsigned not null," + "SUM_NUMBER_OF_BYTES_READ BIGINT unsigned not null," + "SUM_NUMBER_OF_BYTES_WRITE BIGINT unsigned not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -363,13 +373,11 @@ DROP PREPARE stmt; -- TABLE MUTEX_INSTANCES -- -SET @l1="CREATE TABLE performance_schema.MUTEX_INSTANCES("; -SET @l2="NAME VARCHAR(128) not null,"; -SET @l3="OBJECT_INSTANCE_BEGIN BIGINT not null,"; -SET @l4="LOCKED_BY_THREAD_ID INTEGER"; -SET @l5=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5); +SET @cmd="CREATE TABLE performance_schema.MUTEX_INSTANCES(" + "NAME VARCHAR(128) not null," + "OBJECT_INSTANCE_BEGIN BIGINT not null," + "LOCKED_BY_THREAD_ID INTEGER" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -380,14 +388,12 @@ DROP PREPARE stmt; -- TABLE PERFORMANCE_TIMERS -- -SET @l1="CREATE TABLE performance_schema.PERFORMANCE_TIMERS("; -SET @l2="TIMER_NAME ENUM ('CYCLE', 'NANOSECOND', 'MICROSECOND', 'MILLISECOND', 'TICK') not null,"; -SET @l3="TIMER_FREQUENCY BIGINT,"; -SET @l4="TIMER_RESOLUTION BIGINT,"; -SET @l5="TIMER_OVERHEAD BIGINT"; -SET @l6=") ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6); +SET @cmd="CREATE TABLE performance_schema.PERFORMANCE_TIMERS(" + "TIMER_NAME ENUM ('CYCLE', 'NANOSECOND', 'MICROSECOND', 'MILLISECOND', 'TICK') not null," + "TIMER_FREQUENCY BIGINT," + "TIMER_RESOLUTION BIGINT," + "TIMER_OVERHEAD BIGINT" + ") ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -398,13 +404,11 @@ DROP PREPARE stmt; -- TABLE PROCESSLIST -- -SET @l1="CREATE TABLE performance_schema.PROCESSLIST("; -SET @l2="THREAD_ID INTEGER not null,"; -SET @l3="ID INTEGER not null,"; -SET @l4="NAME VARCHAR(64) not null"; -SET @l5=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5); +SET @cmd="CREATE TABLE performance_schema.PROCESSLIST(" + "THREAD_ID INTEGER not null," + "ID INTEGER not null," + "NAME VARCHAR(64) not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -415,14 +419,12 @@ DROP PREPARE stmt; -- TABLE RWLOCK_INSTANCES -- -SET @l1="CREATE TABLE performance_schema.RWLOCK_INSTANCES("; -SET @l2="NAME VARCHAR(128) not null,"; -SET @l3="OBJECT_INSTANCE_BEGIN BIGINT not null,"; -SET @l4="WRITE_LOCKED_BY_THREAD_ID INTEGER,"; -SET @l5="READ_LOCKED_BY_COUNT INTEGER unsigned not null"; -SET @l6=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6); +SET @cmd="CREATE TABLE performance_schema.RWLOCK_INSTANCES(" + "NAME VARCHAR(128) not null," + "OBJECT_INSTANCE_BEGIN BIGINT not null," + "WRITE_LOCKED_BY_THREAD_ID INTEGER," + "READ_LOCKED_BY_COUNT INTEGER unsigned not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -433,12 +435,10 @@ DROP PREPARE stmt; -- TABLE SETUP_CONSUMERS -- -SET @l1="CREATE TABLE performance_schema.SETUP_CONSUMERS("; -SET @l2="NAME VARCHAR(64) not null,"; -SET @l3="ENABLED ENUM ('YES', 'NO') not null"; -SET @l4=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4); +SET @cmd="CREATE TABLE performance_schema.SETUP_CONSUMERS(" + "NAME VARCHAR(64) not null," + "ENABLED ENUM ('YES', 'NO') not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -446,16 +446,17 @@ EXECUTE stmt; DROP PREPARE stmt; -- --- TABLE SETUP_INSTRUMENTS +-- TABLE SETUP_OBJECTS -- -SET @l1="CREATE TABLE performance_schema.SETUP_INSTRUMENTS("; -SET @l2="NAME VARCHAR(128) not null,"; -SET @l3="ENABLED ENUM ('YES', 'NO') not null,"; -SET @l4="TIMED ENUM ('YES', 'NO') not null"; -SET @l5=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5); +SET @cmd="CREATE TABLE performance_schema.SETUP_OBJECTS(" + "OBJECT_TYPE VARCHAR(64)," + "OBJECT_SCHEMA VARCHAR(64)," + "OBJECT_NAME VARCHAR(64)," + "ENABLED ENUM ('YES', 'NO') not null," + "TIMED ENUM ('YES', 'NO') not null," + "AGGREGATED ENUM ('YES', 'NO') not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -463,19 +464,14 @@ EXECUTE stmt; DROP PREPARE stmt; -- --- TABLE SETUP_OBJECTS +-- TABLE SETUP_INSTRUMENTS -- -SET @l1="CREATE TABLE performance_schema.SETUP_OBJECTS("; -SET @l2="OBJECT_TYPE VARCHAR(64),"; -SET @l3="OBJECT_SCHEMA VARCHAR(64),"; -SET @l4="OBJECT_NAME VARCHAR(64),"; -SET @l5="ENABLED ENUM ('YES', 'NO') not null,"; -SET @l6="TIMED ENUM ('YES', 'NO') not null,"; -SET @l7="AGGREGATED ENUM ('YES', 'NO') not null"; -SET @l8=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4,@l5,@l6,@l7,@l8); +SET @cmd="CREATE TABLE performance_schema.SETUP_INSTRUMENTS(" + "NAME VARCHAR(128) not null," + "ENABLED ENUM ('YES', 'NO') not null," + "TIMED ENUM ('YES', 'NO') not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; @@ -486,12 +482,10 @@ DROP PREPARE stmt; -- TABLE SETUP_TIMERS -- -SET @l1="CREATE TABLE performance_schema.SETUP_TIMERS("; -SET @l2="NAME VARCHAR(64) not null,"; -SET @l3="TIMER_NAME ENUM ('CYCLE', 'NANOSECOND', 'MICROSECOND', 'MILLISECOND', 'TICK') not null"; -SET @l4=")ENGINE=PERFORMANCE_SCHEMA;"; - -SET @cmd=concat(@l1,@l2,@l3,@l4); +SET @cmd="CREATE TABLE performance_schema.SETUP_TIMERS(" + "NAME VARCHAR(64) not null," + "TIMER_NAME ENUM ('CYCLE', 'NANOSECOND', 'MICROSECOND', 'MILLISECOND', 'TICK') not null" + ")ENGINE=PERFORMANCE_SCHEMA;"; SET @str = IF(@have_pfs = 1, @cmd, 'SET @dummy = 0'); PREPARE stmt FROM @str; === modified file 'sql/CMakeLists.txt' --- a/sql/CMakeLists.txt 2010-07-19 16:09:51 +0000 +++ b/sql/CMakeLists.txt 2010-07-23 17:20:00 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2006 MySQL AB +# Copyright (c) 2006, 2010, 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 @@ -10,8 +10,8 @@ # 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA INCLUDE_DIRECTORIES( @@ -72,6 +72,7 @@ SET (SQL_SOURCE sql_servers.cc sql_audit.cc sql_connect.cc scheduler.cc sql_profile.cc event_parse_data.cc + sql_bootstrap.cc sql_signal.cc mdl.cc sql_alloc_error_handler.cc transaction.cc sys_vars.cc rpl_handler.cc sql_truncate.cc datadict.cc === modified file 'sql/Makefile.am' --- a/sql/Makefile.am 2010-07-19 16:09:51 +0000 +++ b/sql/Makefile.am 2010-07-23 17:20:00 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2000-2006 MySQL AB +# Copyright (c) 2000, 2010, 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 @@ -10,8 +10,8 @@ # 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA #called from the top level Makefile @@ -161,7 +161,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler. sql_load.cc mf_iocache.cc field_conv.cc sql_show.cc \ sql_udf.cc sql_analyse.cc sql_analyse.h sql_cache.cc \ sql_union.cc sql_derived.cc \ - sql_client.cc \ + sql_client.cc sql_bootstrap.cc \ sql_olap.cc sql_view.cc \ gstream.cc spatial.cc sql_help.cc sql_cursor.cc \ tztime.cc my_decimal.cc\ === added file 'sql/sql_bootstrap.cc' --- a/sql/sql_bootstrap.cc 1970-01-01 00:00:00 +0000 +++ b/sql/sql_bootstrap.cc 2010-06-30 14:05:18 +0000 @@ -0,0 +1,99 @@ +/* Copyright (c) 2010, 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 */ + + +#include +#include +#include "sql_bootstrap.h" + +int read_bootstrap_query(char *query, int *query_length, + fgets_input_t input, fgets_fn_t fgets_fn) +{ + char line_buffer[MAX_BOOTSTRAP_LINE_SIZE]; + const char *line; + int len; + int query_len= 0; + + for ( ; ; ) + { + line= (*fgets_fn)(line_buffer, sizeof(line_buffer), input); + + if (line == NULL) + return (query_len ? READ_BOOTSTRAP_ERROR : READ_BOOTSTRAP_EOF); + + len= strlen(line); + + /* + Remove trailing whitespace characters. + This assumes: + - no multibyte encoded character can be found at the very end of a line, + - whitespace characters from the "C" locale only. + which is sufficient for the kind of queries found + in the bootstrap scripts. + */ + while (len && (isspace(line[len - 1]))) + len--; + /* + Cleanly end the string, so we don't have to test len > x + all the time before reading line[x], in the code below. + */ + line_buffer[len]= '\0'; + + /* Skip blank lines */ + if (len == 0) + continue; + + /* Skip # comments */ + if (line[0] == '#') + continue; + + /* Skip -- comments */ + if ((line[0] == '-') && (line[1] == '-')) + continue; + + /* Skip delimiter, ignored. */ + if (strncmp(line, "delimiter", 9) == 0) + continue; + + /* Append the current line to a multi line query. */ + + if (query_len + len + 1 >= MAX_BOOTSTRAP_QUERY_SIZE) + return READ_BOOTSTRAP_ERROR; + + if (query_len != 0) + { + /* + Append a \n to the current line, if any, + to preserve the intended presentation. + */ + query[query_len]= '\n'; + query_len++; + } + memcpy(query + query_len, line, len); + query_len+= len; + + if (line[len - 1] == ';') + { + /* + The last line is terminated by ';'. + Return the query found. + */ + query[query_len]= '\0'; + *query_length= query_len; + return 0; + } + } +} + === added file 'sql/sql_bootstrap.h' --- a/sql/sql_bootstrap.h 1970-01-01 00:00:00 +0000 +++ b/sql/sql_bootstrap.h 2010-06-30 14:05:18 +0000 @@ -0,0 +1,44 @@ +/* Copyright (c) 2010, 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 */ + + +#ifndef SQL_BOOTSTRAP_H +#define SQL_BOOTSTRAP_H + +/** + The maximum size of a bootstrap query. + Increase this size if parsing a longer query during bootstrap is necessary. + The longest query in use currently is: + INSERT INTO time_zone_transition ..., 8059 characters +*/ +#define MAX_BOOTSTRAP_QUERY_SIZE 10000 +/** + The maximum size of a bootstrap query, expressed in a single line. + Do not increase this size, use the multiline syntax with 'GO' instead. +*/ +#define MAX_BOOTSTRAP_LINE_SIZE 10000 + +#define READ_BOOTSTRAP_EOF 1 +#define READ_BOOTSTRAP_ERROR 2 + +typedef void *fgets_input_t; +typedef char * (*fgets_fn_t)(char *, size_t, fgets_input_t); + +int read_bootstrap_query(char *query, int *query_length, + fgets_input_t input, fgets_fn_t fgets_fn); + +#endif + + === modified file 'sql/sql_parse.cc' --- a/sql/sql_parse.cc 2010-07-19 16:09:51 +0000 +++ b/sql/sql_parse.cc 2010-07-23 17:20:00 +0000 @@ -96,6 +96,7 @@ #include "debug_sync.h" #include "probes_mysql.h" #include "set_var.h" +#include "sql_bootstrap.h" #define FLAGSTR(V,F) ((V)&(F)?#F" ":"") @@ -483,11 +484,20 @@ void execute_init_command(THD *thd, LEX_ #endif } +static char *fgets_fn(char *buffer, size_t size, fgets_input_t input) +{ + MYSQL_FILE *in= static_cast (input); + return mysql_file_fgets(buffer, size, in); +} static void handle_bootstrap_impl(THD *thd) { MYSQL_FILE *file= bootstrap_file; - char *buff; + char buffer[MAX_BOOTSTRAP_QUERY_SIZE]; + char *query; + int length; + int rc; + const char* found_semicolon= NULL; DBUG_ENTER("handle_bootstrap"); @@ -507,44 +517,26 @@ static void handle_bootstrap_impl(THD *t */ thd->client_capabilities|= CLIENT_MULTI_RESULTS; - buff= (char*) thd->net.buff; thd->init_for_queries(); - while (mysql_file_fgets(buff, thd->net.max_packet, file)) + + for ( ; ; ) { - char *query; - /* strlen() can't be deleted because mysql_file_fgets() doesn't return length */ - ulong length= (ulong) strlen(buff); - while (buff[length-1] != '\n' && !mysql_file_feof(file)) + rc= read_bootstrap_query(buffer, &length, file, fgets_fn); + + if (rc == READ_BOOTSTRAP_ERROR) { - /* - We got only a part of the current string. Will try to increase - net buffer then read the rest of the current string. - */ - /* purecov: begin tested */ - if (net_realloc(&(thd->net), 2 * thd->net.max_packet)) - { - thd->protocol->end_statement(); - bootstrap_error= 1; - break; - } - buff= (char*) thd->net.buff; - mysql_file_fgets(buff + length, thd->net.max_packet - length, file); - length+= (ulong) strlen(buff + length); - /* purecov: end */ + thd->raise_error(ER_SYNTAX_ERROR); + thd->protocol->end_statement(); + bootstrap_error= 1; + break; } - if (bootstrap_error) - break; /* purecov: inspected */ - while (length && (my_isspace(thd->charset(), buff[length-1]) || - buff[length-1] == ';')) - length--; - buff[length]=0; - - /* Skip lines starting with delimiter */ - if (strncmp(buff, STRING_WITH_LEN("delimiter")) == 0) - continue; + if (rc == READ_BOOTSTRAP_EOF) + break; + + DBUG_ASSERT(rc == 0); - query= (char *) thd->memdup_w_gap(buff, length + 1, + query= (char *) thd->memdup_w_gap(buffer, length + 1, thd->db_length + 1 + QUERY_CACHE_FLAGS_SIZE); thd->set_query_and_id(query, length, next_query_id()); --===============1870446511738784741== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///home/malff/BZR_TREE/mysql-next-mr-stage2/ # testament_sha1: 7bfc3878d9f141a6834c1dce5bd497ead12b0c2f # timestamp: 2010-07-26 12:14:44 -0600 # source_branch: file:///home/malff/BZR_TREE/mysql-next-mr-wl5291/ # base_revision_id: marc.alff@stripped\ # mc9h1qcxafbsx9ii # # Begin bundle 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 Z9gfvlrpTAuLHp//i7kinChIEQAuzwA= --===============1870446511738784741==--