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<char> *files,
- const char *wild, bool *with_i_schema)
+int make_db_list(THD *thd, List<char> *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<char> 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%`;
| Thread |
|---|
| • bk commit into 5.0 tree (gluh:1.1929) BUG#10018 | gluh | 6 May |