From: Christopher Powers Date: November 30 2010 4:27am Subject: bzr push into mysql-5.1-bugteam branch (chris.powers:3517) List-Archive: http://lists.mysql.com/commits/125438 Message-Id: <20101130042744.964B81DB031E@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2026436041349378683==" --===============2026436041349378683== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3517 Christopher Powers 2010-11-29 [merge] merge added: mysql-test/include/ctype_8bit.inc mysql-test/suite/innodb_plugin/r/innodb_bug56947.result mysql-test/suite/innodb_plugin/t/innodb_bug56947.test modified: Makefile.am client/mysql.cc configure.in libmysql/Makefile.am libmysql/Makefile.shared libmysql/conf_to_src.c libmysql/dll.c libmysql/errmsg.c libmysql/get_password.c libmysql/libmysql.c libmysql/manager.c libmysql_r/Makefile.am mysql-test/extra/binlog_tests/binlog.test mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test mysql-test/include/restart_mysqld.inc mysql-test/lib/mtr_cases.pm mysql-test/mysql-test-run.pl mysql-test/r/change_user.result mysql-test/r/connect.result mysql-test/r/ctype_cp1251.result mysql-test/r/ctype_utf8.result mysql-test/r/explain.result mysql-test/r/fulltext.result mysql-test/r/func_gconcat.result mysql-test/r/func_math.result mysql-test/r/func_misc.result mysql-test/r/group_by.result mysql-test/r/join_outer.result mysql-test/r/key_cache.result mysql-test/r/mysql.result mysql-test/r/partition_innodb.result mysql-test/r/variables.result mysql-test/suite/binlog/r/binlog_row_binlog.result mysql-test/suite/binlog/r/binlog_stm_binlog.result mysql-test/suite/innodb/r/innodb_mysql.result mysql-test/suite/innodb/t/innodb_mysql.test mysql-test/suite/innodb_plugin/r/innodb_mysql.result mysql-test/suite/innodb_plugin/t/innodb_mysql.test mysql-test/suite/rpl/t/rpl_trigger.test mysql-test/t/change_user.test mysql-test/t/connect.test mysql-test/t/ctype_cp1251.test mysql-test/t/ctype_utf8.test mysql-test/t/explain.test mysql-test/t/fulltext.test mysql-test/t/func_gconcat.test mysql-test/t/func_math.test mysql-test/t/func_misc.test mysql-test/t/group_by.test mysql-test/t/join_outer.test mysql-test/t/key_cache.test mysql-test/t/mysql.test mysql-test/t/partition_innodb.test mysql-test/t/variables.test mysys/my_symlink.c scripts/make_binary_distribution.sh scripts/make_win_bin_dist sql/ha_partition.cc sql/item_func.cc sql/item_func.h sql/item_strfunc.cc sql/item_subselect.cc sql/item_sum.cc sql/mysqld.cc sql/opt_range.h sql/records.cc sql/set_var.cc sql/set_var.h sql/share/charsets/cp1251.xml sql/sql_binlog.cc sql/sql_connect.cc sql/sql_select.cc storage/innobase/row/row0mysql.c storage/innodb_plugin/ChangeLog storage/innodb_plugin/row/row0mysql.c strings/CHARSET_INFO.txt strings/ctype-extra.c support-files/mysql.spec.sh tests/mysql_client_test.c === modified file 'mysql-test/r/merge.result' --- a/mysql-test/r/merge.result 2010-04-26 13:44:10 +0000 +++ b/mysql-test/r/merge.result 2010-11-30 01:11:05 +0000 @@ -2024,6 +2024,8 @@ SELECT * FROM INFORMATION_SCHEMA.TABLES TABLE_SCHEMA = 'test' and TABLE_NAME='tm1'; TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT NULL test tm1 BASE TABLE NULL NULL NULL # # # # # # # # # # NULL # # Unable to open underlying table which is differently defined or of non-MyISAM ty +Warnings: +Warning 1168 Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist DROP TABLE tm1; CREATE TABLE t1(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM; CREATE TABLE t2(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM; === modified file 'mysql-test/r/show_check.result' --- a/mysql-test/r/show_check.result 2010-02-09 10:30:50 +0000 +++ b/mysql-test/r/show_check.result 2010-11-30 01:11:05 +0000 @@ -660,6 +660,8 @@ flush tables; SHOW TABLE STATUS like 't1'; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 NULL NULL NULL NULL # # # # NULL NULL NULL NULL NULL NULL NULL NULL Incorrect information in file: './test/t1.frm' +Warnings: +Warning 1033 Incorrect information in file: './test/t1.frm' show create table t1; ERROR HY000: Incorrect information in file: './test/t1.frm' drop table if exists t1; === modified file 'mysql-test/r/view.result' --- a/mysql-test/r/view.result 2010-04-06 07:26:59 +0000 +++ b/mysql-test/r/view.result 2010-11-30 01:11:05 +0000 @@ -840,6 +840,8 @@ show table status; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 MyISAM 10 Fixed 0 0 0 # 1024 0 NULL # # NULL latin1_swedish_ci NULL v1 NULL NULL NULL NULL NULL NULL # NULL NULL NULL # # NULL NULL NULL NULL View 'test.v1' references invalid table(s) or column(s) or function(s) or define +Warnings: +Warning 1356 View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them drop view v1; drop table t1; create view v1 as select 99999999999999999999999999999999999999999999999999999 as col1; === added file 'mysql-test/suite/federated/federated_bug_35333.result' --- a/mysql-test/suite/federated/federated_bug_35333.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/federated/federated_bug_35333.result 2010-11-30 01:11:05 +0000 @@ -0,0 +1,67 @@ +# +# Bug 35333 "If a Federated table can't connect to the remote hose, can't retrieve metadata" +# +# Queries such as SHOW TABLE STATUS and SELECT * FROM INFORMATION_SCHEMA.TABLES fail +# when encountering a federated table that cannot connect to its remote table. +# +# The fix is to store the error text in the TABLE COMMENTS column of I_S.TABLES, clear +# the remote connection error and push a warning instead. This allows the SELECT operation +# to complete while still indicating a problem. This fix applies to any non-fatal system +# error that occurs during a query against I_S.TABLES.de +CREATE DATABASE federated; +CREATE DATABASE federated; +CREATE DATABASE IF NOT EXISTS realdb; +DROP TABLE IF EXISTS realdb.t0; +DROP TABLE IF EXISTS federated.t0; +# +# Create the base table to be referenced +# +CREATE TABLE realdb.t0 (a text, b text) ENGINE=MYISAM; +# +# Create a federated table with a bogus port number +# +CREATE TABLE federated.t0 (a text, b text) ENGINE=FEDERATED +CONNECTION='mysql://root@stripped:63333/realdb/t0'; +# +# Trigger a federated system error during a INFORMATION_SCHEMA.TABLES query +# +SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, TABLE_ROWS, DATA_LENGTH, TABLE_COMMENT +FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'realdb' or TABLE_SCHEMA = 'federated'; +TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE ROW_FORMAT TABLE_ROWS DATA_LENGTH TABLE_COMMENT +federated t0 BASE TABLE FEDERATED NULL 0 Unable to connect to foreign data source: Can't connect to MySQL server on '127. +realdb t0 BASE TABLE MyISAM Dynamic 0 0 +Warnings: +Warning 1429 Unable to connect to foreign data source: Can't connect to MySQL server on '127.0.0.1' (socket errno) +SHOW WARNINGS; +Level Code Message +Warning 1429 Unable to connect to foreign data source: Can't connect to MySQL server on '127.0.0.1' (socket errno) +# +# Create a MyISAM table then corrupt the file +# +USE realdb; +CREATE TABLE t1 (c1 int) ENGINE=MYISAM; +# +# Corrupt the MyISAM table by deleting the base file +# +# +# Trigger a MyISAM system error during an INFORMATION_SCHEMA.TABLES query +# +SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, TABLE_ROWS, DATA_LENGTH, TABLE_COMMENT +FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE ROW_FORMAT TABLE_ROWS DATA_LENGTH TABLE_COMMENT +realdb t1 BASE TABLE NULL NULL NULL NULL Can't find file: 't1' (errno: 2) +Warnings: +Warning 1017 Can't find file: 't1' (errno: 2) +SHOW WARNINGS; +Level Code Message +Warning 1017 Can't find file: 't1' (errno: 2) +# +# Cleanup +# +DROP TABLE IF EXISTS realdb.t0; +DROP TABLE IF EXISTS federated.t0; +DROP DATABASE realdb; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; +DROP TABLE IF EXISTS federated.t1; +DROP DATABASE federated; === added file 'mysql-test/suite/federated/federated_bug_35333.test' --- a/mysql-test/suite/federated/federated_bug_35333.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/federated/federated_bug_35333.test 2010-11-30 01:11:05 +0000 @@ -0,0 +1,74 @@ +--echo # +--echo # Bug 35333 "If a Federated table can't connect to the remote hose, can't retrieve metadata" +--echo # +--echo # Queries such as SHOW TABLE STATUS and SELECT * FROM INFORMATION_SCHEMA.TABLES fail +--echo # when encountering a federated table that cannot connect to its remote table. +--echo # +--echo # The fix is to store the error text in the TABLE COMMENTS column of I_S.TABLES, clear +--echo # the remote connection error and push a warning instead. This allows the SELECT operation +--echo # to complete while still indicating a problem. This fix applies to any non-fatal system +--echo # error that occurs during a query against I_S.TABLES.de + +--source federated.inc + +--disable_warnings +CREATE DATABASE IF NOT EXISTS realdb; +# Federated database exists +DROP TABLE IF EXISTS realdb.t0; +DROP TABLE IF EXISTS federated.t0; +--enable_warnings + +--echo # +--echo # Create the base table to be referenced +--echo # +CREATE TABLE realdb.t0 (a text, b text) ENGINE=MYISAM; + +--echo # +--echo # Create a federated table with a bogus port number +--echo # +CREATE TABLE federated.t0 (a text, b text) ENGINE=FEDERATED + CONNECTION='mysql://root@stripped:63333/realdb/t0'; + +#--warning ER_CONNECT_TO_FOREIGN_DATA_SOURCE + +--echo # +--echo # Trigger a federated system error during a INFORMATION_SCHEMA.TABLES query +--echo # +# Remove O/S-specific socket error +--replace_regex /\(.*\)/(socket errno)/ +SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, TABLE_ROWS, DATA_LENGTH, TABLE_COMMENT + FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'realdb' or TABLE_SCHEMA = 'federated'; + +# Remove O/S-specific socket error +--replace_regex /\(.*\)/(socket errno)/ +SHOW WARNINGS; + +--echo # +--echo # Create a MyISAM table then corrupt the file +--echo # +USE realdb; +CREATE TABLE t1 (c1 int) ENGINE=MYISAM; +--echo # +--echo # Corrupt the MyISAM table by deleting the base file +--echo # +let $MYSQLD_DATADIR= `SELECT @@datadir`; +--remove_file $MYSQLD_DATADIR/realdb/t1.MYD +--remove_file $MYSQLD_DATADIR/realdb/t1.MYI + +--echo # +--echo # Trigger a MyISAM system error during an INFORMATION_SCHEMA.TABLES query +--echo # +SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, ROW_FORMAT, TABLE_ROWS, DATA_LENGTH, TABLE_COMMENT + FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; + +SHOW WARNINGS; +--echo # +--echo # Cleanup +--echo # +--disable_warnings +DROP TABLE IF EXISTS realdb.t0; +DROP TABLE IF EXISTS federated.t0; +DROP DATABASE realdb; +--enable_warnings + +--source federated_cleanup.inc === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2010-11-02 13:20:02 +0000 +++ b/sql/sql_show.cc 2010-11-30 01:11:05 +0000 @@ -3636,28 +3636,28 @@ static int get_schema_tables_record(THD { const char *tmp_buff; MYSQL_TIME time; + int info_error= 0; CHARSET_INFO *cs= system_charset_info; DBUG_ENTER("get_schema_tables_record"); restore_record(table, s->default_values); table->field[1]->store(db_name->str, db_name->length, cs); table->field[2]->store(table_name->str, table_name->length, cs); + if (res) { - /* - there was errors during opening tables - */ - const char *error= thd->is_error() ? thd->main_da.message() : ""; + /* There was a table open error, so set the table type and return */ if (tables->view) table->field[3]->store(STRING_WITH_LEN("VIEW"), cs); else if (tables->schema_table) table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs); else table->field[3]->store(STRING_WITH_LEN("BASE TABLE"), cs); - table->field[20]->store(error, strlen(error), cs); - thd->clear_error(); + + goto err; } - else if (tables->view) + + if (tables->view) { table->field[3]->store(STRING_WITH_LEN("VIEW"), cs); table->field[20]->store(STRING_WITH_LEN("VIEW"), cs); @@ -3746,9 +3746,14 @@ static int get_schema_tables_record(THD if (share->comment.str) table->field[20]->store(share->comment.str, share->comment.length, cs); - if(file) + if (file) { - file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_AUTO); + /* If info() fails, then there's nothing else to do */ + if ((info_error= file->info(HA_STATUS_VARIABLE | + HA_STATUS_TIME | + HA_STATUS_AUTO)) != 0) + goto err; + enum row_type row_type = file->get_row_type(); switch (row_type) { case ROW_TYPE_NOT_USED: @@ -3826,6 +3831,26 @@ static int get_schema_tables_record(THD } } } + +err: + if (res || info_error) + { + /* + If an error was encountered, push a warning, set the TABLE COMMENT + column with the error text, and clear the error so that the operation + can continue. + */ + const char *error= thd->is_error() ? thd->main_da.message() : ""; + table->field[20]->store(error, strlen(error), cs); + + if (thd->is_error()) + { + push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, + thd->main_da.sql_errno(), thd->main_da.message()); + thd->clear_error(); + } + } + DBUG_RETURN(schema_table_store_record(thd, table)); } --===============2026436041349378683== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/chris.powers@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: chris.powers@stripped # target_branch: file:///home/cpowers/work/dev/mysql-5.1-bugteam/ # testament_sha1: 82400b7ff1a368501a449a35d76f245dcfa77842 # timestamp: 2010-11-29 22:27:44 -0600 # base_revision_id: georgi.kodinov@stripped\ # r803cif0yke00bi6 # # Begin bundle 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 8gY= --===============2026436041349378683==--