Commit 01e8913e authored by unknown's avatar unknown
Browse files

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
parent b912f9ec
Loading
Loading
Loading
Loading
+60 −26
Original line number Diff line number Diff line
@@ -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 */


+2 −5
Original line number Diff line number Diff line
@@ -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,
+11 −11
Original line number Diff line number Diff line
@@ -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 @@ static my_bool plugin_add(LEX_STRING *name, LEX_STRING *dl, int report)
}


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 @@ my_bool mysql_install_plugin(THD *thd, LEX_STRING *name, LEX_STRING *dl)
}


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;
+5 −5
Original line number Diff line number Diff line
@@ -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);

+1 −1
Original line number Diff line number Diff line
@@ -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,