Commit fb8758d6 authored by unknown's avatar unknown
Browse files

Fix for bug #7210: information_schema: can't access when table-name = reserved word

parent 491baa97
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -590,6 +590,23 @@ TABLES
TABLE_PRIVILEGES
TABLE_CONSTRAINTS
TABLE_NAMES
select table_name from tables where table_name='user';
table_name
user
select column_name, privileges from columns
where table_name='user' and column_name like '%o%';
column_name	privileges
Host	select,insert,update,references
Password	select,insert,update,references
Drop_priv	select,insert,update,references
Reload_priv	select,insert,update,references
Shutdown_priv	select,insert,update,references
Process_priv	select,insert,update,references
Show_db_priv	select,insert,update,references
Lock_tables_priv	select,insert,update,references
Show_view_priv	select,insert,update,references
max_questions	select,insert,update,references
max_connections	select,insert,update,references
use test;
create function sub1(i int) returns int
return i+1;
+7 −0
Original line number Diff line number Diff line
@@ -293,6 +293,13 @@ show tables;
use information_schema;
show tables like "T%";

#
# Bug#7210: information_schema: can't access when table-name = reserved word
#
select table_name from tables where table_name='user';
select column_name, privileges from columns
where table_name='user' and column_name like '%o%';

#
# Bug#7212: information_schema: "Can't find file" errors if storage engine gone
# Bug#7211: information_schema: crash if bad view
+9 −0
Original line number Diff line number Diff line
@@ -1583,6 +1583,15 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
			packet, (uint) (pend-packet), thd->charset());
    table_list.alias= table_list.real_name= conv_name.str;
    packet= pend+1;

    if (!my_strcasecmp(system_charset_info, table_list.db,
                       information_schema_name.str))
    {
      ST_SCHEMA_TABLE *schema_table= find_schema_table(thd, table_list.alias);
      if (schema_table)
        table_list.schema_table= schema_table;
    }

    /*  command not cachable => no gap for data base name */
    if (!(thd->query=fields=thd->memdup(packet,thd->query_length+1)))
      break;
+3 −0
Original line number Diff line number Diff line
@@ -6885,6 +6885,7 @@ keyword:
	| CLIENT_SYM		{}
	| CLOSE_SYM		{}
	| COLLATION_SYM		{}
        | COLUMNS               {}
	| COMMENT_SYM		{}
	| COMMITTED_SYM		{}
	| COMMIT_SYM		{}
@@ -7006,6 +7007,7 @@ keyword:
	| POLYGON		{}
        | PREPARE_SYM           {}
	| PREV_SYM		{}
        | PRIVILEGES            {}
	| PROCESS		{}
	| PROCESSLIST_SYM	{}
	| QUARTER_SYM		{}
@@ -7057,6 +7059,7 @@ keyword:
	| SUBDATE_SYM		{}
	| SUBJECT_SYM		{}
	| SUPER_SYM		{}
        | TABLES                {}
	| TABLESPACE		{}
	| TEMPORARY		{}
	| TEMPTABLE_SYM		{}