summaryrefslogtreecommitdiff
path: root/myisam
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2002-08-17 18:02:56 +0300
committerunknown <monty@hundin.mysql.fi>2002-08-17 18:02:56 +0300
commit36827564d3d8d6f18e13d79bebed75572c21f769 (patch)
treecb6c69dea958c68e0dfee4737f5b9a8f63b37aee /myisam
parentc9bda5bc7efdd888f4388f1ae9235091fcd5f03a (diff)
downloadmariadb-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.c23
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;