1
0
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:
unknown
2004-08-18 19:57:55 +02:00
107 changed files with 995 additions and 258 deletions

View File

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

View File

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

View File

@ -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" > $@

View File

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

View File

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

View File

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

View File

@ -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.*"

View File

@ -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 */

View File

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

View File

@ -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 */

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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) {

View File

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

View File

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

View File

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

View File

@ -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);
} }
/************************************************************************* /*************************************************************************

View 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");

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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) {

View File

@ -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=""

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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 */
} }
} }

View File

@ -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,
&not_used)) >= 0) &not_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;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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.%

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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) {}

View File

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

View File

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

View File

@ -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.",

View File

@ -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 */

View File

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

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

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

View File

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

View File

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

View File

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