diff options
Diffstat (limited to 'storage/innobase/dict/dict0mem.cc')
-rw-r--r-- | storage/innobase/dict/dict0mem.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc index 885627a61bc..fefa34ead23 100644 --- a/storage/innobase/dict/dict0mem.cc +++ b/storage/innobase/dict/dict0mem.cc @@ -53,6 +53,14 @@ Created 1/8/1996 Heikki Tuuri UNIV_INTERN mysql_pfs_key_t autoinc_mutex_key; #endif /* UNIV_PFS_MUTEX */ +/** System databases */ +static const char* innobase_system_databases[] = { + "mysql/", + "information_schema/", + "performance_schema/", + NullS +}; + /**********************************************************************//** Creates a table memory object. @return own: table object */ @@ -85,6 +93,7 @@ dict_mem_table_create( table->flags2 = (unsigned int) flags2; table->name = static_cast<char*>(ut_malloc(strlen(name) + 1)); memcpy(table->name, name, strlen(name) + 1); + table->is_system_db = dict_mem_table_is_system(table->name); table->space = (unsigned int) space; table->n_cols = (unsigned int) (n_cols + DATA_N_SYS_COLS); @@ -131,6 +140,36 @@ dict_mem_table_create( } /****************************************************************//** +Determines if a table belongs to a system database +@return */ +UNIV_INTERN +bool +dict_mem_table_is_system( +/*================*/ + char *name) /*!< in: table name */ +{ + ut_ad(name); + + /* table has the following format: database/table + and some system table are of the form SYS_* */ + if (strchr(name, '/')) { + int table_len = strlen(name); + const char *system_db; + int i = 0; + while ((system_db = innobase_system_databases[i++]) + && (system_db != NullS)) { + int len = strlen(system_db); + if (table_len > len && !strncmp(name, system_db, len)) { + return true; + } + } + return false; + } else { + return true; + } +} + +/****************************************************************//** Free a table memory object. */ UNIV_INTERN void |