summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Docs/manual.texi55
-rw-r--r--configure.in14
-rw-r--r--mit-pthreads/gen/ctime.c2
-rwxr-xr-xmit-pthreads/machdep/netbsd-1.1/__signal.h7
-rw-r--r--mit-pthreads/stdio/strerror.c7
-rw-r--r--myisam/mi_check.c16
-rw-r--r--myisam/myisamchk.c2
-rw-r--r--mysql-test/r/auto_increment.result5
-rw-r--r--mysql-test/r/limit.result3
-rw-r--r--mysql-test/t/auto_increment.test11
-rw-r--r--mysql-test/t/limit.test11
-rw-r--r--sql/Makefile.am2
-rw-r--r--sql/ha_gemini.cc5
-rw-r--r--sql/ha_gemini.h2
-rw-r--r--sql/sql_delete.cc7
-rw-r--r--sql/sql_update.cc3
16 files changed, 128 insertions, 24 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index 247f453bef7..2e74f89d80f 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -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.
diff --git a/configure.in b/configure.in
index 37bc22ff63e..d3428b6f702 100644
--- a/configure.in
+++ b/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)
diff --git a/mit-pthreads/gen/ctime.c b/mit-pthreads/gen/ctime.c
index 0c1e711cf13..9b38d41e495 100644
--- a/mit-pthreads/gen/ctime.c
+++ b/mit-pthreads/gen/ctime.c
@@ -177,7 +177,7 @@ time_t altzone = 0;
static int detzcode(const char * codep)
{
- long result;
+ int result;
int i;
result = 0;
diff --git a/mit-pthreads/machdep/netbsd-1.1/__signal.h b/mit-pthreads/machdep/netbsd-1.1/__signal.h
index e41e9218261..ea2979f2b4e 100755
--- a/mit-pthreads/machdep/netbsd-1.1/__signal.h
+++ b/mit-pthreads/machdep/netbsd-1.1/__signal.h
@@ -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
diff --git a/mit-pthreads/stdio/strerror.c b/mit-pthreads/stdio/strerror.c
index 5aea7e7a4fc..d35235e63b0 100644
--- a/mit-pthreads/stdio/strerror.c
+++ b/mit-pthreads/stdio/strerror.c
@@ -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;
diff --git a/myisam/mi_check.c b/myisam/mi_check.c
index c6e07445bcf..0caedbe1a51 100644
--- a/myisam/mi_check.c
+++ b/myisam/mi_check.c
@@ -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;
diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c
index dd23e214ccf..61ad939d6ed 100644
--- a/myisam/myisamchk.c
+++ b/myisam/myisamchk.c
@@ -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);
}
diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result
index 9ff02d7a7b8..bf6265e5b64 100644
--- a/mysql-test/r/auto_increment.result
+++ b/mysql-test/r/auto_increment.result
@@ -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
diff --git a/mysql-test/r/limit.result b/mysql-test/r/limit.result
index 0f5586e3b31..6c3a1ed17e4 100644
--- a/mysql-test/r/limit.result
+++ b/mysql-test/r/limit.result
@@ -20,3 +20,6 @@ a b
a b
2 2
3 4
+i
+2
+1
diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test
index 1741b51b2d6..b9b8c244699 100644
--- a/mysql-test/t/auto_increment.test
+++ b/mysql-test/t/auto_increment.test
@@ -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;
diff --git a/mysql-test/t/limit.test b/mysql-test/t/limit.test
index ba075f73d37..112761abd87 100644
--- a/mysql-test/t/limit.test
+++ b/mysql-test/t/limit.test
@@ -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;
diff --git a/sql/Makefile.am b/sql/Makefile.am
index 774ef06f17c..28484f09b3d 100644
--- a/sql/Makefile.am
+++ b/sql/Makefile.am
@@ -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)\"" \
diff --git a/sql/ha_gemini.cc b/sql/ha_gemini.cc
index c95a348f238..e80d9a001e6 100644
--- a/sql/ha_gemini.cc
+++ b/sql/ha_gemini.cc
@@ -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
diff --git a/sql/ha_gemini.h b/sql/ha_gemini.h
index 495dc2fd1c9..3bfe85bfba2 100644
--- a/sql/ha_gemini.h
+++ b/sql/ha_gemini.h
@@ -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
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 587b205886e..8b4b1b527ca 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -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 */
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index 87a2f5c7b2b..c41586c58c8 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -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