Commit 9ed55a33 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/mydev/mysql-5.0

into  mysql.com:/home/mydev/mysql-5.0-bug12166

parents bc7f923a 88a58fba
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -1294,25 +1294,30 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
    param->calc_checksum=1;

  info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);

  /*
    Clear all keys. Note that all key blocks allocated until now remain
    "dead" parts of the key file. (Bug #4692)
  */
  for (i=0 ; i < info->s->base.keys ; i++)
    share->state.key_root[i]= HA_OFFSET_ERROR;

  /* Drop the delete chain. */
  for (i=0 ; i < share->state.header.max_block_size ; i++)
    share->state.key_del[i]=  HA_OFFSET_ERROR;

  /*
    I think mi_repair and mi_repair_by_sort should do the same
    (according, e.g. to ha_myisam::repair), but as mi_repair doesn't
    touch key_map it cannot be used to T_CREATE_MISSING_KEYS.
    That is what the next line is for
    If requested, activate (enable) all keys in key_map. In this case,
    all indexes will be (re-)built.
  */

  if (param->testflag & T_CREATE_MISSING_KEYS)
    mi_copy_keys_active(share->state.key_map, share->base.keys,
                        param->keys_in_use);
    mi_set_all_keys_active(share->state.key_map, share->base.keys);

  info->state->key_file_length=share->base.keystart;

  lock_memory(param);			/* Everything is alloced */

  /* Re-create all keys, which are set in key_map. */
  while (!(error=sort_get_next_record(&sort_param)))
  {
    if (writekeys(param,info,(byte*)sort_param.record,sort_param.filepos))
+8 −3
Original line number Diff line number Diff line
@@ -985,11 +985,16 @@ int ha_myisam::enable_indexes(uint mode)
    {
      sql_print_warning("Warning: Enabling keys got errno %d, retrying",
                        my_errno);
      thd->clear_error();
      /* Repairing by sort failed. Now try standard repair method. */
      param.testflag&= ~(T_REP_BY_SORT | T_QUICK);
      error= (repair(thd,param,0) != HA_ADMIN_OK);
      if (!error && thd->net.report_error)
        error= HA_ERR_CRASHED;
      /*
        If the standard repair succeeded, clear all error messages which
        might have been set by the first repair. They can still be seen
        with SHOW WARNINGS then.
      */
      if (! error)
        thd->clear_error();
    }
    info(HA_STATUS_CONST);
    thd->proc_info=save_proc_info;