Loading sql/ha_ndbcluster.cc +26 −12 Original line number Diff line number Diff line Loading @@ -4687,8 +4687,9 @@ int ha_ndbcluster::create(const char *name, DBUG_RETURN(my_errno); } int ha_ndbcluster::create_handler_files(const char *file) int ha_ndbcluster::create_handler_files(const char *file, HA_CREATE_INFO *info) { char path[FN_REFLEN]; const char *name; Ndb* ndb; const NDBTAB *tab; Loading @@ -4698,16 +4699,21 @@ int ha_ndbcluster::create_handler_files(const char *file) DBUG_ENTER("create_handler_files"); DBUG_PRINT("enter", ("file: %s", file)); if (!(ndb= get_ndb())) DBUG_RETURN(HA_ERR_NO_CONNECTION); NDBDICT *dict= ndb->getDictionary(); if (!(tab= dict->getTable(m_tabname))) if (!info->frm_only) DBUG_RETURN(0); // Must be a create, ignore since frm is saved in create set_dbname(file); set_tabname(file); DBUG_PRINT("info", ("m_dbname: %s, m_tabname: %s", m_dbname, m_tabname)); if (!(tab= dict->getTable(m_tabname))) DBUG_RETURN(0); // Unkown table, must be temporary table DBUG_ASSERT(get_ndb_share_state(m_share) == NSS_ALTERED); name= table->s->normalized_path.str; DBUG_PRINT("enter", ("m_tabname: %s, path: %s", m_tabname, name)); if (readfrm(name, &data, &length) || if (readfrm(file, &data, &length) || packfrm(data, length, &pack_data, &pack_length)) { DBUG_PRINT("info", ("Missing frm for %s", m_tabname)); Loading @@ -4723,6 +4729,7 @@ int ha_ndbcluster::create_handler_files(const char *file) my_free((char*)data, MYF(MY_ALLOW_ZERO_PTR)); my_free((char*)pack_data, MYF(MY_ALLOW_ZERO_PTR)); } set_ndb_share_state(m_share, NSS_INITIAL); free_share(&m_share); // Decrease ref_count Loading Loading @@ -4829,6 +4836,15 @@ int ha_ndbcluster::create_ndb_index(const char *name, DBUG_RETURN(0); } /* Prepare for an on-line alter table */ void ha_ndbcluster::prepare_for_alter() { ndbcluster_get_share(m_share); // Increase ref_count set_ndb_share_state(m_share, NSS_ALTERED); } /* Add an index on-line to a table */ Loading @@ -4841,7 +4857,7 @@ int ha_ndbcluster::add_index(TABLE *table_arg, int error= 0; uint idx; DBUG_ASSERT(m_share->state == NSS_INITIAL); DBUG_ASSERT(m_share->state == NSS_ALTERED); for (idx= 0; idx < num_of_keys; idx++) { KEY *key= key_info + idx; Loading @@ -4857,10 +4873,10 @@ int ha_ndbcluster::add_index(TABLE *table_arg, if((error= create_index(key_info[idx].name, key, idx_type, idx))) break; } if (!error) if (error) { ndbcluster_get_share(m_share); // Increase ref_count set_ndb_share_state(m_share, NSS_ALTERED); set_ndb_share_state(m_share, NSS_INITIAL); free_share(&m_share); // Decrease ref_count } DBUG_RETURN(error); } Loading @@ -4885,7 +4901,7 @@ int ha_ndbcluster::prepare_drop_index(TABLE *table_arg, uint *key_num, uint num_of_keys) { DBUG_ENTER("ha_ndbcluster::prepare_drop_index"); DBUG_ASSERT(m_share->state == NSS_INITIAL); DBUG_ASSERT(m_share->state == NSS_ALTERED); // Mark indexes for deletion uint idx; for (idx= 0; idx < num_of_keys; idx++) Loading @@ -4898,8 +4914,6 @@ int ha_ndbcluster::prepare_drop_index(TABLE *table_arg, Thd_ndb *thd_ndb= get_thd_ndb(thd); Ndb *ndb= thd_ndb->ndb; renumber_indexes(ndb, table_arg); ndbcluster_get_share(m_share); // Increase ref_count set_ndb_share_state(m_share, NSS_ALTERED); DBUG_RETURN(0); } Loading sql/ha_ndbcluster.h +2 −1 Original line number Diff line number Diff line Loading @@ -595,6 +595,7 @@ class ha_ndbcluster: public handler const char * table_type() const; const char ** bas_ext() const; ulong table_flags(void) const; void prepare_for_alter(); int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys); int prepare_drop_index(TABLE *table_arg, uint *key_num, uint num_of_keys); int final_drop_index(TABLE *table_arg); Loading @@ -609,7 +610,7 @@ class ha_ndbcluster: public handler int rename_table(const char *from, const char *to); int delete_table(const char *name); int create(const char *name, TABLE *form, HA_CREATE_INFO *info); int create_handler_files(const char *file); int create_handler_files(const char *file, HA_CREATE_INFO *info); int get_default_no_partitions(ulonglong max_rows); bool get_no_parts(const char *name, uint *no_parts); void set_auto_partitions(partition_info *part_info); Loading sql/ha_partition.cc +3 −1 Original line number Diff line number Diff line Loading @@ -562,6 +562,7 @@ int ha_partition::rename_table(const char *from, const char *to) SYNOPSIS create_handler_files() name Full path of table name create_info Create info generated for CREATE TABLE RETURN VALUE >0 Error Loading @@ -575,7 +576,8 @@ int ha_partition::rename_table(const char *from, const char *to) and types of engines in the partitions. */ int ha_partition::create_handler_files(const char *name) int ha_partition::create_handler_files(const char *name, HA_CREATE_INFO *create_info) { DBUG_ENTER("ha_partition::create_handler_files()"); Loading sql/ha_partition.h +2 −1 Original line number Diff line number Diff line Loading @@ -179,7 +179,8 @@ class ha_partition :public handler virtual int rename_table(const char *from, const char *to); virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info); virtual int create_handler_files(const char *name); virtual int create_handler_files(const char *name, HA_CREATE_INFO *create_info); virtual void update_create_info(HA_CREATE_INFO *create_info); virtual char *update_table_comment(const char *comment); virtual int change_partitions(HA_CREATE_INFO *create_info, Loading sql/handler.h +3 −1 Original line number Diff line number Diff line Loading @@ -1338,6 +1338,7 @@ class handler :public Sql_alloc virtual ulong index_flags(uint idx, uint part, bool all_parts) const =0; virtual void prepare_for_alter() { return; } virtual int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { return (HA_ERR_WRONG_COMMAND); } virtual int prepare_drop_index(TABLE *table_arg, uint *key_num, Loading Loading @@ -1378,7 +1379,8 @@ class handler :public Sql_alloc virtual void drop_table(const char *name); virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0; virtual int create_handler_files(const char *name) { return FALSE;} virtual int create_handler_files(const char *name, HA_CREATE_INFO *info) { return FALSE;} virtual int change_partitions(HA_CREATE_INFO *create_info, const char *path, Loading Loading
sql/ha_ndbcluster.cc +26 −12 Original line number Diff line number Diff line Loading @@ -4687,8 +4687,9 @@ int ha_ndbcluster::create(const char *name, DBUG_RETURN(my_errno); } int ha_ndbcluster::create_handler_files(const char *file) int ha_ndbcluster::create_handler_files(const char *file, HA_CREATE_INFO *info) { char path[FN_REFLEN]; const char *name; Ndb* ndb; const NDBTAB *tab; Loading @@ -4698,16 +4699,21 @@ int ha_ndbcluster::create_handler_files(const char *file) DBUG_ENTER("create_handler_files"); DBUG_PRINT("enter", ("file: %s", file)); if (!(ndb= get_ndb())) DBUG_RETURN(HA_ERR_NO_CONNECTION); NDBDICT *dict= ndb->getDictionary(); if (!(tab= dict->getTable(m_tabname))) if (!info->frm_only) DBUG_RETURN(0); // Must be a create, ignore since frm is saved in create set_dbname(file); set_tabname(file); DBUG_PRINT("info", ("m_dbname: %s, m_tabname: %s", m_dbname, m_tabname)); if (!(tab= dict->getTable(m_tabname))) DBUG_RETURN(0); // Unkown table, must be temporary table DBUG_ASSERT(get_ndb_share_state(m_share) == NSS_ALTERED); name= table->s->normalized_path.str; DBUG_PRINT("enter", ("m_tabname: %s, path: %s", m_tabname, name)); if (readfrm(name, &data, &length) || if (readfrm(file, &data, &length) || packfrm(data, length, &pack_data, &pack_length)) { DBUG_PRINT("info", ("Missing frm for %s", m_tabname)); Loading @@ -4723,6 +4729,7 @@ int ha_ndbcluster::create_handler_files(const char *file) my_free((char*)data, MYF(MY_ALLOW_ZERO_PTR)); my_free((char*)pack_data, MYF(MY_ALLOW_ZERO_PTR)); } set_ndb_share_state(m_share, NSS_INITIAL); free_share(&m_share); // Decrease ref_count Loading Loading @@ -4829,6 +4836,15 @@ int ha_ndbcluster::create_ndb_index(const char *name, DBUG_RETURN(0); } /* Prepare for an on-line alter table */ void ha_ndbcluster::prepare_for_alter() { ndbcluster_get_share(m_share); // Increase ref_count set_ndb_share_state(m_share, NSS_ALTERED); } /* Add an index on-line to a table */ Loading @@ -4841,7 +4857,7 @@ int ha_ndbcluster::add_index(TABLE *table_arg, int error= 0; uint idx; DBUG_ASSERT(m_share->state == NSS_INITIAL); DBUG_ASSERT(m_share->state == NSS_ALTERED); for (idx= 0; idx < num_of_keys; idx++) { KEY *key= key_info + idx; Loading @@ -4857,10 +4873,10 @@ int ha_ndbcluster::add_index(TABLE *table_arg, if((error= create_index(key_info[idx].name, key, idx_type, idx))) break; } if (!error) if (error) { ndbcluster_get_share(m_share); // Increase ref_count set_ndb_share_state(m_share, NSS_ALTERED); set_ndb_share_state(m_share, NSS_INITIAL); free_share(&m_share); // Decrease ref_count } DBUG_RETURN(error); } Loading @@ -4885,7 +4901,7 @@ int ha_ndbcluster::prepare_drop_index(TABLE *table_arg, uint *key_num, uint num_of_keys) { DBUG_ENTER("ha_ndbcluster::prepare_drop_index"); DBUG_ASSERT(m_share->state == NSS_INITIAL); DBUG_ASSERT(m_share->state == NSS_ALTERED); // Mark indexes for deletion uint idx; for (idx= 0; idx < num_of_keys; idx++) Loading @@ -4898,8 +4914,6 @@ int ha_ndbcluster::prepare_drop_index(TABLE *table_arg, Thd_ndb *thd_ndb= get_thd_ndb(thd); Ndb *ndb= thd_ndb->ndb; renumber_indexes(ndb, table_arg); ndbcluster_get_share(m_share); // Increase ref_count set_ndb_share_state(m_share, NSS_ALTERED); DBUG_RETURN(0); } Loading
sql/ha_ndbcluster.h +2 −1 Original line number Diff line number Diff line Loading @@ -595,6 +595,7 @@ class ha_ndbcluster: public handler const char * table_type() const; const char ** bas_ext() const; ulong table_flags(void) const; void prepare_for_alter(); int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys); int prepare_drop_index(TABLE *table_arg, uint *key_num, uint num_of_keys); int final_drop_index(TABLE *table_arg); Loading @@ -609,7 +610,7 @@ class ha_ndbcluster: public handler int rename_table(const char *from, const char *to); int delete_table(const char *name); int create(const char *name, TABLE *form, HA_CREATE_INFO *info); int create_handler_files(const char *file); int create_handler_files(const char *file, HA_CREATE_INFO *info); int get_default_no_partitions(ulonglong max_rows); bool get_no_parts(const char *name, uint *no_parts); void set_auto_partitions(partition_info *part_info); Loading
sql/ha_partition.cc +3 −1 Original line number Diff line number Diff line Loading @@ -562,6 +562,7 @@ int ha_partition::rename_table(const char *from, const char *to) SYNOPSIS create_handler_files() name Full path of table name create_info Create info generated for CREATE TABLE RETURN VALUE >0 Error Loading @@ -575,7 +576,8 @@ int ha_partition::rename_table(const char *from, const char *to) and types of engines in the partitions. */ int ha_partition::create_handler_files(const char *name) int ha_partition::create_handler_files(const char *name, HA_CREATE_INFO *create_info) { DBUG_ENTER("ha_partition::create_handler_files()"); Loading
sql/ha_partition.h +2 −1 Original line number Diff line number Diff line Loading @@ -179,7 +179,8 @@ class ha_partition :public handler virtual int rename_table(const char *from, const char *to); virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info); virtual int create_handler_files(const char *name); virtual int create_handler_files(const char *name, HA_CREATE_INFO *create_info); virtual void update_create_info(HA_CREATE_INFO *create_info); virtual char *update_table_comment(const char *comment); virtual int change_partitions(HA_CREATE_INFO *create_info, Loading
sql/handler.h +3 −1 Original line number Diff line number Diff line Loading @@ -1338,6 +1338,7 @@ class handler :public Sql_alloc virtual ulong index_flags(uint idx, uint part, bool all_parts) const =0; virtual void prepare_for_alter() { return; } virtual int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys) { return (HA_ERR_WRONG_COMMAND); } virtual int prepare_drop_index(TABLE *table_arg, uint *key_num, Loading Loading @@ -1378,7 +1379,8 @@ class handler :public Sql_alloc virtual void drop_table(const char *name); virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0; virtual int create_handler_files(const char *name) { return FALSE;} virtual int create_handler_files(const char *name, HA_CREATE_INFO *info) { return FALSE;} virtual int change_partitions(HA_CREATE_INFO *create_info, const char *path, Loading