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
This commit is contained in:
unknown 2002-08-17 18:02:56 +03:00
parent c9bda5bc7e
commit 36827564d3
8 changed files with 56 additions and 24 deletions

View file

@ -491,3 +491,5 @@ sql-bench/innotest1b
sql-bench/innotest2
sql-bench/innotest2a
sql-bench/innotest2b
myisam/test2.MYD
myisam/test2.MYI

View file

@ -75,6 +75,19 @@ $ENV{"PERL5LIB"}="$pwd/$host/perl5:$pwd/$host/perl5/site_perl";
$slave_port=$mysql_tcp_port+16;
$manager_port=$mysql_tcp_port+1;
if ($opt_stage == 0)
{
system("mkdir Logs") if (! -d "Logs");
system("mv $log ${log}-old") if (-f $log);
unlink($log);
}
open(LOG,">>$log") || abort("Can't open log file, error $?");
select LOG;
$|=1;
select STDOUT;
$|=1;
if (-x "$host/bin/mysqladmin")
{
log_system("$host/bin/mysqladmin --no-defaults -u root -S $mysql_unix_port -s shutdown");
@ -97,17 +110,8 @@ if ($opt_stage == 0)
}
rm_all("$host/test");
system("mkdir $host/test") if (! -d "$host/test");
system("mkdir Logs") if (! -d "Logs");
system("mv $log ${log}-old") if (-f $log);
unlink($log);
}
open(LOG,">>$log") || abort("Can't open log file, error $?");
select LOG;
$|=1;
select STDOUT;
$|=1;
safe_cd($host);
if ($opt_stage == 0 && ! $opt_use_old_distribution)
{
@ -553,13 +557,17 @@ sub rm_all
sub kill_all
{
my ($pattern) = @_;
my ($USER,$BSD,$LINUX,$pscmd, $user, $pid);
my ($USER,$BSD,$LINUX, $pscmd, $user, $pid);
$user=$ENV{'USER'};
$BSD = -f '/vmunix' || $ENV{"OS"} eq "SunOS4";
$BSD = -f '/vmunix' || $ENV{"OS"} eq "SunOS4" || $^O eq 'darwin';
$LINUX = $^O eq 'linux';
$pscmd = $BSD ? "/bin/ps -auxww" : $LINUX ? "/bin/ps axuw" : "/bin/ps -ef";
open(PS, "$pscmd|") || die "can't run $pscmd: $!";
if (!open(PS, "$pscmd|"))
{
print "Warning: Can't run $pscmd: $!\n";
exit;
}
# Catch any errors with eval. A bad pattern, for instance.
process:

View file

@ -8828,7 +8828,7 @@ To get a core dump on Linux if @code{mysqld} dies with a @code{SIGSEGV} signal,
you can start @code{mysqld} with the @code{--core-file} option. Note
that you also probably need to raise the @code{core file size} by adding
@code{ulimit -c 1000000} to @code{safe_mysqld} or starting
@code{safe_mysqld} with @code{--core-file-sizes=1000000}.
@code{safe_mysqld} with @code{--core-file-size=1000000}.
@xref{safe_mysqld, , @code{safe_mysqld}}.
If you are linking your own MySQL client and get the error:
@ -50261,6 +50261,8 @@ each individual 4.0.x release.
@itemize @bullet
@item
Don't update MyISAM index file on update if not strictly necessary.
@item
Fixed bug in @code{SELECT DISTINCT ... FROM many_tables ORDER BY
not-used-column}.
@item

View file

@ -34,7 +34,7 @@
C_MODE_START
#ifdef HAVE_SEMAPHORE_H
#include <semaphore.h>
#elif defined(__bsdi__)
#elif !defined(__bsdi__)
#ifdef __WIN__
typedef HANDLE sem_t;
#else

View file

@ -97,6 +97,8 @@ case "$target_os" in
sysv5uw7*)
# Problem when linking on SCO
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";;
*-openbsd*)
CFLAGS="$CFLAGS -DUNIV_MUST_NOT_INLINE";;
esac
case "$target" in

View file

@ -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;

View file

@ -387,14 +387,13 @@ int pthread_signal(int sig, void (*func)())
#undef pthread_mutex_destroy
#undef pthread_mutex_wait
#undef pthread_mutex_timedwait
#undef pthread_mutex_t
#undef pthread_cond_wait
#undef pthread_cond_timedwait
#undef pthread_mutex_trylock
#undef pthread_mutex_t
#undef pthread_cond_init
#undef pthread_cond_wait
#undef pthread_cond_timedwait
#undef pthread_cond_t
/*****************************************************************************
** Patches for AIX and DEC OSF/1 3.2
*****************************************************************************/

View file

@ -37,10 +37,16 @@ longlong Item_func_not::val_int()
return !null_value && value == 0 ? 1 : 0;
}
/*
Convert a constant expression or string to an integer.
This is done when comparing DATE's of different formats and
also when comparing bigint to strings (in which case the string
is converted once to a bigint).
*/
static bool convert_constant_item(Field *field, Item **item)
{
if ((*item)->const_item())
if ((*item)->const_item() && (*item)->type() != Item::INT_ITEM)
{
if (!(*item)->save_in_field(field) &&
!((*item)->null_value))