Loading mysql-test/r/information_schema.result +19 −5 Original line number Diff line number Diff line Loading @@ -49,7 +49,6 @@ TABLE_PRIVILEGES COLUMN_PRIVILEGES TABLE_CONSTRAINTS KEY_COLUMN_USAGE TABLE_NAMES columns_priv db func Loading Loading @@ -78,7 +77,6 @@ c table_name TABLES TABLES TABLE_PRIVILEGES TABLE_PRIVILEGES TABLE_CONSTRAINTS TABLE_CONSTRAINTS TABLE_NAMES TABLE_NAMES tables_priv tables_priv time_zone time_zone time_zone_leap_second time_zone_leap_second Loading @@ -96,7 +94,6 @@ c table_name TABLES TABLES TABLE_PRIVILEGES TABLE_PRIVILEGES TABLE_CONSTRAINTS TABLE_CONSTRAINTS TABLE_NAMES TABLE_NAMES tables_priv tables_priv time_zone time_zone time_zone_leap_second time_zone_leap_second Loading Loading @@ -577,7 +574,6 @@ Tables_in_information_schema (T%) Table_type TABLES TEMPORARY TABLE_PRIVILEGES TEMPORARY TABLE_CONSTRAINTS TEMPORARY TABLE_NAMES TEMPORARY create table t1(a int); ERROR 42S02: Unknown table 't1' in information_schema use test; Loading @@ -589,7 +585,23 @@ Tables_in_information_schema (T%) 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; Loading Loading @@ -627,3 +639,5 @@ constraint_name drop view t2; drop view t3; drop table t4; select * from information_schema.table_names; ERROR 42S02: Unknown table 'table_names' in information_schema mysql-test/t/information_schema.test +13 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -318,3 +325,9 @@ where table_schema='test'; drop view t2; drop view t3; drop table t4; # # Bug#7213: information_schema: redundant non-standard TABLE_NAMES table # --error 1109 select * from information_schema.table_names; sql/sql_parse.cc +12 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -5265,7 +5274,9 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, information_schema_name.str)) { ST_SCHEMA_TABLE *schema_table= find_schema_table(thd, ptr->real_name); if (!schema_table) if (!schema_table || (schema_table->hidden && lex->orig_sql_command == SQLCOM_END)) // not a 'show' command { my_error(ER_UNKNOWN_TABLE, MYF(0), ptr->real_name, information_schema_name.str); Loading sql/sql_show.cc +19 −17 Original line number Diff line number Diff line Loading @@ -1976,6 +1976,8 @@ int schema_tables_add(THD *thd, List<char> *files, const char *wild) ST_SCHEMA_TABLE *tmp_schema_table= schema_tables; for ( ; tmp_schema_table->table_name; tmp_schema_table++) { if (tmp_schema_table->hidden) continue; if (wild) { if (lower_case_table_names) Loading Loading @@ -3688,38 +3690,38 @@ ST_FIELD_INFO table_names_fields_info[]= ST_SCHEMA_TABLE schema_tables[]= { {"SCHEMATA", schema_fields_info, create_schema_table, fill_schema_shemata, make_schemata_old_format, 0, 1, -1}, fill_schema_shemata, make_schemata_old_format, 0, 1, -1, 0}, {"TABLES", tables_fields_info, create_schema_table, get_all_tables, make_old_format, get_schema_tables_record, 1, 2}, get_all_tables, make_old_format, get_schema_tables_record, 1, 2, 0}, {"COLUMNS", columns_fields_info, create_schema_table, get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2}, get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2, 0}, {"CHARACTER_SETS", charsets_fields_info, create_schema_table, fill_schema_charsets, make_character_sets_old_format, 0, -1, -1}, fill_schema_charsets, make_character_sets_old_format, 0, -1, -1, 0}, {"COLLATIONS", collation_fields_info, create_schema_table, fill_schema_collation, make_old_format, 0, -1, -1}, fill_schema_collation, make_old_format, 0, -1, -1, 0}, {"COLLATION_CHARACTER_SET_APPLICABILITY", coll_charset_app_fields_info, create_schema_table, fill_schema_coll_charset_app, 0, 0, -1, -1}, create_schema_table, fill_schema_coll_charset_app, 0, 0, -1, -1, 0}, {"ROUTINES", proc_fields_info, create_schema_table, fill_schema_proc, make_proc_old_format, 0, -1, -1}, fill_schema_proc, make_proc_old_format, 0, -1, -1, 0}, {"STATISTICS", stat_fields_info, create_schema_table, get_all_tables, make_old_format, get_schema_stat_record, 1, 2}, get_all_tables, make_old_format, get_schema_stat_record, 1, 2, 0}, {"VIEWS", view_fields_info, create_schema_table, get_all_tables, 0, get_schema_views_record, 1, 2}, get_all_tables, 0, get_schema_views_record, 1, 2, 0}, {"USER_PRIVILEGES", user_privileges_fields_info, create_schema_table, fill_schema_user_privileges, 0, 0, -1, -1}, fill_schema_user_privileges, 0, 0, -1, -1, 0}, {"SCHEMA_PRIVILEGES", schema_privileges_fields_info, create_schema_table, fill_schema_schema_privileges, 0, 0, -1, -1}, fill_schema_schema_privileges, 0, 0, -1, -1, 0}, {"TABLE_PRIVILEGES", table_privileges_fields_info, create_schema_table, fill_schema_table_privileges, 0, 0, -1, -1}, fill_schema_table_privileges, 0, 0, -1, -1, 0}, {"COLUMN_PRIVILEGES", column_privileges_fields_info, create_schema_table, fill_schema_column_privileges, 0, 0, -1, -1}, fill_schema_column_privileges, 0, 0, -1, -1, 0}, {"TABLE_CONSTRAINTS", table_constraints_fields_info, create_schema_table, get_all_tables, 0, get_schema_constraints_record, 3, 4}, get_all_tables, 0, get_schema_constraints_record, 3, 4, 0}, {"KEY_COLUMN_USAGE", key_column_usage_fields_info, create_schema_table, get_all_tables, 0, get_schema_key_column_usage_record, 4, 5}, get_all_tables, 0, get_schema_key_column_usage_record, 4, 5, 0}, {"TABLE_NAMES", table_names_fields_info, create_schema_table, get_all_tables, make_table_names_old_format, 0, 1, 2}, {0, 0, 0, 0, 0, 0, 0, 0} get_all_tables, make_table_names_old_format, 0, 1, 2, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0} }; Loading sql/sql_yacc.yy +3 −0 Original line number Diff line number Diff line Loading @@ -6885,6 +6885,7 @@ keyword: | CLIENT_SYM {} | CLOSE_SYM {} | COLLATION_SYM {} | COLUMNS {} | COMMENT_SYM {} | COMMITTED_SYM {} | COMMIT_SYM {} Loading Loading @@ -7006,6 +7007,7 @@ keyword: | POLYGON {} | PREPARE_SYM {} | PREV_SYM {} | PRIVILEGES {} | PROCESS {} | PROCESSLIST_SYM {} | QUARTER_SYM {} Loading Loading @@ -7057,6 +7059,7 @@ keyword: | SUBDATE_SYM {} | SUBJECT_SYM {} | SUPER_SYM {} | TABLES {} | TABLESPACE {} | TEMPORARY {} | TEMPTABLE_SYM {} Loading Loading
mysql-test/r/information_schema.result +19 −5 Original line number Diff line number Diff line Loading @@ -49,7 +49,6 @@ TABLE_PRIVILEGES COLUMN_PRIVILEGES TABLE_CONSTRAINTS KEY_COLUMN_USAGE TABLE_NAMES columns_priv db func Loading Loading @@ -78,7 +77,6 @@ c table_name TABLES TABLES TABLE_PRIVILEGES TABLE_PRIVILEGES TABLE_CONSTRAINTS TABLE_CONSTRAINTS TABLE_NAMES TABLE_NAMES tables_priv tables_priv time_zone time_zone time_zone_leap_second time_zone_leap_second Loading @@ -96,7 +94,6 @@ c table_name TABLES TABLES TABLE_PRIVILEGES TABLE_PRIVILEGES TABLE_CONSTRAINTS TABLE_CONSTRAINTS TABLE_NAMES TABLE_NAMES tables_priv tables_priv time_zone time_zone time_zone_leap_second time_zone_leap_second Loading Loading @@ -577,7 +574,6 @@ Tables_in_information_schema (T%) Table_type TABLES TEMPORARY TABLE_PRIVILEGES TEMPORARY TABLE_CONSTRAINTS TEMPORARY TABLE_NAMES TEMPORARY create table t1(a int); ERROR 42S02: Unknown table 't1' in information_schema use test; Loading @@ -589,7 +585,23 @@ Tables_in_information_schema (T%) 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; Loading Loading @@ -627,3 +639,5 @@ constraint_name drop view t2; drop view t3; drop table t4; select * from information_schema.table_names; ERROR 42S02: Unknown table 'table_names' in information_schema
mysql-test/t/information_schema.test +13 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -318,3 +325,9 @@ where table_schema='test'; drop view t2; drop view t3; drop table t4; # # Bug#7213: information_schema: redundant non-standard TABLE_NAMES table # --error 1109 select * from information_schema.table_names;
sql/sql_parse.cc +12 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -5265,7 +5274,9 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, information_schema_name.str)) { ST_SCHEMA_TABLE *schema_table= find_schema_table(thd, ptr->real_name); if (!schema_table) if (!schema_table || (schema_table->hidden && lex->orig_sql_command == SQLCOM_END)) // not a 'show' command { my_error(ER_UNKNOWN_TABLE, MYF(0), ptr->real_name, information_schema_name.str); Loading
sql/sql_show.cc +19 −17 Original line number Diff line number Diff line Loading @@ -1976,6 +1976,8 @@ int schema_tables_add(THD *thd, List<char> *files, const char *wild) ST_SCHEMA_TABLE *tmp_schema_table= schema_tables; for ( ; tmp_schema_table->table_name; tmp_schema_table++) { if (tmp_schema_table->hidden) continue; if (wild) { if (lower_case_table_names) Loading Loading @@ -3688,38 +3690,38 @@ ST_FIELD_INFO table_names_fields_info[]= ST_SCHEMA_TABLE schema_tables[]= { {"SCHEMATA", schema_fields_info, create_schema_table, fill_schema_shemata, make_schemata_old_format, 0, 1, -1}, fill_schema_shemata, make_schemata_old_format, 0, 1, -1, 0}, {"TABLES", tables_fields_info, create_schema_table, get_all_tables, make_old_format, get_schema_tables_record, 1, 2}, get_all_tables, make_old_format, get_schema_tables_record, 1, 2, 0}, {"COLUMNS", columns_fields_info, create_schema_table, get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2}, get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2, 0}, {"CHARACTER_SETS", charsets_fields_info, create_schema_table, fill_schema_charsets, make_character_sets_old_format, 0, -1, -1}, fill_schema_charsets, make_character_sets_old_format, 0, -1, -1, 0}, {"COLLATIONS", collation_fields_info, create_schema_table, fill_schema_collation, make_old_format, 0, -1, -1}, fill_schema_collation, make_old_format, 0, -1, -1, 0}, {"COLLATION_CHARACTER_SET_APPLICABILITY", coll_charset_app_fields_info, create_schema_table, fill_schema_coll_charset_app, 0, 0, -1, -1}, create_schema_table, fill_schema_coll_charset_app, 0, 0, -1, -1, 0}, {"ROUTINES", proc_fields_info, create_schema_table, fill_schema_proc, make_proc_old_format, 0, -1, -1}, fill_schema_proc, make_proc_old_format, 0, -1, -1, 0}, {"STATISTICS", stat_fields_info, create_schema_table, get_all_tables, make_old_format, get_schema_stat_record, 1, 2}, get_all_tables, make_old_format, get_schema_stat_record, 1, 2, 0}, {"VIEWS", view_fields_info, create_schema_table, get_all_tables, 0, get_schema_views_record, 1, 2}, get_all_tables, 0, get_schema_views_record, 1, 2, 0}, {"USER_PRIVILEGES", user_privileges_fields_info, create_schema_table, fill_schema_user_privileges, 0, 0, -1, -1}, fill_schema_user_privileges, 0, 0, -1, -1, 0}, {"SCHEMA_PRIVILEGES", schema_privileges_fields_info, create_schema_table, fill_schema_schema_privileges, 0, 0, -1, -1}, fill_schema_schema_privileges, 0, 0, -1, -1, 0}, {"TABLE_PRIVILEGES", table_privileges_fields_info, create_schema_table, fill_schema_table_privileges, 0, 0, -1, -1}, fill_schema_table_privileges, 0, 0, -1, -1, 0}, {"COLUMN_PRIVILEGES", column_privileges_fields_info, create_schema_table, fill_schema_column_privileges, 0, 0, -1, -1}, fill_schema_column_privileges, 0, 0, -1, -1, 0}, {"TABLE_CONSTRAINTS", table_constraints_fields_info, create_schema_table, get_all_tables, 0, get_schema_constraints_record, 3, 4}, get_all_tables, 0, get_schema_constraints_record, 3, 4, 0}, {"KEY_COLUMN_USAGE", key_column_usage_fields_info, create_schema_table, get_all_tables, 0, get_schema_key_column_usage_record, 4, 5}, get_all_tables, 0, get_schema_key_column_usage_record, 4, 5, 0}, {"TABLE_NAMES", table_names_fields_info, create_schema_table, get_all_tables, make_table_names_old_format, 0, 1, 2}, {0, 0, 0, 0, 0, 0, 0, 0} get_all_tables, make_table_names_old_format, 0, 1, 2, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0} }; Loading
sql/sql_yacc.yy +3 −0 Original line number Diff line number Diff line Loading @@ -6885,6 +6885,7 @@ keyword: | CLIENT_SYM {} | CLOSE_SYM {} | COLLATION_SYM {} | COLUMNS {} | COMMENT_SYM {} | COMMITTED_SYM {} | COMMIT_SYM {} Loading Loading @@ -7006,6 +7007,7 @@ keyword: | POLYGON {} | PREPARE_SYM {} | PREV_SYM {} | PRIVILEGES {} | PROCESS {} | PROCESSLIST_SYM {} | QUARTER_SYM {} Loading Loading @@ -7057,6 +7059,7 @@ keyword: | SUBDATE_SYM {} | SUBJECT_SYM {} | SUPER_SYM {} | TABLES {} | TABLESPACE {} | TEMPORARY {} | TEMPTABLE_SYM {} Loading