Commit d9347545 authored by unknown's avatar unknown
Browse files

WL 2826: Error handling of ALTER TABLE for partitioning

Fixed up create_handler_files call


sql/ha_ndbcluster.cc:
  Fixed up create_handler_files call
sql/ha_partition.cc:
  Fixed up create_handler_files call
sql/handler.h:
  Fixed up create_handler_files call
sql/sql_table.cc:
  Fixed up create_handler_files call
sql/unireg.cc:
  Fixed up create_handler_files call
parent 73a66e27
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4726,7 +4726,7 @@ int ha_ndbcluster::create_handler_files(const char *file,

  DBUG_ENTER("create_handler_files");

  if (action_flag)
  if (action_flag != CHF_INDEX_FLAG)
  {
    DBUG_RETURN(FALSE);
  }
+3 −2
Original line number Diff line number Diff line
@@ -505,7 +505,8 @@ int ha_partition::create_handler_files(const char *path,
    We need to update total number of parts since we might write the handler
    file as part of a partition management command
  */
  if (action_flag)
  if (action_flag == CHF_DELETE_FLAG ||
      action_flag == CHF_RENAME_FLAG)
  {
    char name[FN_REFLEN];
    char old_name[FN_REFLEN];
@@ -520,7 +521,7 @@ int ha_partition::create_handler_files(const char *path,
      DBUG_RETURN(TRUE);
    }
  }
  else
  else if (action_flag == CHF_CREATE_FLAG)
  {
    if (create_handler_file(path))
    {
+2 −0
Original line number Diff line number Diff line
@@ -1380,8 +1380,10 @@ class handler :public Sql_alloc
  
  virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0;

#define CHF_CREATE_FLAG 0
#define CHF_DELETE_FLAG 1
#define CHF_RENAME_FLAG 2
#define CHF_INDEX_FLAG  3

  virtual int create_handler_files(const char *name, const char *old_name,
                                   int action_flag, HA_CREATE_INFO *info)
+7 −6
Original line number Diff line number Diff line
@@ -1233,7 +1233,8 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
                          lpt->table_name, lpt->create_info,
                          lpt->new_create_list, lpt->key_count,
                          lpt->key_info_buffer, lpt->table->file)) ||
         lpt->table->file->create_handler_files(shadow_path, NULL, FALSE,
         lpt->table->file->create_handler_files(shadow_path, NULL,
                                                CHF_CREATE_FLAG,
                                                lpt->create_info))
    {
      my_delete(shadow_frm_name, MYF(0));
@@ -1287,14 +1288,14 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
    if (my_delete(frm_name, MYF(MY_WME)) ||
#ifdef WITH_PARTITION_STORAGE_ENGINE
        lpt->table->file->create_handler_files(path, shadow_path,
                                               CHF_DELETE_FLAG) ||
                                               CHF_DELETE_FLAG, NULL) ||
        deactivate_ddl_log_entry(part_info->frm_log_entry->entry_pos) ||
        (sync_ddl_log(), FALSE) ||
#endif
#ifdef WITH_PARTITION_STORAGE_ENGINE
        my_rename(shadow_frm_name, frm_name, MYF(MY_WME)) ||
        lpt->table->file->create_handler_files(path, shadow_path,
                                               CHF_RENAME_FLAG))
                                               CHF_RENAME_FLAG, NULL))
#else
        my_rename(shadow_frm_name, frm_name, MYF(MY_WME)))
#endif
@@ -5717,7 +5718,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
      error= (mysql_create_frm(thd, reg_path, db, table_name,
                               create_info, prepared_create_list, key_count,
                               key_info_buffer, table->file) ||
              table->file->create_handler_files(reg_path, NULL, FALSE,
              table->file->create_handler_files(reg_path, NULL, CHF_INDEX_FLAG,
                                                create_info));
      VOID(pthread_mutex_unlock(&LOCK_open));
      if (error)
@@ -5764,7 +5765,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
      error= (mysql_create_frm(thd, reg_path, db, table_name,
                               create_info, prepared_create_list, key_count,
                               key_info_buffer, table->file) ||
              table->file->create_handler_files(reg_path, NULL, FALSE,
              table->file->create_handler_files(reg_path, NULL, CHF_INDEX_FLAG,
                                                create_info));
      VOID(pthread_mutex_unlock(&LOCK_open));
      if (error)
@@ -5989,7 +5990,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
      VOID(pthread_mutex_lock(&LOCK_open));
    }
    /* Tell the handler that a new frm file is in place. */
    if (table->file->create_handler_files(reg_path, NULL, FALSE,
    if (table->file->create_handler_files(reg_path, NULL, CHF_INDEX_FLAG,
                                          create_info))
    {
      VOID(pthread_mutex_unlock(&LOCK_open));
+1 −1
Original line number Diff line number Diff line
@@ -323,7 +323,7 @@ int rea_create_table(THD *thd, const char *path,

  // Make sure mysql_create_frm din't remove extension
  DBUG_ASSERT(*fn_rext(frm_name));
  if (file->create_handler_files(path, NULL, FALSE, create_info))
  if (file->create_handler_files(path, NULL, CHF_CREATE_FLAG, create_info))
    goto err_handler;
  if (!create_info->frm_only && ha_create_table(thd, path, db, table_name,
                                                create_info,0))