MySQL Lists are EOL. Please join:

List:Internals« Previous MessageNext Message »
From:gluh Date:May 6 2005 7:06pm
Subject:bk commit into 5.0 tree (gluh:1.1929) BUG#10018
View as plain text  
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#10018gluh6 May