From: Date: May 6 2005 9:06pm Subject: bk commit into 5.0 tree (gluh:1.1929) BUG#10018 List-Archive: http://lists.mysql.com/internals/24626 X-Bug: 10018 Message-Id: <200505061906.j46J6G3S020775@localhost.localdomain> Below is the list of changes that have just been committed into a local 5.0 repository of gluh. When gluh does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet 1.1929 05/05/06 19:06:10 gluh@stripped +3 -0 Fix for bug #10018:use INFORMATION_SCHEMA works, but show tables in it returns error mysql-test/t/information_schema_db.test 1.1 05/05/06 19:06:06 gluh@stripped +9 -0 mysql-test/t/information_schema_db.test 1.0 05/05/06 19:06:06 gluh@stripped +0 -0 BitKeeper file /home/gluh/MySQL/Devel/mysql-5.0/mysql-test/t/information_schema_db.test mysql-test/r/information_schema_db.result 1.1 05/05/06 19:06:05 gluh@stripped +28 -0 sql/sql_show.cc 1.239 05/05/06 19:06:05 gluh@stripped +46 -22 Fix for bug #10018:use INFORMATION_SCHEMA works, but show tables in it returns error mysql-test/r/information_schema_db.result 1.0 05/05/06 19:06:05 gluh@stripped +0 -0 BitKeeper file /home/gluh/MySQL/Devel/mysql-5.0/mysql-test/r/information_schema_db.result # This is a BitKeeper patch. What follows are the unified diffs for the # set of deltas contained in the patch. The rest of the patch, the part # that BitKeeper cares about, is below these diffs. # User: gluh # Host: mobby.(none) # Root: /home/gluh/MySQL/Devel/mysql-5.0 --- 1.238/sql/sql_show.cc 2005-05-05 15:05:59 +00:00 +++ 1.239/sql/sql_show.cc 2005-05-06 19:06:05 +00:00 @@ -1777,32 +1777,64 @@ /* - Add 'information_schema' name to db_names list + Create db names list. Information schema name always is first in list SYNOPSIS - schema_db_add() + make_db_list() thd thread handler files list of db names wild wild string + idx_field_vals idx_field_vals->db_name contains db name or + wild string with_i_schema returns 1 if we added 'IS' name to list otherwise returns 0 + is_wild_value if value is 1 then idx_field_vals->db_name is + wild string otherwise it's db name; RETURN 1 error 0 success */ -int schema_db_add(THD *thd, List *files, - const char *wild, bool *with_i_schema) +int make_db_list(THD *thd, List *files, + INDEX_FIELD_VALUES *idx_field_vals, + bool *with_i_schema, bool is_wild_value) { + LEX *lex= thd->lex; *with_i_schema= 0; - if (!wild || !wild_compare(information_schema_name.str, wild, 0)) + get_index_field_values(lex, idx_field_vals); + if (is_wild_value) { - *with_i_schema= 1; - if (files->push_back(thd->strdup(information_schema_name.str))) - return 1; + if (!idx_field_vals->db_value || + !wild_case_compare(system_charset_info, + information_schema_name.str, + idx_field_vals->db_value)) + { + *with_i_schema= 1; + if (files->push_back(thd->strdup(information_schema_name.str))) + return 1; + } + return mysql_find_files(thd, files, NullS, mysql_data_home, + idx_field_vals->db_value, 1); } - return 0; + + if (lex->orig_sql_command != SQLCOM_END) + { + if (!idx_field_vals->db_value || + !my_strcasecmp(system_charset_info, + information_schema_name.str, + idx_field_vals->db_value)) + { + *with_i_schema= 1; + return files->push_back(thd->strdup(information_schema_name.str)); + } + return files->push_back(thd->strdup(idx_field_vals->db_value)); + } + + if (files->push_back(thd->strdup(information_schema_name.str))) + return 1; + *with_i_schema= 1; + return mysql_find_files(thd, files, NullS, mysql_data_home, NullS, 1); } @@ -1880,14 +1912,9 @@ if (schema_table_idx == SCH_TABLES) lock_type= TL_READ; - get_index_field_values(lex, &idx_field_vals); - /* information schema name always is first in list */ - if (schema_db_add(thd, &bases, idx_field_vals.db_value, &with_i_schema)) - goto err; - - if (mysql_find_files(thd, &bases, NullS, mysql_data_home, - idx_field_vals.db_value, 1)) + if (make_db_list(thd, &bases, &idx_field_vals, + &with_i_schema, 0)) goto err; partial_cond= make_cond_for_info_schema(cond, tables); @@ -2022,13 +2049,10 @@ TABLE *table= tables->table; DBUG_ENTER("fill_schema_shemata"); - get_index_field_values(thd->lex, &idx_field_vals); - /* information schema name always is first in list */ - if (schema_db_add(thd, &files, idx_field_vals.db_value, &with_i_schema)) - DBUG_RETURN(1); - if (mysql_find_files(thd, &files, NullS, mysql_data_home, - idx_field_vals.db_value, 1)) + if (make_db_list(thd, &files, &idx_field_vals, + &with_i_schema, 1)) DBUG_RETURN(1); + List_iterator_fast it(files); while ((file_name=it++)) { --- New file --- +++ mysql-test/r/information_schema_db.result 05/05/06 19:06:05 use INFORMATION_SCHEMA; show tables; Tables_in_INFORMATION_SCHEMA SCHEMATA TABLES COLUMNS CHARACTER_SETS COLLATIONS COLLATION_CHARACTER_SET_APPLICABILITY ROUTINES STATISTICS VIEWS USER_PRIVILEGES SCHEMA_PRIVILEGES TABLE_PRIVILEGES COLUMN_PRIVILEGES TABLE_CONSTRAINTS KEY_COLUMN_USAGE show tables from INFORMATION_SCHEMA like 'T%'; Tables_in_INFORMATION_SCHEMA (T%) TABLES TABLE_PRIVILEGES TABLE_CONSTRAINTS create database `inf%`; use `inf%`; show tables; Tables_in_inf% drop database `inf%`; --- New file --- +++ mysql-test/t/information_schema_db.test 05/05/06 19:06:06 -- source include/testdb_only.inc use INFORMATION_SCHEMA; show tables; show tables from INFORMATION_SCHEMA like 'T%'; create database `inf%`; use `inf%`; show tables; drop database `inf%`;