diff options
author | unknown <acurtis@xiphis.org> | 2006-06-12 06:50:11 -0700 |
---|---|---|
committer | unknown <acurtis@xiphis.org> | 2006-06-12 06:50:11 -0700 |
commit | 01e8913e7751a04fa7045974147e6fec5f7c150d (patch) | |
tree | 765547ed68437f6b146e3624d5185aecdac82e0a | |
parent | b912f9ecdd078707748f480b81927c516f622cb5 (diff) | |
download | mariadb-git-01e8913e7751a04fa7045974147e6fec5f7c150d.tar.gz |
Bug#20168
"Change in behavior --default-storage-engine=ndb or ndbcluster"
Reduce use of legacy_db_type, some code cleanup
(serg read my mind and implemented desired mysqld.cc changes)
sql/handler.cc:
Bug#20168
remove some use of legacy_db_type
cleanup code, new func for default type
sql/handler.h:
Bug#20168
remove some use of legacy_db_type
cleanup code, new func for default type
sql/sql_plugin.cc:
compiler hints, consts
sql/sql_plugin.h:
compiler hints, consts
sql/sql_tablespace.cc:
use ha_default_handlerton instead of resolving DB_TYPE_DEFAULT
-rw-r--r-- | sql/handler.cc | 86 | ||||
-rw-r--r-- | sql/handler.h | 7 | ||||
-rw-r--r-- | sql/sql_plugin.cc | 22 | ||||
-rw-r--r-- | sql/sql_plugin.h | 10 | ||||
-rw-r--r-- | sql/sql_tablespace.cc | 2 |
5 files changed, 79 insertions, 48 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index 81c42f9da15..47bcf1caba1 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -68,14 +68,14 @@ ulong total_ha_2pc= 0; /* size of savepoint storage area (see ha_init) */ ulong savepoint_alloc_size= 0; -struct show_table_alias_st sys_table_aliases[]= -{ - {"INNOBASE", DB_TYPE_INNODB}, - {"NDB", DB_TYPE_NDBCLUSTER}, - {"BDB", DB_TYPE_BERKELEY_DB}, - {"HEAP", DB_TYPE_HEAP}, - {"MERGE", DB_TYPE_MRG_MYISAM}, - {NullS, DB_TYPE_UNKNOWN} +static const LEX_STRING sys_table_aliases[]= +{ + {(char*)STRING_WITH_LEN("INNOBASE")}, {(char*)STRING_WITH_LEN("INNODB")}, + {(char*)STRING_WITH_LEN("NDB")}, {(char*)STRING_WITH_LEN("NDBCLUSTER")}, + {(char*)STRING_WITH_LEN("BDB")}, {(char*)STRING_WITH_LEN("BERKELEYDB")}, + {(char*)STRING_WITH_LEN("HEAP")}, {(char*)STRING_WITH_LEN("MEMORY")}, + {(char*)STRING_WITH_LEN("MERGE")}, {(char*)STRING_WITH_LEN("MRG_MYISAM")}, + {NullS, 0} }; const char *ha_row_type[] = { @@ -91,15 +91,50 @@ TYPELIB tx_isolation_typelib= {array_elements(tx_isolation_names)-1,"", static TYPELIB known_extensions= {0,"known_exts", NULL, NULL}; uint known_extensions_id= 0; -handlerton *ha_resolve_by_name(THD *thd, LEX_STRING *name) + +/* + Return the default storage engine handlerton for thread + + SYNOPSIS + ha_default_handlerton(thd) + thd current thread + + RETURN + pointer to handlerton +*/ + +handlerton *ha_default_handlerton(THD *thd) +{ + return (thd->variables.table_type != NULL) ? + thd->variables.table_type : + (global_system_variables.table_type != NULL ? + global_system_variables.table_type : &myisam_hton); +} + + +/* + Return the storage engine handlerton for the supplied name + + SYNOPSIS + ha_resolve_by_name(thd, name) + thd current thread + name name of storage engine + + RETURN + pointer to handlerton +*/ + +handlerton *ha_resolve_by_name(THD *thd, const LEX_STRING *name) { - show_table_alias_st *table_alias; + const LEX_STRING *table_alias; st_plugin_int *plugin; - if (thd && !my_strnncoll(&my_charset_latin1, +redo: + /* my_strnncoll is a macro and gcc doesn't do early expansion of macro */ + if (thd && !my_charset_latin1.coll->strnncoll(&my_charset_latin1, (const uchar *)name->str, name->length, - (const uchar *)"DEFAULT", 7)) - return ha_resolve_by_legacy_type(thd, DB_TYPE_DEFAULT); + (const uchar *)STRING_WITH_LEN("DEFAULT"), 0)) + return ha_default_handlerton(thd); if ((plugin= plugin_lock(name, MYSQL_STORAGE_ENGINE_PLUGIN))) { @@ -112,13 +147,15 @@ handlerton *ha_resolve_by_name(THD *thd, LEX_STRING *name) /* We check for the historical aliases. */ - for (table_alias= sys_table_aliases; table_alias->type; table_alias++) + for (table_alias= sys_table_aliases; table_alias->str; table_alias+= 2) { if (!my_strnncoll(&my_charset_latin1, (const uchar *)name->str, name->length, - (const uchar *)table_alias->alias, - strlen(table_alias->alias))) - return ha_resolve_by_legacy_type(thd, table_alias->type); + (const uchar *)table_alias->str, table_alias->length)) + { + name= table_alias + 1; + goto redo; + } } return NULL; @@ -130,20 +167,20 @@ const char *ha_get_storage_engine(enum legacy_db_type db_type) switch (db_type) { case DB_TYPE_DEFAULT: return "DEFAULT"; - case DB_TYPE_UNKNOWN: - return "UNKNOWN"; default: if (db_type > DB_TYPE_UNKNOWN && db_type < DB_TYPE_DEFAULT && installed_htons[db_type]) return hton2plugin[installed_htons[db_type]->slot]->name.str; - return "*NONE*"; + /* fall through */ + case DB_TYPE_UNKNOWN: + return "UNKNOWN"; } } static handler *create_default(TABLE_SHARE *table, MEM_ROOT *mem_root) { - handlerton *hton=ha_resolve_by_legacy_type(current_thd, DB_TYPE_DEFAULT); + handlerton *hton= ha_default_handlerton(current_thd); return (hton && hton->create) ? hton->create(table, mem_root) : NULL; } @@ -152,10 +189,7 @@ handlerton *ha_resolve_by_legacy_type(THD *thd, enum legacy_db_type db_type) { switch (db_type) { case DB_TYPE_DEFAULT: - return (thd->variables.table_type != NULL) ? - thd->variables.table_type : - (global_system_variables.table_type != NULL ? - global_system_variables.table_type : &myisam_hton); + return ha_default_handlerton(thd); case DB_TYPE_UNKNOWN: return NULL; default: @@ -196,7 +230,7 @@ handlerton *ha_checktype(THD *thd, enum legacy_db_type database_type, break; } - return ha_resolve_by_legacy_type(thd, DB_TYPE_DEFAULT); + return ha_default_handlerton(thd); } /* ha_checktype */ diff --git a/sql/handler.h b/sql/handler.h index f459d52fdeb..52843b78266 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -667,10 +667,6 @@ struct handlerton struct handler_iterator *fill_this_in); }; -struct show_table_alias_st { - const char *alias; - enum legacy_db_type type; -}; /* Possible flags of a handlerton */ #define HTON_NO_FLAGS 0 @@ -1545,7 +1541,8 @@ extern ulong total_ha, total_ha_2pc; #define ha_rollback(thd) (ha_rollback_trans((thd), TRUE)) /* lookups */ -handlerton *ha_resolve_by_name(THD *thd, LEX_STRING *name); +handlerton *ha_default_handlerton(THD *thd); +handlerton *ha_resolve_by_name(THD *thd, const LEX_STRING *name); handlerton *ha_resolve_by_legacy_type(THD *thd, enum legacy_db_type db_type); const char *ha_get_storage_engine(enum legacy_db_type db_type); handler *get_new_handler(TABLE_SHARE *share, MEM_ROOT *alloc, diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index c15b484f448..f7205470abd 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -23,7 +23,7 @@ extern struct st_mysql_plugin *mysqld_builtins[]; char *opt_plugin_dir_ptr; char opt_plugin_dir[FN_REFLEN]; -LEX_STRING plugin_type_names[MYSQL_MAX_PLUGIN_TYPE_NUM]= +const LEX_STRING plugin_type_names[MYSQL_MAX_PLUGIN_TYPE_NUM]= { { (char *)STRING_WITH_LEN("UDF") }, { (char *)STRING_WITH_LEN("STORAGE ENGINE") }, @@ -63,7 +63,7 @@ static HASH plugin_hash[MYSQL_MAX_PLUGIN_TYPE_NUM]; static rw_lock_t THR_LOCK_plugin; static bool initialized= 0; -static struct st_plugin_dl *plugin_dl_find(LEX_STRING *dl) +static struct st_plugin_dl *plugin_dl_find(const LEX_STRING *dl) { uint i; DBUG_ENTER("plugin_dl_find"); @@ -112,7 +112,7 @@ static inline void free_plugin_mem(struct st_plugin_dl *p) my_free((gptr)p->plugins, MYF(MY_ALLOW_ZERO_PTR)); } -static st_plugin_dl *plugin_dl_add(LEX_STRING *dl, int report) +static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) { #ifdef HAVE_DLOPEN char dlpath[FN_REFLEN]; @@ -294,7 +294,7 @@ static st_plugin_dl *plugin_dl_add(LEX_STRING *dl, int report) } -static void plugin_dl_del(LEX_STRING *dl) +static void plugin_dl_del(const LEX_STRING *dl) { #ifdef HAVE_DLOPEN uint i; @@ -322,7 +322,7 @@ static void plugin_dl_del(LEX_STRING *dl) } -static struct st_plugin_int *plugin_find_internal(LEX_STRING *name, int type) +static struct st_plugin_int *plugin_find_internal(const LEX_STRING *name, int type) { uint i; DBUG_ENTER("plugin_find_internal"); @@ -345,7 +345,7 @@ static struct st_plugin_int *plugin_find_internal(LEX_STRING *name, int type) } -my_bool plugin_is_ready(LEX_STRING *name, int type) +my_bool plugin_is_ready(const LEX_STRING *name, int type) { my_bool rc= FALSE; struct st_plugin_int *plugin; @@ -359,7 +359,7 @@ my_bool plugin_is_ready(LEX_STRING *name, int type) } -struct st_plugin_int *plugin_lock(LEX_STRING *name, int type) +struct st_plugin_int *plugin_lock(const LEX_STRING *name, int type) { struct st_plugin_int *rc; DBUG_ENTER("plugin_lock"); @@ -396,7 +396,7 @@ static st_plugin_int *plugin_insert_or_reuse(struct st_plugin_int *plugin) struct st_plugin_int *)); } -static my_bool plugin_add(LEX_STRING *name, LEX_STRING *dl, int report) +static my_bool plugin_add(const LEX_STRING *name, const LEX_STRING *dl, int report) { struct st_plugin_int tmp; struct st_mysql_plugin *plugin; @@ -479,7 +479,7 @@ err: } -static void plugin_del(LEX_STRING *name) +static void plugin_del(const LEX_STRING *name) { uint i; struct st_plugin_int *plugin; @@ -811,7 +811,7 @@ void plugin_free(void) } -my_bool mysql_install_plugin(THD *thd, LEX_STRING *name, LEX_STRING *dl) +my_bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl) { TABLE_LIST tables; TABLE *table; @@ -866,7 +866,7 @@ err: } -my_bool mysql_uninstall_plugin(THD *thd, LEX_STRING *name) +my_bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name) { TABLE *table; TABLE_LIST tables; diff --git a/sql/sql_plugin.h b/sql/sql_plugin.h index b013beaba1f..df7c9a39495 100644 --- a/sql/sql_plugin.h +++ b/sql/sql_plugin.h @@ -66,15 +66,15 @@ typedef int (*plugin_type_init)(struct st_plugin_int *); extern char *opt_plugin_dir_ptr; extern char opt_plugin_dir[FN_REFLEN]; -extern LEX_STRING plugin_type_names[]; +extern const LEX_STRING plugin_type_names[]; extern int plugin_init(void); extern void plugin_load(void); extern void plugin_free(void); -extern my_bool plugin_is_ready(LEX_STRING *name, int type); -extern st_plugin_int *plugin_lock(LEX_STRING *name, int type); +extern my_bool plugin_is_ready(const LEX_STRING *name, int type); +extern st_plugin_int *plugin_lock(const LEX_STRING *name, int type); extern void plugin_unlock(struct st_plugin_int *plugin); -extern my_bool mysql_install_plugin(THD *thd, LEX_STRING *name, LEX_STRING *dl); -extern my_bool mysql_uninstall_plugin(THD *thd, LEX_STRING *name); +extern my_bool mysql_install_plugin(THD *thd, const LEX_STRING *name, const LEX_STRING *dl); +extern my_bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name); extern my_bool plugin_register_builtin(struct st_mysql_plugin *plugin); diff --git a/sql/sql_tablespace.cc b/sql/sql_tablespace.cc index 94318a67575..13dfb491af4 100644 --- a/sql/sql_tablespace.cc +++ b/sql/sql_tablespace.cc @@ -30,7 +30,7 @@ int mysql_alter_tablespace(THD *thd, st_alter_tablespace *ts_info) */ if (hton == NULL || hton->state != SHOW_OPTION_YES) { - hton= ha_resolve_by_legacy_type(thd, DB_TYPE_DEFAULT); + hton= ha_default_handlerton(thd); if (ts_info->storage_engine != 0) push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR, ER_WARN_USING_OTHER_HANDLER, |