Commit 525f5847 authored by unknown's avatar unknown
Browse files

Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/home/gluh/MySQL/Devel/mysql-5.0


sql/sql_show.cc:
  Auto merged
parents 68768185 4653d7e1
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
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%`;
+9 −0
Original line number Diff line number Diff line
-- 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%`;
+59 −22
Original line number Diff line number Diff line
@@ -1779,32 +1779,77 @@ enum enum_schema_tables get_schema_table_idx(ST_SCHEMA_TABLE *schema_table)


/*
  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)
  {
    /*
      This part of code is only for SHOW DATABASES command.
      idx_field_vals->db_value can be 0 when we don't use
      LIKE clause (see also get_index_field_values() function)
    */
    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 0;
    return mysql_find_files(thd, files, NullS, mysql_data_home,
                            idx_field_vals->db_value, 1);
  }

  /*
    This part of code is for SHOW TABLES, SHOW TABLE STATUS commands.
    idx_field_vals->db_value can't be 0 (see get_index_field_values()
    function). lex->orig_sql_command can be not equal to SQLCOM_END
    only in case of executing of SHOW commands.
  */
  if (lex->orig_sql_command != SQLCOM_END)
  {
    if (!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));
  }

  /*
    Create list of existing databases. It is used in case
    of select from information schema table
  */
  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);
}


@@ -1882,14 +1927,9 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)

  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);
@@ -2025,13 +2065,10 @@ int fill_schema_shemata(THD *thd, TABLE_LIST *tables, COND *cond)
  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++))
  {