mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
manually merged
BitKeeper/etc/logging_ok: auto-union BitKeeper/deleted/.del-mytest-old.c~5237697b30cf59e4: Auto merged Build-tools/Bootstrap: Auto merged Build-tools/mysql-copyright: Auto merged configure.in: Auto merged BitKeeper/deleted/.del-mysql_fix_privilege_tables.sql: Auto merged VC++Files/innobase/innobase.dsp: Auto merged client/mysql.cc: Auto merged include/my_global.h: Auto merged innobase/dict/dict0crea.c: Auto merged innobase/dict/dict0dict.c: Auto merged innobase/include/mtr0log.h: Auto merged innobase/include/mtr0log.ic: Auto merged innobase/include/srv0srv.h: Auto merged innobase/include/ut0dbg.h: Auto merged innobase/lock/lock0lock.c: Auto merged innobase/os/os0file.c: Auto merged innobase/row/row0mysql.c: Auto merged innobase/row/row0sel.c: Auto merged innobase/srv/srv0srv.c: Auto merged innobase/ut/ut0dbg.c: Auto merged innobase/ut/ut0mem.c: Auto merged libmysql/Makefile.am: Auto merged libmysql/Makefile.shared: Auto merged libmysql/conf_to_src.c: Auto merged libmysql/dll.c: Auto merged libmysql/errmsg.c: Auto merged libmysql/manager.c: Auto merged libmysql_r/Makefile.am: Auto merged myisam/mi_key.c: Auto merged mysql-test/Makefile.am: Auto merged mysql-test/mysql-test-run.sh: Auto merged mysql-test/r/having.result: Auto merged mysql-test/r/heap.result: Auto merged mysql-test/r/type_date.result: Auto merged mysql-test/r/type_float.result: Auto merged mysql-test/t/having.test: Auto merged mysql-test/t/heap.test: Auto merged mysql-test/t/type_date.test: Auto merged mysql-test/t/type_float.test: Auto merged mysql-test/t/type_uint.test: Auto merged scripts/make_binary_distribution.sh: Auto merged scripts/make_win_src_distribution.sh: Auto merged sql/Makefile.am: Auto merged sql/field.h: Auto merged sql/ha_heap.cc: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/item_sum.h: Auto merged sql/lock.cc: Auto merged sql/log.cc: Auto merged sql/protocol.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_analyse.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_parse.cc: Auto merged sql/share/czech/errmsg.txt: Auto merged sql/share/danish/errmsg.txt: Auto merged sql/share/dutch/errmsg.txt: Auto merged sql/share/english/errmsg.txt: Auto merged sql/share/estonian/errmsg.txt: Auto merged sql/share/french/errmsg.txt: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/share/greek/errmsg.txt: Auto merged sql/share/hungarian/errmsg.txt: Auto merged sql/share/japanese/errmsg.txt: Auto merged sql/share/korean/errmsg.txt: Auto merged sql/share/norwegian-ny/errmsg.txt: Auto merged sql/share/norwegian/errmsg.txt: Auto merged sql/share/polish/errmsg.txt: Auto merged sql/share/portuguese/errmsg.txt: Auto merged sql/share/romanian/errmsg.txt: Auto merged sql/share/russian/errmsg.txt: Auto merged sql/share/slovak/errmsg.txt: Auto merged sql/share/spanish/errmsg.txt: Auto merged sql/share/swedish/errmsg.txt: Auto merged sql/share/ukrainian/errmsg.txt: Auto merged
This commit is contained in:
@ -28,8 +28,8 @@ else
|
|||||||
# Some predefined settings
|
# Some predefined settings
|
||||||
$build_command= "BUILD/compile-pentium-max";
|
$build_command= "BUILD/compile-pentium-max";
|
||||||
$PWD= cwd();
|
$PWD= cwd();
|
||||||
$LOGFILE= $PWD . "/Bootstrap.log";
|
|
||||||
$opt_docdir= $PWD . "/mysqldoc";
|
$opt_docdir= $PWD . "/mysqldoc";
|
||||||
|
$opt_archive_log= undef;
|
||||||
$opt_build_command= undef;
|
$opt_build_command= undef;
|
||||||
$opt_changelog= undef;
|
$opt_changelog= undef;
|
||||||
$opt_delete= undef;
|
$opt_delete= undef;
|
||||||
@ -51,6 +51,7 @@ $version= "unknown";
|
|||||||
$major=$minor=$release=0;
|
$major=$minor=$release=0;
|
||||||
|
|
||||||
GetOptions(
|
GetOptions(
|
||||||
|
"archive-log|a",
|
||||||
"build-command|b=s",
|
"build-command|b=s",
|
||||||
"changelog|c:s",
|
"changelog|c:s",
|
||||||
"directory|d=s",
|
"directory|d=s",
|
||||||
@ -72,6 +73,17 @@ GetOptions(
|
|||||||
"quiet|q",
|
"quiet|q",
|
||||||
) || print_help("");
|
) || print_help("");
|
||||||
|
|
||||||
|
#
|
||||||
|
# Override predefined build command
|
||||||
|
#
|
||||||
|
if (defined $opt_build_command)
|
||||||
|
{
|
||||||
|
$build_command= $opt_build_command;
|
||||||
|
}
|
||||||
|
|
||||||
|
print_help("") if ($opt_help);
|
||||||
|
defined($REPO=$ARGV[0]) || print_help("Please enter the BK repository to be used!");
|
||||||
|
|
||||||
#
|
#
|
||||||
# Override predefined Log file name
|
# Override predefined Log file name
|
||||||
#
|
#
|
||||||
@ -90,16 +102,7 @@ if (defined $opt_log)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
$LOGFILE= $PWD . "/Bootstrap-" . $REPO . ".log" unless ($LOGFILE);
|
||||||
# Override predefined build command
|
|
||||||
#
|
|
||||||
if (defined $opt_build_command)
|
|
||||||
{
|
|
||||||
$build_command= $opt_build_command;
|
|
||||||
}
|
|
||||||
|
|
||||||
print_help("") if ($opt_help);
|
|
||||||
defined($REPO=$ARGV[0]) || print_help("Please enter the BK repository to be used!");
|
|
||||||
|
|
||||||
&logger("Starting build");
|
&logger("Starting build");
|
||||||
&abort("The directory \"$REPO\" could not be found!") if (!-d $REPO);
|
&abort("The directory \"$REPO\" could not be found!") if (!-d $REPO);
|
||||||
@ -351,6 +354,21 @@ if (!$opt_skip_check)
|
|||||||
# All done when we came down here
|
# All done when we came down here
|
||||||
#
|
#
|
||||||
&logger("SUCCESS: Build finished successfully.") if (!$opt_dry_run);
|
&logger("SUCCESS: Build finished successfully.") if (!$opt_dry_run);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Move the log file into the Log dir of the target dir
|
||||||
|
#
|
||||||
|
if ($opt_archive_log)
|
||||||
|
{
|
||||||
|
my $logdir= $target_dir . "/Logs";
|
||||||
|
&logger("Moving $LOGFILE to $logdir");
|
||||||
|
mkdir "$logdir" if (! -d $logdir);
|
||||||
|
$command= "mv ";
|
||||||
|
$command.= "-v " if ($opt_verbose || defined $opt_log);
|
||||||
|
$command.= "$LOGFILE $logdir";
|
||||||
|
&run_command($command, "Could not move $LOGFILE to $logdir!");
|
||||||
|
}
|
||||||
|
|
||||||
exit 0;
|
exit 0;
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -378,6 +396,8 @@ distribution check can be run before the source archive is being created.
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
|
-a, --archive-log Move the log file into the Logs directory of
|
||||||
|
the exported tree after a successful build
|
||||||
-b, --build-command=<cmd> Use <cmd> to compile the sources before packing
|
-b, --build-command=<cmd> Use <cmd> to compile the sources before packing
|
||||||
the distribution.
|
the distribution.
|
||||||
(default is "$build_command")
|
(default is "$build_command")
|
||||||
@ -398,7 +418,7 @@ Options:
|
|||||||
do not build or test the source distribution
|
do not build or test the source distribution
|
||||||
-h, --help Print this help message
|
-h, --help Print this help message
|
||||||
-l, --log[=<filename>] Write a log file [to <filename>]
|
-l, --log[=<filename>] Write a log file [to <filename>]
|
||||||
(default is "$LOGFILE")
|
(default is "./Bootstrap-<bk repository>.log")
|
||||||
-m, --mail=<address> Mail a failure report to the given address (and
|
-m, --mail=<address> Mail a failure report to the given address (and
|
||||||
include a log file snippet, if logging is enabled)
|
include a log file snippet, if logging is enabled)
|
||||||
Note that the \@-Sign needs to be quoted!
|
Note that the \@-Sign needs to be quoted!
|
||||||
|
@ -101,6 +101,7 @@ sub main
|
|||||||
# on the toplevel of the directory instead. file 'PUBLIC' shouldn't
|
# on the toplevel of the directory instead. file 'PUBLIC' shouldn't
|
||||||
# exist in the new mysql distributions, but let's be sure..
|
# exist in the new mysql distributions, but let's be sure..
|
||||||
unlink("$destdir/PUBLIC", "$destdir/README");
|
unlink("$destdir/PUBLIC", "$destdir/README");
|
||||||
|
unlink("$destdir/COPYING", "$destdir/EXCEPTIONS-CLIENT");
|
||||||
copy("$WD/Docs/MySQLEULA.txt", "$destdir");
|
copy("$WD/Docs/MySQLEULA.txt", "$destdir");
|
||||||
|
|
||||||
# remove readline, bdb subdirs and update 'configure'
|
# remove readline, bdb subdirs and update 'configure'
|
||||||
|
@ -26,7 +26,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) $(BUILT_SOURCES) mysqld_error.txt \
|
|||||||
|
|
||||||
all: $(targets) txt_files
|
all: $(targets) txt_files
|
||||||
|
|
||||||
txt_files: ../INSTALL-SOURCE ../COPYING ../INSTALL-WIN-SOURCE \
|
txt_files: ../INSTALL-SOURCE ../COPYING ../INSTALL-WIN-SOURCE ../EXCEPTIONS-CLIENT \
|
||||||
INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt
|
INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt
|
||||||
|
|
||||||
CLEAN_FILES: $(BUILD_SOURCES)
|
CLEAN_FILES: $(BUILD_SOURCES)
|
||||||
@ -204,7 +204,10 @@ INSTALL-BINARY: mysql.info $(GT)
|
|||||||
perl -w $(GT) mysql.info "Installing binary" "Installing source" > $@
|
perl -w $(GT) mysql.info "Installing binary" "Installing source" > $@
|
||||||
|
|
||||||
../COPYING: mysql.info $(GT)
|
../COPYING: mysql.info $(GT)
|
||||||
perl -w $(GT) mysql.info "GPL license" "Function Index" > $@
|
perl -w $(GT) mysql.info "GPL license" "MySQL FLOSS License Exception" > $@
|
||||||
|
|
||||||
|
../EXCEPTIONS-CLIENT: mysql.info $(GT)
|
||||||
|
perl -w $(GT) mysql.info "MySQL FLOSS License Exception" "Function Index" > $@
|
||||||
|
|
||||||
../support-files/MacOSX/ReadMe.txt: mysql.info $(GT)
|
../support-files/MacOSX/ReadMe.txt: mysql.info $(GT)
|
||||||
perl -w $(GT) mysql.info "Mac OS X installation" "NetWare installation" > $@
|
perl -w $(GT) mysql.info "Mac OS X installation" "NetWare installation" > $@
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
# These are built from source in the Docs directory
|
# These are built from source in the Docs directory
|
||||||
EXTRA_DIST = INSTALL-SOURCE README COPYING
|
EXTRA_DIST = INSTALL-SOURCE README COPYING EXCEPTIONS-CLIENT
|
||||||
SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
|
SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
|
||||||
@readline_topdir@ sql-common \
|
@readline_topdir@ sql-common \
|
||||||
@thread_dirs@ pstack @sql_client_dirs@ \
|
@thread_dirs@ pstack @sql_client_dirs@ \
|
||||||
|
@ -187,7 +187,7 @@ LINK32=xilink6.exe
|
|||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "USE_SYMDIR" /D "HAVE_DLOPEN" /D "NDEBUG" /FD /c
|
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "USE_SYMDIR" /D "HAVE_DLOPEN" /D "NDEBUG" /FD /c
|
||||||
# SUBTRACT BASE CPP /YX
|
# SUBTRACT BASE CPP /YX
|
||||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D LICENSE=Commercial /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "HAVE_DLOPEN" /D "DBUG_OFF" /D "_MBCS" /D "NDEBUG" /FD /c
|
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D LICENSE=Commercial /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "HAVE_DLOPEN" /D "DBUG_OFF" /D "_MBCS" /D "NDEBUG" /FD /D MYSQL_SERVER_SUFFIX=-classic /c
|
||||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
@ -243,7 +243,7 @@ LINK32=xilink6.exe
|
|||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "USE_SYMDIR" /D "HAVE_DLOPEN" /D "NDEBUG" /FD /c
|
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "USE_SYMDIR" /D "HAVE_DLOPEN" /D "NDEBUG" /FD /c
|
||||||
# SUBTRACT BASE CPP /YX
|
# SUBTRACT BASE CPP /YX
|
||||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "__NT__" /D "DBUG_OFF" /D "NDEBUG" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D LICENSE=Commercial /D MYSQL_SERVER_SUFFIX=-nt /FD /c
|
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "__NT__" /D "DBUG_OFF" /D "NDEBUG" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /FD /D LICENSE=Commercial /D MYSQL_SERVER_SUFFIX=-classic-nt /c
|
||||||
# SUBTRACT CPP /YX
|
# SUBTRACT CPP /YX
|
||||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||||
|
@ -2836,13 +2836,16 @@ com_status(String *buffer __attribute__((unused)),
|
|||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
LINT_INIT(result);
|
LINT_INIT(result);
|
||||||
tee_fprintf(stdout, "\nConnection id:\t\t%lu\n",mysql_thread_id(&mysql));
|
tee_fprintf(stdout, "\nConnection id:\t\t%lu\n",mysql_thread_id(&mysql));
|
||||||
if (!mysql_query(&mysql,"select DATABASE(),USER()") &&
|
if (!mysql_query(&mysql,"select DATABASE(), USER() limit 1") &&
|
||||||
(result=mysql_use_result(&mysql)))
|
(result=mysql_use_result(&mysql)))
|
||||||
{
|
{
|
||||||
MYSQL_ROW cur=mysql_fetch_row(result);
|
MYSQL_ROW cur=mysql_fetch_row(result);
|
||||||
tee_fprintf(stdout, "Current database:\t%s\n", cur[0] ? cur[0] : "");
|
if (cur)
|
||||||
tee_fprintf(stdout, "Current user:\t\t%s\n",cur[1]);
|
{
|
||||||
(void) mysql_fetch_row(result); // Read eof
|
tee_fprintf(stdout, "Current database:\t%s\n", cur[0] ? cur[0] : "");
|
||||||
|
tee_fprintf(stdout, "Current user:\t\t%s\n", cur[1]);
|
||||||
|
}
|
||||||
|
mysql_free_result(result);
|
||||||
}
|
}
|
||||||
#ifdef HAVE_OPENSSL
|
#ifdef HAVE_OPENSSL
|
||||||
if (mysql.net.vio && mysql.net.vio->ssl_arg &&
|
if (mysql.net.vio && mysql.net.vio->ssl_arg &&
|
||||||
|
16
configure.in
16
configure.in
@ -969,6 +969,16 @@ esac
|
|||||||
MAX_C_OPTIMIZE="-O3"
|
MAX_C_OPTIMIZE="-O3"
|
||||||
MAX_CXX_OPTIMIZE="-O3"
|
MAX_CXX_OPTIMIZE="-O3"
|
||||||
|
|
||||||
|
# workaround for Sun Forte/x86 see BUG#4681
|
||||||
|
case $SYSTEM_TYPE-$MACHINE_TYPE-$ac_cv_prog_gcc in
|
||||||
|
*solaris*-i?86-no)
|
||||||
|
CFLAGS="$CFLAGS -DBIG_FILES"
|
||||||
|
CXXFLAGS="$CXXFLAGS -DBIG_FILES"
|
||||||
|
;;
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
case $SYSTEM_TYPE in
|
case $SYSTEM_TYPE in
|
||||||
*solaris2.7*)
|
*solaris2.7*)
|
||||||
# Solaris 2.7 has a broken /usr/include/widec.h
|
# Solaris 2.7 has a broken /usr/include/widec.h
|
||||||
@ -1072,10 +1082,11 @@ case $SYSTEM_TYPE in
|
|||||||
MAX_C_OPTIMIZE="-O"
|
MAX_C_OPTIMIZE="-O"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*darwin7*)
|
*darwin[[7-8]]*)
|
||||||
|
# don't forget to escape [] like above
|
||||||
if test "$ac_cv_prog_gcc" = "yes"
|
if test "$ac_cv_prog_gcc" = "yes"
|
||||||
then
|
then
|
||||||
FLAGS="-DHAVE_DARWIN_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ"
|
FLAGS="-DHAVE_DARWIN_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT"
|
||||||
CFLAGS="$CFLAGS $FLAGS"
|
CFLAGS="$CFLAGS $FLAGS"
|
||||||
CXXFLAGS="$CXXFLAGS $FLAGS"
|
CXXFLAGS="$CXXFLAGS $FLAGS"
|
||||||
MAX_C_OPTIMIZE="-O"
|
MAX_C_OPTIMIZE="-O"
|
||||||
@ -1319,6 +1330,7 @@ then
|
|||||||
with_named_thread="-lgthreads -lsocket -lgthreads"
|
with_named_thread="-lgthreads -lsocket -lgthreads"
|
||||||
# sched.h conflicts with fsu-threads
|
# sched.h conflicts with fsu-threads
|
||||||
touch ./include/sched.h
|
touch ./include/sched.h
|
||||||
|
touch ./include/semaphore.h
|
||||||
|
|
||||||
# We must have gcc
|
# We must have gcc
|
||||||
if expr "$CC" : ".*gcc.*"
|
if expr "$CC" : ".*gcc.*"
|
||||||
|
@ -645,21 +645,27 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
|||||||
#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/
|
#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/
|
||||||
|
|
||||||
#if SIZEOF_LONG == 4
|
#if SIZEOF_LONG == 4
|
||||||
#define INT_MIN32 (long) 0x80000000L
|
#define INT_MIN32 ((long) 0x80000000L)
|
||||||
#define INT_MAX32 (long) 0x7FFFFFFFL
|
#define INT_MAX32 ((long) 0x7FFFFFFFL)
|
||||||
#define INT_MIN24 ((long) 0xff800000L)
|
#define UINT_MAX32 ((long) 0xFFFFFFFFL)
|
||||||
#define INT_MAX24 0x007fffffL
|
#define INT_MIN24 ((long) 0xFF800000L)
|
||||||
#define INT_MIN16 ((short int) 0x8000)
|
#define INT_MAX24 0x007FFFFFL
|
||||||
#define INT_MAX16 0x7FFF
|
#define UINT_MAX24 0x00FFFFFFL
|
||||||
#define INT_MIN8 ((char) 0x80)
|
#define INT_MIN16 ((short int) 0x8000)
|
||||||
#define INT_MAX8 ((char) 0x7F)
|
#define INT_MAX16 0x7FFF
|
||||||
|
#define UINT_MAX16 0xFFFF
|
||||||
|
#define INT_MIN8 ((char) 0x80)
|
||||||
|
#define INT_MAX8 ((char) 0x7F)
|
||||||
#else /* Probably Alpha */
|
#else /* Probably Alpha */
|
||||||
#define INT_MIN32 ((long) (int) 0x80000000)
|
#define INT_MIN32 ((long) (int) 0x80000000)
|
||||||
#define INT_MAX32 ((long) (int) 0x7FFFFFFF)
|
#define INT_MAX32 ((long) (int) 0x7FFFFFFF)
|
||||||
#define INT_MIN24 ((long) (int) 0xff800000)
|
#define UINT_MAX32 ((long) (int) 0xFFFFFFFF)
|
||||||
#define INT_MAX24 ((long) (int) 0x007fffff)
|
#define INT_MIN24 ((long) (int) 0xFF800000)
|
||||||
#define INT_MIN16 ((short int) 0xffff8000)
|
#define INT_MAX24 ((long) (int) 0x007FFFFF)
|
||||||
|
#define UINT_MAX24 ((long) (int) 0x00FFFFFF)
|
||||||
|
#define INT_MIN16 ((short int) 0xFFFF8000)
|
||||||
#define INT_MAX16 ((short int) 0x00007FFF)
|
#define INT_MAX16 ((short int) 0x00007FFF)
|
||||||
|
#define UINT_MAX16 ((short int) 0x0000FFFF)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* From limits.h instead */
|
/* From limits.h instead */
|
||||||
|
@ -217,7 +217,9 @@ buf_flush_buffered_writes(void)
|
|||||||
/*===========================*/
|
/*===========================*/
|
||||||
{
|
{
|
||||||
buf_block_t* block;
|
buf_block_t* block;
|
||||||
|
byte* write_buf;
|
||||||
ulint len;
|
ulint len;
|
||||||
|
ulint len2;
|
||||||
ulint i;
|
ulint i;
|
||||||
|
|
||||||
if (trx_doublewrite == NULL) {
|
if (trx_doublewrite == NULL) {
|
||||||
@ -244,6 +246,16 @@ buf_flush_buffered_writes(void)
|
|||||||
block = trx_doublewrite->buf_block_arr[i];
|
block = trx_doublewrite->buf_block_arr[i];
|
||||||
ut_a(block->state == BUF_BLOCK_FILE_PAGE);
|
ut_a(block->state == BUF_BLOCK_FILE_PAGE);
|
||||||
|
|
||||||
|
if (mach_read_from_4(block->frame + FIL_PAGE_LSN + 4)
|
||||||
|
!= mach_read_from_4(block->frame + UNIV_PAGE_SIZE
|
||||||
|
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) {
|
||||||
|
ut_print_timestamp(stderr);
|
||||||
|
fprintf(stderr,
|
||||||
|
" InnoDB: ERROR: The page to be written seems corrupt!\n"
|
||||||
|
"InnoDB: The lsn fields do not match! Noticed in the buffer pool\n"
|
||||||
|
"InnoDB: before posting to the doublewrite buffer.\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (block->check_index_page_at_flush
|
if (block->check_index_page_at_flush
|
||||||
&& !page_simple_validate(block->frame)) {
|
&& !page_simple_validate(block->frame)) {
|
||||||
|
|
||||||
@ -272,6 +284,19 @@ buf_flush_buffered_writes(void)
|
|||||||
trx_doublewrite->block1, 0, len,
|
trx_doublewrite->block1, 0, len,
|
||||||
(void*)trx_doublewrite->write_buf, NULL);
|
(void*)trx_doublewrite->write_buf, NULL);
|
||||||
|
|
||||||
|
write_buf = trx_doublewrite->write_buf;
|
||||||
|
|
||||||
|
for (len2 = 0; len2 + UNIV_PAGE_SIZE <= len; len2 += UNIV_PAGE_SIZE) {
|
||||||
|
if (mach_read_from_4(write_buf + len2 + FIL_PAGE_LSN + 4)
|
||||||
|
!= mach_read_from_4(write_buf + len2 + UNIV_PAGE_SIZE
|
||||||
|
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) {
|
||||||
|
ut_print_timestamp(stderr);
|
||||||
|
fprintf(stderr,
|
||||||
|
" InnoDB: ERROR: The page to be written seems corrupt!\n"
|
||||||
|
"InnoDB: The lsn fields do not match! Noticed in the doublewrite block1.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (trx_doublewrite->first_free > TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) {
|
if (trx_doublewrite->first_free > TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) {
|
||||||
len = (trx_doublewrite->first_free
|
len = (trx_doublewrite->first_free
|
||||||
- TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) * UNIV_PAGE_SIZE;
|
- TRX_SYS_DOUBLEWRITE_BLOCK_SIZE) * UNIV_PAGE_SIZE;
|
||||||
@ -282,6 +307,22 @@ buf_flush_buffered_writes(void)
|
|||||||
(void*)(trx_doublewrite->write_buf
|
(void*)(trx_doublewrite->write_buf
|
||||||
+ TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE),
|
+ TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE),
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
write_buf = trx_doublewrite->write_buf
|
||||||
|
+ TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * UNIV_PAGE_SIZE;
|
||||||
|
for (len2 = 0; len2 + UNIV_PAGE_SIZE <= len;
|
||||||
|
len2 += UNIV_PAGE_SIZE) {
|
||||||
|
if (mach_read_from_4(write_buf + len2
|
||||||
|
+ FIL_PAGE_LSN + 4)
|
||||||
|
!= mach_read_from_4(write_buf + len2
|
||||||
|
+ UNIV_PAGE_SIZE
|
||||||
|
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) {
|
||||||
|
ut_print_timestamp(stderr);
|
||||||
|
fprintf(stderr,
|
||||||
|
" InnoDB: ERROR: The page to be written seems corrupt!\n"
|
||||||
|
"InnoDB: The lsn fields do not match! Noticed in the doublewrite block2.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now flush the doublewrite buffer data to disk */
|
/* Now flush the doublewrite buffer data to disk */
|
||||||
@ -295,6 +336,18 @@ buf_flush_buffered_writes(void)
|
|||||||
for (i = 0; i < trx_doublewrite->first_free; i++) {
|
for (i = 0; i < trx_doublewrite->first_free; i++) {
|
||||||
block = trx_doublewrite->buf_block_arr[i];
|
block = trx_doublewrite->buf_block_arr[i];
|
||||||
|
|
||||||
|
if (mach_read_from_4(block->frame + FIL_PAGE_LSN + 4)
|
||||||
|
!= mach_read_from_4(block->frame + UNIV_PAGE_SIZE
|
||||||
|
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) {
|
||||||
|
ut_print_timestamp(stderr);
|
||||||
|
fprintf(stderr,
|
||||||
|
" InnoDB: ERROR: The page to be written seems corrupt!\n"
|
||||||
|
"InnoDB: The lsn fields do not match! Noticed in the buffer pool\n"
|
||||||
|
"InnoDB: after posting and flushing the doublewrite buffer.\n"
|
||||||
|
"InnoDB: Page buf fix count %lu, io fix %lu, state %lu\n",
|
||||||
|
(ulong)block->buf_fix_count, (ulong)block->io_fix,
|
||||||
|
(ulong)block->state);
|
||||||
|
}
|
||||||
ut_a(block->state == BUF_BLOCK_FILE_PAGE);
|
ut_a(block->state == BUF_BLOCK_FILE_PAGE);
|
||||||
|
|
||||||
fil_io(OS_FILE_WRITE | OS_AIO_SIMULATED_WAKE_LATER,
|
fil_io(OS_FILE_WRITE | OS_AIO_SIMULATED_WAKE_LATER,
|
||||||
|
@ -32,6 +32,7 @@ static
|
|||||||
dtuple_t*
|
dtuple_t*
|
||||||
dict_create_sys_tables_tuple(
|
dict_create_sys_tables_tuple(
|
||||||
/*=========================*/
|
/*=========================*/
|
||||||
|
/* out: the tuple which should be inserted */
|
||||||
dict_table_t* table, /* in: table */
|
dict_table_t* table, /* in: table */
|
||||||
mem_heap_t* heap) /* in: memory heap from which the memory for
|
mem_heap_t* heap) /* in: memory heap from which the memory for
|
||||||
the built tuple is allocated */
|
the built tuple is allocated */
|
||||||
|
@ -682,6 +682,7 @@ dict_init(void)
|
|||||||
rw_lock_set_level(&dict_operation_lock, SYNC_DICT_OPERATION);
|
rw_lock_set_level(&dict_operation_lock, SYNC_DICT_OPERATION);
|
||||||
|
|
||||||
dict_foreign_err_file = os_file_create_tmpfile();
|
dict_foreign_err_file = os_file_create_tmpfile();
|
||||||
|
ut_a(dict_foreign_err_file);
|
||||||
mutex_create(&dict_foreign_err_mutex);
|
mutex_create(&dict_foreign_err_mutex);
|
||||||
mutex_set_level(&dict_foreign_err_mutex, SYNC_ANY_LATCH);
|
mutex_set_level(&dict_foreign_err_mutex, SYNC_ANY_LATCH);
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,8 @@ dyn_array_open(
|
|||||||
/*===========*/
|
/*===========*/
|
||||||
/* out: pointer to the buffer */
|
/* out: pointer to the buffer */
|
||||||
dyn_array_t* arr, /* in: dynamic array */
|
dyn_array_t* arr, /* in: dynamic array */
|
||||||
ulint size); /* in: size in bytes of the buffer */
|
ulint size); /* in: size in bytes of the buffer; MUST be
|
||||||
|
smaller than DYN_ARRAY_DATA_SIZE! */
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
Closes the buffer returned by dyn_array_open. */
|
Closes the buffer returned by dyn_array_open. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
|
@ -111,7 +111,8 @@ mlog_open(
|
|||||||
/*======*/
|
/*======*/
|
||||||
/* out: buffer, NULL if log mode MTR_LOG_NONE */
|
/* out: buffer, NULL if log mode MTR_LOG_NONE */
|
||||||
mtr_t* mtr, /* in: mtr */
|
mtr_t* mtr, /* in: mtr */
|
||||||
ulint size); /* in: buffer size in bytes */
|
ulint size); /* in: buffer size in bytes; MUST be
|
||||||
|
smaller than DYN_ARRAY_DATA_SIZE! */
|
||||||
/************************************************************
|
/************************************************************
|
||||||
Closes a buffer opened to mlog. */
|
Closes a buffer opened to mlog. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
|
@ -18,7 +18,8 @@ mlog_open(
|
|||||||
/*======*/
|
/*======*/
|
||||||
/* out: buffer, NULL if log mode MTR_LOG_NONE */
|
/* out: buffer, NULL if log mode MTR_LOG_NONE */
|
||||||
mtr_t* mtr, /* in: mtr */
|
mtr_t* mtr, /* in: mtr */
|
||||||
ulint size) /* in: buffer size in bytes */
|
ulint size) /* in: buffer size in bytes; MUST be
|
||||||
|
smaller than DYN_ARRAY_DATA_SIZE! */
|
||||||
{
|
{
|
||||||
dyn_array_t* mlog;
|
dyn_array_t* mlog;
|
||||||
|
|
||||||
|
@ -169,12 +169,12 @@ void
|
|||||||
os_io_init_simple(void);
|
os_io_init_simple(void);
|
||||||
/*===================*/
|
/*===================*/
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
Creates a temporary file. In case of error, causes abnormal termination. */
|
Creates a temporary file. */
|
||||||
|
|
||||||
FILE*
|
FILE*
|
||||||
os_file_create_tmpfile(void);
|
os_file_create_tmpfile(void);
|
||||||
/*========================*/
|
/*========================*/
|
||||||
/* out: temporary file handle (never NULL) */
|
/* out: temporary file handle (never NULL) */
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
The os_file_opendir() function opens a directory stream corresponding to the
|
The os_file_opendir() function opens a directory stream corresponding to the
|
||||||
directory named by the dirname argument. The directory stream is positioned
|
directory named by the dirname argument. The directory stream is positioned
|
||||||
|
@ -479,7 +479,20 @@ page_rec_get_next(
|
|||||||
|
|
||||||
offs = rec_get_next_offs(rec);
|
offs = rec_get_next_offs(rec);
|
||||||
|
|
||||||
ut_a(offs < UNIV_PAGE_SIZE);
|
if (offs >= UNIV_PAGE_SIZE) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"InnoDB: Next record offset is nonsensical %lu in record at offset %lu\n",
|
||||||
|
(ulong)offs, (ulong)(rec - page));
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nInnoDB: rec address %lx, first buffer frame %lx\n"
|
||||||
|
"InnoDB: buffer pool high end %lx, buf fix count %lu\n",
|
||||||
|
(ulong)rec, (ulong)buf_pool->frame_zero,
|
||||||
|
(ulong)buf_pool->high_end,
|
||||||
|
(ulong)buf_block_align(rec)->buf_fix_count);
|
||||||
|
buf_page_print(page);
|
||||||
|
|
||||||
|
ut_a(0);
|
||||||
|
}
|
||||||
|
|
||||||
if (offs == 0) {
|
if (offs == 0) {
|
||||||
|
|
||||||
|
@ -99,6 +99,8 @@ extern lint srv_conc_n_threads;
|
|||||||
|
|
||||||
extern ibool srv_fast_shutdown;
|
extern ibool srv_fast_shutdown;
|
||||||
|
|
||||||
|
extern ibool srv_innodb_status;
|
||||||
|
|
||||||
extern ibool srv_use_doublewrite_buf;
|
extern ibool srv_use_doublewrite_buf;
|
||||||
|
|
||||||
extern ibool srv_set_thread_priorities;
|
extern ibool srv_set_thread_priorities;
|
||||||
|
@ -64,15 +64,17 @@ innobase_start_or_create_for_mysql(void);
|
|||||||
/* out: DB_SUCCESS or error code */
|
/* out: DB_SUCCESS or error code */
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
Shuts down the Innobase database. */
|
Shuts down the Innobase database. */
|
||||||
|
|
||||||
int
|
int
|
||||||
innobase_shutdown_for_mysql(void);
|
innobase_shutdown_for_mysql(void);
|
||||||
/*=============================*/
|
/*=============================*/
|
||||||
/* out: DB_SUCCESS or error code */
|
/* out: DB_SUCCESS or error code */
|
||||||
|
|
||||||
extern dulint srv_shutdown_lsn;
|
extern dulint srv_shutdown_lsn;
|
||||||
extern dulint srv_start_lsn;
|
extern dulint srv_start_lsn;
|
||||||
|
|
||||||
|
#ifdef __NETWARE__
|
||||||
|
void set_panic_flag_for_netware(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
extern ulint srv_sizeof_trx_t_in_ha_innodb_cc;
|
extern ulint srv_sizeof_trx_t_in_ha_innodb_cc;
|
||||||
|
|
||||||
extern ibool srv_is_being_started;
|
extern ibool srv_is_being_started;
|
||||||
|
@ -22,7 +22,38 @@ extern ulint* ut_dbg_null_ptr;
|
|||||||
extern const char* ut_dbg_msg_assert_fail;
|
extern const char* ut_dbg_msg_assert_fail;
|
||||||
extern const char* ut_dbg_msg_trap;
|
extern const char* ut_dbg_msg_trap;
|
||||||
extern const char* ut_dbg_msg_stop;
|
extern const char* ut_dbg_msg_stop;
|
||||||
|
/* Have a graceful exit on NetWare rather than a segfault to avoid abends */
|
||||||
|
#ifdef __NETWARE__
|
||||||
|
extern ibool panic_shutdown;
|
||||||
|
#define ut_a(EXPR) do {\
|
||||||
|
if (!((ulint)(EXPR) + ut_dbg_zero)) {\
|
||||||
|
ut_print_timestamp(stderr);\
|
||||||
|
fprintf(stderr, ut_dbg_msg_assert_fail,\
|
||||||
|
os_thread_pf(os_thread_get_curr_id()), __FILE__,\
|
||||||
|
(ulint)__LINE__);\
|
||||||
|
fputs("InnoDB: Failing assertion: " #EXPR "\n", stderr);\
|
||||||
|
fputs(ut_dbg_msg_trap, stderr);\
|
||||||
|
ut_dbg_stop_threads = TRUE;\
|
||||||
|
if (ut_dbg_stop_threads) {\
|
||||||
|
fprintf(stderr, ut_dbg_msg_stop,\
|
||||||
|
os_thread_pf(os_thread_get_curr_id()), __FILE__, (ulint)__LINE__);\
|
||||||
|
}\
|
||||||
|
if(!panic_shutdown){\
|
||||||
|
panic_shutdown = TRUE;\
|
||||||
|
innobase_shutdown_for_mysql();}\
|
||||||
|
exit(1);\
|
||||||
|
}\
|
||||||
|
} while (0)
|
||||||
|
#define ut_error do {\
|
||||||
|
ut_print_timestamp(stderr);\
|
||||||
|
fprintf(stderr, ut_dbg_msg_assert_fail,\
|
||||||
|
os_thread_pf(os_thread_get_curr_id()), __FILE__, (ulint)__LINE__);\
|
||||||
|
fprintf(stderr, ut_dbg_msg_trap);\
|
||||||
|
ut_dbg_stop_threads = TRUE;\
|
||||||
|
if(!panic_shutdown){panic_shutdown = TRUE;\
|
||||||
|
innobase_shutdown_for_mysql();}\
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
#define ut_a(EXPR) do {\
|
#define ut_a(EXPR) do {\
|
||||||
if (!((ulint)(EXPR) + ut_dbg_zero)) {\
|
if (!((ulint)(EXPR) + ut_dbg_zero)) {\
|
||||||
ut_print_timestamp(stderr);\
|
ut_print_timestamp(stderr);\
|
||||||
@ -49,6 +80,7 @@ extern const char* ut_dbg_msg_stop;
|
|||||||
ut_dbg_stop_threads = TRUE;\
|
ut_dbg_stop_threads = TRUE;\
|
||||||
if (*(ut_dbg_null_ptr)) ut_dbg_null_ptr = NULL;\
|
if (*(ut_dbg_null_ptr)) ut_dbg_null_ptr = NULL;\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
#define ut_ad(EXPR) ut_a(EXPR)
|
#define ut_ad(EXPR) ut_a(EXPR)
|
||||||
|
@ -509,6 +509,7 @@ lock_sys_create(
|
|||||||
/* hash_create_mutexes(lock_sys->rec_hash, 2, SYNC_REC_LOCK); */
|
/* hash_create_mutexes(lock_sys->rec_hash, 2, SYNC_REC_LOCK); */
|
||||||
|
|
||||||
lock_latest_err_file = os_file_create_tmpfile();
|
lock_latest_err_file = os_file_create_tmpfile();
|
||||||
|
ut_a(lock_latest_err_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -478,22 +478,72 @@ os_io_init_simple(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef UNIV_HOTBACKUP
|
||||||
|
/*************************************************************************
|
||||||
|
Creates a temporary file. This function is defined in ha_innodb.cc. */
|
||||||
|
|
||||||
|
int
|
||||||
|
innobase_mysql_tmpfile(void);
|
||||||
|
/*========================*/
|
||||||
|
/* out: temporary file descriptor, or < 0 on error */
|
||||||
|
#endif /* !UNIV_HOTBACKUP */
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
Creates a temporary file. In case of error, causes abnormal termination. */
|
Creates a temporary file. */
|
||||||
|
|
||||||
FILE*
|
FILE*
|
||||||
os_file_create_tmpfile(void)
|
os_file_create_tmpfile(void)
|
||||||
/*========================*/
|
/*========================*/
|
||||||
/* out: temporary file handle (never NULL) */
|
/* out: temporary file handle, or NULL on error */
|
||||||
{
|
{
|
||||||
FILE* file = tmpfile();
|
FILE* file = NULL;
|
||||||
if (file == NULL) {
|
int fd = -1;
|
||||||
|
#ifdef UNIV_HOTBACKUP
|
||||||
|
int tries;
|
||||||
|
for (tries = 10; tries--; ) {
|
||||||
|
char* name = tempnam(fil_path_to_mysql_datadir, "ib");
|
||||||
|
if (!name) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = open(name,
|
||||||
|
# ifdef __WIN__
|
||||||
|
O_SEQUENTIAL | O_SHORT_LIVED | O_TEMPORARY |
|
||||||
|
# endif /* __WIN__ */
|
||||||
|
O_CREAT | O_EXCL | O_RDWR,
|
||||||
|
S_IREAD | S_IWRITE);
|
||||||
|
if (fd >= 0) {
|
||||||
|
# ifndef __WIN__
|
||||||
|
unlink(name);
|
||||||
|
# endif /* !__WIN__ */
|
||||||
|
free(name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
fputs(" InnoDB: Error: unable to create temporary file\n",
|
fprintf(stderr, " InnoDB: Warning: "
|
||||||
stderr);
|
"unable to create temporary file %s, retrying\n",
|
||||||
os_file_handle_error(NULL, "tmpfile");
|
name);
|
||||||
ut_error;
|
free(name);
|
||||||
}
|
}
|
||||||
|
#else /* UNIV_HOTBACKUP */
|
||||||
|
fd = innobase_mysql_tmpfile();
|
||||||
|
#endif /* UNIV_HOTBACKUP */
|
||||||
|
|
||||||
|
if (fd >= 0) {
|
||||||
|
file = fdopen(fd, "w+b");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file) {
|
||||||
|
ut_print_timestamp(stderr);
|
||||||
|
fprintf(stderr,
|
||||||
|
" InnoDB: Error: unable to create temporary file;"
|
||||||
|
" errno: %d\n", errno);
|
||||||
|
if (fd >= 0) {
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return(file);
|
return(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3623,6 +3673,9 @@ consecutive_loop:
|
|||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" InnoDB: ERROR: The page to be written seems corrupt!\n");
|
" InnoDB: ERROR: The page to be written seems corrupt!\n");
|
||||||
|
fprintf(stderr,
|
||||||
|
"InnoDB: Writing a block of %lu bytes, currently writing at offset %lu\n",
|
||||||
|
(ulong)total_len, (ulong)len2);
|
||||||
buf_page_print(combined_buf + len2);
|
buf_page_print(combined_buf + len2);
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: ERROR: The page to be written seems corrupt!\n");
|
"InnoDB: ERROR: The page to be written seems corrupt!\n");
|
||||||
|
@ -3010,6 +3010,30 @@ row_rename_table_for_mysql(
|
|||||||
NULL);
|
NULL);
|
||||||
trx->error_state = DB_SUCCESS;
|
trx->error_state = DB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
err = dict_load_foreigns(new_name);
|
||||||
|
|
||||||
|
if (err != DB_SUCCESS) {
|
||||||
|
|
||||||
|
ut_print_timestamp(stderr);
|
||||||
|
|
||||||
|
fputs(
|
||||||
|
" InnoDB: Error: in RENAME TABLE table ",
|
||||||
|
stderr);
|
||||||
|
ut_print_name(stderr, new_name);
|
||||||
|
fputs("\n"
|
||||||
|
"InnoDB: is referenced in foreign key constraints\n"
|
||||||
|
"InnoDB: which are not compatible with the new table definition.\n",
|
||||||
|
stderr);
|
||||||
|
|
||||||
|
ut_a(dict_table_rename_in_cache(table,
|
||||||
|
old_name, FALSE));
|
||||||
|
|
||||||
|
trx->error_state = DB_SUCCESS;
|
||||||
|
trx_general_rollback_for_mysql(trx, FALSE,
|
||||||
|
NULL);
|
||||||
|
trx->error_state = DB_SUCCESS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
funct_exit:
|
funct_exit:
|
||||||
|
@ -3224,8 +3224,15 @@ rec_loop:
|
|||||||
|
|
||||||
if (srv_force_recovery == 0 || moves_up == FALSE) {
|
if (srv_force_recovery == 0 || moves_up == FALSE) {
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
|
buf_page_print(buf_frame_align(rec));
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" InnoDB: Index corruption: rec offs %lu next offs %lu, page no %lu,\n"
|
"\nInnoDB: rec address %lx, first buffer frame %lx\n"
|
||||||
|
"InnoDB: buffer pool high end %lx, buf block fix count %lu\n",
|
||||||
|
(ulong)rec, (ulong)buf_pool->frame_zero,
|
||||||
|
(ulong)buf_pool->high_end,
|
||||||
|
(ulong)buf_block_align(rec)->buf_fix_count);
|
||||||
|
fprintf(stderr,
|
||||||
|
"InnoDB: Index corruption: rec offs %lu next offs %lu, page no %lu,\n"
|
||||||
"InnoDB: ",
|
"InnoDB: ",
|
||||||
(ulong) (rec - buf_frame_align(rec)),
|
(ulong) (rec - buf_frame_align(rec)),
|
||||||
(ulong) next_offs,
|
(ulong) next_offs,
|
||||||
|
@ -242,6 +242,9 @@ merge to completion before shutdown */
|
|||||||
|
|
||||||
ibool srv_fast_shutdown = FALSE;
|
ibool srv_fast_shutdown = FALSE;
|
||||||
|
|
||||||
|
/* Generate a innodb_status.<pid> file */
|
||||||
|
ibool srv_innodb_status = FALSE;
|
||||||
|
|
||||||
ibool srv_use_doublewrite_buf = TRUE;
|
ibool srv_use_doublewrite_buf = TRUE;
|
||||||
|
|
||||||
ibool srv_set_thread_priorities = TRUE;
|
ibool srv_set_thread_priorities = TRUE;
|
||||||
|
@ -1112,16 +1112,24 @@ NetWare. */
|
|||||||
|
|
||||||
mutex_create(&srv_monitor_file_mutex);
|
mutex_create(&srv_monitor_file_mutex);
|
||||||
mutex_set_level(&srv_monitor_file_mutex, SYNC_NO_ORDER_CHECK);
|
mutex_set_level(&srv_monitor_file_mutex, SYNC_NO_ORDER_CHECK);
|
||||||
srv_monitor_file_name = mem_alloc(
|
if (srv_innodb_status) {
|
||||||
strlen(fil_path_to_mysql_datadir) +
|
srv_monitor_file_name = mem_alloc(
|
||||||
20 + sizeof "/innodb_status.");
|
strlen(fil_path_to_mysql_datadir) +
|
||||||
sprintf(srv_monitor_file_name, "%s/innodb_status.%lu",
|
20 + sizeof "/innodb_status.");
|
||||||
fil_path_to_mysql_datadir, os_proc_get_number());
|
sprintf(srv_monitor_file_name, "%s/innodb_status.%lu",
|
||||||
srv_monitor_file = fopen(srv_monitor_file_name, "w+");
|
fil_path_to_mysql_datadir, os_proc_get_number());
|
||||||
if (!srv_monitor_file) {
|
srv_monitor_file = fopen(srv_monitor_file_name, "w+");
|
||||||
fprintf(stderr, "InnoDB: unable to create %s: %s\n",
|
if (!srv_monitor_file) {
|
||||||
srv_monitor_file_name, strerror(errno));
|
fprintf(stderr, "InnoDB: unable to create %s: %s\n",
|
||||||
return(DB_ERROR);
|
srv_monitor_file_name, strerror(errno));
|
||||||
|
return(DB_ERROR);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
srv_monitor_file_name = NULL;
|
||||||
|
srv_monitor_file = os_file_create_tmpfile();
|
||||||
|
if (!srv_monitor_file) {
|
||||||
|
return(DB_ERROR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restrict the maximum number of file i/o threads */
|
/* Restrict the maximum number of file i/o threads */
|
||||||
@ -1177,6 +1185,7 @@ NetWare. */
|
|||||||
|
|
||||||
for (i = 0; i < srv_n_file_io_threads; i++) {
|
for (i = 0; i < srv_n_file_io_threads; i++) {
|
||||||
n[i] = i;
|
n[i] = i;
|
||||||
|
|
||||||
os_thread_create(io_handler_thread, n + i, thread_ids + i);
|
os_thread_create(io_handler_thread, n + i, thread_ids + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1606,7 +1615,9 @@ innobase_shutdown_for_mysql(void)
|
|||||||
/* out: DB_SUCCESS or error code */
|
/* out: DB_SUCCESS or error code */
|
||||||
{
|
{
|
||||||
ulint i;
|
ulint i;
|
||||||
|
#ifdef __NETWARE__
|
||||||
|
extern ibool panic_shutdown;
|
||||||
|
#endif
|
||||||
if (!srv_was_started) {
|
if (!srv_was_started) {
|
||||||
if (srv_is_being_started) {
|
if (srv_is_being_started) {
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
@ -1623,8 +1634,11 @@ innobase_shutdown_for_mysql(void)
|
|||||||
The step 1 is the real InnoDB shutdown. The remaining steps 2 - ...
|
The step 1 is the real InnoDB shutdown. The remaining steps 2 - ...
|
||||||
just free data structures after the shutdown. */
|
just free data structures after the shutdown. */
|
||||||
|
|
||||||
|
#ifdef __NETWARE__
|
||||||
|
if(!panic_shutdown)
|
||||||
|
#endif
|
||||||
logs_empty_and_mark_files_at_shutdown();
|
logs_empty_and_mark_files_at_shutdown();
|
||||||
|
|
||||||
if (srv_conc_n_threads != 0) {
|
if (srv_conc_n_threads != 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Warning: query counter shows %ld queries still\n"
|
"InnoDB: Warning: query counter shows %ld queries still\n"
|
||||||
@ -1687,15 +1701,16 @@ innobase_shutdown_for_mysql(void)
|
|||||||
if (srv_monitor_file) {
|
if (srv_monitor_file) {
|
||||||
fclose(srv_monitor_file);
|
fclose(srv_monitor_file);
|
||||||
srv_monitor_file = 0;
|
srv_monitor_file = 0;
|
||||||
unlink(srv_monitor_file_name);
|
if (srv_monitor_file_name) {
|
||||||
mem_free(srv_monitor_file_name);
|
unlink(srv_monitor_file_name);
|
||||||
|
mem_free(srv_monitor_file_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_free(&srv_monitor_file_mutex);
|
mutex_free(&srv_monitor_file_mutex);
|
||||||
|
|
||||||
/* 3. Free all InnoDB's own mutexes and the os_fast_mutexes inside
|
/* 3. Free all InnoDB's own mutexes and the os_fast_mutexes inside
|
||||||
them */
|
them */
|
||||||
|
|
||||||
sync_close();
|
sync_close();
|
||||||
|
|
||||||
/* 4. Free the os_conc_mutex and all os_events and os_mutexes */
|
/* 4. Free the os_conc_mutex and all os_events and os_mutexes */
|
||||||
@ -1706,7 +1721,7 @@ innobase_shutdown_for_mysql(void)
|
|||||||
/* 5. Free all allocated memory and the os_fast_mutex created in
|
/* 5. Free all allocated memory and the os_fast_mutex created in
|
||||||
ut0mem.c */
|
ut0mem.c */
|
||||||
|
|
||||||
ut_free_all_mem();
|
ut_free_all_mem();
|
||||||
|
|
||||||
if (os_thread_count != 0
|
if (os_thread_count != 0
|
||||||
|| os_event_count != 0
|
|| os_event_count != 0
|
||||||
@ -1736,3 +1751,11 @@ innobase_shutdown_for_mysql(void)
|
|||||||
|
|
||||||
return((int) DB_SUCCESS);
|
return((int) DB_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __NETWARE__
|
||||||
|
void set_panic_flag_for_netware()
|
||||||
|
{
|
||||||
|
extern ibool panic_shutdown;
|
||||||
|
panic_shutdown = TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -14,7 +14,12 @@ ulint ut_dbg_zero = 0;
|
|||||||
/* If this is set to TRUE all threads will stop into the next assertion
|
/* If this is set to TRUE all threads will stop into the next assertion
|
||||||
and assert */
|
and assert */
|
||||||
ibool ut_dbg_stop_threads = FALSE;
|
ibool ut_dbg_stop_threads = FALSE;
|
||||||
|
#ifdef __NETWARE__
|
||||||
|
ibool panic_shutdown = FALSE; /* This is set to TRUE when on NetWare there
|
||||||
|
happens an InnoDB assertion failure or other
|
||||||
|
fatal error condition that requires an
|
||||||
|
immediate shutdown. */
|
||||||
|
#endif
|
||||||
/* Null pointer used to generate memory trap */
|
/* Null pointer used to generate memory trap */
|
||||||
|
|
||||||
ulint* ut_dbg_null_ptr = NULL;
|
ulint* ut_dbg_null_ptr = NULL;
|
||||||
|
@ -107,7 +107,13 @@ ut_malloc_low(
|
|||||||
|
|
||||||
/* Make an intentional seg fault so that we get a stack
|
/* Make an intentional seg fault so that we get a stack
|
||||||
trace */
|
trace */
|
||||||
|
/* Intentional segfault on NetWare causes an abend. Avoid this
|
||||||
|
by graceful exit handling in ut_a(). */
|
||||||
|
#if (!defined __NETWARE__)
|
||||||
if (*ut_mem_null_ptr) ut_mem_null_ptr = 0;
|
if (*ut_mem_null_ptr) ut_mem_null_ptr = 0;
|
||||||
|
#else
|
||||||
|
ut_a(0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set_to_zero) {
|
if (set_to_zero) {
|
||||||
|
@ -43,7 +43,7 @@ mkdirprog="${MKDIRPROG-mkdir}"
|
|||||||
|
|
||||||
transformbasename=""
|
transformbasename=""
|
||||||
transform_arg=""
|
transform_arg=""
|
||||||
instcmd="$mvprog"
|
instcmd="$cpprog"
|
||||||
chmodcmd="$chmodprog 0755"
|
chmodcmd="$chmodprog 0755"
|
||||||
chowncmd=""
|
chowncmd=""
|
||||||
chgrpcmd=""
|
chgrpcmd=""
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
# Copyright (C) 2000-2004 MySQL AB
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# modify it under the terms of the GNU Library General Public
|
# it under the terms of version 2 GNU General Public License as
|
||||||
# License as published by the Free Software Foundation; either
|
# published by the Free Software Foundation.
|
||||||
# version 2 of the License, or (at your option) any later version.
|
#
|
||||||
|
# There are special exceptions to the terms and conditions of the GPL as it
|
||||||
|
# is applied to this software. View the full text of the exception in file
|
||||||
|
# EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
#
|
#
|
||||||
# This library is distributed in the hope that it will be useful,
|
# This library is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
@ -14,7 +17,7 @@
|
|||||||
# License along with this library; if not, write to the Free
|
# License along with this library; if not, write to the Free
|
||||||
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
# MA 02111-1307, USA
|
# MA 02111-1307, USA
|
||||||
|
#
|
||||||
# This file is public domain and comes with NO WARRANTY of any kind
|
# This file is public domain and comes with NO WARRANTY of any kind
|
||||||
|
|
||||||
target = libmysqlclient.la
|
target = libmysqlclient.la
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
## Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
# Copyright (C) 2000-2004 MySQL AB
|
||||||
##
|
#
|
||||||
## This library is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or modify
|
||||||
## modify it under the terms of the GNU Library General Public
|
# it under the terms of version 2 GNU General Public License as
|
||||||
## License as published by the Free Software Foundation; either
|
# published by the Free Software Foundation.
|
||||||
## version 2 of the License, or (at your option) any later version.
|
#
|
||||||
##
|
# There are special exceptions to the terms and conditions of the GPL as it
|
||||||
## This library is distributed in the hope that it will be useful,
|
# is applied to this software. View the full text of the exception in file
|
||||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
#
|
||||||
## Library General Public License for more details.
|
# This library is distributed in the hope that it will be useful,
|
||||||
##
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
## You should have received a copy of the GNU Library General Public
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
## License along with this library; if not, write to the Free
|
# Library General Public License for more details.
|
||||||
## Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
#
|
||||||
## MA 02111-1307, USA
|
# You should have received a copy of the GNU Library General Public
|
||||||
##
|
# License along with this library; if not, write to the Free
|
||||||
## This file is public domain and comes with NO WARRANTY of any kind
|
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
# MA 02111-1307, USA
|
||||||
|
#
|
||||||
|
# This file is public domain and comes with NO WARRANTY of any kind
|
||||||
|
|
||||||
MYSQLDATAdir = $(localstatedir)
|
MYSQLDATAdir = $(localstatedir)
|
||||||
MYSQLSHAREdir = $(pkgdatadir)
|
MYSQLSHAREdir = $(pkgdatadir)
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB
|
/* Copyright (C) 2000-2004 MySQL AB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
the Free Software Foundation.
|
||||||
(at your option) any later version.
|
|
||||||
|
There are special exceptions to the terms and conditions of the GPL as it
|
||||||
|
is applied to this software. View the full text of the exception in file
|
||||||
|
EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB
|
/* Copyright (C) 2000-2004 MySQL AB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
the Free Software Foundation.
|
||||||
(at your option) any later version.
|
|
||||||
|
There are special exceptions to the terms and conditions of the GPL as it
|
||||||
|
is applied to this software. View the full text of the exception in file
|
||||||
|
EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB
|
/* Copyright (C) 2000-2004 MySQL AB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
the Free Software Foundation.
|
||||||
(at your option) any later version.
|
|
||||||
|
There are special exceptions to the terms and conditions of the GPL as it
|
||||||
|
is applied to this software. View the full text of the exception in file
|
||||||
|
EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
/* Copyright (C) 2000-2003 MySQL AB
|
/* Copyright (C) 2000-2004 MySQL AB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
the Free Software Foundation.
|
||||||
(at your option) any later version.
|
|
||||||
|
There are special exceptions to the terms and conditions of the GPL as it
|
||||||
|
is applied to this software. View the full text of the exception in file
|
||||||
|
EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
/* Copyright (C) 2000-2003 MySQL AB
|
/* Copyright (C) 2000-2004 MySQL AB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
the Free Software Foundation.
|
||||||
(at your option) any later version.
|
|
||||||
|
There are special exceptions to the terms and conditions of the GPL as it
|
||||||
|
is applied to this software. View the full text of the exception in file
|
||||||
|
EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB
|
/* Copyright (C) 2000-2004 MySQL AB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
the Free Software Foundation.
|
||||||
(at your option) any later version.
|
|
||||||
|
There are special exceptions to the terms and conditions of the GPL as it
|
||||||
|
is applied to this software. View the full text of the exception in file
|
||||||
|
EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
# Copyright (C) 2000-2004 MySQL AB
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# modify it under the terms of the GNU Library General Public
|
# it under the terms of version 2 GNU General Public License as
|
||||||
# License as published by the Free Software Foundation; either
|
# published by the Free Software Foundation.
|
||||||
# version 2 of the License, or (at your option) any later version.
|
#
|
||||||
|
# There are special exceptions to the terms and conditions of the GPL as it
|
||||||
|
# is applied to this software. View the full text of the exception in file
|
||||||
|
# EXCEPTIONS-CLIENT in the directory of this software distribution.
|
||||||
#
|
#
|
||||||
# This library is distributed in the hope that it will be useful,
|
# This library is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
@ -14,8 +17,8 @@
|
|||||||
# License along with this library; if not, write to the Free
|
# License along with this library; if not, write to the Free
|
||||||
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
# MA 02111-1307, USA
|
# MA 02111-1307, USA
|
||||||
|
#
|
||||||
|
# This file is public domain and comes with NO WARRANTY of any kind
|
||||||
|
|
||||||
target = libmysqlclient_r.la
|
target = libmysqlclient_r.la
|
||||||
target_defs = -DDONT_USE_RAID -DMYSQL_CLIENT @LIB_EXTRA_CCFLAGS@
|
target_defs = -DDONT_USE_RAID -DMYSQL_CLIENT @LIB_EXTRA_CCFLAGS@
|
||||||
|
@ -23,7 +23,7 @@ man_MANS = mysql.1 isamchk.1 isamlog.1 mysql_zap.1 mysqlaccess.1 \
|
|||||||
|
|
||||||
EXTRA_DIST = mysql.1.in isamchk.1.in isamlog.1.in mysql_zap.1.in \
|
EXTRA_DIST = mysql.1.in isamchk.1.in isamlog.1.in mysql_zap.1.in \
|
||||||
mysqlaccess.1.in mysqladmin.1.in mysqld.1.in mysqld_multi.1.in \
|
mysqlaccess.1.in mysqladmin.1.in mysqld.1.in mysqld_multi.1.in \
|
||||||
mysqldump.1.in mysqlshow.1.in perror.1.in replace.1.in \
|
mysqldump.1.in mysqlshow.1.in perror.1.in replace.1.in mysqlman.1.in \
|
||||||
mysqld_safe.1.in mysql_fix_privilege_tables.1.in
|
mysqld_safe.1.in mysql_fix_privilege_tables.1.in
|
||||||
|
|
||||||
CLEANFILES = $(man_MANS)
|
CLEANFILES = $(man_MANS)
|
||||||
|
15
man/mysqlman.1.in
Normal file
15
man/mysqlman.1.in
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
.TH mysqlman 1 "20 July 2004" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
|
||||||
|
.SH NAME
|
||||||
|
mysqlman \- default man page for mysql
|
||||||
|
.SH "DESCRIPTION"
|
||||||
|
Certain executables distributed with the MySQL database management system do
|
||||||
|
not have specific man pages.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
In most cases, you can run the executable from the command line with a "--help"
|
||||||
|
argument to display a brief summary of the executable's arguments and function.
|
||||||
|
For more information about MySQL, please refer to the MySQL reference manual,
|
||||||
|
which may already be installed locally and which is also available online at
|
||||||
|
http://dev.mysql.com/doc/
|
||||||
|
.SH BUGS
|
||||||
|
Please refer to http://bugs.mysql.com/ to report bugs.
|
||||||
|
.\" end of man page
|
@ -212,6 +212,8 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old,
|
|||||||
if (!(*key++= (char) 1-*old++)) /* Copy null marker */
|
if (!(*key++= (char) 1-*old++)) /* Copy null marker */
|
||||||
{
|
{
|
||||||
k_length-=length;
|
k_length-=length;
|
||||||
|
if (keyseg->flag & (HA_VAR_LENGTH | HA_BLOB_PART))
|
||||||
|
k_length-=2; /* Skip length */
|
||||||
continue; /* Found NULL */
|
continue; /* Found NULL */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,8 +63,8 @@ int _mi_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
uchar *keypos,*maxpos;
|
uchar *keypos,*maxpos;
|
||||||
uchar lastkey[MI_MAX_KEY_BUFF],*buff;
|
uchar lastkey[MI_MAX_KEY_BUFF],*buff;
|
||||||
DBUG_ENTER("_mi_search");
|
DBUG_ENTER("_mi_search");
|
||||||
DBUG_PRINT("enter",("pos: %ld nextflag: %d lastpos: %ld",
|
DBUG_PRINT("enter",("pos: %lu nextflag: %u lastpos: %lu",
|
||||||
pos,nextflag,info->lastpos));
|
(ulong) pos, nextflag, (ulong) info->lastpos));
|
||||||
DBUG_EXECUTE("key",_mi_print_key(DBUG_FILE,keyinfo->seg,key,key_len););
|
DBUG_EXECUTE("key",_mi_print_key(DBUG_FILE,keyinfo->seg,key,key_len););
|
||||||
|
|
||||||
if (pos == HA_OFFSET_ERROR)
|
if (pos == HA_OFFSET_ERROR)
|
||||||
@ -235,15 +235,15 @@ int _mi_seq_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
|
|||||||
if (length == 0 || page > end)
|
if (length == 0 || page > end)
|
||||||
{
|
{
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
DBUG_PRINT("error",("Found wrong key: length: %d page: %lx end: %lx",
|
DBUG_PRINT("error",("Found wrong key: length: %u page: %p end: %p",
|
||||||
length,page,end));
|
length, page, end));
|
||||||
DBUG_RETURN(MI_FOUND_WRONG_KEY);
|
DBUG_RETURN(MI_FOUND_WRONG_KEY);
|
||||||
}
|
}
|
||||||
if ((flag=ha_key_cmp(keyinfo->seg,t_buff,key,key_len,comp_flag,
|
if ((flag=ha_key_cmp(keyinfo->seg,t_buff,key,key_len,comp_flag,
|
||||||
¬_used)) >= 0)
|
¬_used)) >= 0)
|
||||||
break;
|
break;
|
||||||
#ifdef EXTRA_DEBUG
|
#ifdef EXTRA_DEBUG
|
||||||
DBUG_PRINT("loop",("page: %lx key: '%s' flag: %d",page,t_buff,flag));
|
DBUG_PRINT("loop",("page: %p key: '%s' flag: %d", page, t_buff, flag));
|
||||||
#endif
|
#endif
|
||||||
memcpy(buff,t_buff,length);
|
memcpy(buff,t_buff,length);
|
||||||
*ret_pos=page;
|
*ret_pos=page;
|
||||||
@ -251,7 +251,7 @@ int _mi_seq_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
|
|||||||
if (flag == 0)
|
if (flag == 0)
|
||||||
memcpy(buff,t_buff,length); /* Result is first key */
|
memcpy(buff,t_buff,length); /* Result is first key */
|
||||||
*last_key= page == end;
|
*last_key= page == end;
|
||||||
DBUG_PRINT("exit",("flag: %d ret_pos: %lx",flag,*ret_pos));
|
DBUG_PRINT("exit",("flag: %d ret_pos: %p", flag, *ret_pos));
|
||||||
DBUG_RETURN(flag);
|
DBUG_RETURN(flag);
|
||||||
} /* _mi_seq_search */
|
} /* _mi_seq_search */
|
||||||
|
|
||||||
@ -381,8 +381,8 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
|
|||||||
if (page > end)
|
if (page > end)
|
||||||
{
|
{
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
DBUG_PRINT("error",("Found wrong key: length: %d page: %lx end: %lx",
|
DBUG_PRINT("error",("Found wrong key: length: %u page: %p end: %p",
|
||||||
length,page,end));
|
length, page, end));
|
||||||
DBUG_RETURN(MI_FOUND_WRONG_KEY);
|
DBUG_RETURN(MI_FOUND_WRONG_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -502,7 +502,7 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
|
|||||||
|
|
||||||
*last_key= page == end;
|
*last_key= page == end;
|
||||||
|
|
||||||
DBUG_PRINT("exit",("flag: %d ret_pos: %lx",flag,*ret_pos));
|
DBUG_PRINT("exit",("flag: %d ret_pos: %p", flag, *ret_pos));
|
||||||
DBUG_RETURN(flag);
|
DBUG_RETURN(flag);
|
||||||
} /* _mi_prefix_search */
|
} /* _mi_prefix_search */
|
||||||
|
|
||||||
@ -579,7 +579,7 @@ my_off_t _mi_dpos(MI_INFO *info, uint nod_flag, uchar *after_key)
|
|||||||
after_key-=(nod_flag + info->s->rec_reflength);
|
after_key-=(nod_flag + info->s->rec_reflength);
|
||||||
switch (info->s->rec_reflength) {
|
switch (info->s->rec_reflength) {
|
||||||
#if SIZEOF_OFF_T > 4
|
#if SIZEOF_OFF_T > 4
|
||||||
case 8: pos= (my_off_t) mi_uint5korr(after_key); break;
|
case 8: pos= (my_off_t) mi_uint8korr(after_key); break;
|
||||||
case 7: pos= (my_off_t) mi_uint7korr(after_key); break;
|
case 7: pos= (my_off_t) mi_uint7korr(after_key); break;
|
||||||
case 6: pos= (my_off_t) mi_uint6korr(after_key); break;
|
case 6: pos= (my_off_t) mi_uint6korr(after_key); break;
|
||||||
case 5: pos= (my_off_t) mi_uint5korr(after_key); break;
|
case 5: pos= (my_off_t) mi_uint5korr(after_key); break;
|
||||||
@ -750,8 +750,9 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
|||||||
key+= length; /* Same diff_key as prev */
|
key+= length; /* Same diff_key as prev */
|
||||||
if (length > keyseg->length)
|
if (length > keyseg->length)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Found too long null packed key: %d of %d at %lx",
|
DBUG_PRINT("error",
|
||||||
length, keyseg->length, *page_pos));
|
("Found too long null packed key: %u of %u at %p",
|
||||||
|
length, keyseg->length, *page_pos));
|
||||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
DBUG_DUMP("key",(char*) *page_pos,16);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
return 0;
|
return 0;
|
||||||
@ -806,7 +807,7 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
|||||||
}
|
}
|
||||||
if (length > (uint) keyseg->length)
|
if (length > (uint) keyseg->length)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Found too long packed key: %d of %d at %lx",
|
DBUG_PRINT("error",("Found too long packed key: %u of %u at %p",
|
||||||
length, keyseg->length, *page_pos));
|
length, keyseg->length, *page_pos));
|
||||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
DBUG_DUMP("key",(char*) *page_pos,16);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
@ -861,7 +862,7 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
|||||||
{
|
{
|
||||||
if (length > keyinfo->maxlength)
|
if (length > keyinfo->maxlength)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Found too long binary packed key: %d of %d at %lx",
|
DBUG_PRINT("error",("Found too long binary packed key: %u of %u at %p",
|
||||||
length, keyinfo->maxlength, *page_pos));
|
length, keyinfo->maxlength, *page_pos));
|
||||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
DBUG_DUMP("key",(char*) *page_pos,16);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
@ -908,7 +909,7 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
|||||||
length-=tmp;
|
length-=tmp;
|
||||||
from=page; from_end=page_end;
|
from=page; from_end=page_end;
|
||||||
}
|
}
|
||||||
DBUG_PRINT("info",("key: %lx from: %lx length: %u",
|
DBUG_PRINT("info",("key: %p from: %p length: %u",
|
||||||
key, from, length));
|
key, from, length));
|
||||||
memcpy_overlap((byte*) key, (byte*) from, (size_t) length);
|
memcpy_overlap((byte*) key, (byte*) from, (size_t) length);
|
||||||
key+=length;
|
key+=length;
|
||||||
@ -964,7 +965,7 @@ uchar *_mi_get_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBUG_PRINT("exit",("page: %lx length: %d",page,*return_key_length));
|
DBUG_PRINT("exit",("page: %p length: %u", page, *return_key_length));
|
||||||
DBUG_RETURN(page);
|
DBUG_RETURN(page);
|
||||||
} /* _mi_get_key */
|
} /* _mi_get_key */
|
||||||
|
|
||||||
@ -1015,7 +1016,7 @@ uchar *_mi_get_last_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page,
|
|||||||
uint nod_flag;
|
uint nod_flag;
|
||||||
uchar *lastpos;
|
uchar *lastpos;
|
||||||
DBUG_ENTER("_mi_get_last_key");
|
DBUG_ENTER("_mi_get_last_key");
|
||||||
DBUG_PRINT("enter",("page: %lx endpos: %lx",page,endpos));
|
DBUG_PRINT("enter",("page: %p endpos: %p", page, endpos));
|
||||||
|
|
||||||
nod_flag=mi_test_if_nod(page);
|
nod_flag=mi_test_if_nod(page);
|
||||||
if (! (keyinfo->flag & (HA_VAR_LENGTH_KEY | HA_BINARY_PACK_KEY)))
|
if (! (keyinfo->flag & (HA_VAR_LENGTH_KEY | HA_BINARY_PACK_KEY)))
|
||||||
@ -1035,13 +1036,13 @@ uchar *_mi_get_last_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page,
|
|||||||
*return_key_length=(*keyinfo->get_key)(keyinfo,nod_flag,&page,lastkey);
|
*return_key_length=(*keyinfo->get_key)(keyinfo,nod_flag,&page,lastkey);
|
||||||
if (*return_key_length == 0)
|
if (*return_key_length == 0)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Couldn't find last key: page: %lx",page));
|
DBUG_PRINT("error",("Couldn't find last key: page: %p", page));
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBUG_PRINT("exit",("lastpos: %lx length: %d",lastpos,*return_key_length));
|
DBUG_PRINT("exit",("lastpos: %p length: %u", lastpos, *return_key_length));
|
||||||
DBUG_RETURN(lastpos);
|
DBUG_RETURN(lastpos);
|
||||||
} /* _mi_get_last_key */
|
} /* _mi_get_last_key */
|
||||||
|
|
||||||
@ -1126,8 +1127,9 @@ int _mi_search_next(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
uint nod_flag;
|
uint nod_flag;
|
||||||
uchar lastkey[MI_MAX_KEY_BUFF];
|
uchar lastkey[MI_MAX_KEY_BUFF];
|
||||||
DBUG_ENTER("_mi_search_next");
|
DBUG_ENTER("_mi_search_next");
|
||||||
DBUG_PRINT("enter",("nextflag: %d lastpos: %ld int_keypos: %lx",
|
DBUG_PRINT("enter",("nextflag: %u lastpos: %lu int_keypos: %lu",
|
||||||
nextflag,(long) info->lastpos,info->int_keypos));
|
nextflag, (ulong) info->lastpos,
|
||||||
|
(ulong) info->int_keypos));
|
||||||
DBUG_EXECUTE("key",_mi_print_key(DBUG_FILE,keyinfo->seg,key,key_length););
|
DBUG_EXECUTE("key",_mi_print_key(DBUG_FILE,keyinfo->seg,key,key_length););
|
||||||
|
|
||||||
/* Force full read if we are at last key or if we are not on a leaf
|
/* Force full read if we are at last key or if we are not on a leaf
|
||||||
@ -1234,7 +1236,7 @@ int _mi_search_first(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
info->page_changed=info->buff_used=0;
|
info->page_changed=info->buff_used=0;
|
||||||
info->lastpos=_mi_dpos(info,0,info->lastkey+info->lastkey_length);
|
info->lastpos=_mi_dpos(info,0,info->lastkey+info->lastkey_length);
|
||||||
|
|
||||||
DBUG_PRINT("exit",("found key at %ld",(ulong) info->lastpos));
|
DBUG_PRINT("exit",("found key at %lu", (ulong) info->lastpos));
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
} /* _mi_search_first */
|
} /* _mi_search_first */
|
||||||
|
|
||||||
@ -1468,8 +1470,8 @@ _mi_calc_var_pack_key_length(MI_KEYDEF *keyinfo,uint nod_flag,uchar *next_key,
|
|||||||
}
|
}
|
||||||
s_temp->totlength=(uint) length;
|
s_temp->totlength=(uint) length;
|
||||||
s_temp->prev_length=0;
|
s_temp->prev_length=0;
|
||||||
DBUG_PRINT("test",("tot_length: %d length: %d uniq_key_length: %d",
|
DBUG_PRINT("test",("tot_length: %u length: %d uniq_key_length: %u",
|
||||||
key_length,length,s_temp->key_length));
|
key_length, length, s_temp->key_length));
|
||||||
|
|
||||||
/* If something after that hasn't length=0, test if we can combine */
|
/* If something after that hasn't length=0, test if we can combine */
|
||||||
if ((s_temp->next_key_pos=next_key))
|
if ((s_temp->next_key_pos=next_key))
|
||||||
@ -1575,7 +1577,7 @@ _mi_calc_var_pack_key_length(MI_KEYDEF *keyinfo,uint nod_flag,uchar *next_key,
|
|||||||
ref_length=0;
|
ref_length=0;
|
||||||
next_length_pack=0;
|
next_length_pack=0;
|
||||||
}
|
}
|
||||||
DBUG_PRINT("test",("length: %d next_key: %lx",length,next_key));
|
DBUG_PRINT("test",("length: %d next_key: %p", length, next_key));
|
||||||
|
|
||||||
{
|
{
|
||||||
uint tmp_length;
|
uint tmp_length;
|
||||||
|
@ -62,6 +62,7 @@ install-data-local:
|
|||||||
$(INSTALL_DATA) $(srcdir)/r/*.require $(DESTDIR)$(testdir)/r
|
$(INSTALL_DATA) $(srcdir)/r/*.require $(DESTDIR)$(testdir)/r
|
||||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
||||||
|
$(INSTALL_DATA) $(srcdir)/std_data/*.*001 $(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(DESTDIR)$(testdir)/std_data
|
||||||
|
|
||||||
|
@ -612,6 +612,8 @@ show_failed_diff ()
|
|||||||
echo "Please follow the instructions outlined at"
|
echo "Please follow the instructions outlined at"
|
||||||
echo "http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html"
|
echo "http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html"
|
||||||
echo "to find the reason to this problem and how to report this."
|
echo "to find the reason to this problem and how to report this."
|
||||||
|
echo ""
|
||||||
|
echo "Test $1 failed!"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,3 +476,9 @@ alter table t1 drop key no_such_key;
|
|||||||
ERROR 42000: Can't DROP 'no_such_key'; check that column/key exists
|
ERROR 42000: Can't DROP 'no_such_key'; check that column/key exists
|
||||||
alter table t1 drop key a;
|
alter table t1 drop key a;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a int);
|
||||||
|
alter table t1 rename to `t1\\`;
|
||||||
|
Incorrect table name 't1\\'
|
||||||
|
rename table t1 to `t1\\`;
|
||||||
|
Incorrect table name 't1\\'
|
||||||
|
drop table t1;
|
||||||
|
@ -87,3 +87,43 @@ sqty
|
|||||||
5
|
5
|
||||||
9
|
9
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`id` bigint(20) NOT NULL default '0',
|
||||||
|
`description` text
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
`id` bigint(20) NOT NULL default '0',
|
||||||
|
`description` varchar(20)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES (1, 'test');
|
||||||
|
INSERT INTO t2 VALUES (1, 'test');
|
||||||
|
CREATE TABLE t3 (
|
||||||
|
`id` bigint(20) NOT NULL default '0',
|
||||||
|
`order_id` bigint(20) NOT NULL default '0'
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
select
|
||||||
|
a.id, a.description,
|
||||||
|
count(b.id) as c
|
||||||
|
from t1 a left join t3 b on a.id=b.order_id
|
||||||
|
group by a.id, a.description
|
||||||
|
having (a.description is not null) and (c=0);
|
||||||
|
id description c
|
||||||
|
1 test 0
|
||||||
|
select
|
||||||
|
a.*,
|
||||||
|
count(b.id) as c
|
||||||
|
from t2 a left join t3 b on a.id=b.order_id
|
||||||
|
group by a.id, a.description
|
||||||
|
having (a.description is not null) and (c=0);
|
||||||
|
id description c
|
||||||
|
1 test 0
|
||||||
|
INSERT INTO t1 VALUES (2, 'test2');
|
||||||
|
select
|
||||||
|
a.id, a.description,
|
||||||
|
count(b.id) as c
|
||||||
|
from t1 a left join t3 b on a.id=b.order_id
|
||||||
|
group by a.id, a.description
|
||||||
|
having (a.description is not null) and (c=0);
|
||||||
|
id description c
|
||||||
|
1 test 0
|
||||||
|
2 test2 0
|
||||||
|
@ -217,3 +217,13 @@ DELETE from t1 where a < 100;
|
|||||||
SELECT * from t1;
|
SELECT * from t1;
|
||||||
a
|
a
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE `job_titles` (
|
||||||
|
`job_title_id` int(6) unsigned NOT NULL default '0',
|
||||||
|
`job_title` char(18) NOT NULL default '',
|
||||||
|
PRIMARY KEY (`job_title_id`),
|
||||||
|
UNIQUE KEY `job_title_id` (`job_title_id`,`job_title`)
|
||||||
|
) TYPE=HEAP;
|
||||||
|
SELECT MAX(job_title_id) FROM job_titles;
|
||||||
|
MAX(job_title_id)
|
||||||
|
NULL
|
||||||
|
DROP TABLE job_titles;
|
||||||
|
@ -79,3 +79,20 @@ SELECT DATE_FORMAT(f1, "%l.%i %p") , DATE_FORMAT(f2, "%l.%i %p") FROM t1;
|
|||||||
DATE_FORMAT(f1, "%l.%i %p") DATE_FORMAT(f2, "%l.%i %p")
|
DATE_FORMAT(f1, "%l.%i %p") DATE_FORMAT(f2, "%l.%i %p")
|
||||||
9.00 AM 12.00 PM
|
9.00 AM 12.00 PM
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (f1 DATE);
|
||||||
|
CREATE TABLE t2 (f2 VARCHAR(8));
|
||||||
|
CREATE TABLE t3 (f2 CHAR(8));
|
||||||
|
INSERT INTO t1 VALUES ('1978-11-26');
|
||||||
|
INSERT INTO t2 SELECT f1+0 FROM t1;
|
||||||
|
INSERT INTO t2 SELECT f1+0 FROM t1 UNION SELECT f1+0 FROM t1;
|
||||||
|
INSERT INTO t3 SELECT f1+0 FROM t1;
|
||||||
|
INSERT INTO t3 SELECT f1+0 FROM t1 UNION SELECT f1+0 FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
f2
|
||||||
|
19781126
|
||||||
|
19781126
|
||||||
|
SELECT * FROM t3;
|
||||||
|
f2
|
||||||
|
19781126
|
||||||
|
19781126
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
@ -75,14 +75,17 @@ insert t1 values (121,"16");
|
|||||||
select c1 + c1 * (c2 / 100) as col from t1;
|
select c1 + c1 * (c2 / 100) as col from t1;
|
||||||
col
|
col
|
||||||
140.36
|
140.36
|
||||||
create table t2 select c1 + c1 * (c2 / 100) as col from t1;
|
create table t2 select c1 + c1 * (c2 / 100) as col1, round(c1, 5) as col2, round(c1, 35) as col3, sqrt(c1*1e-15) col4 from t1;
|
||||||
select * from t2;
|
select * from t2;
|
||||||
col
|
col1 col2 col3 col4
|
||||||
140.36
|
140.36 121.00000 121 3.47850542618522e-07
|
||||||
show create table t2;
|
show create table t2;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t2 CREATE TABLE `t2` (
|
t2 CREATE TABLE `t2` (
|
||||||
`col` double default NULL
|
`col1` double default NULL,
|
||||||
|
`col2` double(22,5) default NULL,
|
||||||
|
`col3` double default NULL,
|
||||||
|
`col4` double default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
create table t1 (a float);
|
create table t1 (a float);
|
||||||
|
@ -312,3 +312,14 @@ insert into t1 values (1,1), (2,2);
|
|||||||
alter table t1 drop key no_such_key;
|
alter table t1 drop key no_such_key;
|
||||||
alter table t1 drop key a;
|
alter table t1 drop key a;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#4717 - check for valid table names
|
||||||
|
#
|
||||||
|
create table t1 (a int);
|
||||||
|
--error 1103
|
||||||
|
alter table t1 rename to `t1\\`;
|
||||||
|
--error 1103
|
||||||
|
rename table t1 to `t1\\`;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -26,8 +26,8 @@ explain extended select pow(10,log10(10)),power(2,4);
|
|||||||
set @@rand_seed1=10000000,@@rand_seed2=1000000;
|
set @@rand_seed1=10000000,@@rand_seed2=1000000;
|
||||||
select rand(999999),rand();
|
select rand(999999),rand();
|
||||||
explain extended select rand(999999),rand();
|
explain extended select rand(999999),rand();
|
||||||
select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(1),acos(0),atan(1);
|
select pi(),format(sin(pi()/2),6),format(cos(pi()/2),6),format(abs(tan(pi())),6),format(cot(1),6),format(asin(1),6),format(acos(0),6),format(atan(1),6);
|
||||||
explain extended select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(1),acos(0),atan(1);
|
explain extended select pi(),format(sin(pi()/2),6),format(cos(pi()/2),6),format(abs(tan(pi())),6),format(cot(1),6),format(asin(1),6),format(acos(0),6),format(atan(1),6);
|
||||||
select degrees(pi()),radians(360);
|
select degrees(pi()),radians(360);
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -173,3 +173,19 @@ REVOKE SELECT (
|
|||||||
|
|
||||||
DROP DATABASE <20><>;
|
DROP DATABASE <20><>;
|
||||||
SET NAMES latin1;
|
SET NAMES latin1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #4898: User privileges depending on ORDER BY Settings of table db
|
||||||
|
#
|
||||||
|
insert into mysql.user (host, user) values ('localhost', 'test11');
|
||||||
|
insert into mysql.db (host, db, user, select_priv) values
|
||||||
|
('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
|
||||||
|
alter table mysql.db order by db asc;
|
||||||
|
flush privileges;
|
||||||
|
show grants for test11@localhost;
|
||||||
|
alter table mysql.db order by db desc;
|
||||||
|
flush privileges;
|
||||||
|
show grants for test11@localhost;
|
||||||
|
delete from mysql.user where user='test11';
|
||||||
|
delete from mysql.db where user='test11';
|
||||||
|
|
||||||
|
@ -75,3 +75,49 @@ select id, sum(qty) as sqty from t1 group by id having sqty>2;
|
|||||||
select sum(qty) as sqty from t1 group by id having count(id) > 0;
|
select sum(qty) as sqty from t1 group by id having count(id) > 0;
|
||||||
select sum(qty) as sqty from t1 group by id having count(distinct id) > 0;
|
select sum(qty) as sqty from t1 group by id having count(distinct id) > 0;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test case for Bug #4358 Problem with HAVING clause that uses alias from the
|
||||||
|
# select list and TEXT field
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`id` bigint(20) NOT NULL default '0',
|
||||||
|
`description` text
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
`id` bigint(20) NOT NULL default '0',
|
||||||
|
`description` varchar(20)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1, 'test');
|
||||||
|
INSERT INTO t2 VALUES (1, 'test');
|
||||||
|
|
||||||
|
CREATE TABLE t3 (
|
||||||
|
`id` bigint(20) NOT NULL default '0',
|
||||||
|
`order_id` bigint(20) NOT NULL default '0'
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
|
||||||
|
select
|
||||||
|
a.id, a.description,
|
||||||
|
count(b.id) as c
|
||||||
|
from t1 a left join t3 b on a.id=b.order_id
|
||||||
|
group by a.id, a.description
|
||||||
|
having (a.description is not null) and (c=0);
|
||||||
|
|
||||||
|
select
|
||||||
|
a.*,
|
||||||
|
count(b.id) as c
|
||||||
|
from t2 a left join t3 b on a.id=b.order_id
|
||||||
|
group by a.id, a.description
|
||||||
|
having (a.description is not null) and (c=0);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (2, 'test2');
|
||||||
|
|
||||||
|
select
|
||||||
|
a.id, a.description,
|
||||||
|
count(b.id) as c
|
||||||
|
from t1 a left join t3 b on a.id=b.order_id
|
||||||
|
group by a.id, a.description
|
||||||
|
having (a.description is not null) and (c=0);
|
||||||
|
@ -150,3 +150,17 @@ INSERT into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11);
|
|||||||
DELETE from t1 where a < 100;
|
DELETE from t1 where a < 100;
|
||||||
SELECT * from t1;
|
SELECT * from t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#4411 Server hangs when trying to SELECT MAX(id) from an empty HEAP table
|
||||||
|
#
|
||||||
|
CREATE TABLE `job_titles` (
|
||||||
|
`job_title_id` int(6) unsigned NOT NULL default '0',
|
||||||
|
`job_title` char(18) NOT NULL default '',
|
||||||
|
PRIMARY KEY (`job_title_id`),
|
||||||
|
UNIQUE KEY `job_title_id` (`job_title_id`,`job_title`)
|
||||||
|
) TYPE=HEAP;
|
||||||
|
|
||||||
|
SELECT MAX(job_title_id) FROM job_titles;
|
||||||
|
|
||||||
|
DROP TABLE job_titles;
|
||||||
|
@ -502,3 +502,12 @@ alter table t1 disable keys;
|
|||||||
show keys from t1;
|
show keys from t1;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# index search for NULL in blob. Bug #4816
|
||||||
|
#
|
||||||
|
create table t1 ( a tinytext, b char(1), index idx (a(1),b) );
|
||||||
|
insert into t1 values (null,''), (null,'');
|
||||||
|
explain select count(*) from t1 where a is null;
|
||||||
|
select count(*) from t1 where a is null;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -88,3 +88,22 @@ CREATE TABLE t1 (f1 time default NULL, f2 time default NULL);
|
|||||||
INSERT INTO t1 (f1, f2) VALUES ('09:00', '12:00');
|
INSERT INTO t1 (f1, f2) VALUES ('09:00', '12:00');
|
||||||
SELECT DATE_FORMAT(f1, "%l.%i %p") , DATE_FORMAT(f2, "%l.%i %p") FROM t1;
|
SELECT DATE_FORMAT(f1, "%l.%i %p") , DATE_FORMAT(f2, "%l.%i %p") FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug 4937: different date -> string conversion when using SELECT ... UNION
|
||||||
|
# and INSERT ... SELECT ... UNION
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (f1 DATE);
|
||||||
|
CREATE TABLE t2 (f2 VARCHAR(8));
|
||||||
|
CREATE TABLE t3 (f2 CHAR(8));
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('1978-11-26');
|
||||||
|
INSERT INTO t2 SELECT f1+0 FROM t1;
|
||||||
|
INSERT INTO t2 SELECT f1+0 FROM t1 UNION SELECT f1+0 FROM t1;
|
||||||
|
INSERT INTO t3 SELECT f1+0 FROM t1;
|
||||||
|
INSERT INTO t3 SELECT f1+0 FROM t1 UNION SELECT f1+0 FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT * FROM t3;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
@ -31,10 +31,14 @@ select a from t1 order by a;
|
|||||||
select min(a) from t1;
|
select min(a) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#3612, BUG#4393, BUG#4356, BUG#4394
|
||||||
|
#
|
||||||
|
|
||||||
create table t1 (c1 double, c2 varchar(20));
|
create table t1 (c1 double, c2 varchar(20));
|
||||||
insert t1 values (121,"16");
|
insert t1 values (121,"16");
|
||||||
select c1 + c1 * (c2 / 100) as col from t1;
|
select c1 + c1 * (c2 / 100) as col from t1;
|
||||||
create table t2 select c1 + c1 * (c2 / 100) as col from t1;
|
create table t2 select c1 + c1 * (c2 / 100) as col1, round(c1, 5) as col2, round(c1, 35) as col3, sqrt(c1*1e-15) col4 from t1;
|
||||||
select * from t2;
|
select * from t2;
|
||||||
show create table t2;
|
show create table t2;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
@ -234,3 +234,14 @@ alter table t1 add i int default 10;
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test for bug #4491, TIMESTAMP(19) should be possible to create and not
|
||||||
|
# only read in 4.0
|
||||||
|
#
|
||||||
|
create table t1 (ts timestamp(19));
|
||||||
|
show create table t1;
|
||||||
|
set TIMESTAMP=1000000000;
|
||||||
|
insert into t1 values ();
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -10,5 +10,6 @@ SET SQL_WARNINGS=1;
|
|||||||
create table t1 (this int unsigned);
|
create table t1 (this int unsigned);
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
insert into t1 values (-1);
|
insert into t1 values (-1);
|
||||||
|
insert into t1 values ('5000000000');
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -88,7 +88,7 @@ do
|
|||||||
done
|
done
|
||||||
|
|
||||||
for i in COPYING COPYING.LIB README Docs/INSTALL-BINARY \
|
for i in COPYING COPYING.LIB README Docs/INSTALL-BINARY \
|
||||||
MySQLEULA.txt LICENSE.doc README.NW
|
EXCEPTIONS-CLIENT MySQLEULA.txt LICENSE.doc README.NW
|
||||||
do
|
do
|
||||||
if [ -f $i ]
|
if [ -f $i ]
|
||||||
then
|
then
|
||||||
|
@ -45,8 +45,10 @@ fi
|
|||||||
mkdir -p $BASE/lib
|
mkdir -p $BASE/lib
|
||||||
|
|
||||||
for i in \
|
for i in \
|
||||||
libmysql/.libs/libmysqlclient.so* \
|
libmysql/.libs/libmysqlclient.s{l,o}* \
|
||||||
libmysql_r/.libs/libmysqlclient_r.so*
|
libmysql/.libs/libmysqlclient*.dylib \
|
||||||
|
libmysql_r/.libs/libmysqlclient_r.s{l,o}* \
|
||||||
|
libmysql_r/.libs/libmysqlclient_r*.dylib
|
||||||
do
|
do
|
||||||
if [ -f $i ]
|
if [ -f $i ]
|
||||||
then
|
then
|
||||||
|
@ -275,7 +275,7 @@ touch $BASE/innobase/ib_config.h
|
|||||||
#
|
#
|
||||||
|
|
||||||
cd $SOURCE
|
cd $SOURCE
|
||||||
for i in COPYING ChangeLog README \
|
for i in COPYING ChangeLog README EXCEPTIONS-CLIENT\
|
||||||
INSTALL-SOURCE INSTALL-WIN \
|
INSTALL-SOURCE INSTALL-WIN \
|
||||||
INSTALL-WIN-SOURCE \
|
INSTALL-WIN-SOURCE \
|
||||||
Docs/manual_toc.html Docs/manual.html \
|
Docs/manual_toc.html Docs/manual.html \
|
||||||
|
@ -154,8 +154,8 @@ sql_lex.o: lex_hash.h
|
|||||||
udf_example.so: udf_example.cc
|
udf_example.so: udf_example.cc
|
||||||
$(CXXCOMPILE) -shared -o $@ $<
|
$(CXXCOMPILE) -shared -o $@ $<
|
||||||
|
|
||||||
#distclean:
|
distclean:
|
||||||
# rm -f lex_hash.h
|
rm -f lex_hash.h
|
||||||
|
|
||||||
# Don't update the files from bitkeeper
|
# Don't update the files from bitkeeper
|
||||||
%::SCCS/s.%
|
%::SCCS/s.%
|
||||||
|
95
sql/field.cc
95
sql/field.cc
@ -46,6 +46,8 @@ template class List_iterator<create_field>;
|
|||||||
uchar Field_null::null[1]={1};
|
uchar Field_null::null[1]={1};
|
||||||
const char field_separator=',';
|
const char field_separator=',';
|
||||||
|
|
||||||
|
#define DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE 320
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
Static help functions
|
Static help functions
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
@ -876,7 +878,7 @@ int Field_decimal::store(double nr)
|
|||||||
|
|
||||||
reg4 uint i,length;
|
reg4 uint i,length;
|
||||||
char fyllchar,*to;
|
char fyllchar,*to;
|
||||||
char buff[320];
|
char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
|
||||||
|
|
||||||
fyllchar = zerofill ? (char) '0' : (char) ' ';
|
fyllchar = zerofill ? (char) '0' : (char) ' ';
|
||||||
#ifdef HAVE_SNPRINTF
|
#ifdef HAVE_SNPRINTF
|
||||||
@ -1751,13 +1753,14 @@ void Field_medium::sql_type(String &res) const
|
|||||||
int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
|
int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
|
||||||
{
|
{
|
||||||
long tmp;
|
long tmp;
|
||||||
int error= 0;
|
int error= 0, cuted_fields= 0;
|
||||||
char *end;
|
char *end;
|
||||||
|
|
||||||
tmp= cs->cset->scan(cs, from, from+len, MY_SEQ_SPACES);
|
tmp= cs->cset->scan(cs, from, from+len, MY_SEQ_SPACES);
|
||||||
len-= tmp;
|
len-= tmp;
|
||||||
from+= tmp;
|
from+= tmp;
|
||||||
my_errno=0;
|
my_errno=0;
|
||||||
|
|
||||||
if (unsigned_flag)
|
if (unsigned_flag)
|
||||||
{
|
{
|
||||||
if (!len || *from == '-')
|
if (!len || *from == '-')
|
||||||
@ -1774,6 +1777,34 @@ int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||||||
if (error ||
|
if (error ||
|
||||||
(from+len != end && table->in_use->count_cuted_fields &&
|
(from+len != end && table->in_use->count_cuted_fields &&
|
||||||
!test_if_int(from,len,end,cs)))
|
!test_if_int(from,len,end,cs)))
|
||||||
|
error= 1;
|
||||||
|
#if SIZEOF_LONG > 4
|
||||||
|
if (unsigned_flag)
|
||||||
|
{
|
||||||
|
if (tmp > UINT_MAX32)
|
||||||
|
{
|
||||||
|
tmp= UINT_MAX32;
|
||||||
|
error= 1;
|
||||||
|
my_errno=ERANGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (tmp > INT_MAX32)
|
||||||
|
{
|
||||||
|
tmp= INT_MAX32;
|
||||||
|
error= 1;
|
||||||
|
my_errno=ERANGE;
|
||||||
|
}
|
||||||
|
else if (tmp < INT_MIN32)
|
||||||
|
{
|
||||||
|
tmp= INT_MIN32;
|
||||||
|
error= 1;
|
||||||
|
my_errno=ERANGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (error)
|
||||||
{
|
{
|
||||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
|
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
|
||||||
error= 1;
|
error= 1;
|
||||||
@ -2695,7 +2726,7 @@ String *Field_double::val_str(String *val_buffer,
|
|||||||
#endif
|
#endif
|
||||||
doubleget(nr,ptr);
|
doubleget(nr,ptr);
|
||||||
|
|
||||||
uint to_length=max(field_length,320);
|
uint to_length=max(field_length, DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE);
|
||||||
val_buffer->alloc(to_length);
|
val_buffer->alloc(to_length);
|
||||||
char *to=(char*) val_buffer->ptr();
|
char *to=(char*) val_buffer->ptr();
|
||||||
|
|
||||||
@ -2707,7 +2738,8 @@ String *Field_double::val_str(String *val_buffer,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef HAVE_FCONVERT
|
#ifdef HAVE_FCONVERT
|
||||||
char buff[320],*pos=buff;
|
char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE],
|
||||||
|
char *pos= buff;
|
||||||
int decpt,sign,tmp_dec=dec;
|
int decpt,sign,tmp_dec=dec;
|
||||||
|
|
||||||
VOID(fconvert(nr,tmp_dec,&decpt,&sign,buff));
|
VOID(fconvert(nr,tmp_dec,&decpt,&sign,buff));
|
||||||
@ -4232,13 +4264,50 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Field_string::store(double nr)
|
/*
|
||||||
|
Store double value in Field_string or Field_varstring.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
store_double_in_string_field()
|
||||||
|
field field to store value in
|
||||||
|
field_length number of characters in the field
|
||||||
|
nr number
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Pretty prints double number into field_length characters buffer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int store_double_in_string_field(Field_str *field, uint32 field_length,
|
||||||
|
double nr)
|
||||||
{
|
{
|
||||||
char buff[MAX_FIELD_WIDTH],*end;
|
bool use_scientific_notation=TRUE;
|
||||||
int width=min(field_length,DBL_DIG+5);
|
char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
|
||||||
sprintf(buff,"%-*.*g",width,max(width-5,0),nr);
|
int length;
|
||||||
end=strcend(buff,' ');
|
if (field_length < 32 && nr > 1)
|
||||||
return Field_string::store(buff,(uint) (end - buff), &my_charset_bin);
|
{
|
||||||
|
if (field->ceiling == 0)
|
||||||
|
{
|
||||||
|
static double e[]= {1e1, 1e2, 1e4, 1e8, 1e16 };
|
||||||
|
double p= 1;
|
||||||
|
for (int i= sizeof(e)/sizeof(e[0]), j= 1<<i ; j; i--, j>>= 1 )
|
||||||
|
{
|
||||||
|
if (field_length & j)
|
||||||
|
p*= e[i];
|
||||||
|
}
|
||||||
|
field->ceiling= p-1;
|
||||||
|
}
|
||||||
|
use_scientific_notation= (field->ceiling < nr);
|
||||||
|
}
|
||||||
|
length= sprintf(buff, "%-.*g",
|
||||||
|
use_scientific_notation ? max(0,field_length-5) : field_length,
|
||||||
|
nr);
|
||||||
|
DBUG_ASSERT(length <= field_length);
|
||||||
|
return field->store(buff, (uint) length);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Field_string::store(double nr)
|
||||||
|
{
|
||||||
|
return store_double_in_string_field(this, field_length, nr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4412,11 +4481,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
|
|||||||
|
|
||||||
int Field_varstring::store(double nr)
|
int Field_varstring::store(double nr)
|
||||||
{
|
{
|
||||||
char buff[MAX_FIELD_WIDTH],*end;
|
return store_double_in_string_field(this, field_length, nr);
|
||||||
int width=min(field_length,DBL_DIG+5);
|
|
||||||
sprintf(buff,"%-*.*g",width,max(width-5,0),nr);
|
|
||||||
end=strcend(buff,' ');
|
|
||||||
return Field_varstring::store(buff,(uint) (end - buff), &my_charset_bin);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -337,12 +337,13 @@ class Field_str :public Field {
|
|||||||
protected:
|
protected:
|
||||||
CHARSET_INFO *field_charset;
|
CHARSET_INFO *field_charset;
|
||||||
public:
|
public:
|
||||||
|
double ceiling; // for ::store(double nr)
|
||||||
Field_str(char *ptr_arg,uint32 len_arg, uchar *null_ptr_arg,
|
Field_str(char *ptr_arg,uint32 len_arg, uchar *null_ptr_arg,
|
||||||
uchar null_bit_arg, utype unireg_check_arg,
|
uchar null_bit_arg, utype unireg_check_arg,
|
||||||
const char *field_name_arg,
|
const char *field_name_arg,
|
||||||
struct st_table *table_arg,CHARSET_INFO *charset)
|
struct st_table *table_arg,CHARSET_INFO *charset)
|
||||||
:Field(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
|
:Field(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
|
||||||
unireg_check_arg, field_name_arg, table_arg)
|
unireg_check_arg, field_name_arg, table_arg), ceiling(0.0)
|
||||||
{
|
{
|
||||||
field_charset=charset;
|
field_charset=charset;
|
||||||
if (charset->state & MY_CS_BINSORT)
|
if (charset->state & MY_CS_BINSORT)
|
||||||
|
@ -360,7 +360,8 @@ THR_LOCK_DATA **ha_heap::store_lock(THD *thd,
|
|||||||
|
|
||||||
int ha_heap::delete_table(const char *name)
|
int ha_heap::delete_table(const char *name)
|
||||||
{
|
{
|
||||||
int error=heap_delete_table(name);
|
char buff[FN_REFLEN];
|
||||||
|
int error= heap_delete_table(fn_format(buff,name,"","",4+2));
|
||||||
return error == ENOENT ? 0 : error;
|
return error == ENOENT ? 0 : error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,6 +118,7 @@ my_bool innobase_use_native_aio = FALSE;
|
|||||||
my_bool innobase_fast_shutdown = TRUE;
|
my_bool innobase_fast_shutdown = TRUE;
|
||||||
my_bool innobase_file_per_table = FALSE;
|
my_bool innobase_file_per_table = FALSE;
|
||||||
my_bool innobase_locks_unsafe_for_binlog = FALSE;
|
my_bool innobase_locks_unsafe_for_binlog = FALSE;
|
||||||
|
my_bool innobase_create_status_file = FALSE;
|
||||||
|
|
||||||
static char *internal_innobase_data_file_path = NULL;
|
static char *internal_innobase_data_file_path = NULL;
|
||||||
|
|
||||||
@ -135,6 +136,10 @@ char innodb_dummy_stmt_trx_handle = 'D';
|
|||||||
|
|
||||||
static HASH innobase_open_tables;
|
static HASH innobase_open_tables;
|
||||||
|
|
||||||
|
#ifdef __NETWARE__ /* some special cleanup for NetWare */
|
||||||
|
bool nw_panic = FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
static mysql_byte* innobase_get_key(INNOBASE_SHARE *share,uint *length,
|
static mysql_byte* innobase_get_key(INNOBASE_SHARE *share,uint *length,
|
||||||
my_bool not_used __attribute__((unused)));
|
my_bool not_used __attribute__((unused)));
|
||||||
static INNOBASE_SHARE *get_share(const char *table_name);
|
static INNOBASE_SHARE *get_share(const char *table_name);
|
||||||
@ -419,6 +424,30 @@ innobase_mysql_print_thd(
|
|||||||
putc('\n', f);
|
putc('\n', f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
Creates a temporary file. */
|
||||||
|
extern "C"
|
||||||
|
int
|
||||||
|
innobase_mysql_tmpfile(void)
|
||||||
|
/*========================*/
|
||||||
|
/* out: temporary file descriptor, or < 0 on error */
|
||||||
|
{
|
||||||
|
char filename[FN_REFLEN];
|
||||||
|
File fd = create_temp_file(filename, NullS, "ib",
|
||||||
|
#ifdef __WIN__
|
||||||
|
O_BINARY | O_TRUNC | O_SEQUENTIAL |
|
||||||
|
O_TEMPORARY | O_SHORT_LIVED |
|
||||||
|
#endif /* __WIN__ */
|
||||||
|
O_CREAT | O_EXCL | O_RDWR,
|
||||||
|
MYF(MY_WME));
|
||||||
|
#ifndef __WIN__
|
||||||
|
if (fd >= 0) {
|
||||||
|
unlink(filename);
|
||||||
|
}
|
||||||
|
#endif /* !__WIN__ */
|
||||||
|
return(fd);
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
Gets the InnoDB transaction handle for a MySQL handler object, creates
|
Gets the InnoDB transaction handle for a MySQL handler object, creates
|
||||||
an InnoDB transaction struct if the corresponding MySQL thread struct still
|
an InnoDB transaction struct if the corresponding MySQL thread struct still
|
||||||
@ -912,6 +941,7 @@ innobase_init(void)
|
|||||||
srv_locks_unsafe_for_binlog = (ibool) innobase_locks_unsafe_for_binlog;
|
srv_locks_unsafe_for_binlog = (ibool) innobase_locks_unsafe_for_binlog;
|
||||||
|
|
||||||
srv_max_n_open_files = (ulint) innobase_open_files;
|
srv_max_n_open_files = (ulint) innobase_open_files;
|
||||||
|
srv_innodb_status = (ibool) innobase_create_status_file;
|
||||||
|
|
||||||
srv_print_verbose_log = mysql_embedded ? 0 : 1;
|
srv_print_verbose_log = mysql_embedded ? 0 : 1;
|
||||||
|
|
||||||
@ -982,6 +1012,11 @@ innobase_end(void)
|
|||||||
|
|
||||||
DBUG_ENTER("innobase_end");
|
DBUG_ENTER("innobase_end");
|
||||||
|
|
||||||
|
#ifdef __NETWARE__ /* some special cleanup for NetWare */
|
||||||
|
if (nw_panic) {
|
||||||
|
set_panic_flag_for_netware();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (innodb_inited)
|
if (innodb_inited)
|
||||||
{
|
{
|
||||||
innodb_inited= 0;
|
innodb_inited= 0;
|
||||||
@ -4403,7 +4438,7 @@ ha_innobase::update_table_comment(
|
|||||||
trx_search_latch_release_if_reserved(prebuilt->trx);
|
trx_search_latch_release_if_reserved(prebuilt->trx);
|
||||||
str = NULL;
|
str = NULL;
|
||||||
|
|
||||||
if (FILE* file = tmpfile()) {
|
if (FILE* file = os_file_create_tmpfile()) {
|
||||||
long flen;
|
long flen;
|
||||||
|
|
||||||
/* output the data to a temporary file */
|
/* output the data to a temporary file */
|
||||||
@ -4465,7 +4500,7 @@ ha_innobase::get_foreign_key_create_info(void)
|
|||||||
|
|
||||||
update_thd(current_thd);
|
update_thd(current_thd);
|
||||||
|
|
||||||
if (FILE* file = tmpfile()) {
|
if (FILE* file = os_file_create_tmpfile()) {
|
||||||
long flen;
|
long flen;
|
||||||
|
|
||||||
prebuilt->trx->op_info = (char*)"getting info on foreign keys";
|
prebuilt->trx->op_info = (char*)"getting info on foreign keys";
|
||||||
|
@ -189,7 +189,8 @@ extern char *innobase_unix_file_flush_method;
|
|||||||
/* The following variables have to be my_bool for SHOW VARIABLES to work */
|
/* The following variables have to be my_bool for SHOW VARIABLES to work */
|
||||||
extern my_bool innobase_log_archive,
|
extern my_bool innobase_log_archive,
|
||||||
innobase_use_native_aio, innobase_fast_shutdown,
|
innobase_use_native_aio, innobase_fast_shutdown,
|
||||||
innobase_file_per_table, innobase_locks_unsafe_for_binlog;
|
innobase_file_per_table, innobase_locks_unsafe_for_binlog,
|
||||||
|
innobase_create_status_file;
|
||||||
extern "C" {
|
extern "C" {
|
||||||
extern ulong srv_max_buf_pool_modified_pct;
|
extern ulong srv_max_buf_pool_modified_pct;
|
||||||
}
|
}
|
||||||
|
@ -969,7 +969,7 @@ void Item_func_round::fix_length_and_dec()
|
|||||||
if (tmp < 0)
|
if (tmp < 0)
|
||||||
decimals=0;
|
decimals=0;
|
||||||
else
|
else
|
||||||
decimals=tmp;
|
decimals=min(tmp,NOT_FIXED_DEC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1639,7 +1639,7 @@ udf_handler::fix_fields(THD *thd, TABLE_LIST *tables, Item_result_field *func,
|
|||||||
func->max_length=min(initid.max_length,MAX_BLOB_WIDTH);
|
func->max_length=min(initid.max_length,MAX_BLOB_WIDTH);
|
||||||
func->maybe_null=initid.maybe_null;
|
func->maybe_null=initid.maybe_null;
|
||||||
const_item_cache=initid.const_item;
|
const_item_cache=initid.const_item;
|
||||||
func->decimals=min(initid.decimals,31);
|
func->decimals=min(initid.decimals,NOT_FIXED_DEC);
|
||||||
}
|
}
|
||||||
initialized=1;
|
initialized=1;
|
||||||
if (error)
|
if (error)
|
||||||
|
@ -335,7 +335,7 @@ class Item_dec_func :public Item_real_func
|
|||||||
Item_dec_func(Item *a,Item *b) :Item_real_func(a,b) {}
|
Item_dec_func(Item *a,Item *b) :Item_real_func(a,b) {}
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
decimals=6; max_length=float_length(decimals);
|
decimals=NOT_FIXED_DEC; max_length=float_length(decimals);
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
}
|
}
|
||||||
inline double fix_result(double value)
|
inline double fix_result(double value)
|
||||||
|
@ -282,7 +282,11 @@ public:
|
|||||||
|
|
||||||
class Item_sum_avg :public Item_sum_num
|
class Item_sum_avg :public Item_sum_num
|
||||||
{
|
{
|
||||||
void fix_length_and_dec() { decimals+=4; maybe_null=1; }
|
void fix_length_and_dec()
|
||||||
|
{
|
||||||
|
decimals=min(decimals+4, NOT_FIXED_DEC);
|
||||||
|
maybe_null=1;
|
||||||
|
}
|
||||||
|
|
||||||
double sum;
|
double sum;
|
||||||
ulonglong count;
|
ulonglong count;
|
||||||
@ -337,7 +341,11 @@ class Item_sum_variance : public Item_sum_num
|
|||||||
{
|
{
|
||||||
double sum, sum_sqr;
|
double sum, sum_sqr;
|
||||||
ulonglong count;
|
ulonglong count;
|
||||||
void fix_length_and_dec() { decimals+=4; maybe_null=1; }
|
void fix_length_and_dec()
|
||||||
|
{
|
||||||
|
decimals=min(decimals+4, NOT_FIXED_DEC);
|
||||||
|
maybe_null=1;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Item_sum_variance(Item *item_par) :Item_sum_num(item_par),count(0) {}
|
Item_sum_variance(Item *item_par) :Item_sum_num(item_par),count(0) {}
|
||||||
|
16
sql/lock.cc
16
sql/lock.cc
@ -732,15 +732,14 @@ bool lock_global_read_lock(THD *thd)
|
|||||||
while (protect_against_global_read_lock && !thd->killed)
|
while (protect_against_global_read_lock && !thd->killed)
|
||||||
pthread_cond_wait(&COND_refresh, &LOCK_open);
|
pthread_cond_wait(&COND_refresh, &LOCK_open);
|
||||||
waiting_for_read_lock--;
|
waiting_for_read_lock--;
|
||||||
thd->exit_cond(old_message);
|
|
||||||
if (thd->killed)
|
if (thd->killed)
|
||||||
{
|
{
|
||||||
(void) pthread_mutex_unlock(&LOCK_open);
|
thd->exit_cond(old_message);
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
thd->global_read_lock=1;
|
thd->global_read_lock=1;
|
||||||
global_read_lock++;
|
global_read_lock++;
|
||||||
(void) pthread_mutex_unlock(&LOCK_open);
|
thd->exit_cond(old_message);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
@ -761,11 +760,12 @@ void unlock_global_read_lock(THD *thd)
|
|||||||
bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh)
|
bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh)
|
||||||
{
|
{
|
||||||
const char *old_message;
|
const char *old_message;
|
||||||
bool result=0;
|
bool result= 0, need_exit_cond;
|
||||||
DBUG_ENTER("wait_if_global_read_lock");
|
DBUG_ENTER("wait_if_global_read_lock");
|
||||||
|
|
||||||
|
LINT_INIT(old_message);
|
||||||
(void) pthread_mutex_lock(&LOCK_open);
|
(void) pthread_mutex_lock(&LOCK_open);
|
||||||
if (global_read_lock)
|
if (need_exit_cond= (bool)global_read_lock)
|
||||||
{
|
{
|
||||||
if (thd->global_read_lock) // This thread had the read locks
|
if (thd->global_read_lock) // This thread had the read locks
|
||||||
{
|
{
|
||||||
@ -780,11 +780,13 @@ bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh)
|
|||||||
(void) pthread_cond_wait(&COND_refresh,&LOCK_open);
|
(void) pthread_cond_wait(&COND_refresh,&LOCK_open);
|
||||||
if (thd->killed)
|
if (thd->killed)
|
||||||
result=1;
|
result=1;
|
||||||
thd->exit_cond(old_message);
|
|
||||||
}
|
}
|
||||||
if (!abort_on_refresh && !result)
|
if (!abort_on_refresh && !result)
|
||||||
protect_against_global_read_lock++;
|
protect_against_global_read_lock++;
|
||||||
pthread_mutex_unlock(&LOCK_open);
|
if (unlikely(need_exit_cond)) // global read locks are rare
|
||||||
|
thd->exit_cond(old_message);
|
||||||
|
else
|
||||||
|
pthread_mutex_unlock(&LOCK_open);
|
||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
sql/log.cc
10
sql/log.cc
@ -1782,17 +1782,12 @@ bool MYSQL_LOG::write(THD *thd,const char *query, uint query_length,
|
|||||||
|
|
||||||
NOTES
|
NOTES
|
||||||
One must have a lock on LOCK_log before calling this function.
|
One must have a lock on LOCK_log before calling this function.
|
||||||
This lock will be freed before return!
|
This lock will be freed before return! That's required by
|
||||||
|
THD::enter_cond() (see NOTES in sql_class.h).
|
||||||
The reason for the above is that for enter_cond() / exit_cond() to
|
|
||||||
work the mutex must be got before enter_cond() but releases before
|
|
||||||
exit_cond().
|
|
||||||
If you don't do it this way, you will get a deadlock in THD::awake()
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void MYSQL_LOG:: wait_for_update(THD* thd, bool master_or_slave)
|
void MYSQL_LOG:: wait_for_update(THD* thd, bool master_or_slave)
|
||||||
{
|
{
|
||||||
safe_mutex_assert_owner(&LOCK_log);
|
|
||||||
const char* old_msg = thd->enter_cond(&update_cond, &LOCK_log,
|
const char* old_msg = thd->enter_cond(&update_cond, &LOCK_log,
|
||||||
master_or_slave ?
|
master_or_slave ?
|
||||||
"Has read all relay log; waiting for \
|
"Has read all relay log; waiting for \
|
||||||
@ -1800,7 +1795,6 @@ the slave I/O thread to update it" :
|
|||||||
"Has sent all binlog to slave; \
|
"Has sent all binlog to slave; \
|
||||||
waiting for binlog to be updated");
|
waiting for binlog to be updated");
|
||||||
pthread_cond_wait(&update_cond, &LOCK_log);
|
pthread_cond_wait(&update_cond, &LOCK_log);
|
||||||
pthread_mutex_unlock(&LOCK_log); // See NOTES
|
|
||||||
thd->exit_cond(old_msg);
|
thd->exit_cond(old_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1590,6 +1590,8 @@ static void registerwithneb()
|
|||||||
ulong neb_event_callback(struct EventBlock *eblock)
|
ulong neb_event_callback(struct EventBlock *eblock)
|
||||||
{
|
{
|
||||||
EventChangeVolStateEnter_s *voldata;
|
EventChangeVolStateEnter_s *voldata;
|
||||||
|
extern bool nw_panic;
|
||||||
|
|
||||||
voldata= (EventChangeVolStateEnter_s *)eblock->EBEventData;
|
voldata= (EventChangeVolStateEnter_s *)eblock->EBEventData;
|
||||||
|
|
||||||
/* Deactivation of a volume */
|
/* Deactivation of a volume */
|
||||||
@ -1602,6 +1604,7 @@ ulong neb_event_callback(struct EventBlock *eblock)
|
|||||||
if (!memcmp(&voldata->volID, &datavolid, sizeof(VolumeID_t)))
|
if (!memcmp(&voldata->volID, &datavolid, sizeof(VolumeID_t)))
|
||||||
{
|
{
|
||||||
consoleprintf("MySQL data volume is deactivated, shutting down MySQL Server \n");
|
consoleprintf("MySQL data volume is deactivated, shutting down MySQL Server \n");
|
||||||
|
nw_panic = TRUE;
|
||||||
kill_server(0);
|
kill_server(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1879,9 +1882,11 @@ static void init_signals(void)
|
|||||||
sigaddset(&set,SIGPIPE);
|
sigaddset(&set,SIGPIPE);
|
||||||
#endif
|
#endif
|
||||||
sigaddset(&set,SIGINT);
|
sigaddset(&set,SIGINT);
|
||||||
|
#ifndef IGNORE_SIGHUP_SIGQUIT
|
||||||
sigaddset(&set,SIGQUIT);
|
sigaddset(&set,SIGQUIT);
|
||||||
sigaddset(&set,SIGTERM);
|
|
||||||
sigaddset(&set,SIGHUP);
|
sigaddset(&set,SIGHUP);
|
||||||
|
#endif
|
||||||
|
sigaddset(&set,SIGTERM);
|
||||||
|
|
||||||
/* Fix signals if blocked by parents (can happen on Mac OS X) */
|
/* Fix signals if blocked by parents (can happen on Mac OS X) */
|
||||||
sigemptyset(&sa.sa_mask);
|
sigemptyset(&sa.sa_mask);
|
||||||
@ -1965,11 +1970,13 @@ extern "C" void *signal_hand(void *arg __attribute__((unused)))
|
|||||||
#ifdef USE_ONE_SIGNAL_HAND
|
#ifdef USE_ONE_SIGNAL_HAND
|
||||||
(void) sigaddset(&set,THR_SERVER_ALARM); // For alarms
|
(void) sigaddset(&set,THR_SERVER_ALARM); // For alarms
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef IGNORE_SIGHUP_SIGQUIT
|
||||||
(void) sigaddset(&set,SIGQUIT);
|
(void) sigaddset(&set,SIGQUIT);
|
||||||
(void) sigaddset(&set,SIGTERM);
|
|
||||||
#if THR_CLIENT_ALARM != SIGHUP
|
#if THR_CLIENT_ALARM != SIGHUP
|
||||||
(void) sigaddset(&set,SIGHUP);
|
(void) sigaddset(&set,SIGHUP);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
(void) sigaddset(&set,SIGTERM);
|
||||||
(void) sigaddset(&set,SIGTSTP);
|
(void) sigaddset(&set,SIGTSTP);
|
||||||
|
|
||||||
/* Save pid to this process (or thread on Linux) */
|
/* Save pid to this process (or thread on Linux) */
|
||||||
@ -2925,6 +2932,9 @@ we force server id to 2, but this MySQL server will not act as a slave.");
|
|||||||
printf(ER(ER_READY),my_progname,server_version,
|
printf(ER(ER_READY),my_progname,server_version,
|
||||||
((unix_sock == INVALID_SOCKET) ? (char*) "" : mysqld_unix_port),
|
((unix_sock == INVALID_SOCKET) ? (char*) "" : mysqld_unix_port),
|
||||||
mysqld_port);
|
mysqld_port);
|
||||||
|
if (MYSQL_COMPILATION_COMMENT[0] != '\0')
|
||||||
|
fputs(" " MYSQL_COMPILATION_COMMENT, stdout);
|
||||||
|
putchar('\n');
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
#if defined(__NT__) || defined(HAVE_SMEM)
|
#if defined(__NT__) || defined(HAVE_SMEM)
|
||||||
@ -3942,6 +3952,7 @@ enum options_mysqld
|
|||||||
OPT_INNODB_LOCK_WAIT_TIMEOUT,
|
OPT_INNODB_LOCK_WAIT_TIMEOUT,
|
||||||
OPT_INNODB_THREAD_CONCURRENCY,
|
OPT_INNODB_THREAD_CONCURRENCY,
|
||||||
OPT_INNODB_FORCE_RECOVERY,
|
OPT_INNODB_FORCE_RECOVERY,
|
||||||
|
OPT_INNODB_STATUS_FILE,
|
||||||
OPT_INNODB_MAX_DIRTY_PAGES_PCT,
|
OPT_INNODB_MAX_DIRTY_PAGES_PCT,
|
||||||
OPT_INNODB_OPEN_FILES,
|
OPT_INNODB_OPEN_FILES,
|
||||||
OPT_BDB_CACHE_SIZE,
|
OPT_BDB_CACHE_SIZE,
|
||||||
@ -4171,6 +4182,10 @@ Disable with --skip-innodb (will save memory).",
|
|||||||
{"innodb_max_dirty_pages_pct", OPT_INNODB_MAX_DIRTY_PAGES_PCT,
|
{"innodb_max_dirty_pages_pct", OPT_INNODB_MAX_DIRTY_PAGES_PCT,
|
||||||
"Percentage of dirty pages allowed in bufferpool.", (gptr*) &srv_max_buf_pool_modified_pct,
|
"Percentage of dirty pages allowed in bufferpool.", (gptr*) &srv_max_buf_pool_modified_pct,
|
||||||
(gptr*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0},
|
(gptr*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0},
|
||||||
|
{"innodb_status_file", OPT_INNODB_STATUS_FILE,
|
||||||
|
"Enable SHOW INNODB STATUS output in the innodb_status.<pid> file",
|
||||||
|
(gptr*) &innobase_create_status_file, (gptr*) &innobase_create_status_file,
|
||||||
|
0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif /* End HAVE_INNOBASE_DB */
|
#endif /* End HAVE_INNOBASE_DB */
|
||||||
{"isam", OPT_ISAM, "Enable ISAM (if this version of MySQL supports it). \
|
{"isam", OPT_ISAM, "Enable ISAM (if this version of MySQL supports it). \
|
||||||
Disable with --skip-isam.",
|
Disable with --skip-isam.",
|
||||||
|
@ -201,7 +201,9 @@ net_printf(THD *thd, uint errcode, ...)
|
|||||||
#ifndef EMBEDDED_LIBRARY
|
#ifndef EMBEDDED_LIBRARY
|
||||||
text_pos=(char*) net->buff + head_length + offset + 1;
|
text_pos=(char*) net->buff + head_length + offset + 1;
|
||||||
#endif
|
#endif
|
||||||
(void) vsprintf(my_const_cast(char*) (text_pos),format,args);
|
(void) my_vsnprintf(my_const_cast(char*) (text_pos),
|
||||||
|
(char*)net->buff_end-text_pos,
|
||||||
|
format,args);
|
||||||
length=(uint) strlen((char*) text_pos);
|
length=(uint) strlen((char*) text_pos);
|
||||||
if (length >= sizeof(net->last_error))
|
if (length >= sizeof(net->last_error))
|
||||||
length=sizeof(net->last_error)-1; /* purecov: inspected */
|
length=sizeof(net->last_error)-1; /* purecov: inspected */
|
||||||
|
@ -589,6 +589,8 @@ pthread_handler_decl(handle_failsafe_rpl,arg)
|
|||||||
THD *thd = new THD;
|
THD *thd = new THD;
|
||||||
thd->thread_stack = (char*)&thd;
|
thd->thread_stack = (char*)&thd;
|
||||||
MYSQL* recovery_captain = 0;
|
MYSQL* recovery_captain = 0;
|
||||||
|
const char* msg;
|
||||||
|
|
||||||
pthread_detach_this_thread();
|
pthread_detach_this_thread();
|
||||||
if (init_failsafe_rpl_thread(thd) || !(recovery_captain=mysql_init(0)))
|
if (init_failsafe_rpl_thread(thd) || !(recovery_captain=mysql_init(0)))
|
||||||
{
|
{
|
||||||
@ -596,11 +598,11 @@ pthread_handler_decl(handle_failsafe_rpl,arg)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
pthread_mutex_lock(&LOCK_rpl_status);
|
pthread_mutex_lock(&LOCK_rpl_status);
|
||||||
|
msg= thd->enter_cond(&COND_rpl_status,
|
||||||
|
&LOCK_rpl_status, "Waiting for request");
|
||||||
while (!thd->killed && !abort_loop)
|
while (!thd->killed && !abort_loop)
|
||||||
{
|
{
|
||||||
bool break_req_chain = 0;
|
bool break_req_chain = 0;
|
||||||
const char* msg = thd->enter_cond(&COND_rpl_status,
|
|
||||||
&LOCK_rpl_status, "Waiting for request");
|
|
||||||
pthread_cond_wait(&COND_rpl_status, &LOCK_rpl_status);
|
pthread_cond_wait(&COND_rpl_status, &LOCK_rpl_status);
|
||||||
thd->proc_info="Processing request";
|
thd->proc_info="Processing request";
|
||||||
while (!break_req_chain)
|
while (!break_req_chain)
|
||||||
@ -618,9 +620,8 @@ pthread_handler_decl(handle_failsafe_rpl,arg)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
thd->exit_cond(msg);
|
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&LOCK_rpl_status);
|
thd->exit_cond(msg);
|
||||||
err:
|
err:
|
||||||
if (recovery_captain)
|
if (recovery_captain)
|
||||||
mysql_close(recovery_captain);
|
mysql_close(recovery_captain);
|
||||||
|
@ -88,7 +88,7 @@ character-set=latin2
|
|||||||
"Blob sloupec '%-.64s' nem-B<><42>e b<>t pou<6F>it jako kl<6B><6C>",
|
"Blob sloupec '%-.64s' nem-B<><42>e b<>t pou<6F>it jako kl<6B><6C>",
|
||||||
"P-B<><42>li<6C> velk<6C> d<>lka sloupce '%-.64s' (nejv<6A>ce %d). Pou<6F>ijte BLOB",
|
"P-B<><42>li<6C> velk<6C> d<>lka sloupce '%-.64s' (nejv<6A>ce %d). Pou<6F>ijte BLOB",
|
||||||
"M-B<><42>ete m<>t pouze jedno AUTO pole a to mus<75> b<>t definov<6F>no jako kl<6B><6C>",
|
"M-B<><42>ete m<>t pouze jedno AUTO pole a to mus<75> b<>t definov<6F>no jako kl<6B><6C>",
|
||||||
"%s: p-B<>ipraven na spojen<65>\n",
|
"%s: p-B<>ipraven na spojen<65>",
|
||||||
"%s: norm-B<>ln<6C> ukon<6F>en<65>\n",
|
"%s: norm-B<>ln<6C> ukon<6F>en<65>\n",
|
||||||
"%s: p-B<>ijat signal %d, kon<6F><6E>m\n",
|
"%s: p-B<>ijat signal %d, kon<6F><6E>m\n",
|
||||||
"%s: ukon-B<>en<65> pr<70>ce hotovo\n",
|
"%s: ukon-B<>en<65> pr<70>ce hotovo\n",
|
||||||
|
@ -82,7 +82,7 @@ character-set=latin1
|
|||||||
"BLOB feltet '%-.64s' kan ikke bruges ved specifikation af indeks",
|
"BLOB feltet '%-.64s' kan ikke bruges ved specifikation af indeks",
|
||||||
"For stor feltl<74>ngde for kolonne '%-.64s' (maks = %d). Brug BLOB i stedet",
|
"For stor feltl<74>ngde for kolonne '%-.64s' (maks = %d). Brug BLOB i stedet",
|
||||||
"Der kan kun specificeres eet AUTO_INCREMENT-felt, og det skal v<>re indekseret",
|
"Der kan kun specificeres eet AUTO_INCREMENT-felt, og det skal v<>re indekseret",
|
||||||
"%s: klar til tilslutninger\n",
|
"%s: klar til tilslutninger",
|
||||||
"%s: Normal nedlukning\n",
|
"%s: Normal nedlukning\n",
|
||||||
"%s: Fangede signal %d. Afslutter!!\n",
|
"%s: Fangede signal %d. Afslutter!!\n",
|
||||||
"%s: Server lukket\n",
|
"%s: Server lukket\n",
|
||||||
|
@ -90,7 +90,7 @@ character-set=latin1
|
|||||||
"BLOB kolom '%-.64s' kan niet gebruikt worden bij zoeksleutel specificatie",
|
"BLOB kolom '%-.64s' kan niet gebruikt worden bij zoeksleutel specificatie",
|
||||||
"Te grote kolomlengte voor '%-.64s' (max = %d). Maak hiervoor gebruik van het type BLOB",
|
"Te grote kolomlengte voor '%-.64s' (max = %d). Maak hiervoor gebruik van het type BLOB",
|
||||||
"Er kan slechts 1 autofield zijn en deze moet als zoeksleutel worden gedefinieerd.",
|
"Er kan slechts 1 autofield zijn en deze moet als zoeksleutel worden gedefinieerd.",
|
||||||
"%s: klaar voor verbindingen\n",
|
"%s: klaar voor verbindingen",
|
||||||
"%s: Normaal afgesloten \n",
|
"%s: Normaal afgesloten \n",
|
||||||
"%s: Signaal %d. Systeem breekt af!\n",
|
"%s: Signaal %d. Systeem breekt af!\n",
|
||||||
"%s: Afsluiten afgerond\n",
|
"%s: Afsluiten afgerond\n",
|
||||||
|
@ -79,7 +79,7 @@ character-set=latin1
|
|||||||
"BLOB column '%-.64s' can't be used in key specification with the used table type",
|
"BLOB column '%-.64s' can't be used in key specification with the used table type",
|
||||||
"Column length too big for column '%-.64s' (max = %d); use BLOB instead",
|
"Column length too big for column '%-.64s' (max = %d); use BLOB instead",
|
||||||
"Incorrect table definition; there can be only one auto column and it must be defined as a key",
|
"Incorrect table definition; there can be only one auto column and it must be defined as a key",
|
||||||
"%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d\n",
|
"%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d",
|
||||||
"%s: Normal shutdown\n",
|
"%s: Normal shutdown\n",
|
||||||
"%s: Got signal %d. Aborting!\n",
|
"%s: Got signal %d. Aborting!\n",
|
||||||
"%s: Shutdown complete\n",
|
"%s: Shutdown complete\n",
|
||||||
|
@ -84,7 +84,7 @@ character-set=latin7
|
|||||||
"BLOB-t<><74>pi tulpa '%-.64s' ei saa kasutada v<>tmena",
|
"BLOB-t<><74>pi tulpa '%-.64s' ei saa kasutada v<>tmena",
|
||||||
"Tulba '%-.64s' pikkus on liiga pikk (maksimaalne pikkus: %d). Kasuta BLOB v<>ljat<61><74>pi",
|
"Tulba '%-.64s' pikkus on liiga pikk (maksimaalne pikkus: %d). Kasuta BLOB v<>ljat<61><74>pi",
|
||||||
"Vigane tabelikirjeldus; Tabelis tohib olla <20>ks auto_increment t<><74>pi tulp ning see peab olema defineeritud v<>tmena",
|
"Vigane tabelikirjeldus; Tabelis tohib olla <20>ks auto_increment t<><74>pi tulp ning see peab olema defineeritud v<>tmena",
|
||||||
"%s: ootab <20>hendusi\n",
|
"%s: ootab <20>hendusi",
|
||||||
"%s: MySQL l<>petas\n",
|
"%s: MySQL l<>petas\n",
|
||||||
"%s: sain signaali %d. L<>petan!\n",
|
"%s: sain signaali %d. L<>petan!\n",
|
||||||
"%s: L<>pp\n",
|
"%s: L<>pp\n",
|
||||||
|
@ -79,7 +79,7 @@ character-set=latin1
|
|||||||
"Champ BLOB '%-.64s' ne peut <20>tre utilis<69> dans une cl<63>",
|
"Champ BLOB '%-.64s' ne peut <20>tre utilis<69> dans une cl<63>",
|
||||||
"Champ '%-.64s' trop long (max = %d). Utilisez un BLOB",
|
"Champ '%-.64s' trop long (max = %d). Utilisez un BLOB",
|
||||||
"Un seul champ automatique est permis et il doit <20>tre index<65>",
|
"Un seul champ automatique est permis et il doit <20>tre index<65>",
|
||||||
"%s: Pr<50>t pour des connections\n",
|
"%s: Pr<50>t pour des connections",
|
||||||
"%s: Arr<72>t normal du serveur\n",
|
"%s: Arr<72>t normal du serveur\n",
|
||||||
"%s: Re<52>u le signal %d. Abandonne!\n",
|
"%s: Re<52>u le signal %d. Abandonne!\n",
|
||||||
"%s: Arr<72>t du serveur termin<69>\n",
|
"%s: Arr<72>t du serveur termin<69>\n",
|
||||||
|
@ -91,7 +91,7 @@ character-set=latin1
|
|||||||
"BLOB-Feld '%-.64s' kann beim verwendeten Tabellentyp nicht als Schl<68>ssel verwendet werden",
|
"BLOB-Feld '%-.64s' kann beim verwendeten Tabellentyp nicht als Schl<68>ssel verwendet werden",
|
||||||
"Feldl<64>nge f<>r Feld '%-.64s' zu gro<72> (maximal %d). BLOB-Feld verwenden!",
|
"Feldl<64>nge f<>r Feld '%-.64s' zu gro<72> (maximal %d). BLOB-Feld verwenden!",
|
||||||
"Falsche Tabellendefinition. Es darf nur ein Auto-Feld geben und dieses muss als Schl<68>ssel definiert werden",
|
"Falsche Tabellendefinition. Es darf nur ein Auto-Feld geben und dieses muss als Schl<68>ssel definiert werden",
|
||||||
"%-.64s: Bereit f<>r Verbindungen\n",
|
"%-.64s: Bereit f<>r Verbindungen",
|
||||||
"%-.64s: Normal heruntergefahren\n",
|
"%-.64s: Normal heruntergefahren\n",
|
||||||
"%-.64s: Signal %d erhalten. Abbruch!\n",
|
"%-.64s: Signal %d erhalten. Abbruch!\n",
|
||||||
"%-.64s: Heruntergefahren (shutdown)\n",
|
"%-.64s: Heruntergefahren (shutdown)\n",
|
||||||
|
@ -79,7 +79,7 @@ character-set=greek
|
|||||||
"<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Blob '%-.64s' <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (key specification)",
|
"<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Blob '%-.64s' <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (key specification)",
|
||||||
"<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> '%-.64s' (max = %d). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> BLOB",
|
"<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> '%-.64s' (max = %d). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> BLOB",
|
||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> auto field <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> key",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> auto field <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> key",
|
||||||
"%s: <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
"%s: <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> shutdown\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> shutdown\n",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d. <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d. <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n",
|
||||||
"%s: <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Shutdown <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
"%s: <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Shutdown <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
||||||
|
@ -81,7 +81,7 @@ character-set=latin2
|
|||||||
"Blob objektum '%-.64s' nem hasznalhato kulcskent",
|
"Blob objektum '%-.64s' nem hasznalhato kulcskent",
|
||||||
"A(z) '%-.64s' oszlop tul hosszu. (maximum = %d). Hasznaljon BLOB tipust inkabb.",
|
"A(z) '%-.64s' oszlop tul hosszu. (maximum = %d). Hasznaljon BLOB tipust inkabb.",
|
||||||
"Csak egy auto mezo lehetseges, es azt kulcskent kell definialni.",
|
"Csak egy auto mezo lehetseges, es azt kulcskent kell definialni.",
|
||||||
"%s: kapcsolatra kesz\n",
|
"%s: kapcsolatra kesz",
|
||||||
"%s: Normal leallitas\n",
|
"%s: Normal leallitas\n",
|
||||||
"%s: %d jelzes. Megszakitva!\n",
|
"%s: %d jelzes. Megszakitva!\n",
|
||||||
"%s: A leallitas kesz\n",
|
"%s: A leallitas kesz\n",
|
||||||
|
@ -81,7 +81,7 @@ character-set=ujis
|
|||||||
"BLOB column '%-.64s' can't be used in key specification with the used table type",
|
"BLOB column '%-.64s' can't be used in key specification with the used table type",
|
||||||
"column '%-.64s' <20><>,<2C><><EFBFBD>ݤ<EFBFBD><DDA4><EFBFBD> column <20><><EFBFBD>礭<EFBFBD><E7A4AD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>ޤ<EFBFBD>. (<28><><EFBFBD><EFBFBD> %d <20>ޤ<EFBFBD>). BLOB <20><EFBFBD><F2A4ABA4><EFBFBD><EFBFBD>˻<EFBFBD><CBBB>Ѥ<EFBFBD><D1A4>Ƥ<EFBFBD><C6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.",
|
"column '%-.64s' <20><>,<2C><><EFBFBD>ݤ<EFBFBD><DDA4><EFBFBD> column <20><><EFBFBD>礭<EFBFBD><E7A4AD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>ޤ<EFBFBD>. (<28><><EFBFBD><EFBFBD> %d <20>ޤ<EFBFBD>). BLOB <20><EFBFBD><F2A4ABA4><EFBFBD><EFBFBD>˻<EFBFBD><CBBB>Ѥ<EFBFBD><D1A4>Ƥ<EFBFBD><C6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.",
|
||||||
"<22>ơ<EFBFBD><C6A1>֥<EFBFBD><D6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㤤<EFBFBD>ޤ<EFBFBD>; there can be only one auto column and it must be defined as a key",
|
"<22>ơ<EFBFBD><C6A1>֥<EFBFBD><D6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㤤<EFBFBD>ޤ<EFBFBD>; there can be only one auto column and it must be defined as a key",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ",
|
||||||
"%s: Normal shutdown\n",
|
"%s: Normal shutdown\n",
|
||||||
"%s: Got signal %d. <20><><EFBFBD><EFBFBD>!\n",
|
"%s: Got signal %d. <20><><EFBFBD><EFBFBD>!\n",
|
||||||
"%s: Shutdown <20><>λ\n",
|
"%s: Shutdown <20><>λ\n",
|
||||||
|
@ -79,7 +79,7 @@ character-set=euckr
|
|||||||
"BLOB Į<><C4AE> '%-.64s'<27><> Ű <20><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
|
"BLOB Į<><C4AE> '%-.64s'<27><> Ű <20><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
|
||||||
"Į<><C4AE> '%-.64s'<27><> Į<><C4AE> <20><><EFBFBD>̰<EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> (<28>ִ<EFBFBD> = %d). <20><><EFBFBD>ſ<EFBFBD> BLOB<4F><42> <20><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>.",
|
"Į<><C4AE> '%-.64s'<27><> Į<><C4AE> <20><><EFBFBD>̰<EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> (<28>ִ<EFBFBD> = %d). <20><><EFBFBD>ſ<EFBFBD> BLOB<4F><42> <20><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>.",
|
||||||
"<22><><EFBFBD><EFBFBD>Ȯ<EFBFBD><C8AE> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>; <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> auto Į<><C4AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> Ű<><C5B0> <20><><EFBFBD>ǵǾ<C7B5><C7BE><EFBFBD><EFBFBD><EFBFBD> <20>մϴ<D5B4>.",
|
"<22><><EFBFBD><EFBFBD>Ȯ<EFBFBD><C8AE> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>; <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> auto Į<><C4AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> Ű<><C5B0> <20><><EFBFBD>ǵǾ<C7B5><C7BE><EFBFBD><EFBFBD><EFBFBD> <20>մϴ<D5B4>.",
|
||||||
"%s: <20><><EFBFBD><EFBFBD> <20>غ<EFBFBD><D8BA><EFBFBD><EFBFBD>Դϴ<D4B4>.\n",
|
"%s: <20><><EFBFBD><EFBFBD> <20>غ<EFBFBD><D8BA><EFBFBD><EFBFBD>Դϴ<D4B4>",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> shutdown\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> shutdown\n",
|
||||||
"%s: %d <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD>!\n",
|
"%s: %d <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD>!\n",
|
||||||
"%s: Shutdown <20><> <20>Ϸ<EFBFBD><CFB7><EFBFBD>!\n",
|
"%s: Shutdown <20><> <20>Ϸ<EFBFBD><CFB7><EFBFBD>!\n",
|
||||||
|
@ -81,7 +81,7 @@ character-set=latin1
|
|||||||
"Blob kolonne '%-.64s' kan ikkje brukast ved spesifikasjon av nyklar",
|
"Blob kolonne '%-.64s' kan ikkje brukast ved spesifikasjon av nyklar",
|
||||||
"For stor nykkellengde for felt '%-.64s' (maks = %d). Bruk BLOB istadenfor",
|
"For stor nykkellengde for felt '%-.64s' (maks = %d). Bruk BLOB istadenfor",
|
||||||
"Bare eitt auto felt kan v<>re definert som n<>kkel.",
|
"Bare eitt auto felt kan v<>re definert som n<>kkel.",
|
||||||
"%s: klar for tilkoblingar\n",
|
"%s: klar for tilkoblingar",
|
||||||
"%s: Normal nedkopling\n",
|
"%s: Normal nedkopling\n",
|
||||||
"%s: Oppdaga signal %d. Avsluttar!\n",
|
"%s: Oppdaga signal %d. Avsluttar!\n",
|
||||||
"%s: Nedkopling komplett\n",
|
"%s: Nedkopling komplett\n",
|
||||||
|
@ -81,7 +81,7 @@ character-set=latin1
|
|||||||
"Blob felt '%-.64s' kan ikke brukes ved spesifikasjon av n<>kler",
|
"Blob felt '%-.64s' kan ikke brukes ved spesifikasjon av n<>kler",
|
||||||
"For stor n<>kkellengde for kolonne '%-.64s' (maks = %d). Bruk BLOB istedenfor",
|
"For stor n<>kkellengde for kolonne '%-.64s' (maks = %d). Bruk BLOB istedenfor",
|
||||||
"Bare ett auto felt kan v<>re definert som n<>kkel.",
|
"Bare ett auto felt kan v<>re definert som n<>kkel.",
|
||||||
"%s: klar for tilkoblinger\n",
|
"%s: klar for tilkoblinger",
|
||||||
"%s: Normal avslutning\n",
|
"%s: Normal avslutning\n",
|
||||||
"%s: Oppdaget signal %d. Avslutter!\n",
|
"%s: Oppdaget signal %d. Avslutter!\n",
|
||||||
"%s: Avslutning komplett\n",
|
"%s: Avslutning komplett\n",
|
||||||
|
@ -83,7 +83,7 @@ character-set=latin2
|
|||||||
"Kolumna typu Blob '%-.64s' nie mo<6D>e by<62> u<>yta w specyfikacji klucza",
|
"Kolumna typu Blob '%-.64s' nie mo<6D>e by<62> u<>yta w specyfikacji klucza",
|
||||||
"Zbyt du<64>a d<>ugo?<3F> kolumny '%-.64s' (maks. = %d). W zamian u<>yj typu BLOB",
|
"Zbyt du<64>a d<>ugo?<3F> kolumny '%-.64s' (maks. = %d). W zamian u<>yj typu BLOB",
|
||||||
"W tabeli mo<6D>e by<62> tylko jedno pole auto i musi ono by<62> zdefiniowane jako klucz",
|
"W tabeli mo<6D>e by<62> tylko jedno pole auto i musi ono by<62> zdefiniowane jako klucz",
|
||||||
"%s: gotowe do po<70>?czenia\n",
|
"%s: gotowe do po<70>?czenia",
|
||||||
"%s: Standardowe zako<6B>czenie dzia<69>ania\n",
|
"%s: Standardowe zako<6B>czenie dzia<69>ania\n",
|
||||||
"%s: Otrzymano sygna<6E> %d. Ko<4B>czenie dzia<69>ania!\n",
|
"%s: Otrzymano sygna<6E> %d. Ko<4B>czenie dzia<69>ania!\n",
|
||||||
"%s: Zako<6B>czenie dzia<69>ania wykonane\n",
|
"%s: Zako<6B>czenie dzia<69>ania wykonane\n",
|
||||||
|
@ -80,7 +80,7 @@ character-set=latin1
|
|||||||
"Coluna BLOB '%-.64s' n<>o pode ser utilizada na especifica<63><61>o de chave para o tipo de tabela usado",
|
"Coluna BLOB '%-.64s' n<>o pode ser utilizada na especifica<63><61>o de chave para o tipo de tabela usado",
|
||||||
"Comprimento da coluna '%-.64s' grande demais (max = %d); use BLOB em seu lugar",
|
"Comprimento da coluna '%-.64s' grande demais (max = %d); use BLOB em seu lugar",
|
||||||
"Defini<6E><69>o incorreta de tabela. Somente <20> permitido um <20>nico campo auto-incrementado e ele tem que ser definido como chave",
|
"Defini<6E><69>o incorreta de tabela. Somente <20> permitido um <20>nico campo auto-incrementado e ele tem que ser definido como chave",
|
||||||
"%s: Pronto para conex<65>es\n",
|
"%s: Pronto para conex<65>es",
|
||||||
"%s: 'Shutdown' normal\n",
|
"%s: 'Shutdown' normal\n",
|
||||||
"%s: Obteve sinal %d. Abortando!\n",
|
"%s: Obteve sinal %d. Abortando!\n",
|
||||||
"%s: 'Shutdown' completo\n",
|
"%s: 'Shutdown' completo\n",
|
||||||
|
@ -83,7 +83,7 @@ character-set=latin2
|
|||||||
"Coloana de tip BLOB '%-.64s' nu poate fi folosita in specificarea cheii cu tipul de tabla folosit",
|
"Coloana de tip BLOB '%-.64s' nu poate fi folosita in specificarea cheii cu tipul de tabla folosit",
|
||||||
"Lungimea coloanei '%-.64s' este prea lunga (maximum = %d). Foloseste BLOB mai bine",
|
"Lungimea coloanei '%-.64s' este prea lunga (maximum = %d). Foloseste BLOB mai bine",
|
||||||
"Definitia tabelei este incorecta; Nu pot fi mai mult de o singura coloana de tip auto si aceasta trebuie definita ca cheie",
|
"Definitia tabelei este incorecta; Nu pot fi mai mult de o singura coloana de tip auto si aceasta trebuie definita ca cheie",
|
||||||
"%s: sint gata pentru conectii\n",
|
"%s: sint gata pentru conectii",
|
||||||
"%s: Terminare normala\n",
|
"%s: Terminare normala\n",
|
||||||
"%s: Semnal %d obtinut. Aborting!\n",
|
"%s: Semnal %d obtinut. Aborting!\n",
|
||||||
"%s: Terminare completa\n",
|
"%s: Terminare completa\n",
|
||||||
|
@ -81,7 +81,7 @@ character-set=koi8r
|
|||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> BLOB '%-.64s' <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> BLOB '%-.64s' <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %d). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> BLOB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %d). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> BLOB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: '%s' <20><><EFBFBD><EFBFBD><EFBFBD>: '%s' <20><><EFBFBD><EFBFBD>: %d\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: '%s' <20><><EFBFBD><EFBFBD><EFBFBD>: '%s' <20><><EFBFBD><EFBFBD>: %d",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
||||||
|
@ -87,7 +87,7 @@ character-set=latin2
|
|||||||
"Blob pole '%-.64s' nem<65><6D>e by<62> pou<6F>it<69> ako k<><6B><EFBFBD>",
|
"Blob pole '%-.64s' nem<65><6D>e by<62> pou<6F>it<69> ako k<><6B><EFBFBD>",
|
||||||
"Pr<50>li<6C> ve<76>k<EFBFBD> d<><64>ka pre pole '%-.64s' (maximum = %d). Pou<6F>ite BLOB",
|
"Pr<50>li<6C> ve<76>k<EFBFBD> d<><64>ka pre pole '%-.64s' (maximum = %d). Pou<6F>ite BLOB",
|
||||||
"M<><4D>ete ma<6D> iba jedno AUTO pole a to mus<75> by<62> definovan<61> ako k<><6B><EFBFBD>",
|
"M<><4D>ete ma<6D> iba jedno AUTO pole a to mus<75> by<62> definovan<61> ako k<><6B><EFBFBD>",
|
||||||
"%s: pripraven<65> na spojenie\n",
|
"%s: pripraven<65> na spojenie",
|
||||||
"%s: norm<72>lne ukon<6F>enie\n",
|
"%s: norm<72>lne ukon<6F>enie\n",
|
||||||
"%s: prijat<61> sign<67>l %d, ukon<6F>enie (Abort)!\n",
|
"%s: prijat<61> sign<67>l %d, ukon<6F>enie (Abort)!\n",
|
||||||
"%s: pr<70>ca ukon<6F>en<65>\n",
|
"%s: pr<70>ca ukon<6F>en<65>\n",
|
||||||
|
@ -81,7 +81,7 @@ character-set=latin1
|
|||||||
"La columna Blob '%-.64s' no puede ser usada en una declaracion de clave",
|
"La columna Blob '%-.64s' no puede ser usada en una declaracion de clave",
|
||||||
"Longitud de columna demasiado grande para la columna '%-.64s' (maximo = %d).Usar BLOB en su lugar",
|
"Longitud de columna demasiado grande para la columna '%-.64s' (maximo = %d).Usar BLOB en su lugar",
|
||||||
"Puede ser solamente un campo automatico y este debe ser definido como una clave",
|
"Puede ser solamente un campo automatico y este debe ser definido como una clave",
|
||||||
"%s: preparado para conexiones\n",
|
"%s: preparado para conexiones",
|
||||||
"%s: Apagado normal\n",
|
"%s: Apagado normal\n",
|
||||||
"%s: Recibiendo signal %d. Abortando!\n",
|
"%s: Recibiendo signal %d. Abortando!\n",
|
||||||
"%s: Apagado completado\n",
|
"%s: Apagado completado\n",
|
||||||
|
@ -79,7 +79,7 @@ character-set=latin1
|
|||||||
"En BLOB '%-.64s' kan inte vara nyckel med den anv<6E>nda tabelltypen",
|
"En BLOB '%-.64s' kan inte vara nyckel med den anv<6E>nda tabelltypen",
|
||||||
"F<>r stor kolumnl<6E>ngd angiven f<>r '%-.64s' (max= %d). Anv<6E>nd en BLOB inst<73>llet",
|
"F<>r stor kolumnl<6E>ngd angiven f<>r '%-.64s' (max= %d). Anv<6E>nd en BLOB inst<73>llet",
|
||||||
"Det f<>r finnas endast ett AUTO_INCREMENT-f<>lt och detta m<>ste vara en nyckel",
|
"Det f<>r finnas endast ett AUTO_INCREMENT-f<>lt och detta m<>ste vara en nyckel",
|
||||||
"%s: klar att ta emot klienter\n",
|
"%s: klar att ta emot klienter",
|
||||||
"%s: Normal avslutning\n",
|
"%s: Normal avslutning\n",
|
||||||
"%s: Fick signal %d. Avslutar!\n",
|
"%s: Fick signal %d. Avslutar!\n",
|
||||||
"%s: Avslutning klar\n",
|
"%s: Avslutning klar\n",
|
||||||
|
@ -84,7 +84,7 @@ character-set=koi8u
|
|||||||
"BLOB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Φ <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>Ц <20><><EFBFBD><EFBFBD><EFBFBD>æ",
|
"BLOB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Φ <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>Ц <20><><EFBFBD><EFBFBD><EFBFBD>æ",
|
||||||
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' (max = %d). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> BLOB",
|
"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '%-.64s' (max = %d). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> BLOB",
|
||||||
"<22><>צ<EFBFBD><D7A6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>æ; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>",
|
"<22><>צ<EFBFBD><D7A6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>æ; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20>'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20>'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!\n",
|
||||||
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
"%s: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n",
|
||||||
|
18
sql/slave.cc
18
sql/slave.cc
@ -623,7 +623,7 @@ int start_slave_thread(pthread_handler h_func, pthread_mutex_t *start_lock,
|
|||||||
pthread_mutex_unlock(start_lock);
|
pthread_mutex_unlock(start_lock);
|
||||||
DBUG_RETURN(ER_SLAVE_THREAD);
|
DBUG_RETURN(ER_SLAVE_THREAD);
|
||||||
}
|
}
|
||||||
if (start_cond && cond_lock)
|
if (start_cond && cond_lock) // caller has cond_lock
|
||||||
{
|
{
|
||||||
THD* thd = current_thd;
|
THD* thd = current_thd;
|
||||||
while (start_id == *slave_run_id)
|
while (start_id == *slave_run_id)
|
||||||
@ -633,11 +633,9 @@ int start_slave_thread(pthread_handler h_func, pthread_mutex_t *start_lock,
|
|||||||
"Waiting for slave thread to start");
|
"Waiting for slave thread to start");
|
||||||
pthread_cond_wait(start_cond,cond_lock);
|
pthread_cond_wait(start_cond,cond_lock);
|
||||||
thd->exit_cond(old_msg);
|
thd->exit_cond(old_msg);
|
||||||
|
pthread_mutex_lock(cond_lock); // re-acquire it as exit_cond() released
|
||||||
if (thd->killed)
|
if (thd->killed)
|
||||||
{
|
|
||||||
pthread_mutex_unlock(cond_lock);
|
|
||||||
DBUG_RETURN(ER_SERVER_SHUTDOWN);
|
DBUG_RETURN(ER_SERVER_SHUTDOWN);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (start_lock)
|
if (start_lock)
|
||||||
@ -1705,7 +1703,6 @@ Waiting for the slave SQL thread to free enough relay log space");
|
|||||||
!rli->ignore_log_space_limit)
|
!rli->ignore_log_space_limit)
|
||||||
pthread_cond_wait(&rli->log_space_cond, &rli->log_space_lock);
|
pthread_cond_wait(&rli->log_space_cond, &rli->log_space_lock);
|
||||||
thd->exit_cond(save_proc_info);
|
thd->exit_cond(save_proc_info);
|
||||||
pthread_mutex_unlock(&rli->log_space_lock);
|
|
||||||
DBUG_RETURN(slave_killed);
|
DBUG_RETURN(slave_killed);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2381,6 +2378,9 @@ int st_relay_log_info::wait_for_pos(THD* thd, String* log_name,
|
|||||||
(long) timeout));
|
(long) timeout));
|
||||||
|
|
||||||
pthread_mutex_lock(&data_lock);
|
pthread_mutex_lock(&data_lock);
|
||||||
|
const char *msg= thd->enter_cond(&data_cond, &data_lock,
|
||||||
|
"Waiting for the slave SQL thread to "
|
||||||
|
"advance position");
|
||||||
/*
|
/*
|
||||||
This function will abort when it notices that some CHANGE MASTER or
|
This function will abort when it notices that some CHANGE MASTER or
|
||||||
RESET MASTER has changed the master info.
|
RESET MASTER has changed the master info.
|
||||||
@ -2482,9 +2482,6 @@ int st_relay_log_info::wait_for_pos(THD* thd, String* log_name,
|
|||||||
//wait for master update, with optional timeout.
|
//wait for master update, with optional timeout.
|
||||||
|
|
||||||
DBUG_PRINT("info",("Waiting for master update"));
|
DBUG_PRINT("info",("Waiting for master update"));
|
||||||
const char* msg = thd->enter_cond(&data_cond, &data_lock,
|
|
||||||
"Waiting for the slave SQL thread to \
|
|
||||||
advance position");
|
|
||||||
/*
|
/*
|
||||||
We are going to pthread_cond_(timed)wait(); if the SQL thread stops it
|
We are going to pthread_cond_(timed)wait(); if the SQL thread stops it
|
||||||
will wake us up.
|
will wake us up.
|
||||||
@ -2506,8 +2503,7 @@ advance position");
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
pthread_cond_wait(&data_cond, &data_lock);
|
pthread_cond_wait(&data_cond, &data_lock);
|
||||||
DBUG_PRINT("info",("Got signal of master update"));
|
DBUG_PRINT("info",("Got signal of master update or timed out"));
|
||||||
thd->exit_cond(msg);
|
|
||||||
if (error == ETIMEDOUT || error == ETIME)
|
if (error == ETIMEDOUT || error == ETIME)
|
||||||
{
|
{
|
||||||
error= -1;
|
error= -1;
|
||||||
@ -2519,7 +2515,7 @@ advance position");
|
|||||||
}
|
}
|
||||||
|
|
||||||
err:
|
err:
|
||||||
pthread_mutex_unlock(&data_lock);
|
thd->exit_cond(msg);
|
||||||
DBUG_PRINT("exit",("killed: %d abort: %d slave_running: %d \
|
DBUG_PRINT("exit",("killed: %d abort: %d slave_running: %d \
|
||||||
improper_arguments: %d timed_out: %d",
|
improper_arguments: %d timed_out: %d",
|
||||||
(int) thd->killed,
|
(int) thd->killed,
|
||||||
|
@ -542,22 +542,30 @@ static ulong get_sort(uint count,...)
|
|||||||
va_start(args,count);
|
va_start(args,count);
|
||||||
ulong sort=0;
|
ulong sort=0;
|
||||||
|
|
||||||
|
/* Should not use this function with more than 4 arguments for compare. */
|
||||||
|
DBUG_ASSERT(count <= 4);
|
||||||
|
|
||||||
while (count--)
|
while (count--)
|
||||||
{
|
{
|
||||||
char *str=va_arg(args,char*);
|
char *start, *str= va_arg(args,char*);
|
||||||
uint chars=0,wild=0;
|
uint chars= 0;
|
||||||
|
uint wild_pos= 0; /* first wildcard position */
|
||||||
|
|
||||||
if (str)
|
if (start= str)
|
||||||
{
|
{
|
||||||
for (; *str ; str++)
|
for (; *str ; str++)
|
||||||
{
|
{
|
||||||
if (*str == wild_many || *str == wild_one || *str == wild_prefix)
|
if (*str == wild_many || *str == wild_one || *str == wild_prefix)
|
||||||
wild++;
|
{
|
||||||
|
wild_pos= str - start + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
chars++;
|
chars++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sort= (sort << 8) + (wild ? 1 : chars ? 2 : 0);
|
sort= (sort << 8) + (wild_pos ? (wild_pos > 127 ? 127 : wild_pos) :
|
||||||
|
(chars ? 128 : 0));
|
||||||
}
|
}
|
||||||
va_end(args);
|
va_end(args);
|
||||||
return sort;
|
return sort;
|
||||||
|
@ -34,9 +34,6 @@
|
|||||||
|
|
||||||
#define MAX_TREEMEM 8192
|
#define MAX_TREEMEM 8192
|
||||||
#define MAX_TREE_ELEMENTS 256
|
#define MAX_TREE_ELEMENTS 256
|
||||||
#define UINT_MAX16 0xffff
|
|
||||||
#define UINT_MAX24 0xffffff
|
|
||||||
#define UINT_MAX32 0xffffffff
|
|
||||||
|
|
||||||
int sortcmp2(void* cmp_arg __attribute__((unused)),
|
int sortcmp2(void* cmp_arg __attribute__((unused)),
|
||||||
const String *a,const String *b)
|
const String *a,const String *b)
|
||||||
|
@ -434,8 +434,18 @@ void THD::awake(bool prepare_to_die)
|
|||||||
exits the cond in the time between read and broadcast, but that is
|
exits the cond in the time between read and broadcast, but that is
|
||||||
ok since all we want to do is to make the victim thread get out
|
ok since all we want to do is to make the victim thread get out
|
||||||
of waiting on current_cond.
|
of waiting on current_cond.
|
||||||
|
If we see a non-zero current_cond: it cannot be an old value (because
|
||||||
|
then exit_cond() should have run and it can't because we have mutex); so
|
||||||
|
it is the true value but maybe current_mutex is not yet non-zero (we're
|
||||||
|
in the middle of enter_cond() and there is a "memory order
|
||||||
|
inversion"). So we test the mutex too to not lock 0.
|
||||||
|
Note that there is a small chance we fail to kill. If victim has locked
|
||||||
|
current_mutex, and hasn't entered enter_cond(), then we don't know it's
|
||||||
|
going to wait on cond. Then victim goes into its cond "forever" (until
|
||||||
|
we issue a second KILL). True we have set its thd->killed but it may not
|
||||||
|
see it immediately and so may have time to reach the cond_wait().
|
||||||
*/
|
*/
|
||||||
if (mysys_var->current_cond)
|
if (mysys_var->current_cond && mysys_var->current_mutex)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(mysys_var->current_mutex);
|
pthread_mutex_lock(mysys_var->current_mutex);
|
||||||
pthread_cond_broadcast(mysys_var->current_cond);
|
pthread_cond_broadcast(mysys_var->current_cond);
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user