diff --git a/sql/events.cc b/sql/events.cc index b007d73833b..cc9734d4d20 100644 --- a/sql/events.cc +++ b/sql/events.cc @@ -768,8 +768,7 @@ Events::fill_schema_events(THD *thd, TABLE_LIST *tables, COND * /* cond */) if (thd->lex->sql_command == SQLCOM_SHOW_EVENTS) { DBUG_ASSERT(thd->lex->select_lex.db); - if (!is_infoschema_db(thd->lex->select_lex.db, // There is no events in I_S - strlen(thd->lex->select_lex.db)) && + if (!is_infoschema_db(thd->lex->select_lex.db) && // There is no events in I_S check_access(thd, EVENT_ACL, thd->lex->select_lex.db, NULL, NULL, 0, 0)) DBUG_RETURN(1); diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 30bec7a6b54..944bc9d4cdd 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -1446,6 +1446,12 @@ inline bool is_infoschema_db(const char *name, size_t len) INFORMATION_SCHEMA_NAME.str, name)); } +inline bool is_infoschema_db(const char *name) +{ + return !my_strcasecmp(system_charset_info, + INFORMATION_SCHEMA_NAME.str, name); +} + void initialize_information_schema_acl(); /* sql_handler.cc */ diff --git a/sql/sql_db.cc b/sql/sql_db.cc index fe38afb0521..6713a8f58f8 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -645,7 +645,7 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info, DBUG_ENTER("mysql_create_db"); /* do not create 'information_schema' db */ - if (is_infoschema_db(db, strlen(db))) + if (is_infoschema_db(db)) { my_error(ER_DB_CREATE_EXISTS, MYF(0), db); DBUG_RETURN(-1); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index be722095a9c..dd7101a46bb 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1220,8 +1220,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, table_list.alias= table_list.table_name= conv_name.str; packet= arg_end + 1; - if (!my_strcasecmp(system_charset_info, table_list.db, - INFORMATION_SCHEMA_NAME.str)) + if (is_infoschema_db(table_list.db, table_list.db_length)) { ST_SCHEMA_TABLE *schema_table= find_schema_table(thd, table_list.alias); if (schema_table) @@ -6279,8 +6278,7 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd, ptr->force_index= test(table_options & TL_OPTION_FORCE_INDEX); ptr->ignore_leaves= test(table_options & TL_OPTION_IGNORE_LEAVES); ptr->derived= table->sel; - if (!ptr->derived && !my_strcasecmp(system_charset_info, ptr->db, - INFORMATION_SCHEMA_NAME.str)) + if (!ptr->derived && is_infoschema_db(ptr->db, ptr->db_length)) { ST_SCHEMA_TABLE *schema_table; if (ptr->updating && diff --git a/sql/sql_show.cc b/sql/sql_show.cc index f8df7eb518f..bc66c8cd7ac 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -750,8 +750,7 @@ bool mysqld_show_create_db(THD *thd, char *dbname, DBUG_RETURN(TRUE); } #endif - if (!my_strcasecmp(system_charset_info, dbname, - INFORMATION_SCHEMA_NAME.str)) + if (is_infoschema_db(dbname)) { dbname= INFORMATION_SCHEMA_NAME.str; create.default_table_charset= system_charset_info; @@ -2686,8 +2685,8 @@ int make_db_list(THD *thd, List *files, */ if (lookup_field_vals->db_value.str) { - if (!my_strcasecmp(system_charset_info, INFORMATION_SCHEMA_NAME.str, - lookup_field_vals->db_value.str)) + if (is_infoschema_db(lookup_field_vals->db_value.str, + lookup_field_vals->db_value.length)) { *with_i_schema= 1; if (files->push_back(i_s_name_copy))