From: Marc Alff Date: July 26 2010 6:12pm Subject: bzr commit into mysql-next-mr-wl5291 branch (marc.alff:3170) WL#5291 List-Archive: http://lists.mysql.com/commits/114374 Message-Id: <20100726181320.A866245E80@linux-su11.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5008328876266323631==" --===============5008328876266323631== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/malff/BZR_TREE/mysql-next-mr-stage2/ based on revid:marc.alff@stripped 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 === modified file '.bzr-mysql/default.conf' --- a/.bzr-mysql/default.conf 2010-07-24 10:24:17 +0000 +++ b/.bzr-mysql/default.conf 2010-07-26 18:12:38 +0000 @@ -1,4 +1,4 @@ [MYSQL] post_commit_to = "commits@stripped" post_push_to = "commits@stripped" -tree_name = "mysql-next-mr" +tree_name = "mysql-next-mr-wl5291" === 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()); --===============5008328876266323631== 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: 288aebde94180dca26df89f0984e671dce497ed1 # timestamp: 2010-07-26 12:13:20 -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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 6mJ+U+kPwlrpTAuLHp//i7kinChIAN8soQA= --===============5008328876266323631==--