diff options
author | unknown <monty@donna.mysql.com> | 2000-08-16 05:14:02 +0300 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2000-08-16 05:14:02 +0300 |
commit | e318f3a607f609c28636a9ac29cd67662166f01a (patch) | |
tree | 6c04aea21b1a42222c20034b365c343788f2335c /myisam | |
parent | 6388f02bbf7ec0bee2e3bfcce0df23146c56f092 (diff) | |
download | mariadb-git-e318f3a607f609c28636a9ac29cd67662166f01a.tar.gz |
Delayed keys + portability fixes
client/Makefile.am:
Fix for make/bitkeeper
configure.in:
Fix for SCO and SHOW PROCESSLIST
include/Makefile.am:
Fix for make/bitkeeper
libmysql/Makefile.am:
Fix for make/bitkeeper
myisam/mi_check.c:
Fixes for delayed key handling
sql-bench/Makefile.am:
Fix for make/bitkeeper
sql/Makefile.am:
Fix for make/bitkeeper
sql/sql_insert.cc:
Added delay key creation to INSERT .. SELECT
Diffstat (limited to 'myisam')
-rw-r--r-- | myisam/mi_check.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/myisam/mi_check.c b/myisam/mi_check.c index f8667afb46a..82524334886 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -1600,7 +1600,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, char llbuff[22]; SORT_INFO *sort_info= ¶m->sort_info; ulonglong key_map=share->state.key_map; - DBUG_ENTER("rep_by_sort"); + DBUG_ENTER("mi_repair_by_sort"); start_records=info->state->records; got_error=1; @@ -1630,9 +1630,6 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, info->opt_flag|=WRITE_CACHE_USED; info->rec_cache.file=info->dfile; /* for sort_delete_record */ - /* Flush key cache for this file if we are calling this outside myisamchk */ - flush_key_blocks(share->kfile, FLUSH_IGNORE_CHANGED); - if (!(sort_info->record=(byte*) my_malloc((uint) share->base.pack_reclength, MYF(0)))) { @@ -1669,15 +1666,24 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, info->update= (short) (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED); if (!(param->testflag & T_CREATE_MISSING_KEYS)) { + /* + Flush key cache for this file if we are calling this outside + myisamchk + */ + flush_key_blocks(share->kfile, FLUSH_IGNORE_CHANGED); + /* Clear the pointers to the given rows */ for (i=0 ; i < share->base.keys ; i++) share->state.key_root[i]= HA_OFFSET_ERROR; for (i=0 ; i < share->state.header.max_block_size ; i++) share->state.key_del[i]= HA_OFFSET_ERROR; + info->state->key_file_length=share->base.keystart; } else + { + if (flush_key_blocks(share->kfile, FLUSH_FORCE_WRITE)) + goto err; key_map= ~key_map; /* Create the missing keys */ - - info->state->key_file_length=share->base.keystart; + } sort_info->info=info; sort_info->param = param; @@ -1758,6 +1764,7 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, if (param->testflag & T_STATISTICS) update_key_parts(sort_info->keyinfo, rec_per_key_part, sort_info->unique, (ulonglong) info->state->records); + share->state.key_map|=(ulonglong) 1 << sort_info->key; if (sort_info->fix_datafile) { @@ -2933,7 +2940,8 @@ void mi_dectivate_non_unique_index(MI_INFO *info, ha_rows rows) MI_KEYDEF *key=share->keyinfo; for (i=0 ; i < share->base.keys ; i++,key++) { - if (!(key->flag & HA_NOSAME) && ! mi_too_big_key_for_sort(key,rows)) + if (!(key->flag & HA_NOSAME) && ! mi_too_big_key_for_sort(key,rows) && + info->s->base.auto_key != i+1) { share->state.key_map&= ~ ((ulonglong) 1 << i); info->update|= HA_STATE_CHANGED; |