diff options
author | unknown <monty@hundin.mysql.fi> | 2002-08-17 18:02:56 +0300 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2002-08-17 18:02:56 +0300 |
commit | 36827564d3d8d6f18e13d79bebed75572c21f769 (patch) | |
tree | cb6c69dea958c68e0dfee4737f5b9a8f63b37aee /myisam | |
parent | c9bda5bc7efdd888f4388f1ae9235091fcd5f03a (diff) | |
download | mariadb-git-36827564d3d8d6f18e13d79bebed75572c21f769.tar.gz |
Portability fixes for 4.0.3 build.
Don't update MyISAM index file on UPDATE if index is not changed
Build-tools/Do-compile:
Remove log files as early as possible
Docs/manual.texi:
Changelog
BitKeeper/etc/ignore:
Added myisam/test2.MYD myisam/test2.MYI to the ignore list
include/my_semaphore.h:
Portability fix for SCO and BSDI
innobase/configure.in:
Don't use inline with openbsd as this cases linker problems.
myisam/mi_update.c:
Don't update index file on UPDATE if index is not changed
mysys/my_pthread.c:
Portability fix for hpux
sql/item_cmpfunc.cc:
Don't convert bigint to bigint
Diffstat (limited to 'myisam')
-rw-r--r-- | myisam/mi_update.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/myisam/mi_update.c b/myisam/mi_update.c index 2c6bc42bbdb..c52989f493e 100644 --- a/myisam/mi_update.c +++ b/myisam/mi_update.c @@ -83,8 +83,6 @@ int mi_update(register MI_INFO *info, const byte *oldrec, byte *newrec) /* Check which keys changed from the original row */ new_key=info->lastkey2; - key_changed=HA_STATE_KEY_CHANGED; /* We changed current database */ - /* Remove key that didn't change */ changed=0; for (i=0 ; i < share->base.keys ; i++) { @@ -93,7 +91,7 @@ int mi_update(register MI_INFO *info, const byte *oldrec, byte *newrec) /* The following code block is for text searching by SerG */ if (share->keyinfo[i].flag & HA_FULLTEXT ) { - if(_mi_ft_cmp(info,i,oldrec, newrec)) + if (_mi_ft_cmp(info,i,oldrec, newrec)) { if ((int) i == info->lastinx) key_changed|=HA_STATE_WRITTEN; @@ -121,11 +119,24 @@ int mi_update(register MI_INFO *info, const byte *oldrec, byte *newrec) } } } + if (changed) + key_changed|= HA_STATE_KEY_CHANGED; if (share->calc_checksum) + { info->checksum=(*share->calc_checksum)(info,newrec); - if ((*share->update_record)(info,pos,newrec)) - goto err; + key_changed|= HA_STATE_KEY_CHANGED; /* Must update index file */ + } + { + /* Don't update index file if data file is not extended */ + MI_STATUS_INFO state; + memcpy((char*) &state, (char*) info->state, sizeof(state)); + if ((*share->update_record)(info,pos,newrec)) + goto err; + if (!key_changed && + memcmp((char*) &state, (char*) info->state, sizeof(state))) + key_changed|= HA_STATE_KEY_CHANGED; /* Must update index file */ + } if (auto_key_changed) update_auto_increment(info,newrec); if (share->calc_checksum) @@ -147,6 +158,8 @@ int mi_update(register MI_INFO *info, const byte *oldrec, byte *newrec) err: DBUG_PRINT("error",("key: %d errno: %d",i,my_errno)); save_errno=my_errno; + if (changed) + key_changed|= HA_STATE_KEY_CHANGED; if (my_errno == HA_ERR_FOUND_DUPP_KEY || my_errno == HA_ERR_RECORD_FILE_FULL) { info->errkey= (int) i; |