mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Patch for netBSD
Added warning for tables where the auto_increment key is 0 Fixed DELETE ... LIMIT 0 Fixed UPDATE ..LIMIT 0
This commit is contained in:
parent
cc35643e1c
commit
bf9876a195
16 changed files with 128 additions and 24 deletions
|
@ -19861,6 +19861,28 @@ still get strange errors from a table when @strong{MySQL} tries to
|
|||
update a row or find a row by key (this is VERY unlikely to happen if a
|
||||
normal check has succeeded!).
|
||||
|
||||
Some things reported by check table, can't be corrected automaticly:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
@code{Found row where the auto_increment column has the value 0}.
|
||||
|
||||
This means that you have in the table a row where the
|
||||
@code{auto_increment} index column contains the value 0.
|
||||
(It's possible to create a row where the auto_increment column is 0 by
|
||||
explicitely setting the column to 0 with an @code{UPDATE} statement)
|
||||
|
||||
This isn't an error in itself, but could cause trouble if you decide to
|
||||
dump the table and restore it or do an @code{ALTER TABLE} on the
|
||||
table. In this case the auto_increment column will change value,
|
||||
according to the rules of auto_increment columns, which could cause
|
||||
problems like a duplicate key error.
|
||||
|
||||
To get rid of the warning, just execute an @code{UPDATE} statement
|
||||
to set the column to some other value than 0.
|
||||
@end itemize
|
||||
|
||||
|
||||
@findex BACKUP TABLE
|
||||
@node BACKUP TABLE, RESTORE TABLE, CHECK TABLE, Reference
|
||||
@section @code{BACKUP TABLE} Syntax
|
||||
|
@ -21464,7 +21486,8 @@ If you have specified the update log file or a binary log file without
|
|||
an extension, the extension number of the log file will be incremented
|
||||
by one relative to the previous file. If you have used an extension in
|
||||
the file name, @strong{MySQL} will close and reopen the update log file.
|
||||
@xref{Update log}.
|
||||
@xref{Update log}. This is the same thing as sending the @code{SIGHUP}
|
||||
signal to the @code{mysqld} server.
|
||||
|
||||
@item @code{PRIVILEGES} @tab Reloads the privileges from the grant tables in
|
||||
the @code{mysql} database.
|
||||
|
@ -21475,13 +21498,16 @@ the @code{mysql} database.
|
|||
|
||||
@item @code{TABLES WITH READ LOCK} @tab Closes all open tables and locks all tables for all databases with a read until one executes @code{UNLOCK TABLES}. This is very convenient way to get backups if you have a file system, like Veritas,that can take snapshots in time.
|
||||
|
||||
@item @code{STATUS} @tab Resets most status variables to zero.
|
||||
@item @code{STATUS} @tab Resets most status variables to zero. This is something one should only use when debugging a query.
|
||||
@end multitable
|
||||
|
||||
You can also access each of the commands shown above with the @code{mysqladmin}
|
||||
utility, using the @code{flush-hosts}, @code{flush-logs}, @code{reload},
|
||||
or @code{flush-tables} commands.
|
||||
|
||||
Take also a look at the @code{RESET} command used with
|
||||
replication. @xref{Replication SQL}.
|
||||
|
||||
@cindex @code{mysqladmin}
|
||||
@findex KILL
|
||||
@node KILL, SHOW, FLUSH, Reference
|
||||
|
@ -30117,14 +30143,14 @@ The following table has the options you can use for the @strong{MASTER}:
|
|||
@item @strong{Option} @tab @strong{Description}
|
||||
@item @code{log-bin=filename} @tab
|
||||
Write to a binary update log to the specified location. Note that if you
|
||||
give it a parameter with an extension
|
||||
(for example, @code{log-bin=/mysql/logs/replication.log} ) versions up to 3.23.24
|
||||
will not work right during replication if you do @code{FLUSH LOGS} . The
|
||||
problem is fixed in Version 3.23.25. If you are using this kind of log name,
|
||||
@code{FLUSH LOGS} will be ignored on binlog. To clear the log, run
|
||||
give it a parameter with an extension (for example,
|
||||
@code{log-bin=/mysql/logs/replication.log} ) versions up to 3.23.24 will
|
||||
not work right during replication if you do @code{FLUSH LOGS} . The
|
||||
problem is fixed in Version 3.23.25. If you are using this kind of log
|
||||
name, @code{FLUSH LOGS} will be ignored on binlog. To clear the log, run
|
||||
@code{FLUSH MASTER}, and do not forget to run @code{FLUSH SLAVE} on all
|
||||
slaves. In Version 3.23.26 and in later versions you should use @code{RESET MASTER}
|
||||
and @code{RESET SLAVE}
|
||||
slaves. In Version 3.23.26 and in later versions you should use
|
||||
@code{RESET MASTER} and @code{RESET SLAVE}
|
||||
|
||||
@item @code{log-bin-index=filename} @tab
|
||||
Because the user could issue the @code{FLUSH LOGS} command, we need to
|
||||
|
@ -46558,6 +46584,14 @@ not yet 100% confident in this code.
|
|||
@appendixsubsec Changes in release 3.23.40
|
||||
@itemize @bullet
|
||||
@item
|
||||
Fixed that @code{DELETE FROM table_name ... LIMIT 0} and
|
||||
@code{UPDATE FROM table_name ... LIMIT 0} doesn't delete/update anything.
|
||||
@item
|
||||
@code{CHECK TABLE} now checks if an auto_increment column contains the value 0.
|
||||
@item
|
||||
Sending a @code{SIGHUP} to @code{mysqld} will now only flush the logs,
|
||||
not reset the replication.
|
||||
@item
|
||||
Fixed parser to allow floats of type @code{1.0e1} (no sign after @code{e}).
|
||||
@item
|
||||
Option @code{--force} to @code{myisamchk} now also updates states.
|
||||
|
@ -51998,6 +52032,9 @@ efficiently, we need to add an API to allow binding of variables.
|
|||
Make it possible to specify @code{long_query_time} with a granularity
|
||||
in microseconds.
|
||||
@item
|
||||
Add a configurable prompt to the @code{mysql} command line client, with
|
||||
options like database in use, time and date...
|
||||
@item
|
||||
Add range checking to @code{MERGE} tables.
|
||||
@item
|
||||
Link the @code{myisampack} code into the server.
|
||||
|
|
14
configure.in
14
configure.in
|
@ -629,7 +629,10 @@ struct request_info *req;
|
|||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(LIBWRAP)
|
||||
AC_DEFINE(HAVE_LIBWRAP)
|
||||
WRAPLIBS="-L$with_libwrap/lib -lwrap",
|
||||
if test "$with_libwrap" != "yes"; then
|
||||
WRAPLIBS="-L${with_libwrap}/lib"
|
||||
fi
|
||||
WRAPLIBS="${WRAPLIBS} -lwrap",
|
||||
AC_MSG_RESULT(no)
|
||||
CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
|
||||
CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
|
||||
|
@ -798,6 +801,11 @@ case $SYSTEM_TYPE in
|
|||
echo "Adding fix for interrupted reads"
|
||||
CXXFLAGS="$CXXFLAGS -DMYSQLD_NET_RETRY_COUNT=1000000"
|
||||
;;
|
||||
*netbsd*)
|
||||
echo "Adding flag -Dunix"
|
||||
CFLAGS="$CFLAGS -Dunix"
|
||||
CXXFLAGS="$CXXFLAGS -Dunix"
|
||||
;;
|
||||
*bsdi*)
|
||||
echo "Adding fix for BSDI"
|
||||
CFLAGS="$CFLAGS -D__BSD__ -DHAVE_BROKEN_REALPATH"
|
||||
|
@ -2043,15 +2051,15 @@ EOF
|
|||
AC_DEFINE(HAVE_mit_thread)
|
||||
MT_INCLUDES="-I\$(top_srcdir)/mit-pthreads/include"
|
||||
AC_SUBST(MT_INCLUDES)
|
||||
MT_LD_ADD="-L \$(top_srcdir)/mit-pthreads/obj/ -lpthread"
|
||||
MT_LD_ADD="\$(top_srcdir)/mit-pthreads/obj/libpthread.a"
|
||||
AC_SUBST(MT_LD_ADD)
|
||||
LIBS="$MT_LD_ADD $LIBS"
|
||||
echo ""
|
||||
echo "Configuring MIT Pthreads"
|
||||
# We will never install so installation paths are not needed.
|
||||
(cd mit-pthreads; sh ./configure)
|
||||
echo "End of MIT Pthreads configuration"
|
||||
echo ""
|
||||
LIBS="$MT_LD_ADD $LIBS"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(sql_server_dirs)
|
||||
|
|
|
@ -177,7 +177,7 @@ time_t altzone = 0;
|
|||
|
||||
static int detzcode(const char * codep)
|
||||
{
|
||||
long result;
|
||||
int result;
|
||||
int i;
|
||||
|
||||
result = 0;
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include <sys/signal.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#if NSIG <= 32
|
||||
#define __SIGEMPTYSET 0
|
||||
#define __SIGFILLSET 0xffffffff
|
||||
|
@ -8,6 +10,9 @@
|
|||
#define __SIGISMEMBER(s, n) ((*(s) & (1 << ((n) - 1))) != 0)
|
||||
|
||||
#else /* XXX Netbsd >= 1.3H */
|
||||
|
||||
int sigaction __P_((int, const struct sigaction *, struct sigaction *)) __RENAME(__sigaction14);
|
||||
|
||||
#define __SIGEMPTYSET { 0, 0, 0, 0}
|
||||
#define __SIGFILLSET { 0xffffffff, 0xffffffff, \
|
||||
0xffffffff, 0xffffffff }
|
||||
|
@ -18,3 +23,5 @@
|
|||
#define __SIGISMEMBER(s, n) (((s)->__bits[__SIGWORD(n)] & __SIGMASK(n)) != 0)
|
||||
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
|
|
@ -36,13 +36,18 @@ static char sccsid[] = "@(#)strerror.c 5.6 (Berkeley) 5/4/91";
|
|||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <string.h>
|
||||
#if defined(__NetBSD__)
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
char *
|
||||
strerror(num)
|
||||
int num;
|
||||
{
|
||||
#if !defined(__NetBSD__)
|
||||
extern int sys_nerr;
|
||||
extern char *sys_errlist[];
|
||||
#endif
|
||||
#define UPREFIX "Unknown error: "
|
||||
static char ebuf[40] = UPREFIX; /* 64-bit number + slop */
|
||||
register unsigned int errnum;
|
||||
|
@ -51,7 +56,7 @@ strerror(num)
|
|||
|
||||
errnum = num; /* convert to unsigned */
|
||||
if (errnum < sys_nerr)
|
||||
return(sys_errlist[errnum]);
|
||||
return((char *)sys_errlist[errnum]);
|
||||
|
||||
/* Do this by hand, so we don't include stdio(3). */
|
||||
t = tmp;
|
||||
|
|
|
@ -432,9 +432,9 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
|
|||
}
|
||||
else
|
||||
full_text_keys++;
|
||||
/* Check that auto_increment key is bigger than max key value */
|
||||
if ((uint) share->base.auto_key -1 == key)
|
||||
{
|
||||
/* Check that auto_increment key is bigger than max key value */
|
||||
ulonglong save_auto_value=info->s->state.auto_increment;
|
||||
info->s->state.auto_increment=0;
|
||||
info->lastinx=key;
|
||||
|
@ -454,6 +454,20 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
|
|||
}
|
||||
else
|
||||
info->s->state.auto_increment=save_auto_value;
|
||||
|
||||
/* Check that there isn't a row with auto_increment = 0 in the table */
|
||||
mi_extra(info,HA_EXTRA_KEYREAD);
|
||||
bzero(info->lastkey,keyinfo->seg->length);
|
||||
if (!mi_rkey(info, info->rec_buff, key, info->lastkey,
|
||||
keyinfo->seg->length, HA_READ_KEY_EXACT))
|
||||
{
|
||||
/* Don't count this as a real warning, as myisamchk can't correct it */
|
||||
uint save=param->warning_printed;
|
||||
mi_check_print_warning(param,
|
||||
"Found row where the auto_increment column has the value 0");
|
||||
param->warning_printed=save;
|
||||
}
|
||||
mi_extra(info,HA_EXTRA_NO_KEYREAD);
|
||||
}
|
||||
|
||||
length=(my_off_t) isam_key_length(info,keyinfo)*keys + param->key_blocks*2;
|
||||
|
|
|
@ -201,7 +201,7 @@ static struct option long_options[] =
|
|||
|
||||
static void print_version(void)
|
||||
{
|
||||
printf("%s Ver 1.47 for %s at %s\n",my_progname,SYSTEM_TYPE,
|
||||
printf("%s Ver 1.48 for %s at %s\n",my_progname,SYSTEM_TYPE,
|
||||
MACHINE_TYPE);
|
||||
}
|
||||
|
||||
|
|
|
@ -55,3 +55,8 @@ ordid ord
|
|||
2 sdj
|
||||
3 sdj
|
||||
1 zzz
|
||||
a
|
||||
0
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check warning Found row where the auto_increment column has the value 0
|
||||
test.t1 check status OK
|
||||
|
|
|
@ -20,3 +20,6 @@ a b
|
|||
a b
|
||||
2 2
|
||||
3 4
|
||||
i
|
||||
2
|
||||
1
|
||||
|
|
|
@ -64,3 +64,14 @@ create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null
|
|||
insert into t1 values (NULL,'sdj'),(NULL,'sdj'),(NULL,"abc"),(NULL,'abc'),(NULL,'zzz'),(NULL,'sdj'),(NULL,'abc');
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test of auto_increment columns when they are set to 0
|
||||
#
|
||||
|
||||
create table t1 (a int not null primary key auto_increment);
|
||||
insert into t1 values (0);
|
||||
update t1 set a=0;
|
||||
select * from t1;
|
||||
check table t1;
|
||||
drop table t1;
|
||||
|
|
|
@ -17,3 +17,14 @@ select * from t1;
|
|||
delete from t1 limit 1;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (i int);
|
||||
insert into t1 (i) values(1);
|
||||
insert into t1 (i) values(1);
|
||||
insert into t1 (i) values(1);
|
||||
delete from t1 limit 1;
|
||||
update t1 set i=2 limit 1;
|
||||
delete from t1 limit 0;
|
||||
update t1 set i=3 limit 0;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
|
|
@ -85,7 +85,7 @@ gen_lex_hash_SOURCES = gen_lex_hash.cc
|
|||
gen_lex_hash_LDADD = $(LDADD) $(CXXLDFLAGS)
|
||||
mysqlbinlog_SOURCES = mysqlbinlog.cc mini_client.cc net_serv.cc \
|
||||
mini_client_errors.c violite.c password.c
|
||||
mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS) $(mysqld_LDADD)
|
||||
mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS) # $(mysqld_LDADD)
|
||||
|
||||
DEFS = -DMYSQL_SERVER \
|
||||
-DDEFAULT_MYSQL_HOME="\"$(MYSQLBASEdir)\"" \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (C) 2000 NuSphere Corporation
|
||||
|
||||
/* Copyright (C) 2000 MySQL AB & NuSphere Corporation
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
|
@ -14,6 +14,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/* This file is based on ha_berkeley.cc */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma implementation // gcc: Class implementation
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2000 NuSphere Corporation
|
||||
/* Copyright (C) 2000 MySQL AB & NuSphere Corporation
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -170,12 +170,13 @@ int mysql_delete(THD *thd,TABLE_LIST *table_list,COND *conds,ha_rows limit,
|
|||
select=make_select(table,0,0,conds,&error);
|
||||
if (error)
|
||||
DBUG_RETURN(-1);
|
||||
if (select && select->check_quick(test(thd->options & SQL_SAFE_UPDATES),
|
||||
limit))
|
||||
if ((select && select->check_quick(test(thd->options & SQL_SAFE_UPDATES),
|
||||
limit)) ||
|
||||
!limit)
|
||||
{
|
||||
delete select;
|
||||
send_ok(&thd->net,0L);
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(0); // Nothing to delete
|
||||
}
|
||||
|
||||
/* If running in safe sql mode, don't allow updates without keys */
|
||||
|
|
|
@ -110,7 +110,8 @@ int mysql_update(THD *thd,TABLE_LIST *table_list,List<Item> &fields,
|
|||
select=make_select(table,0,0,conds,&error);
|
||||
if (error ||
|
||||
(select && select->check_quick(test(thd->options & SQL_SAFE_UPDATES),
|
||||
limit)))
|
||||
limit)) ||
|
||||
!limit)
|
||||
{
|
||||
delete select;
|
||||
table->time_stamp=save_time_stamp; // Restore timestamp pointer
|
||||
|
|
Loading…
Reference in a new issue