diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 90844ac1824..3533e80d6b1 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -9431,8 +9431,9 @@ my_bool mysql_rm_tmp_tables(void) memcpy(path_copy, path, path_len - ext_len); path_copy[path_len - ext_len]= 0; init_tmp_table_share(thd, &share, "", 0, "", path_copy); + handlerton *ht= share.db_type(); if (!open_table_def(thd, &share)) - share.db_type()->drop_table(share.db_type(), path_copy); + ht->drop_table(share.db_type(), path_copy); free_table_share(&share); } /* diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index ed4e74d7da5..dc66d854042 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -717,9 +717,10 @@ static bool handle_list_of_fields(THD *thd, List_iterator it, } else { - if (table->s->db_type()->partition_flags && - (table->s->db_type()->partition_flags() & HA_USE_AUTO_PARTITION) && - (table->s->db_type()->partition_flags() & HA_CAN_PARTITION)) + handlerton *ht= table->s->db_type(); + if (ht->partition_flags && + (ht->partition_flags() & HA_USE_AUTO_PARTITION) && + (ht->partition_flags() & HA_CAN_PARTITION)) { /* This engine can handle automatic partitioning and there is no @@ -1924,6 +1925,7 @@ bool fix_partition_func(THD *thd, TABLE *table, bool is_create_table_ind) bool result= TRUE; partition_info *part_info= table->part_info; enum_column_usage saved_column_usage= thd->column_usage; + handlerton *ht; DBUG_ENTER("fix_partition_func"); if (part_info->fixed) @@ -2053,8 +2055,9 @@ bool fix_partition_func(THD *thd, TABLE *table, bool is_create_table_ind) goto end; if (unlikely(check_primary_key(table))) goto end; - if (unlikely((!(table->s->db_type()->partition_flags && - (table->s->db_type()->partition_flags() & HA_CAN_PARTITION_UNIQUE))) && + ht= table->s->db_type(); + if (unlikely((!(ht->partition_flags && + (ht->partition_flags() & HA_CAN_PARTITION_UNIQUE))) && check_unique_keys(table))) goto end; if (unlikely(set_up_partition_bitmaps(thd, part_info))) @@ -2779,12 +2782,14 @@ bool partition_key_modified(TABLE *table, const MY_BITMAP *fields) { Field **fld; partition_info *part_info= table->part_info; + handlerton *ht; DBUG_ENTER("partition_key_modified"); if (!part_info) DBUG_RETURN(FALSE); - if (table->s->db_type()->partition_flags && - (table->s->db_type()->partition_flags() & HA_CAN_UPDATE_PARTITION_KEY)) + ht= table->s->db_type(); + if (ht->partition_flags && + (ht->partition_flags() & HA_CAN_UPDATE_PARTITION_KEY)) DBUG_RETURN(FALSE); for (fld= part_info->full_part_field_array; *fld; fld++) if (bitmap_is_set(fields, (*fld)->field_index)) @@ -5004,10 +5009,11 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info, if default partitioning is used. */ + handlerton *ht= table->s->db_type(); if (tab_part_info->part_type != HASH_PARTITION || - ((table->s->db_type()->partition_flags() & HA_USE_AUTO_PARTITION) && + ((ht->partition_flags() & HA_USE_AUTO_PARTITION) && !tab_part_info->use_default_num_partitions) || - ((!(table->s->db_type()->partition_flags() & HA_USE_AUTO_PARTITION)) && + ((!(ht->partition_flags() & HA_USE_AUTO_PARTITION)) && tab_part_info->use_default_num_partitions)) { my_error(ER_REORG_NO_PARAM_ERROR, MYF(0));