mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge latest 5.1 into performance version
This commit is contained in:
commit
568cc84dd5
513 changed files with 193036 additions and 238182 deletions
25
.bzrignore
25
.bzrignore
|
@ -3032,3 +3032,28 @@ mysql-test/bug36522.tar
|
|||
mysql-test/t.log
|
||||
mysql-test/tps.log
|
||||
libmysqld/event_parse_data.cc
|
||||
autom4te.cache
|
||||
sql/share/czech
|
||||
sql/share/danish
|
||||
sql/share/dutch
|
||||
sql/share/english
|
||||
sql/share/estonian
|
||||
sql/share/french
|
||||
sql/share/german
|
||||
sql/share/greek
|
||||
sql/share/hungarian
|
||||
sql/share/italian
|
||||
sql/share/japanese
|
||||
sql/share/japanese-sjis
|
||||
sql/share/korean
|
||||
sql/share/norwegian
|
||||
sql/share/norwegian-ny
|
||||
sql/share/polish
|
||||
sql/share/portuguese
|
||||
sql/share/romanian
|
||||
sql/share/russian
|
||||
sql/share/serbian
|
||||
sql/share/slovak
|
||||
sql/share/spanish
|
||||
sql/share/swedish
|
||||
sql/share/ukrainian
|
||||
|
|
|
@ -80,7 +80,7 @@ path=`dirname $0`
|
|||
. "$path/check-cpu"
|
||||
|
||||
export AM_MAKEFLAGS
|
||||
AM_MAKEFLAGS="-j 4"
|
||||
AM_MAKEFLAGS="-j 6"
|
||||
|
||||
# SSL library to use.--with-ssl will select our bundled yaSSL
|
||||
# implementation of SSL. To use openSSl you will nee too point out
|
||||
|
@ -105,7 +105,7 @@ if [ "x$warning_mode" != "xpedantic" ]; then
|
|||
cxx_warnings="$cxx_warnings -Wreorder"
|
||||
cxx_warnings="$cxx_warnings -Wctor-dtor-privacy -Wnon-virtual-dtor"
|
||||
# Added unless --with-debug=full
|
||||
debug_extra_cflags="-O1 -Wuninitialized"
|
||||
debug_extra_cflags="-O0 -g3 -gdwarf-2" #1 -Wuninitialized"
|
||||
else
|
||||
warnings="-W -Wall -ansi -pedantic -Wno-long-long -Wno-unused -D_POSIX_SOURCE"
|
||||
c_warnings="$warnings"
|
||||
|
|
|
@ -13,34 +13,51 @@ path=`dirname $0`
|
|||
|
||||
# Default to gcc for CC and CXX
|
||||
if test -z "$CXX" ; then
|
||||
export CXX=gcc
|
||||
CXX=gcc
|
||||
# Set some required compile options
|
||||
if test -z "$CXXFLAGS" ; then
|
||||
export CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti"
|
||||
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$CC" ; then
|
||||
export CC=gcc
|
||||
CC=gcc
|
||||
fi
|
||||
|
||||
|
||||
# Use ccache, if available
|
||||
if ccache -V > /dev/null 2>&1
|
||||
then
|
||||
if ! (echo "$CC" | grep "ccache" > /dev/null)
|
||||
if echo "$CC" | grep "ccache" > /dev/null
|
||||
then
|
||||
export CC="ccache $CC"
|
||||
:
|
||||
else
|
||||
CC="ccache $CC"
|
||||
fi
|
||||
if ! (echo "$CXX" | grep "ccache" > /dev/null)
|
||||
if echo "$CXX" | grep "ccache" > /dev/null
|
||||
then
|
||||
export CXX="ccache $CXX"
|
||||
:
|
||||
else
|
||||
CXX="ccache $CXX"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$MAKE"
|
||||
then
|
||||
if gmake -v > /dev/null 2>&1
|
||||
then
|
||||
MAKE="gmake"
|
||||
else
|
||||
MAKE="make"
|
||||
fi
|
||||
fi
|
||||
|
||||
export CC CXX MAKE
|
||||
|
||||
# Make sure to enable all features that affect "make dist"
|
||||
# Remember that configure restricts the man pages to the configured features !
|
||||
./configure \
|
||||
--with-embedded-server \
|
||||
--with-ndbcluster
|
||||
make
|
||||
$MAKE
|
||||
|
||||
|
|
7
BUILD/compile-solaris-amd64-forte
Normal file → Executable file
7
BUILD/compile-solaris-amd64-forte
Normal file → Executable file
|
@ -7,22 +7,23 @@ path=`dirname $0`
|
|||
. "$path/autorun.sh"
|
||||
|
||||
# For "optimal" code for this computer add -fast to EXTRA
|
||||
# To compile 64 bit, add -xarch=v9 to EXTRA_64_BIT
|
||||
# To compile 64 bit, add -m64 to EXTRA_64_BIT
|
||||
|
||||
EXTRA_64_BIT="-xarch=amd64"
|
||||
EXTRA_64_BIT="-m64"
|
||||
EXTRA="-fast"
|
||||
|
||||
#
|
||||
# The following should not need to be touched
|
||||
#
|
||||
|
||||
export CC CXX CFLAGS CXXFLAGS
|
||||
export CC CXX CFLAGS CXXFLAGS LIBS
|
||||
STD="-g -mt -D_FORTEC_ $EXTRA $EXTRA_64_BIT"
|
||||
ASFLAGS="$EXTRA_64_BIT"
|
||||
CC=cc-5.0
|
||||
CFLAGS="-Xa -xstrconst $STD"
|
||||
CXX=CC
|
||||
CXXFLAGS="-noex $STD"
|
||||
LIBS=-lmtmalloc
|
||||
./configure \
|
||||
--prefix=/usr/local/mysql \
|
||||
--localstatedir=/usr/local/mysql/data \
|
||||
|
|
|
@ -6,8 +6,8 @@ gmake -k clean || true
|
|||
path=`dirname $0`
|
||||
. "$path/autorun.sh"
|
||||
|
||||
# To compile 64 bit, add -xarch=amd64 to EXTRA_64_BIT
|
||||
EXTRA_64_BIT="-xarch=amd64"
|
||||
# To compile 64 bit, add -m64 to EXTRA_64_BIT
|
||||
EXTRA_64_BIT="-m64"
|
||||
|
||||
# For "optimal" code for this computer add -fast to EXTRA. Note that
|
||||
# this causes problem with debugging the program since -fast implies
|
||||
|
|
|
@ -9,6 +9,6 @@ PATH=$PATH:/usr/ccs/bin:/usr/local/bin
|
|||
path=`dirname $0`
|
||||
. "$path/autorun.sh"
|
||||
|
||||
CFLAGS="-g -Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -O3 -fno-omit-frame-pointer -mcpu=v8 -Wa,-xarch=v8plusa" CXX=gcc CXXFLAGS="-Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -O3 -fno-omit-frame-pointer -mcpu=v8 -Wa,-xarch=v8plusa -g" ./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client
|
||||
CFLAGS="-g -Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -O3 -fno-omit-frame-pointer -mcpu=v8 -Wa,-xarch=v8plusa" CXX=gcc CXXFLAGS="-Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -O3 -fno-omit-frame-pointer -mcpu=v8 -Wa,-xarch=v8plusa -g" LIBS="-lmtmalloc" ./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client
|
||||
|
||||
make -j 4
|
||||
|
|
|
@ -29,7 +29,7 @@ EXTRA="-fast" # Remove comment to target current machine
|
|||
|
||||
STD="-mt -D_FORTEC_ $EXTRA $EXTRA_64_BIT"
|
||||
CC=cc-5.0 CFLAGS="-Xa -xstrconst $STD" \
|
||||
CXX=CC CXXFLAGS="-noex $STD" \
|
||||
CXX=CC CXXFLAGS="-noex $STD" LIBS="-lmtmalloc" \
|
||||
./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --prefix=$PREFIX
|
||||
|
||||
make -j 4
|
||||
|
|
|
@ -1627,8 +1627,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||
opt_nopager= 1;
|
||||
break;
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||
opt->name);
|
||||
#endif
|
||||
break;
|
||||
case OPT_SERVER_ARG:
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
|
|
|
@ -517,9 +517,14 @@ static int process_all_tables_in_db(char *database)
|
|||
LINT_INIT(res);
|
||||
if (use_db(database))
|
||||
return 1;
|
||||
if (mysql_query(sock, "SHOW /*!50002 FULL*/ TABLES") ||
|
||||
!((res= mysql_store_result(sock))))
|
||||
if ((mysql_query(sock, "SHOW /*!50002 FULL*/ TABLES") &&
|
||||
mysql_query(sock, "SHOW TABLES")) ||
|
||||
!(res= mysql_store_result(sock)))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't get table list for database %s: %s",
|
||||
MYF(0), database, mysql_error(sock));
|
||||
return 1;
|
||||
}
|
||||
|
||||
num_columns= mysql_num_fields(res);
|
||||
|
||||
|
|
|
@ -2396,8 +2396,15 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||
fprintf(sql_file, ",\n %s %s",
|
||||
quote_name(row[0], name_buff, 0), row[1]);
|
||||
}
|
||||
|
||||
/*
|
||||
Stand-in tables are always MyISAM tables as the default
|
||||
engine might have a column-limit that's lower than the
|
||||
number of columns in the view, and MyISAM support is
|
||||
guaranteed to be in the server anyway.
|
||||
*/
|
||||
fprintf(sql_file,
|
||||
"\n) */;\n"
|
||||
"\n) ENGINE=MyISAM */;\n"
|
||||
"SET character_set_client = @saved_cs_client;\n");
|
||||
|
||||
check_io(sql_file);
|
||||
|
|
103
configure.in
103
configure.in
|
@ -10,7 +10,7 @@ AC_CANONICAL_SYSTEM
|
|||
#
|
||||
# When changing major version number please also check switch statement
|
||||
# in mysqlbinlog::check_master_version().
|
||||
AM_INIT_AUTOMAKE(mysql, 5.1.30)
|
||||
AM_INIT_AUTOMAKE(mysql, 5.1.31)
|
||||
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
|
@ -405,12 +405,15 @@ dnl Find paths to some shell programs
|
|||
AC_PATH_PROG(LN, ln, ln)
|
||||
# This must be able to take a -f flag like normal unix ln.
|
||||
AC_PATH_PROG(LN_CP_F, ln, ln)
|
||||
if ! ( expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null ); then
|
||||
# If ln -f does not exists use -s (AFS systems)
|
||||
if test -n "$LN_CP_F"; then
|
||||
LN_CP_F="$LN_CP_F -s"
|
||||
fi
|
||||
fi
|
||||
case $SYSTEM_TYPE in
|
||||
*netware*) ;;
|
||||
*)
|
||||
# If ln -f does not exists use -s (AFS systems)
|
||||
if test -n "$LN_CP_F"; then
|
||||
LN_CP_F="$LN_CP_F -s"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_PATH_PROG(MV, mv, mv)
|
||||
AC_PATH_PROG(RM, rm, rm)
|
||||
|
@ -455,46 +458,50 @@ fi
|
|||
|
||||
AC_SUBST(ABI_CHECK)
|
||||
|
||||
# Lock for PS
|
||||
# Look for PS usage. We use double dollar-signs in FIND_PROC because this
|
||||
# value is written to a makefile, which interprets away one level of
|
||||
# dollar-signs. So, interpretation stages are m4 and then shell in autoconf,
|
||||
# then Make, then shell. The autoconf substitution uses single quotes, so
|
||||
# no unprotected single quotes should appear in the expression.
|
||||
AC_PATH_PROG(PS, ps, ps)
|
||||
AC_MSG_CHECKING("how to check if pid exists")
|
||||
PS=$ac_cv_path_PS
|
||||
# Linux style
|
||||
if $PS p $$ 2> /dev/null | grep `echo $0 | sed s/\-//` > /dev/null
|
||||
if $PS wwwp $$ 2> /dev/null | grep -- "$0" > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
|
||||
FIND_PROC="$PS wwwp \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
|
||||
# Solaris
|
||||
elif $PS -fp $$ 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS -fp $$ 2> /dev/null | grep -- $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS -p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
|
||||
FIND_PROC="$PS -p \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
|
||||
# BSD style
|
||||
elif $PS -uaxww 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS -uaxww 2> /dev/null | grep -- $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS -uaxww | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
|
||||
FIND_PROC="$PS -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
|
||||
# SysV style
|
||||
elif $PS -ef 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS -ef 2> /dev/null | grep -- $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS -ef | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
|
||||
FIND_PROC="$PS -ef | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
|
||||
# Do anybody use this?
|
||||
elif $PS $$ 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS $$ 2> /dev/null | grep -- $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
|
||||
FIND_PROC="$PS \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
|
||||
else
|
||||
case $SYSTEM_TYPE in
|
||||
*freebsd*|*dragonfly*)
|
||||
FIND_PROC="$PS p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
|
||||
FIND_PROC="$PS p \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
|
||||
;;
|
||||
*darwin*)
|
||||
FIND_PROC="$PS -uaxww | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
|
||||
FIND_PROC="$PS -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
|
||||
;;
|
||||
*cygwin*)
|
||||
FIND_PROC="$PS -e | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
|
||||
FIND_PROC="$PS -e | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
|
||||
;;
|
||||
*netware*)
|
||||
FIND_PROC=
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([Could not find the right ps switches. Which OS is this ?. See the Installation chapter in the Reference Manual.])
|
||||
AC_MSG_ERROR([Could not find the right ps and/or grep switches. Which OS is this? See the Installation chapter in the Reference Manual.])
|
||||
esac
|
||||
fi
|
||||
AC_SUBST(FIND_PROC)
|
||||
|
@ -1654,14 +1661,16 @@ else
|
|||
OPTIMIZE_CXXFLAGS="-O"
|
||||
fi
|
||||
|
||||
if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null; then
|
||||
DEBUG_CFLAGS="-g -DDEBUG -sym internal,codeview4"
|
||||
DEBUG_CXXFLAGS="-g -DDEBUG -sym internal,codeview4"
|
||||
DEBUG_OPTIMIZE_CC="-DDEBUG"
|
||||
DEBUG_OPTIMIZE_CXX="-DDEBUG"
|
||||
OPTIMIZE_CFLAGS="-O3 -DNDEBUG"
|
||||
OPTIMIZE_CXXFLAGS="-O3 -DNDEBUG"
|
||||
fi
|
||||
case $SYSTEM_TYPE in
|
||||
*netware*)
|
||||
DEBUG_CFLAGS="-g -DDEBUG -sym internal,codeview4"
|
||||
DEBUG_CXXFLAGS="-g -DDEBUG -sym internal,codeview4"
|
||||
DEBUG_OPTIMIZE_CC="-DDEBUG"
|
||||
DEBUG_OPTIMIZE_CXX="-DDEBUG"
|
||||
OPTIMIZE_CFLAGS="-O3 -DNDEBUG"
|
||||
OPTIMIZE_CXXFLAGS="-O3 -DNDEBUG"
|
||||
;;
|
||||
esac
|
||||
|
||||
# If the user specified CFLAGS, we won't add any optimizations
|
||||
if test -n "$SAVE_CFLAGS"
|
||||
|
@ -1953,15 +1962,18 @@ MYSQL_TZNAME
|
|||
# Do the c++ compiler have a bool type
|
||||
MYSQL_CXX_BOOL
|
||||
# Check some common bugs with gcc 2.8.# on sparc
|
||||
if ! ( expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null ); then
|
||||
MYSQL_CHECK_LONGLONG_TO_FLOAT
|
||||
if test "$ac_cv_conv_longlong_to_float" != "yes"
|
||||
then
|
||||
AC_MSG_ERROR([Your compiler cannot convert a longlong value to a float!
|
||||
If you are using gcc 2.8.# you should upgrade to egcs 1.0.3 or newer and try
|
||||
again])
|
||||
fi
|
||||
fi
|
||||
case $SYSTEM_TYPE in
|
||||
*netware*) ;;
|
||||
*)
|
||||
MYSQL_CHECK_LONGLONG_TO_FLOAT
|
||||
if test "$ac_cv_conv_longlong_to_float" != "yes"
|
||||
then
|
||||
AC_MSG_ERROR([Your compiler cannot convert a longlong value to a float!
|
||||
If you are using gcc 2.8.# you should upgrade to egcs 1.0.3 or newer and try
|
||||
again])
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
AC_CHECK_TYPES([sigset_t, off_t], [], [], [#include <sys/types.h>])
|
||||
AC_CHECK_TYPES([size_t], [], [], [#include <stdio.h>])
|
||||
AC_CHECK_TYPES([u_int32_t])
|
||||
|
@ -2598,11 +2610,12 @@ readline_h_ln_cmd=""
|
|||
readline_link=""
|
||||
want_to_use_readline="no"
|
||||
|
||||
if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null
|
||||
then
|
||||
case $SYSTEM_TYPE in
|
||||
*netware*)
|
||||
# For NetWare, do not need readline
|
||||
echo "Skipping readline"
|
||||
else
|
||||
;;
|
||||
*)
|
||||
if [test "$with_libedit" = "yes"] || [test "$with_libedit" = "undefined"] && [test "$with_readline" = "undefined"]
|
||||
then
|
||||
readline_topdir="cmd-line-utils"
|
||||
|
@ -2655,7 +2668,8 @@ else
|
|||
be built with libreadline. Please use --with-libedit to use
|
||||
the bundled version of libedit instead.])
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(readline_dir)
|
||||
AC_SUBST(readline_topdir)
|
||||
|
@ -2767,6 +2781,9 @@ then
|
|||
sql_server="vio sql"
|
||||
fi
|
||||
|
||||
# "innochecksum" is not in the "innobase/" subdirectory, but should be switched
|
||||
AM_CONDITIONAL([BUILD_INNODB_TOOLS], [test X"$with_plugin_innobase" = Xyes])
|
||||
|
||||
# IMPORTANT - do not modify LIBS past this line - this hack is the only way
|
||||
# I know to add the static NSS magic if we have static NSS libraries with
|
||||
# glibc - Sasha
|
||||
|
|
|
@ -1851,13 +1851,7 @@ static void DBUGOpenFile(CODE_STATE *cs,
|
|||
else
|
||||
{
|
||||
newfile= !EXISTS(name);
|
||||
if (!(fp= fopen(name,
|
||||
#if defined(MSDOS) || defined(__WIN__)
|
||||
append ? "a+c" : "wc"
|
||||
#else
|
||||
append ? "a+" : "w"
|
||||
#endif
|
||||
)))
|
||||
if (!(fp= fopen(name, append ? "a+" : "w")))
|
||||
{
|
||||
(void) fprintf(stderr, ERR_OPEN, cs->process, name);
|
||||
perror("");
|
||||
|
|
|
@ -43,7 +43,12 @@ $(top_builddir)/include/mysqld_ername.h: $(top_builddir)/include/mysqld_error.h
|
|||
$(top_builddir)/include/sql_state.h: $(top_builddir)/include/mysqld_error.h
|
||||
|
||||
bin_PROGRAMS = replace perror resolveip my_print_defaults \
|
||||
resolve_stack_dump mysql_waitpid innochecksum
|
||||
resolve_stack_dump mysql_waitpid
|
||||
# "innochecksum" should be switched
|
||||
if BUILD_INNODB_TOOLS
|
||||
bin_PROGRAMS += innochecksum
|
||||
endif
|
||||
|
||||
noinst_PROGRAMS = charset2html
|
||||
EXTRA_PROGRAMS = comp_err
|
||||
EXTRA_DIST = CMakeLists.txt
|
||||
|
|
|
@ -185,11 +185,36 @@ static const char *get_ha_error_msg(int code)
|
|||
}
|
||||
|
||||
|
||||
#if defined(__WIN__)
|
||||
static my_bool print_win_error_msg(DWORD error, my_bool verbose)
|
||||
{
|
||||
LPTSTR s;
|
||||
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||
FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL, error, 0, (LPTSTR)&s, 0,
|
||||
NULL))
|
||||
{
|
||||
if (verbose)
|
||||
printf("Win32 error code %d: %s", error, s);
|
||||
else
|
||||
puts(s);
|
||||
LocalFree(s);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
int main(int argc,char *argv[])
|
||||
{
|
||||
int error,code,found;
|
||||
const char *msg;
|
||||
char *unknown_error = 0;
|
||||
#if defined(__WIN__)
|
||||
my_bool skip_win_message= 0;
|
||||
#endif
|
||||
MY_INIT(argv[0]);
|
||||
|
||||
if (get_options(&argc,&argv))
|
||||
|
@ -293,9 +318,20 @@ int main(int argc,char *argv[])
|
|||
}
|
||||
if (!found)
|
||||
{
|
||||
fprintf(stderr,"Illegal error code: %d\n", code);
|
||||
error= 1;
|
||||
#if defined(__WIN__)
|
||||
if (!(skip_win_message= !print_win_error_msg((DWORD)code, verbose)))
|
||||
{
|
||||
#endif
|
||||
fprintf(stderr,"Illegal error code: %d\n",code);
|
||||
error=1;
|
||||
#if defined(__WIN__)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if defined(__WIN__)
|
||||
if (!skip_win_message)
|
||||
print_win_error_msg((DWORD)code, verbose);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "yassl_types.hpp" // SignatureAlgorithm
|
||||
#include "buffer.hpp" // input_buffer
|
||||
#include "asn.hpp" // SignerList
|
||||
#include "openssl/ssl.h" // internal and external use
|
||||
#include STL_LIST_FILE
|
||||
#include STL_ALGORITHM_FILE
|
||||
|
||||
|
@ -87,6 +88,7 @@ class CertManager {
|
|||
bool verifyNone_; // no error if verify fails
|
||||
bool failNoCert_;
|
||||
bool sendVerify_;
|
||||
VerifyCallback verifyCallback_; // user verify callback
|
||||
public:
|
||||
CertManager();
|
||||
~CertManager();
|
||||
|
@ -118,6 +120,7 @@ public:
|
|||
void setFailNoCert();
|
||||
void setSendVerify();
|
||||
void setPeerX509(X509*);
|
||||
void setVerifyCallback(VerifyCallback);
|
||||
private:
|
||||
CertManager(const CertManager&); // hide copy
|
||||
CertManager& operator=(const CertManager&); // and assign
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#define SSL_load_error_strings yaSSL_load_error_strings
|
||||
#define SSL_set_session yaSSL_set_session
|
||||
#define SSL_get_session yaSSL_get_session
|
||||
#define SSL_flush_sessions yaSSL_flush_sessions
|
||||
#define SSL_SESSION_set_timeout yaSSL_SESSION_set_timeout
|
||||
#define SSL_CTX_set_session_cache_mode yaSSL_CTX_set_session_cache_mode
|
||||
#define SSL_get_peer_certificate yaSSL_get_peer_certificate
|
||||
|
|
|
@ -170,8 +170,9 @@ enum { /* X509 Constants */
|
|||
X509_V_ERR_CRL_SIGNATURE_FAILURE = 10,
|
||||
X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 11,
|
||||
X509_V_ERR_CRL_HAS_EXPIRED = 12,
|
||||
X509_V_ERR_CERT_REVOKED = 13
|
||||
|
||||
X509_V_ERR_CERT_REVOKED = 13,
|
||||
X509_V_FLAG_CRL_CHECK = 14,
|
||||
X509_V_FLAG_CRL_CHECK_ALL = 15
|
||||
};
|
||||
|
||||
|
||||
|
@ -202,7 +203,8 @@ SSL_CTX* SSL_CTX_new(SSL_METHOD*);
|
|||
SSL* SSL_new(SSL_CTX*);
|
||||
int SSL_set_fd (SSL*, YASSL_SOCKET_T);
|
||||
YASSL_SOCKET_T SSL_get_fd(const SSL*);
|
||||
int SSL_connect(SSL*);
|
||||
int SSL_connect(SSL*); // if you get an error from connect
|
||||
// see note at top of REAMDE
|
||||
int SSL_write(SSL*, const void*, int);
|
||||
int SSL_read(SSL*, void*, int);
|
||||
int SSL_accept(SSL*);
|
||||
|
@ -227,6 +229,7 @@ void SSL_load_error_strings(void);
|
|||
|
||||
int SSL_set_session(SSL *ssl, SSL_SESSION *session);
|
||||
SSL_SESSION* SSL_get_session(SSL* ssl);
|
||||
void SSL_flush_sessions(SSL_CTX *ctx, long tm);
|
||||
long SSL_SESSION_set_timeout(SSL_SESSION*, long);
|
||||
long SSL_CTX_set_session_cache_mode(SSL_CTX* ctx, long mode);
|
||||
X509* SSL_get_peer_certificate(SSL*);
|
||||
|
|
|
@ -667,10 +667,12 @@ struct Parameters {
|
|||
Cipher suites_[MAX_SUITE_SZ];
|
||||
char cipher_name_[MAX_SUITE_NAME];
|
||||
char cipher_list_[MAX_CIPHERS][MAX_SUITE_NAME];
|
||||
bool removeDH_; // for server's later use
|
||||
|
||||
Parameters(ConnectionEnd, const Ciphers&, ProtocolVersion, bool haveDH);
|
||||
|
||||
void SetSuites(ProtocolVersion pv, bool removeDH = false);
|
||||
void SetSuites(ProtocolVersion pv, bool removeDH = false,
|
||||
bool removeRSA = false, bool removeDSA = false);
|
||||
void SetCipherNames();
|
||||
private:
|
||||
Parameters(const Parameters&); // hide copy
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2000-2007 MySQL AB
|
||||
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
|
||||
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
|
||||
|
@ -268,12 +268,14 @@ class Sessions {
|
|||
STL::list<SSL_SESSION*> list_;
|
||||
RandomPool random_; // for session cleaning
|
||||
Mutex mutex_; // no-op for single threaded
|
||||
int count_; // flush counter
|
||||
|
||||
Sessions() {} // only GetSessions can create
|
||||
Sessions() : count_(0) {} // only GetSessions can create
|
||||
public:
|
||||
SSL_SESSION* lookup(const opaque*, SSL_SESSION* copy = 0);
|
||||
void add(const SSL&);
|
||||
void remove(const opaque*);
|
||||
void Flush();
|
||||
|
||||
~Sessions();
|
||||
|
||||
|
@ -425,8 +427,10 @@ private:
|
|||
pem_password_cb passwordCb_;
|
||||
void* userData_;
|
||||
bool sessionCacheOff_;
|
||||
bool sessionCacheFlushOff_;
|
||||
Stats stats_;
|
||||
Mutex mutex_; // for Stats
|
||||
VerifyCallback verifyCallback_;
|
||||
public:
|
||||
explicit SSL_CTX(SSL_METHOD* meth);
|
||||
~SSL_CTX();
|
||||
|
@ -437,18 +441,22 @@ public:
|
|||
const Ciphers& GetCiphers() const;
|
||||
const DH_Parms& GetDH_Parms() const;
|
||||
const Stats& GetStats() const;
|
||||
const VerifyCallback getVerifyCallback() const;
|
||||
pem_password_cb GetPasswordCb() const;
|
||||
void* GetUserData() const;
|
||||
bool GetSessionCacheOff() const;
|
||||
bool GetSessionCacheFlushOff() const;
|
||||
|
||||
void setVerifyPeer();
|
||||
void setVerifyNone();
|
||||
void setFailNoCert();
|
||||
void setVerifyCallback(VerifyCallback);
|
||||
bool SetCipherList(const char*);
|
||||
bool SetDH(const DH&);
|
||||
void SetPasswordCb(pem_password_cb cb);
|
||||
void SetUserData(void*);
|
||||
void SetSessionCacheOff();
|
||||
void SetSessionCacheFlushOff();
|
||||
|
||||
void IncrementStats(StatsField);
|
||||
void AddCA(x509* ca);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2000-2007 MySQL AB
|
||||
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
|
||||
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
|
||||
|
@ -29,6 +29,13 @@
|
|||
#include "type_traits.hpp"
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// disable conversion warning
|
||||
// 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy
|
||||
#pragma warning(disable:4244 4996)
|
||||
#endif
|
||||
|
||||
|
||||
namespace yaSSL {
|
||||
|
||||
#define YASSL_LIB
|
||||
|
@ -163,7 +170,7 @@ const int RMD_LEN = 20; // RIPEMD-160 digest length
|
|||
const int PREFIX = 3; // up to 3 prefix letters for secret rounds
|
||||
const int KEY_PREFIX = 7; // up to 7 prefix letters for key rounds
|
||||
const int FORTEZZA_MAX = 128; // Maximum Fortezza Key length
|
||||
const int MAX_SUITE_SZ = 64; // 32 max suites * sizeof(suite)
|
||||
const int MAX_SUITE_SZ = 128; // 64 max suites * sizeof(suite)
|
||||
const int MAX_SUITE_NAME = 48; // max length of suite name
|
||||
const int MAX_CIPHERS = 32; // max supported ciphers for cipher list
|
||||
const int SIZEOF_ENUM = 1; // SSL considers an enum 1 byte, not 4
|
||||
|
@ -205,6 +212,7 @@ const int SEED_LEN = RAN_LEN * 2; // TLS seed, client + server random
|
|||
const int DEFAULT_TIMEOUT = 500; // Default Session timeout in seconds
|
||||
const int MAX_RECORD_SIZE = 16384; // 2^14, max size by standard
|
||||
const int COMPRESS_EXTRA = 1024; // extra compression possible addition
|
||||
const int SESSION_FLUSH_COUNT = 256; // when to flush session cache
|
||||
|
||||
|
||||
typedef uint8 Cipher; // first byte is always 0x00 for SSLv3 & TLS
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2000-2007 MySQL AB
|
||||
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
|
||||
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
|
||||
|
@ -24,6 +24,7 @@
|
|||
#include "runtime.hpp"
|
||||
#include "cert_wrapper.hpp"
|
||||
#include "yassl_int.hpp"
|
||||
#include "error.hpp"
|
||||
|
||||
#if defined(USE_CML_LIB)
|
||||
#include "cmapi_cpp.h"
|
||||
|
@ -90,7 +91,7 @@ opaque* x509::use_buffer()
|
|||
//CertManager
|
||||
CertManager::CertManager()
|
||||
: peerX509_(0), verifyPeer_(false), verifyNone_(false), failNoCert_(false),
|
||||
sendVerify_(false)
|
||||
sendVerify_(false), verifyCallback_(0)
|
||||
{}
|
||||
|
||||
|
||||
|
@ -154,6 +155,12 @@ void CertManager::setSendVerify()
|
|||
}
|
||||
|
||||
|
||||
void CertManager::setVerifyCallback(VerifyCallback vc)
|
||||
{
|
||||
verifyCallback_ = vc;
|
||||
}
|
||||
|
||||
|
||||
void CertManager::AddPeerCert(x509* x)
|
||||
{
|
||||
peerList_.push_back(x); // take ownership
|
||||
|
@ -236,7 +243,7 @@ uint CertManager::get_privateKeyLength() const
|
|||
int CertManager::Validate()
|
||||
{
|
||||
CertList::reverse_iterator last = peerList_.rbegin();
|
||||
int count = peerList_.size();
|
||||
size_t count = peerList_.size();
|
||||
|
||||
while ( count > 1 ) {
|
||||
TaoCrypt::Source source((*last)->get_buffer(), (*last)->get_length());
|
||||
|
@ -257,7 +264,8 @@ int CertManager::Validate()
|
|||
TaoCrypt::Source source((*last)->get_buffer(), (*last)->get_length());
|
||||
TaoCrypt::CertDecoder cert(source, true, &signers_, verifyNone_);
|
||||
|
||||
if (int err = cert.GetError().What())
|
||||
int err = cert.GetError().What();
|
||||
if ( err )
|
||||
return err;
|
||||
|
||||
uint sz = cert.GetPublicKey().size();
|
||||
|
@ -269,13 +277,25 @@ int CertManager::Validate()
|
|||
else
|
||||
peerKeyType_ = dsa_sa_algo;
|
||||
|
||||
int iSz = strlen(cert.GetIssuer()) + 1;
|
||||
int sSz = strlen(cert.GetCommonName()) + 1;
|
||||
int bSz = strlen(cert.GetBeforeDate()) + 1;
|
||||
int aSz = strlen(cert.GetAfterDate()) + 1;
|
||||
size_t iSz = strlen(cert.GetIssuer()) + 1;
|
||||
size_t sSz = strlen(cert.GetCommonName()) + 1;
|
||||
int bSz = (int)strlen(cert.GetBeforeDate()) + 1;
|
||||
int aSz = (int)strlen(cert.GetAfterDate()) + 1;
|
||||
peerX509_ = NEW_YS X509(cert.GetIssuer(), iSz, cert.GetCommonName(),
|
||||
sSz, cert.GetBeforeDate(), bSz,
|
||||
cert.GetAfterDate(), aSz);
|
||||
|
||||
if (err == TaoCrypt::SIG_OTHER_E && verifyCallback_) {
|
||||
X509_STORE_CTX store;
|
||||
store.error = err;
|
||||
store.error_depth = static_cast<int>(count) - 1;
|
||||
store.current_cert = peerX509_;
|
||||
|
||||
int ok = verifyCallback_(0, &store);
|
||||
if (ok) return 0;
|
||||
}
|
||||
|
||||
if (err == TaoCrypt::SIG_OTHER_E) return err;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2000-2007 MySQL AB
|
||||
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
|
||||
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
|
||||
|
@ -245,6 +245,7 @@ YASSL_SOCKET_T SSL_get_fd(const SSL* ssl)
|
|||
}
|
||||
|
||||
|
||||
// if you get an error from connect see note at top of README
|
||||
int SSL_connect(SSL* ssl)
|
||||
{
|
||||
if (ssl->GetError() == YasslError(SSL_ERROR_WANT_READ))
|
||||
|
@ -447,6 +448,9 @@ long SSL_CTX_set_session_cache_mode(SSL_CTX* ctx, long mode)
|
|||
if (mode == SSL_SESS_CACHE_OFF)
|
||||
ctx->SetSessionCacheOff();
|
||||
|
||||
if (mode == SSL_SESS_CACHE_NO_AUTO_CLEAR)
|
||||
ctx->SetSessionCacheFlushOff();
|
||||
|
||||
return SSL_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -493,6 +497,15 @@ long SSL_get_default_timeout(SSL* /*ssl*/)
|
|||
}
|
||||
|
||||
|
||||
void SSL_flush_sessions(SSL_CTX *ctx, long /* tm */)
|
||||
{
|
||||
if (ctx->GetSessionCacheOff())
|
||||
return;
|
||||
|
||||
GetSessions().Flush();
|
||||
}
|
||||
|
||||
|
||||
const char* SSL_get_cipher_name(SSL* ssl)
|
||||
{
|
||||
return SSL_get_cipher(ssl);
|
||||
|
@ -560,7 +573,7 @@ int SSL_get_error(SSL* ssl, int /*previous*/)
|
|||
only need to turn on for client, becuase server on by default if built in
|
||||
but calling for server will tell you whether it's available or not
|
||||
*/
|
||||
int SSL_set_compression(SSL* ssl)
|
||||
int SSL_set_compression(SSL* ssl) /* Chad didn't rename to ya~ because it is prob. bug. */
|
||||
{
|
||||
return ssl->SetCompression();
|
||||
}
|
||||
|
@ -604,7 +617,7 @@ char* X509_NAME_oneline(X509_NAME* name, char* buffer, int sz)
|
|||
{
|
||||
if (!name->GetName()) return buffer;
|
||||
|
||||
int len = strlen(name->GetName()) + 1;
|
||||
int len = (int)strlen(name->GetName()) + 1;
|
||||
int copySz = min(len, sz);
|
||||
|
||||
if (!buffer) {
|
||||
|
@ -693,7 +706,7 @@ int SSL_CTX_use_PrivateKey_file(SSL_CTX* ctx, const char* file, int format)
|
|||
}
|
||||
|
||||
|
||||
void SSL_CTX_set_verify(SSL_CTX* ctx, int mode, VerifyCallback /*vc*/)
|
||||
void SSL_CTX_set_verify(SSL_CTX* ctx, int mode, VerifyCallback vc)
|
||||
{
|
||||
if (mode & SSL_VERIFY_PEER)
|
||||
ctx->setVerifyPeer();
|
||||
|
@ -703,6 +716,8 @@ void SSL_CTX_set_verify(SSL_CTX* ctx, int mode, VerifyCallback /*vc*/)
|
|||
|
||||
if (mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)
|
||||
ctx->setFailNoCert();
|
||||
|
||||
ctx->setVerifyCallback(vc);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1450,6 +1465,8 @@ unsigned long err_helper(bool peek = false)
|
|||
default :
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0; // shut up compiler
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2000-2007 MySQL AB
|
||||
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
|
||||
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
|
||||
|
@ -26,6 +26,11 @@
|
|||
#include "openssl/ssl.h" // SSL_ERROR_WANT_READ
|
||||
#include <string.h> // strncpy
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy
|
||||
#pragma warning(disable: 4996)
|
||||
#endif
|
||||
|
||||
namespace yaSSL {
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2000-2007 MySQL AB
|
||||
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
|
||||
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
|
||||
|
@ -136,9 +136,19 @@ void DH_Server::build(SSL& ssl)
|
|||
const CertManager& cert = ssl.getCrypto().get_certManager();
|
||||
|
||||
if (ssl.getSecurity().get_parms().sig_algo_ == rsa_sa_algo)
|
||||
{
|
||||
if (cert.get_keyType() != rsa_sa_algo) {
|
||||
ssl.SetError(privateKey_error);
|
||||
return;
|
||||
}
|
||||
auth.reset(NEW_YS RSA(cert.get_privateKey(),
|
||||
cert.get_privateKeyLength(), false));
|
||||
}
|
||||
else {
|
||||
if (cert.get_keyType() != dsa_sa_algo) {
|
||||
ssl.SetError(privateKey_error);
|
||||
return;
|
||||
}
|
||||
auth.reset(NEW_YS DSS(cert.get_privateKey(),
|
||||
cert.get_privateKeyLength(), false));
|
||||
sigSz += DSS_ENCODED_EXTRA;
|
||||
|
@ -436,18 +446,21 @@ Parameters::Parameters(ConnectionEnd ce, const Ciphers& ciphers,
|
|||
pending_ = true; // suite not set yet
|
||||
strncpy(cipher_name_, "NONE", 5);
|
||||
|
||||
removeDH_ = !haveDH; // only use on server side for set suites
|
||||
|
||||
if (ciphers.setSuites_) { // use user set list
|
||||
suites_size_ = ciphers.suiteSz_;
|
||||
memcpy(suites_, ciphers.suites_, ciphers.suiteSz_);
|
||||
SetCipherNames();
|
||||
}
|
||||
else
|
||||
SetSuites(pv, ce == server_end && !haveDH); // defaults
|
||||
SetSuites(pv, ce == server_end && removeDH_); // defaults
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Parameters::SetSuites(ProtocolVersion pv, bool removeDH)
|
||||
void Parameters::SetSuites(ProtocolVersion pv, bool removeDH, bool removeRSA,
|
||||
bool removeDSA)
|
||||
{
|
||||
int i = 0;
|
||||
// available suites, best first
|
||||
|
@ -456,67 +469,87 @@ void Parameters::SetSuites(ProtocolVersion pv, bool removeDH)
|
|||
|
||||
if (isTLS(pv)) {
|
||||
if (!removeDH) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_AES_256_CBC_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_AES_256_CBC_SHA;
|
||||
if (!removeRSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_AES_256_CBC_SHA;
|
||||
}
|
||||
if (!removeDSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_AES_256_CBC_SHA;
|
||||
}
|
||||
}
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_AES_256_CBC_SHA;
|
||||
|
||||
if (!removeDH) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_AES_128_CBC_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_AES_128_CBC_SHA;
|
||||
if (!removeRSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_AES_256_CBC_SHA;
|
||||
}
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_AES_128_CBC_SHA;
|
||||
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_AES_256_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_AES_128_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_3DES_EDE_CBC_RMD160;
|
||||
|
||||
if (!removeDH) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_AES_256_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_AES_128_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD160;
|
||||
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_AES_256_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_AES_128_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD160;
|
||||
}
|
||||
if (!removeRSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_AES_128_CBC_SHA;
|
||||
}
|
||||
if (!removeDSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_AES_128_CBC_SHA;
|
||||
}
|
||||
}
|
||||
if (!removeRSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_AES_128_CBC_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_AES_256_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_AES_128_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_RSA_WITH_3DES_EDE_CBC_RMD160;
|
||||
}
|
||||
if (!removeDH) {
|
||||
if (!removeRSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_AES_256_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_AES_128_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD160;
|
||||
}
|
||||
if (!removeDSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_AES_256_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_AES_128_CBC_RMD160;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD160;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_RSA_WITH_RC4_128_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_RSA_WITH_RC4_128_MD5;
|
||||
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_RSA_WITH_3DES_EDE_CBC_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_RSA_WITH_DES_CBC_SHA;
|
||||
if (!removeRSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_RSA_WITH_RC4_128_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_RSA_WITH_RC4_128_MD5;
|
||||
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_RSA_WITH_3DES_EDE_CBC_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_RSA_WITH_DES_CBC_SHA;
|
||||
}
|
||||
if (!removeDH) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA;
|
||||
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_DHE_RSA_WITH_DES_CBC_SHA;
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_DHE_DSS_WITH_DES_CBC_SHA;
|
||||
if (!removeRSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA;
|
||||
}
|
||||
if (!removeDSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA;
|
||||
}
|
||||
if (!removeRSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_DHE_RSA_WITH_DES_CBC_SHA;
|
||||
}
|
||||
if (!removeDSA) {
|
||||
suites_[i++] = 0x00;
|
||||
suites_[i++] = SSL_DHE_DSS_WITH_DES_CBC_SHA;
|
||||
}
|
||||
}
|
||||
|
||||
suites_size_ = i;
|
||||
|
@ -532,7 +565,7 @@ void Parameters::SetCipherNames()
|
|||
|
||||
for (int j = 0; j < suites; j++) {
|
||||
int index = suites_[j*2 + 1]; // every other suite is suite id
|
||||
int len = strlen(cipher_names[index]) + 1;
|
||||
size_t len = strlen(cipher_names[index]) + 1;
|
||||
strncpy(cipher_list_[pos++], cipher_names[index], len);
|
||||
}
|
||||
cipher_list_[pos][0] = 0;
|
||||
|
@ -1469,7 +1502,19 @@ void ClientHello::Process(input_buffer&, SSL& ssl)
|
|||
// downgrade to SSLv3
|
||||
ssl.useSecurity().use_connection().TurnOffTLS();
|
||||
ProtocolVersion pv = ssl.getSecurity().get_connection().version_;
|
||||
ssl.useSecurity().use_parms().SetSuites(pv); // reset w/ SSL suites
|
||||
bool removeDH = ssl.getSecurity().get_parms().removeDH_;
|
||||
bool removeRSA = false;
|
||||
bool removeDSA = false;
|
||||
|
||||
const CertManager& cm = ssl.getCrypto().get_certManager();
|
||||
if (cm.get_keyType() == rsa_sa_algo)
|
||||
removeDSA = true;
|
||||
else
|
||||
removeRSA = true;
|
||||
|
||||
// reset w/ SSL suites
|
||||
ssl.useSecurity().use_parms().SetSuites(pv, removeDH, removeRSA,
|
||||
removeDSA);
|
||||
}
|
||||
else if (ssl.isTLSv1_1() && client_version_.minor_ == 1)
|
||||
// downgrade to TLSv1, but use same suites
|
||||
|
@ -1515,6 +1560,7 @@ void ClientHello::Process(input_buffer&, SSL& ssl)
|
|||
return;
|
||||
}
|
||||
ssl.matchSuite(cipher_suites_, suite_len_);
|
||||
if (ssl.GetError()) return;
|
||||
ssl.set_pending(ssl.getSecurity().get_parms().suite_[1]);
|
||||
|
||||
if (compression_methods_ == zlib)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2000-2007 MySQL AB
|
||||
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
|
||||
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
|
||||
|
@ -40,28 +40,28 @@
|
|||
|
||||
void* operator new(size_t sz, yaSSL::new_t)
|
||||
{
|
||||
void* ptr = malloc(sz ? sz : 1);
|
||||
if (!ptr) abort();
|
||||
void* ptr = malloc(sz ? sz : 1);
|
||||
if (!ptr) abort();
|
||||
|
||||
return ptr;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
void operator delete(void* ptr, yaSSL::new_t)
|
||||
{
|
||||
if (ptr) free(ptr);
|
||||
if (ptr) free(ptr);
|
||||
}
|
||||
|
||||
|
||||
void* operator new[](size_t sz, yaSSL::new_t nt)
|
||||
{
|
||||
return ::operator new(sz, nt);
|
||||
return ::operator new(sz, nt);
|
||||
}
|
||||
|
||||
|
||||
void operator delete[](void* ptr, yaSSL::new_t nt)
|
||||
{
|
||||
::operator delete(ptr, nt);
|
||||
::operator delete(ptr, nt);
|
||||
}
|
||||
|
||||
namespace yaSSL {
|
||||
|
@ -308,6 +308,20 @@ SSL::SSL(SSL_CTX* ctx)
|
|||
SetError(YasslError(err));
|
||||
return;
|
||||
}
|
||||
else if (serverSide) {
|
||||
// remove RSA or DSA suites depending on cert key type
|
||||
ProtocolVersion pv = secure_.get_connection().version_;
|
||||
|
||||
bool removeDH = secure_.use_parms().removeDH_;
|
||||
bool removeRSA = false;
|
||||
bool removeDSA = false;
|
||||
|
||||
if (cm.get_keyType() == rsa_sa_algo)
|
||||
removeDSA = true;
|
||||
else
|
||||
removeRSA = true;
|
||||
secure_.use_parms().SetSuites(pv, removeDH, removeRSA, removeDSA);
|
||||
}
|
||||
}
|
||||
else if (serverSide) {
|
||||
SetError(no_key_file);
|
||||
|
@ -320,6 +334,7 @@ SSL::SSL(SSL_CTX* ctx)
|
|||
cm.setVerifyNone();
|
||||
if (ctx->getMethod()->failNoCert())
|
||||
cm.setFailNoCert();
|
||||
cm.setVerifyCallback(ctx->getVerifyCallback());
|
||||
|
||||
if (serverSide)
|
||||
crypto_.SetDH(ctx->GetDH_Parms());
|
||||
|
@ -1034,12 +1049,12 @@ void SSL::fillData(Data& data)
|
|||
{
|
||||
if (GetError()) return;
|
||||
uint dataSz = data.get_length(); // input, data size to fill
|
||||
uint elements = buffers_.getData().size();
|
||||
size_t elements = buffers_.getData().size();
|
||||
|
||||
data.set_length(0); // output, actual data filled
|
||||
dataSz = min(dataSz, bufferedData());
|
||||
|
||||
for (uint i = 0; i < elements; i++) {
|
||||
for (size_t i = 0; i < elements; i++) {
|
||||
input_buffer* front = buffers_.getData().front();
|
||||
uint frontSz = front->get_remaining();
|
||||
uint readSz = min(dataSz - data.get_length(), frontSz);
|
||||
|
@ -1063,8 +1078,8 @@ void SSL::fillData(Data& data)
|
|||
void SSL::PeekData(Data& data)
|
||||
{
|
||||
if (GetError()) return;
|
||||
uint dataSz = data.get_length(); // input, data size to fill
|
||||
uint elements = buffers_.getData().size();
|
||||
uint dataSz = data.get_length(); // input, data size to fill
|
||||
size_t elements = buffers_.getData().size();
|
||||
|
||||
data.set_length(0); // output, actual data filled
|
||||
dataSz = min(dataSz, bufferedData());
|
||||
|
@ -1098,9 +1113,9 @@ void SSL::flushBuffer()
|
|||
buffers_.getHandShake().end(),
|
||||
SumBuffer()).total_;
|
||||
output_buffer out(sz);
|
||||
uint elements = buffers_.getHandShake().size();
|
||||
size_t elements = buffers_.getHandShake().size();
|
||||
|
||||
for (uint i = 0; i < elements; i++) {
|
||||
for (size_t i = 0; i < elements; i++) {
|
||||
output_buffer* front = buffers_.getHandShake().front();
|
||||
out.write(front->get_buffer(), front->get_size());
|
||||
|
||||
|
@ -1276,6 +1291,7 @@ void SSL::matchSuite(const opaque* peer, uint length)
|
|||
if (secure_.use_parms().suites_[i] == peer[j]) {
|
||||
secure_.use_parms().suite_[0] = 0x00;
|
||||
secure_.use_parms().suite_[1] = peer[j];
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1284,7 +1300,7 @@ void SSL::matchSuite(const opaque* peer, uint length)
|
|||
|
||||
|
||||
void SSL::set_session(SSL_SESSION* s)
|
||||
{
|
||||
{
|
||||
if (getSecurity().GetContext()->GetSessionCacheOff())
|
||||
return;
|
||||
|
||||
|
@ -1565,13 +1581,19 @@ Errors& GetErrors()
|
|||
|
||||
typedef Mutex::Lock Lock;
|
||||
|
||||
|
||||
|
||||
void Sessions::add(const SSL& ssl)
|
||||
{
|
||||
if (ssl.getSecurity().get_connection().sessionID_Set_) {
|
||||
Lock guard(mutex_);
|
||||
list_.push_back(NEW_YS SSL_SESSION(ssl, random_));
|
||||
Lock guard(mutex_);
|
||||
list_.push_back(NEW_YS SSL_SESSION(ssl, random_));
|
||||
count_++;
|
||||
}
|
||||
|
||||
if (count_ > SESSION_FLUSH_COUNT)
|
||||
if (!ssl.getSecurity().GetContext()->GetSessionCacheFlushOff())
|
||||
Flush();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1660,6 +1682,25 @@ void Sessions::remove(const opaque* id)
|
|||
}
|
||||
|
||||
|
||||
// flush expired sessions from cache
|
||||
void Sessions::Flush()
|
||||
{
|
||||
Lock guard(mutex_);
|
||||
sess_iterator next = list_.begin();
|
||||
uint current = lowResTimer();
|
||||
|
||||
while (next != list_.end()) {
|
||||
sess_iterator si = next;
|
||||
++next;
|
||||
if ( ((*si)->GetBornOn() + (*si)->GetTimeOut()) < current) {
|
||||
del_ptr_zero()(*si);
|
||||
list_.erase(si);
|
||||
}
|
||||
}
|
||||
count_ = 0; // reset flush counter
|
||||
}
|
||||
|
||||
|
||||
// remove a self thread error
|
||||
void Errors::Remove()
|
||||
{
|
||||
|
@ -1764,7 +1805,8 @@ bool SSL_METHOD::multipleProtocol() const
|
|||
|
||||
SSL_CTX::SSL_CTX(SSL_METHOD* meth)
|
||||
: method_(meth), certificate_(0), privateKey_(0), passwordCb_(0),
|
||||
userData_(0), sessionCacheOff_(false)
|
||||
userData_(0), sessionCacheOff_(false), sessionCacheFlushOff_(false),
|
||||
verifyCallback_(0)
|
||||
{}
|
||||
|
||||
|
||||
|
@ -1791,6 +1833,12 @@ SSL_CTX::GetCA_List() const
|
|||
}
|
||||
|
||||
|
||||
const VerifyCallback SSL_CTX::getVerifyCallback() const
|
||||
{
|
||||
return verifyCallback_;
|
||||
}
|
||||
|
||||
|
||||
const x509* SSL_CTX::getCert() const
|
||||
{
|
||||
return certificate_;
|
||||
|
@ -1851,6 +1899,12 @@ bool SSL_CTX::GetSessionCacheOff() const
|
|||
}
|
||||
|
||||
|
||||
bool SSL_CTX::GetSessionCacheFlushOff() const
|
||||
{
|
||||
return sessionCacheFlushOff_;
|
||||
}
|
||||
|
||||
|
||||
void SSL_CTX::SetUserData(void* data)
|
||||
{
|
||||
userData_ = data;
|
||||
|
@ -1863,6 +1917,12 @@ void SSL_CTX::SetSessionCacheOff()
|
|||
}
|
||||
|
||||
|
||||
void SSL_CTX::SetSessionCacheFlushOff()
|
||||
{
|
||||
sessionCacheFlushOff_ = true;
|
||||
}
|
||||
|
||||
|
||||
void SSL_CTX::setVerifyPeer()
|
||||
{
|
||||
method_->setVerifyPeer();
|
||||
|
@ -1881,6 +1941,12 @@ void SSL_CTX::setFailNoCert()
|
|||
}
|
||||
|
||||
|
||||
void SSL_CTX::setVerifyCallback(VerifyCallback vc)
|
||||
{
|
||||
verifyCallback_ = vc;
|
||||
}
|
||||
|
||||
|
||||
bool SSL_CTX::SetDH(const DH& dh)
|
||||
{
|
||||
dhParms_.p_ = dh.p->int_;
|
||||
|
@ -1906,7 +1972,7 @@ bool SSL_CTX::SetCipherList(const char* list)
|
|||
int idx = 0;
|
||||
|
||||
for(;;) {
|
||||
int len;
|
||||
size_t len;
|
||||
prev = haystack;
|
||||
haystack = strstr(haystack, needle);
|
||||
|
||||
|
@ -2316,7 +2382,7 @@ X509::X509(const char* i, size_t iSz, const char* s, size_t sSz,
|
|||
: issuer_(i, iSz), subject_(s, sSz),
|
||||
beforeDate_(b, bSz), afterDate_(a, aSz)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
X509_NAME* X509::GetIssuer()
|
||||
{
|
||||
|
@ -2354,10 +2420,10 @@ ASN1_STRING* X509_NAME::GetEntry(int i)
|
|||
memcpy(entry_.data, &name_[i], sz_ - i);
|
||||
if (entry_.data[sz_ -i - 1]) {
|
||||
entry_.data[sz_ - i] = 0;
|
||||
entry_.length = sz_ - i;
|
||||
entry_.length = int(sz_) - i;
|
||||
}
|
||||
else
|
||||
entry_.length = sz_ - i - 1;
|
||||
entry_.length = int(sz_) - i - 1;
|
||||
entry_.type = 0;
|
||||
|
||||
return &entry_;
|
||||
|
|
|
@ -15,8 +15,9 @@
|
|||
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
# MA 02111-1307, USA
|
||||
|
||||
BUILT_SOURCES = $(HEADERS_GEN) link_sources
|
||||
HEADERS_GEN = mysql_version.h my_config.h
|
||||
BUILT_SOURCES = $(HEADERS_GEN_MAKE) link_sources
|
||||
HEADERS_GEN_CONFIGURE = mysql_version.h
|
||||
HEADERS_GEN_MAKE = my_config.h
|
||||
HEADERS_ABI = mysql.h mysql_com.h mysql_time.h \
|
||||
my_list.h my_alloc.h typelib.h mysql/plugin.h
|
||||
pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \
|
||||
|
@ -25,7 +26,9 @@ pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \
|
|||
decimal.h errmsg.h my_global.h my_net.h \
|
||||
my_getopt.h sslopt-longopts.h my_dir.h \
|
||||
sslopt-vars.h sslopt-case.h sql_common.h keycache.h \
|
||||
m_ctype.h my_attribute.h $(HEADERS_GEN)
|
||||
m_ctype.h my_attribute.h $(HEADERS_GEN_CONFIGURE) \
|
||||
$(HEADERS_GEN_MAKE)
|
||||
|
||||
noinst_HEADERS = config-win.h config-netware.h my_bit.h \
|
||||
heap.h my_bitmap.h my_uctype.h \
|
||||
myisam.h myisampack.h myisammrg.h ft_global.h\
|
||||
|
@ -33,7 +36,7 @@ noinst_HEADERS = config-win.h config-netware.h my_bit.h \
|
|||
my_nosys.h my_alarm.h queues.h rijndael.h sha1.h \
|
||||
my_aes.h my_tree.h my_trie.h hash.h thr_alarm.h \
|
||||
thr_lock.h t_ctype.h violite.h my_md5.h base64.h \
|
||||
mysql_version.h.in my_handler.h my_time.h \
|
||||
my_handler.h my_time.h \
|
||||
my_vle.h my_user.h my_atomic.h atomic/nolock.h \
|
||||
atomic/rwlock.h atomic/x86-gcc.h atomic/x86-msvc.h \
|
||||
atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h
|
||||
|
@ -45,7 +48,7 @@ CLEANFILES = $(BUILT_SOURCES) readline openssl
|
|||
|
||||
|
||||
# Some include files that may be moved and patched by configure
|
||||
DISTCLEANFILES = sched.h $(CLEANFILES)
|
||||
DISTCLEANFILES = sched.h $(CLEANFILES) $(HEADERS_GEN_CONFIGURE)
|
||||
|
||||
link_sources:
|
||||
-$(RM) -f readline openssl
|
||||
|
|
|
@ -21,6 +21,40 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
There was a problem on MacOSX with a shared object ha_example.so.
|
||||
It used hash_search(). During build of ha_example.so no libmysys
|
||||
was specified. Since MacOSX had a hash_search() in the system
|
||||
library, it built the shared object so that the dynamic linker
|
||||
linked hash_search() to the system library, which caused a crash
|
||||
when called. To come around this, we renamed hash_search() to
|
||||
my_hash_search(), as we did long ago with hash_insert() and
|
||||
hash_reset(). However, this time we made the move complete with
|
||||
all names. To keep compatibility, we redefine the old names.
|
||||
Since every C and C++ file, that uses HASH, needs to include
|
||||
this file, the change is complete. Both names could be used
|
||||
in the code, but the my_* versions are recommended now.
|
||||
*/
|
||||
#define hash_get_key my_hash_get_key
|
||||
#define hash_free_key my_hash_free_key
|
||||
#define hash_init my_hash_init
|
||||
#define hash_init2 my_hash_init2
|
||||
#define _hash_init _my_hash_init
|
||||
#define hash_free my_hash_free
|
||||
#define hash_reset my_hash_reset
|
||||
#define hash_element my_hash_element
|
||||
#define hash_search my_hash_search
|
||||
#define hash_first my_hash_first
|
||||
#define hash_next my_hash_next
|
||||
#define hash_insert my_hash_insert
|
||||
#define hash_delete my_hash_delete
|
||||
#define hash_update my_hash_update
|
||||
#define hash_replace my_hash_replace
|
||||
#define hash_check my_hash_check
|
||||
#define hash_clear my_hash_clear
|
||||
#define hash_inited my_hash_inited
|
||||
#define hash_init_opt my_hash_init_opt
|
||||
|
||||
/*
|
||||
Overhead to store an element in hash
|
||||
Can be used to approximate memory consumption for a hash
|
||||
|
@ -30,8 +64,8 @@ extern "C" {
|
|||
/* flags for hash_init */
|
||||
#define HASH_UNIQUE 1 /* hash_insert fails on duplicate key */
|
||||
|
||||
typedef uchar *(*hash_get_key)(const uchar *,size_t*,my_bool);
|
||||
typedef void (*hash_free_key)(void *);
|
||||
typedef uchar *(*my_hash_get_key)(const uchar *,size_t*,my_bool);
|
||||
typedef void (*my_hash_free_key)(void *);
|
||||
|
||||
typedef struct st_hash {
|
||||
size_t key_offset,key_length; /* Length of key if const length */
|
||||
|
@ -39,7 +73,7 @@ typedef struct st_hash {
|
|||
ulong records;
|
||||
uint flags;
|
||||
DYNAMIC_ARRAY array; /* Place for hash_keys */
|
||||
hash_get_key get_key;
|
||||
my_hash_get_key get_key;
|
||||
void (*free)(void *);
|
||||
CHARSET_INFO *charset;
|
||||
} HASH;
|
||||
|
@ -47,30 +81,34 @@ typedef struct st_hash {
|
|||
/* A search iterator state */
|
||||
typedef uint HASH_SEARCH_STATE;
|
||||
|
||||
#define hash_init(A,B,C,D,E,F,G,H) _hash_init(A,0,B,C,D,E,F,G,H CALLER_INFO)
|
||||
#define hash_init2(A,B,C,D,E,F,G,H,I) _hash_init(A,B,C,D,E,F,G,H,I CALLER_INFO)
|
||||
my_bool _hash_init(HASH *hash, uint growth_size,CHARSET_INFO *charset,
|
||||
ulong default_array_elements, size_t key_offset,
|
||||
size_t key_length, hash_get_key get_key,
|
||||
void (*free_element)(void*), uint flags CALLER_INFO_PROTO);
|
||||
void hash_free(HASH *tree);
|
||||
#define my_hash_init(A,B,C,D,E,F,G,H) \
|
||||
_my_hash_init(A,0,B,C,D,E,F,G,H CALLER_INFO)
|
||||
#define my_hash_init2(A,B,C,D,E,F,G,H,I) \
|
||||
_my_hash_init(A,B,C,D,E,F,G,H,I CALLER_INFO)
|
||||
my_bool _my_hash_init(HASH *hash, uint growth_size, CHARSET_INFO *charset,
|
||||
ulong default_array_elements, size_t key_offset,
|
||||
size_t key_length, my_hash_get_key get_key,
|
||||
void (*free_element)(void*),
|
||||
uint flags CALLER_INFO_PROTO);
|
||||
void my_hash_free(HASH *tree);
|
||||
void my_hash_reset(HASH *hash);
|
||||
uchar *hash_element(HASH *hash,ulong idx);
|
||||
uchar *hash_search(const HASH *info, const uchar *key, size_t length);
|
||||
uchar *hash_first(const HASH *info, const uchar *key, size_t length,
|
||||
HASH_SEARCH_STATE *state);
|
||||
uchar *hash_next(const HASH *info, const uchar *key, size_t length,
|
||||
HASH_SEARCH_STATE *state);
|
||||
my_bool my_hash_insert(HASH *info,const uchar *data);
|
||||
my_bool hash_delete(HASH *hash,uchar *record);
|
||||
my_bool hash_update(HASH *hash,uchar *record,uchar *old_key,size_t old_key_length);
|
||||
void hash_replace(HASH *hash, HASH_SEARCH_STATE *state, uchar *new_row);
|
||||
my_bool hash_check(HASH *hash); /* Only in debug library */
|
||||
uchar *my_hash_element(HASH *hash, ulong idx);
|
||||
uchar *my_hash_search(const HASH *info, const uchar *key, size_t length);
|
||||
uchar *my_hash_first(const HASH *info, const uchar *key, size_t length,
|
||||
HASH_SEARCH_STATE *state);
|
||||
uchar *my_hash_next(const HASH *info, const uchar *key, size_t length,
|
||||
HASH_SEARCH_STATE *state);
|
||||
my_bool my_hash_insert(HASH *info, const uchar *data);
|
||||
my_bool my_hash_delete(HASH *hash, uchar *record);
|
||||
my_bool my_hash_update(HASH *hash, uchar *record, uchar *old_key,
|
||||
size_t old_key_length);
|
||||
void my_hash_replace(HASH *hash, HASH_SEARCH_STATE *state, uchar *new_row);
|
||||
my_bool my_hash_check(HASH *hash); /* Only in debug library */
|
||||
|
||||
#define hash_clear(H) bzero((char*) (H),sizeof(*(H)))
|
||||
#define hash_inited(H) ((H)->array.buffer != 0)
|
||||
#define hash_init_opt(A,B,C,D,E,F,G,H) \
|
||||
(!hash_inited(A) && _hash_init(A,0,B,C,D,E,F,G, H CALLER_INFO))
|
||||
#define my_hash_clear(H) bzero((char*) (H), sizeof(*(H)))
|
||||
#define my_hash_inited(H) ((H)->array.buffer != 0)
|
||||
#define my_hash_init_opt(A,B,C,D,E,F,G,H) \
|
||||
(!my_hash_inited(A) && _my_hash_init(A,0,B,C,D,E,F,G, H CALLER_INFO))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -18,11 +18,6 @@
|
|||
#ifndef _global_h
|
||||
#define _global_h
|
||||
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
#define HAVE_REPLICATION
|
||||
#define HAVE_EXTERNAL_CLIENT
|
||||
#endif
|
||||
|
||||
/*
|
||||
InnoDB depends on some MySQL internals which other plugins should not
|
||||
need. This is because of InnoDB's foreign key support, "safe" binlog
|
||||
|
@ -101,6 +96,11 @@
|
|||
#endif
|
||||
#endif /* !EMBEDDED_LIBRARY */
|
||||
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
#define HAVE_REPLICATION
|
||||
#define HAVE_EXTERNAL_CLIENT
|
||||
#endif
|
||||
|
||||
/* Some defines to avoid ifdefs in the code */
|
||||
#ifndef NETWARE_YIELD
|
||||
#define NETWARE_YIELD
|
||||
|
|
|
@ -521,6 +521,7 @@ typedef struct st_my_pthread_fastmutex_t
|
|||
{
|
||||
pthread_mutex_t mutex;
|
||||
uint spins;
|
||||
uint rng_state;
|
||||
} my_pthread_fastmutex_t;
|
||||
void fastmutex_global_init(void);
|
||||
|
||||
|
|
|
@ -29,6 +29,14 @@ extern ulong locks_immediate,locks_waited ;
|
|||
|
||||
enum thr_lock_type { TL_IGNORE=-1,
|
||||
TL_UNLOCK, /* UNLOCK ANY LOCK */
|
||||
/*
|
||||
Parser only! At open_tables() becomes TL_READ or
|
||||
TL_READ_NO_INSERT depending on the binary log format
|
||||
(SBR/RBR) and on the table category (log table).
|
||||
Used for tables that are read by statements which
|
||||
modify tables.
|
||||
*/
|
||||
TL_READ_DEFAULT,
|
||||
TL_READ, /* Read lock */
|
||||
TL_READ_WITH_SHARED_LOCKS,
|
||||
/* High prior. than TL_WRITE. Allow concurrent insert */
|
||||
|
|
|
@ -207,9 +207,7 @@ void STDCALL mysql_server_end()
|
|||
/* If library called my_init(), free memory allocated by it */
|
||||
if (!org_my_init_done)
|
||||
{
|
||||
my_end(MY_DONT_FREE_DBUG);
|
||||
/* Remove TRACING, if enabled by mysql_debug() */
|
||||
DBUG_POP();
|
||||
my_end(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -29,13 +29,13 @@ ADD_DEFINITIONS(-DEMBEDDED_LIBRARY)
|
|||
ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc
|
||||
../../client/mysql.cc ../../client/readline.cc
|
||||
../../client/sql_string.cc)
|
||||
TARGET_LINK_LIBRARIES(mysql_embedded mysys yassl taocrypt zlib debug dbug regex strings wsock32)
|
||||
TARGET_LINK_LIBRARIES(mysql_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||
ADD_DEPENDENCIES(mysql_embedded libmysqld)
|
||||
|
||||
ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.c)
|
||||
TARGET_LINK_LIBRARIES(mysqltest_embedded mysys yassl taocrypt zlib debug dbug regex strings wsock32)
|
||||
TARGET_LINK_LIBRARIES(mysqltest_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||
ADD_DEPENDENCIES(mysqltest_embedded libmysqld)
|
||||
|
||||
ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c)
|
||||
TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug dbug mysys yassl taocrypt zlib strings wsock32)
|
||||
TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||
ADD_DEPENDENCIES(mysql_client_test_embedded libmysqld)
|
||||
|
|
|
@ -384,7 +384,9 @@ static void emb_free_embedded_thd(MYSQL *mysql)
|
|||
thd->clear_data_list();
|
||||
thread_count--;
|
||||
thd->store_globals();
|
||||
thd->unlink();
|
||||
delete thd;
|
||||
my_pthread_setspecific_ptr(THR_THD, 0);
|
||||
mysql->thd=0;
|
||||
}
|
||||
|
||||
|
@ -538,12 +540,7 @@ int init_embedded_server(int argc, char **argv, char **groups)
|
|||
|
||||
(void) thr_setconcurrency(concurrency); // 10 by default
|
||||
|
||||
if (flush_time && flush_time != ~(ulong) 0L)
|
||||
{
|
||||
pthread_t hThread;
|
||||
if (pthread_create(&hThread,&connection_attrib,handle_manager,0))
|
||||
sql_print_error("Warning: Can't create thread to manage maintenance");
|
||||
}
|
||||
start_handle_manager();
|
||||
|
||||
// FIXME initialize binlog_filter and rpl_filter if not already done
|
||||
// corresponding delete is in clean_up()
|
||||
|
@ -627,6 +624,7 @@ void *create_embedded_thd(int client_flag)
|
|||
bzero((char*) &thd->net, sizeof(thd->net));
|
||||
|
||||
thread_count++;
|
||||
threads.append(thd);
|
||||
return thd;
|
||||
err:
|
||||
delete(thd);
|
||||
|
|
|
@ -2,34 +2,6 @@ LIBRARY LIBMYSQLD
|
|||
DESCRIPTION 'MySQL 5.1 Embedded Server Library'
|
||||
VERSION 5.1
|
||||
EXPORTS
|
||||
_dig_vec_upper
|
||||
_dig_vec_lower
|
||||
bmove_upp
|
||||
delete_dynamic
|
||||
free_defaults
|
||||
getopt_compare_strings
|
||||
getopt_ull_limit_value
|
||||
handle_options
|
||||
init_dynamic_array
|
||||
insert_dynamic
|
||||
int2str
|
||||
is_prefix
|
||||
list_add
|
||||
list_delete
|
||||
load_defaults
|
||||
max_allowed_packet
|
||||
my_cgets
|
||||
my_end
|
||||
my_getopt_print_errors
|
||||
my_init
|
||||
my_malloc
|
||||
my_memdup
|
||||
my_no_flags_free
|
||||
my_path
|
||||
my_print_help
|
||||
my_print_variables
|
||||
my_realloc
|
||||
my_strdup
|
||||
mysql_thread_end
|
||||
mysql_thread_init
|
||||
myodbc_remove_escape
|
||||
|
@ -102,47 +74,13 @@ EXPORTS
|
|||
mysql_thread_safe
|
||||
mysql_use_result
|
||||
mysql_warning_count
|
||||
set_dynamic
|
||||
strcend
|
||||
strcont
|
||||
strdup_root
|
||||
strfill
|
||||
strinstr
|
||||
strmake
|
||||
strmov
|
||||
strxmov
|
||||
mysql_server_end
|
||||
mysql_server_init
|
||||
get_tty_password
|
||||
sql_protocol_typelib
|
||||
mysql_get_server_version
|
||||
mysql_set_character_set
|
||||
mysql_sqlstate
|
||||
charsets_dir
|
||||
disabled_my_option
|
||||
my_charset_latin1
|
||||
init_alloc_root
|
||||
my_progname
|
||||
get_charset_name
|
||||
get_charset_by_csname
|
||||
print_defaults
|
||||
find_type
|
||||
strxnmov
|
||||
strend
|
||||
my_fopen
|
||||
my_fclose
|
||||
unpack_filename
|
||||
str2int
|
||||
int10_to_str
|
||||
longlong10_to_str
|
||||
my_snprintf_8bit
|
||||
alloc_root
|
||||
free_root
|
||||
my_read
|
||||
llstr
|
||||
mysql_get_parameters
|
||||
mysql_thread_init
|
||||
mysql_thread_end
|
||||
mysql_stmt_bind_param
|
||||
mysql_stmt_bind_result
|
||||
mysql_stmt_execute
|
||||
|
@ -170,7 +108,3 @@ EXPORTS
|
|||
mysql_stmt_attr_get
|
||||
mysql_stmt_attr_set
|
||||
mysql_stmt_field_count
|
||||
get_defaults_options
|
||||
my_charset_bin
|
||||
my_charset_same
|
||||
modify_defaults_file
|
||||
|
|
|
@ -21,5 +21,9 @@ man1_MANS = @man1_files@
|
|||
man8_MANS = @man8_files@
|
||||
EXTRA_DIST = $(man1_MANS) $(man8_MANS)
|
||||
|
||||
# "make_win_*" are not needed in Unix binary packages,
|
||||
install-data-hook:
|
||||
rm -f $(DESTDIR)$(manlibdir)/man1/make_win_*
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
|
|
@ -125,6 +125,45 @@ drop table t1;
|
|||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/
|
||||
show binlog events from 0;
|
||||
|
||||
|
||||
#
|
||||
# Bug #39182: Binary log producing incompatible character set query from
|
||||
# stored procedure.
|
||||
#
|
||||
reset master;
|
||||
CREATE DATABASE bug39182 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
USE bug39182;
|
||||
CREATE TABLE t1 (a VARCHAR(255) COLLATE utf8_unicode_ci)
|
||||
DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
DELIMITER //;
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE s1 VARCHAR(255);
|
||||
SET s1= "test";
|
||||
CREATE TEMPORARY TABLE tmp1
|
||||
SELECT * FROM t1 WHERE a LIKE CONCAT("%", s1, "%");
|
||||
SELECT
|
||||
COLLATION(NAME_CONST('s1', _utf8'test')) c1,
|
||||
COLLATION(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) c2,
|
||||
COLLATION(s1) c3,
|
||||
COERCIBILITY(NAME_CONST('s1', _utf8'test')) d1,
|
||||
COERCIBILITY(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) d2,
|
||||
COERCIBILITY(s1) d3;
|
||||
DROP TEMPORARY TABLE tmp1;
|
||||
END//
|
||||
|
||||
DELIMITER ;//
|
||||
|
||||
CALL p1();
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE bug39182;
|
||||
USE test;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
# Test of a too big SET INSERT_ID: see if the truncated value goes
|
||||
|
|
|
@ -139,15 +139,6 @@ drop table t1,t2,t3;
|
|||
# table
|
||||
#
|
||||
CREATE TABLE t1(a INT) ENGINE=BLACKHOLE;
|
||||
# NOTE: After exchanging open_ltable() by open_and_lock_tables() in
|
||||
# handle_delayed_insert() to fix problems with MERGE tables (Bug#26379),
|
||||
# problems with INSERT DELAYED and BLACKHOLE popped up. open_ltable()
|
||||
# does not check if the binlogging capabilities of the statement and the
|
||||
# table match. So the below used to succeed. But since INSERT DELAYED
|
||||
# switches to row-based logging in mixed-mode and BLACKHOLE cannot do
|
||||
# row-based logging, it could not really work. Until this problem is
|
||||
# correctly fixed, we have that error here.
|
||||
--error ER_BINLOG_LOGGING_IMPOSSIBLE
|
||||
INSERT DELAYED INTO t1 VALUES(1);
|
||||
DROP TABLE t1;
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
# Actually this test has nothing to do with innodb per se, it just requires
|
||||
# transactional table.
|
||||
#
|
||||
flush status;
|
||||
show status like "binlog_cache_use";
|
||||
show status like "binlog_cache_disk_use";
|
||||
--disable_warnings
|
||||
|
@ -38,12 +39,3 @@ commit;
|
|||
show status like "binlog_cache_use";
|
||||
show status like "binlog_cache_disk_use";
|
||||
drop table t1;
|
||||
|
||||
# Test for testable InnoDB status variables. This test
|
||||
# uses previous ones(pages_created, rows_deleted, ...).
|
||||
show status like "Innodb_buffer_pool_pages_total";
|
||||
show status like "Innodb_page_size";
|
||||
show status like "Innodb_rows_deleted";
|
||||
show status like "Innodb_rows_inserted";
|
||||
show status like "Innodb_rows_updated";
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
eval create table t1 (a int) engine=$engine_type;
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t1.MYI ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t1.MYI ;
|
||||
drop table if exists t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
|
|
32
mysql-test/extra/rpl_tests/rpl_blackhole.test
Normal file
32
mysql-test/extra/rpl_tests/rpl_blackhole.test
Normal file
|
@ -0,0 +1,32 @@
|
|||
# Check replication of one statement assuming that the engine on the
|
||||
# slave is a blackhole engine.
|
||||
|
||||
# Input:
|
||||
# $statement Statement to evaluate, it is assumed to change t1
|
||||
|
||||
# 1. Evaluate statement on master, it is assumed to change t1
|
||||
# 2. Wait for statement to be processed on slave
|
||||
# 3. SELECT from table t1 to see what was written
|
||||
# 4. Compare position on slave before executing statement and after
|
||||
# executing statement. If difference is >0, then something was
|
||||
# written to the binary log on the slave.
|
||||
|
||||
connection slave;
|
||||
let $before = query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||
|
||||
--echo [on master]
|
||||
connection master;
|
||||
eval $statement;
|
||||
|
||||
--echo [on slave]
|
||||
sync_slave_with_master;
|
||||
--echo # Expect 0
|
||||
SELECT COUNT(*) FROM t1;
|
||||
let $after = query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||
let $something_written = `select $after - $before != 0`;
|
||||
if ($something_written) {
|
||||
--echo >>> Something was written to binary log <<<
|
||||
}
|
||||
if (!$something_written) {
|
||||
--echo >>> Nothing was written to binary log <<<
|
||||
}
|
|
@ -442,8 +442,6 @@ SELECT f1();
|
|||
INSERT INTO t1 VALUES (NULL, f2()), (NULL, LAST_INSERT_ID()),
|
||||
(NULL, LAST_INSERT_ID()), (NULL, f2()), (NULL, f2());
|
||||
INSERT INTO t1 VALUES (NULL, f2());
|
||||
INSERT INTO t1 VALUES (NULL, LAST_INSERT_ID()), (NULL, LAST_INSERT_ID(5)),
|
||||
(NULL, @@LAST_INSERT_ID);
|
||||
# Test replication of substitution "IS NULL" -> "= LAST_INSERT_ID".
|
||||
INSERT INTO t1 VALUES (NULL, 0), (NULL, LAST_INSERT_ID());
|
||||
UPDATE t1 SET j= -1 WHERE i IS NULL;
|
||||
|
|
|
@ -471,3 +471,184 @@ source include/diff_tables.inc;
|
|||
connection master;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# Bug #38230 Differences between master and slave after
|
||||
# UPDATE or DELETE with LIMIT with pk
|
||||
#
|
||||
# the regression test verifies consistency via selecting
|
||||
|
||||
--disable_abort_on_error
|
||||
|
||||
--connection master
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
eval CREATE TABLE t1 (
|
||||
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`int_nokey` int(11) NOT NULL,
|
||||
`int_key` int(11) NOT NULL,
|
||||
`date_key` date NOT NULL,
|
||||
`date_nokey` date NOT NULL,
|
||||
`time_key` time NOT NULL,
|
||||
`time_nokey` time NOT NULL,
|
||||
`datetime_key` datetime NOT NULL,
|
||||
`datetime_nokey` datetime NOT NULL,
|
||||
`varchar_key` varchar(1) NOT NULL,
|
||||
`varchar_nokey` varchar(1) NOT NULL,
|
||||
PRIMARY KEY (`pk`),
|
||||
KEY `int_key` (`int_key`),
|
||||
KEY `date_key` (`date_key`),
|
||||
KEY `time_key` (`time_key`),
|
||||
KEY `datetime_key` (`datetime_key`),
|
||||
KEY `varchar_key` (`varchar_key`)
|
||||
) ENGINE=$type;
|
||||
|
||||
INSERT INTO t1 VALUES (1,8,5,'0000-00-00','0000-00-00','10:37:38','10:37:38','0000-00-00 00:00:00','0000-00-00 00:00:00','p','p'),(2,0,9,'0000-00-00','0000-00-00','00:00:00','00:00:00','2007-10-14 00:00:00','2007-10-14 00:00:00','d','d');
|
||||
|
||||
eval CREATE TABLE t2 (
|
||||
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`int_nokey` int(11) NOT NULL,
|
||||
`int_key` int(11) NOT NULL,
|
||||
`date_key` date NOT NULL,
|
||||
`date_nokey` date NOT NULL,
|
||||
`time_key` time NOT NULL,
|
||||
`time_nokey` time NOT NULL,
|
||||
`datetime_key` datetime NOT NULL,
|
||||
`datetime_nokey` datetime NOT NULL,
|
||||
`varchar_key` varchar(1) NOT NULL,
|
||||
`varchar_nokey` varchar(1) NOT NULL,
|
||||
PRIMARY KEY (`pk`),
|
||||
KEY `int_key` (`int_key`),
|
||||
KEY `date_key` (`date_key`),
|
||||
KEY `time_key` (`time_key`),
|
||||
KEY `datetime_key` (`datetime_key`),
|
||||
KEY `varchar_key` (`varchar_key`)
|
||||
) ENGINE=$type;
|
||||
|
||||
INSERT INTO t2 VALUES (1,1,6,'2005-12-23','2005-12-23','02:24:28','02:24:28','0000-00-00 00:00:00','0000-00-00 00:00:00','g','g'),(2,0,3,'2009-09-14','2009-09-14','00:00:00','00:00:00','2000-01-30 16:39:40','2000-01-30 16:39:40','q','q'),(3,0,3,'0000-00-00','0000-00-00','00:00:00','00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','c','c'),(4,1,6,'2007-03-29','2007-03-29','15:49:00','15:49:00','0000-00-00 00:00:00','0000-00-00 00:00:00','m','m'),(5,4,0,'2002-12-04','2002-12-04','00:00:00','00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','o','o'),(6,9,0,'2005-01-28','2005-01-28','00:00:00','00:00:00','2001-05-18 00:00:00','2001-05-18 00:00:00','w','w'),(7,6,0,'0000-00-00','0000-00-00','06:57:25','06:57:25','0000-00-00 00:00:00','0000-00-00 00:00:00','m','m'),(8,0,0,'0000-00-00','0000-00-00','00:00:00','00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','z','z'),(9,4,6,'2006-08-15','2006-08-15','00:00:00','00:00:00','2002-04-12 14:44:25','2002-04-12 14:44:25','j','j'),(10,0,5,'2006-12-20','2006-12-20','10:13:53','10:13:53','2008-07-22 00:00:00','2008-07-22 00:00:00','y','y'),(11,9,7,'0000-00-00','0000-00-00','00:00:00','00:00:00','2004-07-05 00:00:00','2004-07-05 00:00:00','{','{'),(12,4,3,'2007-01-26','2007-01-26','23:00:51','23:00:51','2001-05-16 00:00:00','2001-05-16 00:00:00','f','f'),(13,7,0,'2004-03-27','2004-03-27','00:00:00','00:00:00','2005-01-24 03:30:37','2005-01-24 03:30:37','',''),(14,6,0,'2006-07-26','2006-07-26','18:43:57','18:43:57','0000-00-00 00:00:00','0000-00-00 00:00:00','{','{'),(15,0,6,'2000-01-14','2000-01-14','00:00:00','00:00:00','2000-09-21 00:00:00','2000-09-21 00:00:00','o','o'),(16,9,8,'0000-00-00','0000-00-00','21:15:08','21:15:08','0000-00-00 00:00:00','0000-00-00 00:00:00','a','a'),(17,2,0,'2004-10-27','2004-10-27','00:00:00','00:00:00','2004-03-24 22:13:43','2004-03-24 22:13:43','',''),(18,7,4,'0000-00-00','0000-00-00','08:38:27','08:38:27','2002-03-18 19:51:44','2002-03-18 19:51:44','t','t'),(19,5,3,'2008-03-07','2008-03-07','03:29:07','03:29:07','2007-12-01 18:44:44','2007-12-01 18:44:44','t','t'),(20,0,0,'2002-04-09','2002-04-09','16:06:03','16:06:03','2009-04-22 00:00:00','2009-04-22 00:00:00','n','n');
|
||||
|
||||
DELETE FROM t2 WHERE `int_key` < 3 LIMIT 1;
|
||||
UPDATE t1 SET `int_key` = 3 ORDER BY `pk` LIMIT 4;
|
||||
DELETE FROM t2 WHERE `int_key` < 3 LIMIT 1;
|
||||
DELETE FROM t2 WHERE `pk` < 6 LIMIT 1;
|
||||
UPDATE t1 SET `int_key` = 6 ORDER BY `pk` LIMIT 3;
|
||||
DELETE FROM t2 WHERE `pk` < 6 LIMIT 1;
|
||||
UPDATE t1 SET `pk` = 6 ORDER BY `int_key` LIMIT 6;
|
||||
DELETE FROM t2 WHERE `pk` < 7 LIMIT 1;
|
||||
UPDATE t1 SET `int_key` = 4 ORDER BY `pk` LIMIT 6;
|
||||
|
||||
--sync_slave_with_master
|
||||
--echo *** results: t2 must be consistent ****
|
||||
|
||||
let $diff_table_1=master:test.t2;
|
||||
let $diff_table_2=master:test.t2;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
--connection master
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--enable_abort_on_error
|
||||
|
||||
--echo EOF OF TESTS
|
||||
|
||||
#
|
||||
# BUG#40004: Replication failure with no PK + no indexes
|
||||
#
|
||||
|
||||
# The test cases are taken from the bug report. It is difficult to
|
||||
# produce a test case that generates a HA_ERR_RECORD_DELETED, so we go
|
||||
# with the test cases we have.
|
||||
|
||||
connection master;
|
||||
|
||||
eval CREATE TABLE t1 (a int) ENGINE=$type;
|
||||
|
||||
INSERT IGNORE INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 2 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
|
||||
UPDATE t1 SET a = 5 WHERE a = 9;
|
||||
DELETE FROM t1 WHERE a < 6;
|
||||
UPDATE t1 SET a = 9 WHERE a < 3;
|
||||
INSERT INTO t1 ( a ) VALUES ( 3 );
|
||||
UPDATE t1 SET a = 0 WHERE a < 4;
|
||||
UPDATE t1 SET a = 8 WHERE a < 5;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
let $diff_table_1=master:test.t1;
|
||||
let $diff_table_2=slave:test.t1;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# Bug #39752: Replication failure on RBR + MyISAM + no PK
|
||||
#
|
||||
|
||||
# The test cases are taken from the bug report. It is difficult to
|
||||
# produce a test case that generates a HA_ERR_RECORD_DELETED, so we go
|
||||
# with the test cases we have.
|
||||
|
||||
connection master;
|
||||
|
||||
--disable_warnings
|
||||
eval CREATE TABLE t1 (a bit) ENGINE=$type;
|
||||
INSERT IGNORE INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
UPDATE t1 SET a = 0 WHERE a = 1 LIMIT 3;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
DELETE FROM t1 WHERE a < 2 LIMIT 4;
|
||||
DELETE FROM t1 WHERE a < 9 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 9 );
|
||||
UPDATE t1 SET a = 8 WHERE a = 0 LIMIT 6;
|
||||
INSERT INTO t1 ( a ) VALUES ( 8 );
|
||||
UPDATE t1 SET a = 0 WHERE a < 6 LIMIT 0;
|
||||
INSERT INTO t1 ( a ) VALUES ( 4 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 3 );
|
||||
UPDATE t1 SET a = 0 WHERE a = 7 LIMIT 6;
|
||||
DELETE FROM t1 WHERE a = 4 LIMIT 7;
|
||||
UPDATE t1 SET a = 9 WHERE a < 2 LIMIT 9;
|
||||
UPDATE t1 SET a = 0 WHERE a < 9 LIMIT 2;
|
||||
DELETE FROM t1 WHERE a < 0 LIMIT 5;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
UPDATE t1 SET a = 4 WHERE a < 6 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 5 );
|
||||
UPDATE t1 SET a = 9 WHERE a < 5 LIMIT 8;
|
||||
DELETE FROM t1 WHERE a < 8 LIMIT 8;
|
||||
INSERT INTO t1 ( a ) VALUES ( 6 );
|
||||
DELETE FROM t1 WHERE a < 6 LIMIT 7;
|
||||
UPDATE t1 SET a = 7 WHERE a = 3 LIMIT 7;
|
||||
UPDATE t1 SET a = 8 WHERE a = 0 LIMIT 6;
|
||||
INSERT INTO t1 ( a ) VALUES ( 7 );
|
||||
DELETE FROM t1 WHERE a < 9 LIMIT 4;
|
||||
INSERT INTO t1 ( a ) VALUES ( 7 );
|
||||
INSERT INTO t1 ( a ) VALUES ( 6 );
|
||||
UPDATE t1 SET a = 8 WHERE a = 3 LIMIT 4;
|
||||
DELETE FROM t1 WHERE a = 2 LIMIT 9;
|
||||
DELETE FROM t1 WHERE a = 1 LIMIT 4;
|
||||
UPDATE t1 SET a = 4 WHERE a = 2 LIMIT 7;
|
||||
INSERT INTO t1 ( a ) VALUES ( 0 );
|
||||
DELETE FROM t1 WHERE a < 3 LIMIT 0;
|
||||
UPDATE t1 SET a = 8 WHERE a = 5 LIMIT 2;
|
||||
INSERT INTO t1 ( a ) VALUES ( 1 );
|
||||
UPDATE t1 SET a = 9 WHERE a < 5 LIMIT 3;
|
||||
--enable_warnings
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
let $diff_table_1=master:test.t1;
|
||||
let $diff_table_2=slave:test.t1;
|
||||
source include/diff_tables.inc;
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
|
|
@ -11,12 +11,12 @@
|
|||
#
|
||||
# Dump all global variables
|
||||
#
|
||||
show global variables;
|
||||
SHOW GLOBAL VARIABLES WHERE variable_name != 'timestamp';
|
||||
|
||||
#
|
||||
# Dump all databases
|
||||
#
|
||||
show databases;
|
||||
SHOW DATABASES;
|
||||
|
||||
#
|
||||
# Dump the "test" database, all it's tables and their data
|
||||
|
@ -29,23 +29,23 @@ show databases;
|
|||
#
|
||||
--exec $MYSQL_DUMP --skip-comments --skip-lock-tables --no-data mysql
|
||||
use mysql;
|
||||
select * from columns_priv;
|
||||
select * from db order by host, db, user;
|
||||
select * from func;
|
||||
select * from help_category;
|
||||
select * from help_keyword;
|
||||
select * from help_relation;
|
||||
select * from help_relation;
|
||||
select * from host;
|
||||
select * from proc;
|
||||
select * from procs_priv;
|
||||
select * from tables_priv;
|
||||
select * from time_zone;
|
||||
select * from time_zone_leap_second;
|
||||
select * from time_zone_name;
|
||||
select * from time_zone_transition;
|
||||
select * from time_zone_transition_type;
|
||||
select * from user;
|
||||
SELECT * FROM columns_priv;
|
||||
SELECT * FROM db ORDER BY host, db, user;
|
||||
SELECT * FROM func;
|
||||
SELECT * FROM help_category;
|
||||
SELECT * FROM help_keyword;
|
||||
SELECT * FROM help_relation;
|
||||
SELECT * FROM help_relation;
|
||||
SELECT * FROM host;
|
||||
SELECT * FROM proc;
|
||||
SELECT * FROM procs_priv;
|
||||
SELECT * FROM tables_priv;
|
||||
SELECT * FROM time_zone;
|
||||
SELECT * FROM time_zone_leap_second;
|
||||
SELECT * FROM time_zone_name;
|
||||
SELECT * FROM time_zone_transition;
|
||||
SELECT * FROM time_zone_transition_type;
|
||||
SELECT * FROM user;
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -487,3 +487,18 @@ select * from t2 where a=4 or b=4;
|
|||
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# Bug #37943: Reproducible mysqld crash/sigsegv in sel_trees_can_be_ored
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a varchar(8), b set('a','b','c','d','e','f','g','h'),
|
||||
KEY b(b), KEY a(a));
|
||||
INSERT INTO t1 VALUES ('y',''), ('z','');
|
||||
|
||||
#should not crash
|
||||
SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR
|
||||
(a='pure-S') OR (a='DE80337a') OR (a='DE80799');
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -1256,6 +1256,7 @@ connect (con1,localhost,root,,);
|
|||
connect (con2,localhost,root,,);
|
||||
SET SESSION AUTOCOMMIT = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
set binlog_format=mixed;
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults $ndb_restore_opts -b $the_backup_id -n 1 $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id $ndb_restore_filter > $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults $ndb_restore_opts -b $the_backup_id -n 2 $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id $ndb_restore_filter >> $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--exec sort $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--let ndb_restore_opts=
|
||||
--let ndb_restore_filter=
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
# include/wait_condition.inc
|
||||
#
|
||||
# SUMMARY
|
||||
#
|
||||
# Waits until the passed statement returns true, or the operation
|
||||
# times out.
|
||||
#
|
||||
# USAGE
|
||||
#
|
||||
# let $wait_condition=
|
||||
# SELECT c = 3 FROM t;
|
||||
# --source include/wait_condition.inc
|
||||
#
|
||||
# OR
|
||||
#
|
||||
# let $wait_timeout= 60; # Override default 30 seconds with 60.
|
||||
# let $wait_condition=
|
||||
# SELECT c = 3 FROM t;
|
||||
# --source include/wait_condition.inc
|
||||
# --echo Executed the test condition $wait_condition_reps times
|
||||
#
|
||||
# EXAMPLE
|
||||
# events_bugs.test, events_time_zone.test
|
||||
#
|
||||
|
||||
--disable_query_log
|
||||
|
||||
let $wait_counter= 300;
|
||||
if ($wait_timeout)
|
||||
{
|
||||
let $wait_counter= `SELECT $wait_timeout * 10`;
|
||||
}
|
||||
# Reset $wait_timeout so that its value won't be used on subsequent
|
||||
# calls, and default will be used instead.
|
||||
let $wait_timeout= 0;
|
||||
|
||||
# Keep track of how many times the wait condition is tested
|
||||
# This is used by some tests (e.g., main.status)
|
||||
let $wait_condition_reps= 0;
|
||||
while ($wait_counter)
|
||||
{
|
||||
let $success= `$wait_condition`;
|
||||
inc $wait_condition_reps;
|
||||
if ($success)
|
||||
{
|
||||
let $wait_counter= 0;
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
real_sleep 0.1;
|
||||
dec $wait_counter;
|
||||
}
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
echo Timeout in wait_condition.inc for $wait_condition;
|
||||
}
|
||||
|
||||
--enable_query_log
|
|
@ -433,41 +433,51 @@ sub optimize_cases {
|
|||
# Skip processing if already marked as skipped
|
||||
next if $tinfo->{skip};
|
||||
|
||||
# Replication test needs an adjustment of binlog format
|
||||
if (mtr_match_prefix($tinfo->{'name'}, "rpl"))
|
||||
# =======================================================
|
||||
# If a special binlog format was selected with
|
||||
# --mysqld=--binlog-format=x, skip all test that does not
|
||||
# support it
|
||||
# =======================================================
|
||||
#print "used_binlog_format: $::used_binlog_format\n";
|
||||
if (defined $::used_binlog_format )
|
||||
{
|
||||
# =======================================================
|
||||
# Fixed --binlog-format=x specified on command line
|
||||
# =======================================================
|
||||
if ( defined $tinfo->{'binlog_formats'} )
|
||||
{
|
||||
#print "binlog_formats: ". join(", ", @{$tinfo->{binlog_formats}})."\n";
|
||||
|
||||
# The test supports different binlog formats
|
||||
# check if the selected one is ok
|
||||
my $supported=
|
||||
grep { $_ eq $::used_binlog_format } @{$tinfo->{'binlog_formats'}};
|
||||
if ( !$supported )
|
||||
{
|
||||
$tinfo->{'skip'}= 1;
|
||||
$tinfo->{'comment'}=
|
||||
"Doesn't support --binlog-format='$::used_binlog_format'";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
# =======================================================
|
||||
# Use dynamic switching of binlog format
|
||||
# =======================================================
|
||||
|
||||
# Get binlog-format used by this test from master_opt
|
||||
# =======================================================
|
||||
my $test_binlog_format;
|
||||
foreach my $opt ( @{$tinfo->{master_opt}} ) {
|
||||
$test_binlog_format= $test_binlog_format ||
|
||||
mtr_match_prefix($opt, "--binlog-format=");
|
||||
}
|
||||
# print $tinfo->{name}." uses ".$test_binlog_format."\n";
|
||||
|
||||
# =======================================================
|
||||
# If a special binlog format was selected with
|
||||
# --mysqld=--binlog-format=x, skip all test with different
|
||||
# binlog-format
|
||||
# =======================================================
|
||||
if (defined $::used_binlog_format and
|
||||
$test_binlog_format and
|
||||
$::used_binlog_format ne $test_binlog_format)
|
||||
{
|
||||
$tinfo->{'skip'}= 1;
|
||||
$tinfo->{'comment'}= "Requires --binlog-format='$test_binlog_format'";
|
||||
next;
|
||||
$test_binlog_format=
|
||||
mtr_match_prefix($opt, "--binlog-format=") || $test_binlog_format;
|
||||
}
|
||||
|
||||
# =======================================================
|
||||
# Check that testcase supports the designated binlog-format
|
||||
# =======================================================
|
||||
if ($test_binlog_format and defined $tinfo->{'sup_binlog_formats'} )
|
||||
if (defined $test_binlog_format and
|
||||
defined $tinfo->{binlog_formats} )
|
||||
{
|
||||
my $supported=
|
||||
grep { $_ eq $test_binlog_format } @{$tinfo->{'sup_binlog_formats'}};
|
||||
grep { $_ eq $test_binlog_format } @{$tinfo->{'binlog_formats'}};
|
||||
if ( !$supported )
|
||||
{
|
||||
$tinfo->{'skip'}= 1;
|
||||
|
@ -476,20 +486,8 @@ sub optimize_cases {
|
|||
next;
|
||||
}
|
||||
}
|
||||
|
||||
# =======================================================
|
||||
# Use dynamic switching of binlog-format if mtr started
|
||||
# w/o --mysqld=--binlog-format=xxx and combinations.
|
||||
# =======================================================
|
||||
if (!defined $tinfo->{'combination'} and
|
||||
!defined $::used_binlog_format)
|
||||
{
|
||||
$test_binlog_format= $tinfo->{'sup_binlog_formats'}->[0];
|
||||
}
|
||||
|
||||
# Save binlog format for dynamic switching
|
||||
$tinfo->{binlog_format}= $test_binlog_format;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -879,18 +877,19 @@ sub collect_one_test_case($$$$$$$$$) {
|
|||
# the specified value in "tinfo"
|
||||
our @tags=
|
||||
(
|
||||
["include/have_innodb.inc", "innodb_test", 1],
|
||||
["include/have_binlog_format_row.inc", "sup_binlog_formats", ["row"]],
|
||||
["include/have_log_bin.inc", "need_binlog", 1],
|
||||
["include/have_binlog_format_statement.inc",
|
||||
"sup_binlog_formats", ["statement"]],
|
||||
["include/have_binlog_format_mixed.inc", "sup_binlog_formats", ["mixed"]],
|
||||
|
||||
["include/have_binlog_format_row.inc", "binlog_formats", ["row"]],
|
||||
["include/have_binlog_format_statement.inc", "binlog_formats", ["statement"]],
|
||||
["include/have_binlog_format_mixed.inc", "binlog_formats", ["mixed"]],
|
||||
["include/have_binlog_format_mixed_or_row.inc",
|
||||
"sup_binlog_formats", ["mixed","row"]],
|
||||
"binlog_formats", ["mixed", "row"]],
|
||||
["include/have_binlog_format_mixed_or_statement.inc",
|
||||
"sup_binlog_formats", ["mixed","statement"]],
|
||||
"binlog_formats", ["mixed", "statement"]],
|
||||
["include/have_binlog_format_row_or_statement.inc",
|
||||
"sup_binlog_formats", ["row","statement"]],
|
||||
"binlog_formats", ["row", "statement"]],
|
||||
|
||||
["include/have_innodb.inc", "innodb_test", 1],
|
||||
["include/have_log_bin.inc", "need_binlog", 1],
|
||||
["include/big_test.inc", "big_test", 1],
|
||||
["include/have_debug.inc", "need_debug", 1],
|
||||
["include/have_ndb.inc", "ndb_test", 1],
|
||||
|
|
|
@ -312,7 +312,7 @@ sub mtr_report_stats ($) {
|
|||
/Slave: According to the master's version/ or
|
||||
/Slave: Column [0-9]* type mismatch/ or
|
||||
/Slave: Error .* doesn't exist/ or
|
||||
/Slave: Error .*Deadlock found/ or
|
||||
/Slave: Deadlock found/ or
|
||||
/Slave: Error .*Unknown table/ or
|
||||
/Slave: Error in Write_rows event: / or
|
||||
/Slave: Field .* of table .* has no default value/ or
|
||||
|
|
|
@ -2436,6 +2436,12 @@ sub setup_vardir() {
|
|||
mkpath("$opt_vardir/tmp");
|
||||
mkpath($opt_tmpdir) if $opt_tmpdir ne "$opt_vardir/tmp";
|
||||
|
||||
if ($master->[0]->{'path_sock'} !~ m/^$opt_tmpdir/)
|
||||
{
|
||||
mtr_report("Symlinking $master->[0]->{'path_sock'}");
|
||||
symlink($master->[0]->{'path_sock'}, "$opt_tmpdir/master.sock");
|
||||
}
|
||||
|
||||
# Create new data dirs
|
||||
foreach my $data_dir (@data_dir_lst)
|
||||
{
|
||||
|
@ -3601,7 +3607,16 @@ sub run_testcase ($) {
|
|||
{
|
||||
mtr_timer_stop_all($glob_timers);
|
||||
mtr_report("\nServers started, exiting");
|
||||
exit(0);
|
||||
if ($glob_win32_perl)
|
||||
{
|
||||
#ActiveState perl hangs when using normal exit, use POSIX::_exit instead
|
||||
use POSIX qw[ _exit ];
|
||||
POSIX::_exit(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -4357,19 +4372,10 @@ sub run_testcase_need_master_restart($)
|
|||
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
|
||||
$tinfo->{'master_opt'}) )
|
||||
{
|
||||
# Chech that diff is binlog format only
|
||||
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
|
||||
if (scalar(@$diff_opts) eq 2)
|
||||
{
|
||||
$do_restart= 1 unless ($diff_opts->[0] =~/^--binlog-format=/ and $diff_opts->[1] =~/^--binlog-format=/);
|
||||
}
|
||||
else
|
||||
{
|
||||
$do_restart= 1;
|
||||
mtr_verbose("Restart master: running with different options '" .
|
||||
join(" ", @{$tinfo->{'master_opt'}}) . "' != '" .
|
||||
$do_restart= 1;
|
||||
mtr_verbose("Restart master: running with different options '" .
|
||||
join(" ", @{$tinfo->{'master_opt'}}) . "' != '" .
|
||||
join(" ", @{$master->[0]->{'start_opts'}}) . "'" );
|
||||
}
|
||||
}
|
||||
elsif( ! $master->[0]->{'pid'} )
|
||||
{
|
||||
|
|
|
@ -1222,4 +1222,34 @@ ALTER TABLE t1 CHANGE d c varchar(10);
|
|||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
DROP TABLE t1;
|
||||
create table t1(f1 int not null, f2 int not null, key (f1), key (f2));
|
||||
select index_length into @unpaked_keys_size from
|
||||
information_schema.tables where table_name='t1';
|
||||
alter table t1 pack_keys=1;
|
||||
select index_length into @paked_keys_size from
|
||||
information_schema.tables where table_name='t1';
|
||||
select (@unpaked_keys_size > @paked_keys_size);
|
||||
(@unpaked_keys_size > @paked_keys_size)
|
||||
1
|
||||
select max_data_length into @orig_max_data_length from
|
||||
information_schema.tables where table_name='t1';
|
||||
alter table t1 max_rows=100;
|
||||
select max_data_length into @changed_max_data_length from
|
||||
information_schema.tables where table_name='t1';
|
||||
select (@orig_max_data_length > @changed_max_data_length);
|
||||
(@orig_max_data_length > @changed_max_data_length)
|
||||
1
|
||||
drop table t1;
|
||||
CREATE TABLE t1(a INT AUTO_INCREMENT PRIMARY KEY,
|
||||
b ENUM('a', 'b', 'c') NOT NULL);
|
||||
INSERT INTO t1 (b) VALUES ('a'), ('c'), ('b'), ('b'), ('a');
|
||||
ALTER TABLE t1 MODIFY b ENUM('a', 'z', 'b', 'c') NOT NULL;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
1 a
|
||||
2 c
|
||||
3 b
|
||||
4 b
|
||||
5 a
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -454,3 +454,11 @@ select last_insert_id();
|
|||
last_insert_id()
|
||||
3
|
||||
drop table t1;
|
||||
create table t1 (a int primary key auto_increment, b int, c int, e int, d timestamp default current_timestamp, unique(b),unique(c),unique(e));
|
||||
insert into t1 values(null,1,1,1,now());
|
||||
insert into t1 values(null,0,0,0,null);
|
||||
replace into t1 values(null,1,0,2,null);
|
||||
select last_insert_id();
|
||||
last_insert_id()
|
||||
3
|
||||
drop table t1;
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
SELECT @@GLOBAL.binlog_format;
|
||||
@@GLOBAL.binlog_format
|
||||
STATEMENT
|
||||
'#---------------------BS_STVARS_002_01----------------------#'
|
||||
SELECT COUNT(@@GLOBAL.binlog_format);
|
||||
COUNT(@@GLOBAL.binlog_format)
|
||||
|
|
|
@ -90,4 +90,9 @@ Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1
|
|||
Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,(select count(0) AS `COUNT(*)` from `test`.`t1` where ((`test`.`t1`.`b` = `test`.`t2`.`a`) and (concat(`test`.`t1`.`b`,`test`.`t1`.`c`) = concat('0',`test`.`t2`.`a`,'01')))) AS `x` from `test`.`t2` order by `test`.`t2`.`a`
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a TIMESTAMP);
|
||||
INSERT INTO t1 VALUES (NOW()),(NOW()),(NOW());
|
||||
SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
|
||||
a
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1559,6 +1559,8 @@ SHOW INDEX FROM t1;
|
|||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
t1 1 c1 1 c1 A NULL NULL NULL YES BTREE
|
||||
DROP TABLE t1;
|
||||
create user mysqltest_1@'test@test';
|
||||
ERROR HY000: Malformed hostname (illegal symbol: '@')
|
||||
CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
|
||||
INSERT IGNORE INTO t1 (b) VALUES (5);
|
||||
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
||||
|
@ -1752,8 +1754,8 @@ create table t1 like information_schema.character_sets;
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`CHARACTER_SET_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL DEFAULT '',
|
||||
`DESCRIPTION` varchar(60) NOT NULL DEFAULT '',
|
||||
`MAXLEN` bigint(3) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
|
|
40
mysql-test/r/csv_alter_table.result
Normal file
40
mysql-test/r/csv_alter_table.result
Normal file
|
@ -0,0 +1,40 @@
|
|||
# ===== csv_alter_table.1 =====
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a int NOT NULL) ENGINE = CSV;
|
||||
ALTER TABLE t1 ADD COLUMN b CHAR(5) NOT NULL;
|
||||
DESC t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) NO NULL
|
||||
b char(5) NO NULL
|
||||
ALTER TABLE t1 DROP COLUMN b;
|
||||
DESC t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) NO NULL
|
||||
ALTER TABLE t1 MODIFY a BIGINT NOT NULL;
|
||||
DESC t1;
|
||||
Field Type Null Key Default Extra
|
||||
a bigint(20) NO NULL
|
||||
ALTER TABLE t1 CHANGE a a INT NOT NULL;
|
||||
DESC t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) NO NULL
|
||||
DROP TABLE t1;
|
||||
# ===== csv_alter_table.2 =====
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a int NOT NULL) ENGINE = CSV;
|
||||
ALTER TABLE t1 ADD COLUMN b CHAR(5);
|
||||
ERROR 42000: The storage engine for the table doesn't support nullable columns
|
||||
DESC t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) NO NULL
|
||||
ALTER TABLE t1 MODIFY a BIGINT;
|
||||
ERROR 42000: The storage engine for the table doesn't support nullable columns
|
||||
DESC t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) NO NULL
|
||||
ALTER TABLE t1 CHANGE a a INT;
|
||||
ERROR 42000: The storage engine for the table doesn't support nullable columns
|
||||
DESC t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) NO NULL
|
||||
DROP TABLE t1;
|
|
@ -40,9 +40,9 @@ IN ind DECIMAL(10,2))
|
|||
BEGIN
|
||||
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
||||
END
|
||||
master-bin.000001 784 Query 1 992 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 992 Query 1 1081 use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 1081 Query 1 1160 use `test`; DROP TABLE t4
|
||||
master-bin.000001 784 Query 1 1048 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172 COLLATE 'latin1_swedish_ci'), NAME_CONST('ins2',_cp932 0xED40ED41ED42 COLLATE 'cp932_japanese_ci'), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 1048 Query 1 1137 use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 1137 Query 1 1216 use `test`; DROP TABLE t4
|
||||
End of 5.0 tests
|
||||
SHOW BINLOG EVENTS FROM 364;
|
||||
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error
|
||||
|
|
11
mysql-test/r/ctype_filesystem.result
Normal file
11
mysql-test/r/ctype_filesystem.result
Normal file
|
@ -0,0 +1,11 @@
|
|||
SET CHARACTER SET utf8;
|
||||
SHOW VARIABLES like 'character_sets_dir';
|
||||
Variable_name Value
|
||||
character_sets_dir MYSQL_TEST_DIR/ß/
|
||||
SHOW VARIABLES like 'character_set_filesystem';
|
||||
Variable_name Value
|
||||
character_set_filesystem latin1
|
||||
SHOW VARIABLES like 'character_set_client';
|
||||
Variable_name Value
|
||||
character_set_client utf8
|
||||
SET CHARACTER SET default;
|
|
@ -1098,6 +1098,17 @@ ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_gen
|
|||
select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0);
|
||||
ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation '='
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (s1 CHAR(5) CHARACTER SET UCS2);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SET @@sql_mode=pad_char_to_full_length;
|
||||
SELECT HEX(s1) FROM t1;
|
||||
HEX(s1)
|
||||
00610020002000200020
|
||||
SET @@sql_mode=default;
|
||||
SELECT HEX(s1) FROM t1;
|
||||
HEX(s1)
|
||||
0061
|
||||
DROP TABLE t1;
|
||||
set collation_connection=ucs2_general_ci;
|
||||
drop table if exists t1;
|
||||
create table t1 as
|
||||
|
|
|
@ -1848,3 +1848,35 @@ select hex(_utf8 B'001111111111');
|
|||
ERROR HY000: Invalid utf8 character string: 'FF'
|
||||
select (_utf8 X'616263FF');
|
||||
ERROR HY000: Invalid utf8 character string: 'FF'
|
||||
CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (70000, 1092), (70001, 1085), (70002, 1065);
|
||||
SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b;
|
||||
CONVERT(a, CHAR) CONVERT(b, CHAR)
|
||||
70002 1065
|
||||
70001 1085
|
||||
70000 1092
|
||||
SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1;
|
||||
CONVERT(a, CHAR) CONVERT(b, CHAR)
|
||||
70000 1092
|
||||
70001 1085
|
||||
70002 1065
|
||||
ALTER TABLE t1 ADD UNIQUE (b);
|
||||
SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b;
|
||||
CONVERT(a, CHAR) CONVERT(b, CHAR)
|
||||
70002 1065
|
||||
70001 1085
|
||||
70000 1092
|
||||
DROP INDEX b ON t1;
|
||||
SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b;
|
||||
CONVERT(a, CHAR) CONVERT(b, CHAR)
|
||||
70002 1065
|
||||
70001 1085
|
||||
70000 1092
|
||||
ALTER TABLE t1 ADD INDEX (b);
|
||||
SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) from t1 GROUP BY b;
|
||||
CONVERT(a, CHAR) CONVERT(b, CHAR)
|
||||
70002 1065
|
||||
70001 1085
|
||||
70000 1092
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -608,6 +608,65 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
SELECT DISTINCT a,a FROM t1 WHERE b < 12 ORDER BY a;
|
||||
a a
|
||||
DROP TABLE t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (id INT NOT NULL, fruit_id INT NOT NULL, fruit_name varchar(20)
|
||||
default NULL);
|
||||
INSERT INTO t1 VALUES (1,1,'ORANGE');
|
||||
INSERT INTO t1 VALUES (2,2,'APPLE');
|
||||
INSERT INTO t1 VALUES (3,2,'APPLE');
|
||||
INSERT INTO t1 VALUES (4,3,'PEAR');
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO @v1, @v2 FROM t1 WHERE fruit_name =
|
||||
'APPLE';
|
||||
SELECT @v1, @v2;
|
||||
@v1 @v2
|
||||
2 APPLE
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO @v3, @v4 FROM t1 GROUP BY fruit_id,
|
||||
fruit_name HAVING fruit_name = 'APPLE';
|
||||
SELECT @v3, @v4;
|
||||
@v3 @v4
|
||||
2 APPLE
|
||||
SELECT DISTINCT @v5:= fruit_id, @v6:= fruit_name INTO @v7, @v8 FROM t1 WHERE
|
||||
fruit_name = 'APPLE';
|
||||
SELECT @v5, @v6, @v7, @v8;
|
||||
@v5 @v6 @v7 @v8
|
||||
3 PEAR 3 PEAR
|
||||
SELECT DISTINCT @v5 + fruit_id, CONCAT(@v6, fruit_name) INTO @v9, @v10 FROM t1
|
||||
WHERE fruit_name = 'APPLE';
|
||||
SELECT @v5, @v6, @v7, @v8, @v9, @v10;
|
||||
@v5 @v6 @v7 @v8 @v9 @v10
|
||||
3 PEAR 3 PEAR 5 PEARAPPLE
|
||||
SELECT DISTINCT @v11:= @v5 + fruit_id, @v12:= CONCAT(@v6, fruit_name) INTO
|
||||
@v13, @v14 FROM t1 WHERE fruit_name = 'APPLE';
|
||||
SELECT @v11, @v12, @v13, @v14;
|
||||
@v11 @v12 @v13 @v14
|
||||
6 PEARPEAR 6 PEARPEAR
|
||||
SELECT DISTINCT @v13, @v14 INTO @v15, @v16 FROM t1 WHERE fruit_name = 'APPLE';
|
||||
SELECT @v15, @v16;
|
||||
@v15 @v16
|
||||
6 PEARPEAR
|
||||
SELECT DISTINCT 2 + 2, 'Bob' INTO @v17, @v18 FROM t1 WHERE fruit_name =
|
||||
'APPLE';
|
||||
SELECT @v17, @v18;
|
||||
@v17 @v18
|
||||
4 Bob
|
||||
DROP TABLE IF EXISTS t2;
|
||||
CREATE TABLE t2 (fruit_id INT NOT NULL, fruit_name varchar(20)
|
||||
default NULL);
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO OUTFILE
|
||||
'../tmp/data1.tmp' FROM t1 WHERE fruit_name = 'APPLE';
|
||||
LOAD DATA INFILE '../tmp/data1.tmp' INTO TABLE t2;
|
||||
SELECT DISTINCT @v19:= fruit_id, @v20:= fruit_name INTO OUTFILE
|
||||
'../tmp/data2.tmp' FROM t1 WHERE fruit_name = 'APPLE';
|
||||
LOAD DATA INFILE '../tmp/data2.tmp' INTO TABLE t2;
|
||||
SELECT @v19, @v20;
|
||||
@v19 @v20
|
||||
2 APPLE
|
||||
SELECT * FROM t2;
|
||||
fruit_id fruit_name
|
||||
2 APPLE
|
||||
2 APPLE
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t1 (a CHAR(1));
|
||||
INSERT INTO t1 VALUES('A'), (0);
|
||||
SELECT a FROM t1 WHERE a=0;
|
||||
|
|
|
@ -328,4 +328,81 @@ create event
|
|||
очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66
|
||||
on schedule every 2 year do select 1;
|
||||
ERROR 42000: Identifier name 'очень_очень_очень_очень_очень_очень_очень_очень_длинна' is too long
|
||||
create event event_35981 on schedule every 6 month on completion preserve
|
||||
disable
|
||||
do
|
||||
select 1;
|
||||
The following SELECTs should all give 1
|
||||
select count(*) from information_schema.events
|
||||
where event_schema = database() and event_name = 'event_35981' and
|
||||
on_completion = 'PRESERVE';
|
||||
count(*)
|
||||
1
|
||||
alter event event_35981 enable;
|
||||
select count(*) from information_schema.events
|
||||
where event_schema = database() and event_name = 'event_35981' and
|
||||
on_completion = 'PRESERVE';
|
||||
count(*)
|
||||
1
|
||||
alter event event_35981 on completion not preserve;
|
||||
select count(*) from information_schema.events
|
||||
where event_schema = database() and event_name = 'event_35981' and
|
||||
on_completion = 'NOT PRESERVE';
|
||||
count(*)
|
||||
1
|
||||
alter event event_35981 disable;
|
||||
select count(*) from information_schema.events
|
||||
where event_schema = database() and event_name = 'event_35981' and
|
||||
on_completion = 'NOT PRESERVE';
|
||||
count(*)
|
||||
1
|
||||
alter event event_35981 on completion preserve;
|
||||
select count(*) from information_schema.events
|
||||
where event_schema = database() and event_name = 'event_35981' and
|
||||
on_completion = 'PRESERVE';
|
||||
count(*)
|
||||
1
|
||||
drop event event_35981;
|
||||
create event event_35981 on schedule every 6 month disable
|
||||
do
|
||||
select 1;
|
||||
select count(*) from information_schema.events
|
||||
where event_schema = database() and event_name = 'event_35981' and
|
||||
on_completion = 'NOT PRESERVE';
|
||||
count(*)
|
||||
1
|
||||
drop event event_35981;
|
||||
create event event_35981 on schedule every 1 hour starts current_timestamp
|
||||
on completion not preserve
|
||||
do
|
||||
select 1;
|
||||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||||
ends '1999-01-02 00:00:00';
|
||||
ERROR HY000: Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.
|
||||
drop event event_35981;
|
||||
create event event_35981 on schedule every 1 hour starts current_timestamp
|
||||
on completion not preserve
|
||||
do
|
||||
select 1;
|
||||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||||
ends '1999-01-02 00:00:00' on completion preserve;
|
||||
Warnings:
|
||||
Note 1544 Event execution time is in the past. Event has been disabled
|
||||
drop event event_35981;
|
||||
create event event_35981 on schedule every 1 hour starts current_timestamp
|
||||
on completion preserve
|
||||
do
|
||||
select 1;
|
||||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||||
ends '1999-01-02 00:00:00';
|
||||
Warnings:
|
||||
Note 1544 Event execution time is in the past. Event has been disabled
|
||||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||||
ends '1999-01-02 00:00:00' on completion not preserve;
|
||||
ERROR HY000: Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.
|
||||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||||
ends '1999-01-02 00:00:00' on completion preserve;
|
||||
Warnings:
|
||||
Note 1544 Event execution time is in the past. Event has been disabled
|
||||
drop event event_35981;
|
||||
drop database events_test;
|
||||
|
|
|
@ -59,7 +59,8 @@ begin
|
|||
select get_lock('test_bug16407', 60);
|
||||
end|
|
||||
"Now if everything is fine the event has compiled and is locked"
|
||||
select /*1*/ user, host, db, info from information_schema.processlist where command!='Daemon' and (info is null or info not like '%processlist%') order by info;
|
||||
select /*1*/ user, host, db, info from information_schema.processlist
|
||||
where info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
user host db info
|
||||
root localhost events_test select get_lock('test_bug16407', 60)
|
||||
select release_lock('test_bug16407');
|
||||
|
@ -114,18 +115,18 @@ event_schema event_name sql_mode
|
|||
events_test ee_16407_2 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
|
||||
events_test ee_16407_3 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
|
||||
events_test ee_16407_4
|
||||
select /*2*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select /*2*/ user, host, db, info from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
user host db info
|
||||
event_scheduler localhost NULL NULL
|
||||
root localhost events_test select get_lock('ee_16407_2', 60)
|
||||
root localhost events_test select get_lock('ee_16407_2', 60)
|
||||
root localhost events_test select get_lock('ee_16407_2', 60)
|
||||
select release_lock('ee_16407_2');
|
||||
release_lock('ee_16407_2')
|
||||
1
|
||||
select /*3*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select /*3*/ user, host, db, info from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
user host db info
|
||||
event_scheduler localhost NULL NULL
|
||||
set global event_scheduler= off;
|
||||
select * from events_smode_test order by ev_name, a;
|
||||
ev_name a
|
||||
|
@ -164,7 +165,9 @@ select release_lock('ee_16407_5');
|
|||
call events_test.ee_16407_6_pendant();
|
||||
end|
|
||||
"Should have 2 locked processes"
|
||||
select /*4*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select /*4*/ user, host, db, info from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%')
|
||||
order by info;
|
||||
user host db info
|
||||
event_scheduler localhost NULL NULL
|
||||
root localhost events_test select get_lock('ee_16407_5', 60)
|
||||
|
@ -173,7 +176,9 @@ select release_lock('ee_16407_5');
|
|||
release_lock('ee_16407_5')
|
||||
1
|
||||
"Should have 0 processes locked"
|
||||
select /*5*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
|
||||
select /*5*/ user, host, db, info from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%')
|
||||
order by info;
|
||||
user host db info
|
||||
event_scheduler localhost NULL NULL
|
||||
select * from events_smode_test order by ev_name, a;
|
||||
|
@ -566,10 +571,9 @@ SHOW GRANTS FOR CURRENT_USER;
|
|||
Grants for root@localhost
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
|
||||
SET GLOBAL event_scheduler = ON;
|
||||
CREATE TABLE event_log (id int KEY AUTO_INCREMENT,
|
||||
ev_nm char(40), ev_cnt int,
|
||||
ev_tm timestamp) ENGINE=MyISAM;
|
||||
SET @ev_base_date = 20281224180000;
|
||||
CREATE TABLE events_test.event_log
|
||||
(id int KEY AUTO_INCREMENT, ev_nm char(40), ev_cnt int, ev_tm timestamp)
|
||||
ENGINE=MyISAM;
|
||||
SET autocommit=0;
|
||||
CREATE USER evtest1@localhost;
|
||||
SET PASSWORD FOR evtest1@localhost = password('ev1');
|
||||
|
@ -582,41 +586,40 @@ GRANT USAGE ON *.* TO 'evtest1'@'localhost' IDENTIFIED BY PASSWORD '*3170F3644E3
|
|||
GRANT SELECT, INSERT ON `test`.* TO 'evtest1'@'localhost'
|
||||
GRANT SELECT, INSERT, CREATE, EVENT ON `events_test`.* TO 'evtest1'@'localhost'
|
||||
connection e1;
|
||||
USE events_test;
|
||||
CREATE EVENT ev_sched_1823 ON SCHEDULE EVERY 2 SECOND
|
||||
DO BEGIN
|
||||
SET AUTOCOMMIT = 0;
|
||||
SET @evname = 'ev_sched_1823';
|
||||
SET @cnt = 0;
|
||||
SELECT COUNT(*) INTO @cnt FROM test.event_log WHERE ev_nm = @evname;
|
||||
SELECT COUNT(*) INTO @cnt FROM events_test.event_log WHERE ev_nm = @evname;
|
||||
IF @cnt < 6 THEN
|
||||
INSERT INTO test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
|
||||
INSERT INTO events_test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
|
||||
COMMIT;
|
||||
END IF;
|
||||
SELECT COUNT(*) INTO @cnt FROM test.event_log WHERE ev_nm = @evname;
|
||||
SELECT COUNT(*) INTO @cnt FROM events_test.event_log WHERE ev_nm = @evname;
|
||||
IF @cnt < 6 THEN
|
||||
INSERT INTO test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
|
||||
INSERT INTO events_test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
|
||||
ROLLBACK;
|
||||
END IF;
|
||||
END;|
|
||||
Sleep till the first INSERT into events_test.event_log occured
|
||||
SELECT COUNT(*) > 0 AS "Expect 1" FROM events_test.event_log;
|
||||
Expect 1
|
||||
1
|
||||
connection default;
|
||||
DROP EVENT ev_sched_1823;
|
||||
DROP USER evtest1@localhost;
|
||||
USE test;
|
||||
=====================================================================================
|
||||
select id,ev_nm,ev_cnt from event_log order by id;
|
||||
id ev_nm ev_cnt
|
||||
1 ev_sched_1823 1
|
||||
2 ev_sched_1823 2
|
||||
3 ev_sched_1823 3
|
||||
4 ev_sched_1823 4
|
||||
5 ev_sched_1823 5
|
||||
6 ev_sched_1823 6
|
||||
DROP TABLE event_log;
|
||||
Sleep 4 seconds
|
||||
SELECT COUNT(*) INTO @row_cnt FROM events_test.event_log;
|
||||
Sleep 4 seconds
|
||||
SELECT COUNT(*) > @row_cnt AS "Expect 0" FROM events_test.event_log;
|
||||
Expect 0
|
||||
0
|
||||
DROP EVENT events_test.ev_sched_1823;
|
||||
DROP TABLE events_test.event_log;
|
||||
SET GLOBAL event_scheduler = OFF;
|
||||
SET GLOBAL event_scheduler= ON;
|
||||
CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00'
|
||||
DO BEGIN
|
||||
DO BEGIN
|
||||
SELECT 1;
|
||||
END;|
|
||||
SET GLOBAL event_scheduler= OFF;
|
||||
|
@ -736,3 +739,4 @@ select name from mysql.event where name = 'p' and sql_mode = @full_mode;
|
|||
name
|
||||
drop event e1;
|
||||
DROP DATABASE events_test;
|
||||
SET GLOBAL event_scheduler = 'ON';
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
CREATE DATABASE IF NOT EXISTS events_test;
|
||||
USE events_test;
|
||||
SET @event_scheduler=@@global.event_scheduler;
|
||||
SET GLOBAL event_scheduler=OFF;
|
||||
Try agian to make sure it's allowed
|
||||
Try again to make sure it's allowed
|
||||
SET GLOBAL event_scheduler=OFF;
|
||||
SHOW VARIABLES LIKE 'event_scheduler';
|
||||
Variable_name Value
|
||||
|
@ -64,8 +65,8 @@ INSERT INTO table_4 VALUES (1);
|
|||
SELECT IF(SUM(a) >= 4, 'OK', 'ERROR') FROM table_1;
|
||||
IF(SUM(a) >= 4, 'OK', 'ERROR')
|
||||
OK
|
||||
SELECT IF(SUM(a) >= 5, 'OK', 'ERROR') FROM table_2;
|
||||
IF(SUM(a) >= 5, 'OK', 'ERROR')
|
||||
SELECT IF(SUM(a) >= 4, 'OK', 'ERROR') FROM table_2;
|
||||
IF(SUM(a) >= 4, 'OK', 'ERROR')
|
||||
OK
|
||||
SELECT IF(SUM(a) >= 1, 'OK', 'ERROR') FROM table_3;
|
||||
IF(SUM(a) >= 1, 'OK', 'ERROR')
|
||||
|
@ -94,4 +95,4 @@ DROP TABLE table_2;
|
|||
DROP TABLE table_3;
|
||||
DROP TABLE table_4;
|
||||
DROP DATABASE events_test;
|
||||
SET GLOBAL event_scheduler=OFF;
|
||||
SET GLOBAL event_scheduler=@event_scheduler;
|
||||
|
|
|
@ -14,6 +14,7 @@ RETURN FLOOR((i % (step * n) + 0.1) / step);
|
|||
END//
|
||||
SET @step3= @step * 3;
|
||||
SET @step6= @step * 6;
|
||||
SET @unix_time= UNIX_TIMESTAMP() - 1;
|
||||
SET @unix_time= @unix_time - @unix_time % @step6;
|
||||
INSERT INTO mysql.time_zone VALUES (NULL, 'N');
|
||||
SET @tzid= LAST_INSERT_ID();
|
||||
|
@ -21,7 +22,7 @@ INSERT INTO mysql.time_zone_transition_type
|
|||
VALUES (@tzid, 0, 0, 0, 'b16420_0');
|
||||
INSERT INTO mysql.time_zone_transition_type
|
||||
VALUES (@tzid, 1, @step3 - @step, 1, 'b16420_1');
|
||||
INSERT INTO mysql.time_zone_name VALUES ('bug16420', @tzid);
|
||||
INSERT INTO mysql.time_zone_name VALUES ('<TZ_NAME_1>', @tzid);
|
||||
CREATE TABLE t1 (count INT, unix_time INT, local_time INT, comment CHAR(80));
|
||||
CREATE TABLE t2 (count INT);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
@ -48,7 +49,7 @@ END//
|
|||
SET TIME_ZONE= '+00:00';
|
||||
CREATE EVENT e1 ON SCHEDULE EVERY @step SECOND
|
||||
STARTS FROM_UNIXTIME(@unix_time) DO SELECT f1("<e1>");
|
||||
SET TIME_ZONE= 'bug16420';
|
||||
SET TIME_ZONE= '<TZ_NAME_1>';
|
||||
CREATE EVENT e2 ON SCHEDULE EVERY @step SECOND
|
||||
STARTS FROM_UNIXTIME(@unix_time) DO SELECT f1("<e2>");
|
||||
SET GLOBAL EVENT_SCHEDULER= ON;
|
||||
|
@ -86,6 +87,7 @@ DELETE FROM mysql.time_zone_name WHERE time_zone_id = @tzid;
|
|||
DELETE FROM mysql.time_zone_transition_type WHERE time_zone_id = @tzid;
|
||||
DELETE FROM mysql.time_zone_transition WHERE time_zone_id = @tzid;
|
||||
DELETE FROM mysql.time_zone WHERE time_zone_id = @tzid;
|
||||
ALTER TABLE mysql.time_zone AUTO_INCREMENT = 6;
|
||||
SET TIME_ZONE= '+00:00';
|
||||
CREATE TABLE t1 (event CHAR(2), dt DATE, offset INT);
|
||||
INSERT INTO mysql.time_zone VALUES (NULL, 'N');
|
||||
|
@ -111,8 +113,8 @@ INSERT INTO mysql.time_zone_transition
|
|||
VALUES (@tzid, @now + 7 * @step, 2);
|
||||
INSERT INTO mysql.time_zone_transition
|
||||
VALUES (@tzid, @now + 12 * @step, 3);
|
||||
INSERT INTO mysql.time_zone_name VALUES ('bug16420_2', @tzid);
|
||||
SET TIME_ZONE= 'bug16420_2';
|
||||
INSERT INTO mysql.time_zone_name VALUES ('<TZ_NAME_2>', @tzid);
|
||||
SET TIME_ZONE= '<TZ_NAME_2>';
|
||||
SET GLOBAL EVENT_SCHEDULER= ON;
|
||||
SET GLOBAL EVENT_SCHEDULER= OFF;
|
||||
Below we should see the following:
|
||||
|
@ -143,6 +145,7 @@ DELETE FROM mysql.time_zone_name WHERE time_zone_id = @tzid;
|
|||
DELETE FROM mysql.time_zone_transition_type WHERE time_zone_id = @tzid;
|
||||
DELETE FROM mysql.time_zone_transition WHERE time_zone_id = @tzid;
|
||||
DELETE FROM mysql.time_zone WHERE time_zone_id = @tzid;
|
||||
ALTER TABLE mysql.time_zone AUTO_INCREMENT = 6;
|
||||
DROP FUNCTION round_to_step;
|
||||
DROP TABLE t_step;
|
||||
DROP DATABASE mysqltest_db1;
|
||||
|
|
|
@ -107,3 +107,78 @@ X X X X X X X X X
|
|||
X X X X X X X X X Range checked for each record (index map: 0xFFFFFFFFFF)
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE t2(a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
EXPLAIN EXTENDED SELECT 1
|
||||
FROM (SELECT COUNT(DISTINCT t1.a) FROM t1,t2 GROUP BY t1.a) AS s1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 100.00
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||
2 DERIVED t2 ALL NULL NULL NULL NULL 2 100.00 Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from (select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT t1.a)` from `test`.`t1` join `test`.`t2` group by `test`.`t1`.`a`) `s1`
|
||||
EXPLAIN EXTENDED SELECT 1
|
||||
FROM (SELECT COUNT(DISTINCT t1.a) FROM t1,t2 GROUP BY t1.a) AS s1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 100.00
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||
2 DERIVED t2 ALL NULL NULL NULL NULL 2 100.00 Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from (select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT t1.a)` from `test`.`t1` join `test`.`t2` group by `test`.`t1`.`a`) `s1`
|
||||
prepare s1 from
|
||||
'EXPLAIN EXTENDED SELECT 1
|
||||
FROM (SELECT COUNT(DISTINCT t1.a) FROM t1,t2 GROUP BY t1.a) AS s1';
|
||||
execute s1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 100.00
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||
2 DERIVED t2 ALL NULL NULL NULL NULL 2 100.00 Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from (select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT t1.a)` from `test`.`t1` join `test`.`t2` group by `test`.`t1`.`a`) `s1`
|
||||
prepare s1 from
|
||||
'EXPLAIN EXTENDED SELECT 1
|
||||
FROM (SELECT COUNT(DISTINCT t1.a) FROM t1,t2 GROUP BY t1.a) AS s1';
|
||||
execute s1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 100.00
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||
2 DERIVED t2 ALL NULL NULL NULL NULL 2 100.00 Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from (select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT t1.a)` from `test`.`t1` join `test`.`t2` group by `test`.`t1`.`a`) `s1`
|
||||
execute s1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2 100.00
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||
2 DERIVED t2 ALL NULL NULL NULL NULL 2 100.00 Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from (select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT t1.a)` from `test`.`t1` join `test`.`t2` group by `test`.`t1`.`a`) `s1`
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#37870: Usage of uninitialized value caused failed assertion.
|
||||
#
|
||||
create table t1 (dt datetime not null, t time not null);
|
||||
create table t2 (dt datetime not null);
|
||||
insert into t1 values ('2001-01-01 1:1:1', '1:1:1'),
|
||||
('2001-01-01 1:1:1', '1:1:1');
|
||||
insert into t2 values ('2001-01-01 1:1:1'), ('2001-01-01 1:1:1');
|
||||
flush tables;
|
||||
EXPLAIN SELECT OUTR.dt FROM t1 AS OUTR WHERE OUTR.dt IN (SELECT INNR.dt FROM t2 AS INNR WHERE OUTR.dt IS NULL );
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY OUTR ALL NULL NULL NULL NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY INNR ALL NULL NULL NULL NULL 2 Using where
|
||||
flush tables;
|
||||
SELECT OUTR.dt FROM t1 AS OUTR WHERE OUTR.dt IN (SELECT INNR.dt FROM t2 AS INNR WHERE OUTR.dt IS NULL );
|
||||
dt
|
||||
flush tables;
|
||||
EXPLAIN SELECT OUTR.dt FROM t1 AS OUTR WHERE OUTR.dt IN ( SELECT INNR.dt FROM t2 AS INNR WHERE OUTR.t < '2005-11-13 7:41:31' );
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY OUTR ALL NULL NULL NULL NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY INNR ALL NULL NULL NULL NULL 2 Using where
|
||||
flush tables;
|
||||
SELECT OUTR.dt FROM t1 AS OUTR WHERE OUTR.dt IN ( SELECT INNR.dt FROM t2 AS INNR WHERE OUTR.t < '2005-11-13 7:41:31' );
|
||||
dt
|
||||
2001-01-01 01:01:01
|
||||
2001-01-01 01:01:01
|
||||
drop tables t1, t2;
|
||||
|
|
|
@ -9,7 +9,9 @@ DROP DATABASE IF EXISTS federated;
|
|||
CREATE DATABASE federated;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
CREATE DATABASE federated;
|
||||
SET @OLD_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
Warnings:
|
||||
|
@ -186,6 +188,7 @@ INSERT INTO federated.t1 (name, other) VALUES ('Tenth Name', 101010);
|
|||
SELECT * FROM federated.t1;
|
||||
id name other created
|
||||
1 First Name 11111 2004-04-04 04:04:04
|
||||
10 Tenth Name 101010 2004-04-04 04:04:04
|
||||
2 Second Name 22222 2004-04-04 04:04:04
|
||||
3 Third Name 33333 2004-04-04 04:04:04
|
||||
4 Fourth Name 44444 2004-04-04 04:04:04
|
||||
|
@ -194,7 +197,6 @@ id name other created
|
|||
7 Seventh Name 77777 2004-04-04 04:04:04
|
||||
8 Eigth Name 88888 2004-04-04 04:04:04
|
||||
9 Ninth Name 99999 2004-04-04 04:04:04
|
||||
10 Tenth Name 101010 2004-04-04 04:04:04
|
||||
SELECT * FROM federated.t1 WHERE id = 5;
|
||||
id name other created
|
||||
5 Fifth Name 55555 2004-04-04 04:04:04
|
||||
|
@ -208,6 +210,7 @@ SELECT * FROM federated.t1 WHERE name = 'Sixth Name' AND other = 44444;
|
|||
id name other created
|
||||
SELECT * FROM federated.t1 WHERE name like '%th%';
|
||||
id name other created
|
||||
10 Tenth Name 101010 2004-04-04 04:04:04
|
||||
3 Third Name 33333 2004-04-04 04:04:04
|
||||
4 Fourth Name 44444 2004-04-04 04:04:04
|
||||
5 Fifth Name 55555 2004-04-04 04:04:04
|
||||
|
@ -215,7 +218,6 @@ id name other created
|
|||
7 Seventh Name 77777 2004-04-04 04:04:04
|
||||
8 Eigth Name 88888 2004-04-04 04:04:04
|
||||
9 Ninth Name 99999 2004-04-04 04:04:04
|
||||
10 Tenth Name 101010 2004-04-04 04:04:04
|
||||
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
|
||||
SELECT * FROM federated.t1 WHERE name = '3rd name';
|
||||
id name other created
|
||||
|
@ -336,6 +338,7 @@ VALUES ('Tenth Name', 101010, '2005-03-12 12:00:01');
|
|||
SELECT * FROM federated.t1;
|
||||
id name other created
|
||||
1 First Name 11111 2004-01-01 01:01:01
|
||||
10 Tenth Name 101010 2005-03-12 12:00:01
|
||||
2 Second Name 22222 2004-01-23 02:43:00
|
||||
3 Third Name 33333 2004-02-14 02:14:00
|
||||
4 Fourth Name 44444 2003-04-05 00:00:00
|
||||
|
@ -344,7 +347,6 @@ id name other created
|
|||
7 Seventh Name 77777 2003-12-12 18:32:00
|
||||
8 Eigth Name 88888 2005-03-12 11:00:00
|
||||
9 Ninth Name 99999 2005-03-12 11:00:01
|
||||
10 Tenth Name 101010 2005-03-12 12:00:01
|
||||
SELECT * FROM federated.t1 WHERE id = 5;
|
||||
id name other created
|
||||
5 Fifth Name 55555 2001-02-02 02:02:02
|
||||
|
@ -356,6 +358,7 @@ id name other created
|
|||
4 Fourth Name 44444 2003-04-05 00:00:00
|
||||
SELECT * FROM federated.t1 WHERE name like '%th%';
|
||||
id name other created
|
||||
10 Tenth Name 101010 2005-03-12 12:00:01
|
||||
3 Third Name 33333 2004-02-14 02:14:00
|
||||
4 Fourth Name 44444 2003-04-05 00:00:00
|
||||
5 Fifth Name 55555 2001-02-02 02:02:02
|
||||
|
@ -363,7 +366,6 @@ id name other created
|
|||
7 Seventh Name 77777 2003-12-12 18:32:00
|
||||
8 Eigth Name 88888 2005-03-12 11:00:00
|
||||
9 Ninth Name 99999 2005-03-12 11:00:01
|
||||
10 Tenth Name 101010 2005-03-12 12:00:01
|
||||
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
|
||||
SELECT * FROM federated.t1 WHERE name = '3rd name';
|
||||
id name other created
|
||||
|
@ -470,17 +472,17 @@ id name other
|
|||
7 Seventh Name NULL
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL;
|
||||
id name other
|
||||
4 NULL NULL
|
||||
10 NULL fee fie foe fum
|
||||
4 NULL NULL
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL and other IS NULL;
|
||||
id name other
|
||||
4 NULL NULL
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL or other IS NULL;
|
||||
id name other
|
||||
10 NULL fee fie foe fum
|
||||
2 Second Name NULL
|
||||
4 NULL NULL
|
||||
7 Seventh Name NULL
|
||||
10 NULL fee fie foe fum
|
||||
UPDATE federated.t1
|
||||
SET name = 'Fourth Name', other = 'four four four'
|
||||
WHERE name IS NULL AND other IS NULL;
|
||||
|
@ -492,6 +494,7 @@ id name other
|
|||
SELECT * FROM federated.t1;
|
||||
id name other
|
||||
1 First Name 11111
|
||||
10 Tenth Name fee fie foe fum
|
||||
2 Second Name two two two two
|
||||
3 Third Name 33333
|
||||
4 Fourth Name four four four
|
||||
|
@ -500,7 +503,6 @@ id name other
|
|||
7 Seventh Name seven seven
|
||||
8 Eigth Name 88888
|
||||
9 Ninth Name 99999
|
||||
10 Tenth Name fee fie foe fum
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL auto_increment,
|
||||
|
@ -681,8 +683,8 @@ id col1 col2 col3 col4
|
|||
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
|
||||
OR (col2 = 'three Three' AND col3 = 33);
|
||||
id col1 col2 col3 col4
|
||||
5 5 five 5 five five 5 5 55555
|
||||
3 3 three Three 33 33333
|
||||
5 5 five 5 five five 5 5 55555
|
||||
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'Two two')
|
||||
OR (col2 = 444 AND col3 = 4444444);
|
||||
id col1 col2 col3 col4
|
||||
|
@ -693,25 +695,25 @@ OR col3 = 33
|
|||
OR col4 = 4444444;
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
4 4 fourfourfour 444 4444444
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE id > 5;
|
||||
id col1 col2 col3 col4
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE id >= 5;
|
||||
id col1 col2 col3 col4
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
5 5 five 5 five five 5 5 55555
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE id < 5;
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
|
@ -728,6 +730,7 @@ id col1 col2 col3 col4
|
|||
SELECT * FROM federated.t1 WHERE id != 5;
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
4 4 fourfourfour 444 4444444
|
||||
|
@ -735,7 +738,6 @@ id col1 col2 col3 col4
|
|||
7 7 seven Sevenseven 77777 7777
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE id > 3 AND id < 7;
|
||||
id col1 col2 col3 col4
|
||||
4 4 fourfourfour 444 4444444
|
||||
|
@ -763,25 +765,25 @@ id col1 col2 col3 col4
|
|||
SELECT * FROM federated.t1 WHERE id < 3 OR id > 7;
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE col2 = 'three Three';
|
||||
id col1 col2 col3 col4
|
||||
3 3 three Three 33 33333
|
||||
SELECT * FROM federated.t1 WHERE col2 > 'one';
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE col2 LIKE 's%';
|
||||
id col1 col2 col3 col4
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
SELECT * FROM federated.t1 WHERE col2 LIKE 'si%';
|
||||
id col1 col2 col3 col4
|
||||
6 6 six six Sixsix 6666 6
|
||||
|
@ -791,6 +793,7 @@ id col1 col2 col3 col4
|
|||
SELECT * FROM federated.t1 WHERE col2 NOT LIKE 'e%';
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
4 4 fourfourfour 444 4444444
|
||||
|
@ -798,18 +801,17 @@ id col1 col2 col3 col4
|
|||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE col2 <> 'one One';
|
||||
id col1 col2 col3 col4
|
||||
4 4 fourfourfour 444 4444444
|
||||
5 5 five 5 five five 5 5 55555
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
4 4 fourfourfour 444 4444444
|
||||
5 5 five 5 five five 5 5 55555
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
CREATE TABLE federated.t1 (
|
||||
`col1` varchar(8) NOT NULL DEFAULT '',
|
||||
|
@ -976,11 +978,11 @@ INSERT INTO federated.t1 (name, floatval, other)
|
|||
VALUES (0, 00.3333, NULL);
|
||||
SELECT * FROM federated.t1;
|
||||
id name floatval other
|
||||
NULL NULL NULL NULL
|
||||
NULL NULL NULL NULL
|
||||
1 NULL NULL NULL
|
||||
NULL foo 33.3333 NULL
|
||||
NULL 0 0.3333 NULL
|
||||
NULL NULL NULL NULL
|
||||
NULL NULL NULL NULL
|
||||
NULL foo 33.3333 NULL
|
||||
SELECT count(*) FROM federated.t1
|
||||
WHERE id IS NULL
|
||||
AND name IS NULL
|
||||
|
@ -2128,10 +2130,21 @@ Table Checksum
|
|||
test.t1 2465757603
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a TEXT, b TEXT, KEY(b(1)));
|
||||
INSERT INTO t1 VALUES (NULL, NULL), (NULL, NULL), (NULL, NULL), (NULL, NULL);
|
||||
CREATE TABLE t1
|
||||
(a TEXT, b TEXT, KEY(b(1))) ENGINE=FEDERATED
|
||||
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
|
||||
SELECT t1.a FROM t1, t1 as t2 WHERE t2.b NOT LIKE t1.b;
|
||||
a
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
create server 's1' foreign data wrapper 'mysql' options (port 3306);
|
||||
drop server 's1';
|
||||
End of 5.1 tests
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
|
|
|
@ -9,7 +9,9 @@ DROP DATABASE IF EXISTS federated;
|
|||
CREATE DATABASE federated;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
CREATE DATABASE federated;
|
||||
SET @OLD_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
DROP TABLE IF EXISTS federated.bug_13118_table;
|
||||
CREATE TABLE federated.t1 (
|
||||
|
@ -51,9 +53,10 @@ id value
|
|||
7 54
|
||||
8 55
|
||||
DROP TABLE federated.t1;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
|
||||
DROP TABLE federated.t1;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_CONCURRENT_INSERT;
|
||||
|
|
|
@ -494,3 +494,31 @@ SELECT a FROM t1 WHERE MATCH a AGAINST ('+city* of*' IN BOOLEAN MODE);
|
|||
a
|
||||
City Of God
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a VARCHAR(255), b INT, FULLTEXT(a), KEY(b));
|
||||
INSERT INTO t1 VALUES('test', 1),('test', 1),('test', 1),('test', 1),
|
||||
('test', 1),('test', 2),('test', 3),('test', 4);
|
||||
EXPLAIN SELECT * FROM t1
|
||||
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 fulltext b,a a 0 1 Using where
|
||||
EXPLAIN SELECT * FROM t1 USE INDEX(a)
|
||||
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 fulltext a a 0 1 Using where
|
||||
EXPLAIN SELECT * FROM t1 FORCE INDEX(a)
|
||||
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 fulltext a a 0 1 Using where
|
||||
EXPLAIN SELECT * FROM t1 IGNORE INDEX(a)
|
||||
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref b b 5 const 4 Using where
|
||||
EXPLAIN SELECT * FROM t1 USE INDEX(b)
|
||||
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref b b 5 const 4 Using where
|
||||
EXPLAIN SELECT * FROM t1 FORCE INDEX(b)
|
||||
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref b b 5 const 4 Using where
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -68,7 +68,7 @@ Warnings:
|
|||
Error 1259 ZLIB: Input data corrupted
|
||||
Error 1256 Uncompressed data size too large; the maximum size is 1048576 (probably, length of uncompressed data was corrupted)
|
||||
drop table t1;
|
||||
set @@max_allowed_packet=1048576*100;
|
||||
set @@global.max_allowed_packet=1048576*100;
|
||||
select compress(repeat('aaaaaaaaaa', IF(XXX, 10, 10000000))) is null;
|
||||
compress(repeat('aaaaaaaaaa', IF(XXX, 10, 10000000))) is null
|
||||
0
|
||||
|
|
|
@ -1416,4 +1416,64 @@ SELECT AVG(a), CAST(AVG(a) AS DECIMAL) FROM t1;
|
|||
AVG(a) CAST(AVG(a) AS DECIMAL)
|
||||
15 15
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE derived1 (a bigint(21));
|
||||
INSERT INTO derived1 VALUES (2);
|
||||
CREATE TABLE D (
|
||||
pk int(11) NOT NULL AUTO_INCREMENT,
|
||||
int_nokey int(11) DEFAULT NULL,
|
||||
int_key int(11) DEFAULT NULL,
|
||||
filler blob,
|
||||
PRIMARY KEY (pk),
|
||||
KEY int_key (int_key)
|
||||
);
|
||||
INSERT INTO D VALUES
|
||||
(39,40,4,repeat(' X', 42)),
|
||||
(43,56,4,repeat(' X', 42)),
|
||||
(47,12,4,repeat(' X', 42)),
|
||||
(71,28,4,repeat(' X', 42)),
|
||||
(76,54,4,repeat(' X', 42)),
|
||||
(83,45,4,repeat(' X', 42)),
|
||||
(105,53,12,NULL);
|
||||
SELECT
|
||||
(SELECT COUNT( int_nokey )
|
||||
FROM derived1 AS X
|
||||
WHERE
|
||||
X.int_nokey < 61
|
||||
GROUP BY pk
|
||||
LIMIT 1)
|
||||
FROM D AS X
|
||||
WHERE X.int_key < 13
|
||||
GROUP BY int_nokey LIMIT 1;
|
||||
(SELECT COUNT( int_nokey )
|
||||
FROM derived1 AS X
|
||||
WHERE
|
||||
X.int_nokey < 61
|
||||
GROUP BY pk
|
||||
LIMIT 1)
|
||||
1
|
||||
DROP TABLE derived1;
|
||||
DROP TABLE D;
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (1,2), (1,3);
|
||||
SET SQL_MODE='ONLY_FULL_GROUP_BY';
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
3
|
||||
SELECT COUNT(*) FROM t1 where a=1;
|
||||
COUNT(*)
|
||||
3
|
||||
SELECT COUNT(*),a FROM t1;
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT COUNT(*) FROM t1 a JOIN t1 b ON a.a= b.a;
|
||||
COUNT(*)
|
||||
9
|
||||
SELECT COUNT(*), (SELECT count(*) FROM t1 inr WHERE inr.a = outr.a)
|
||||
FROM t1 outr;
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT COUNT(*) FROM t1 a JOIN t1 outr
|
||||
ON a.a= (SELECT count(*) FROM t1 inr WHERE inr.a = outr.a);
|
||||
COUNT(*)
|
||||
0
|
||||
SET SQL_MODE=default;
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -256,3 +256,15 @@ a
|
|||
select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f");
|
||||
str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f")
|
||||
2003-01-02 10:11:12.001200
|
||||
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10'),time('00:00:00');
|
||||
timediff('2008-09-29 20:10:10','2008-09-30 20:10:10') time('00:00:00')
|
||||
-24:00:00 00:00:00
|
||||
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')>time('00:00:00');
|
||||
timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')>time('00:00:00')
|
||||
0
|
||||
select timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')<time('00:00:00');
|
||||
timediff('2008-09-29 20:10:10','2008-09-30 20:10:10')<time('00:00:00')
|
||||
1
|
||||
SELECT CAST(time('-73:42:12') AS DECIMAL);
|
||||
CAST(time('-73:42:12') AS DECIMAL)
|
||||
-734212
|
||||
|
|
|
@ -1274,6 +1274,36 @@ tt
|
|||
41
|
||||
SET sql_mode=@save_sql_mode;
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# BUG#38072: Wrong result: HAVING not observed in a query with aggregate
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
pk int(11) NOT NULL AUTO_INCREMENT,
|
||||
int_nokey int(11) NOT NULL,
|
||||
int_key int(11) NOT NULL,
|
||||
varchar_key varchar(1) NOT NULL,
|
||||
varchar_nokey varchar(1) NOT NULL,
|
||||
PRIMARY KEY (pk),
|
||||
KEY int_key (int_key),
|
||||
KEY varchar_key (varchar_key)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(1,5,5, 'h','h'),
|
||||
(2,1,1, '{','{'),
|
||||
(3,1,1, 'z','z'),
|
||||
(4,8,8, 'x','x'),
|
||||
(5,7,7, 'o','o'),
|
||||
(6,3,3, 'p','p'),
|
||||
(7,9,9, 'c','c'),
|
||||
(8,0,0, 'k','k'),
|
||||
(9,6,6, 't','t'),
|
||||
(10,0,0,'c','c');
|
||||
explain SELECT COUNT(varchar_key) AS X FROM t1 WHERE pk = 8 having 'foo'='bar';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible HAVING
|
||||
SELECT COUNT(varchar_key) AS X FROM t1 WHERE pk = 8 having 'foo'='bar';
|
||||
X
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
CREATE TABLE t1 (a INT, b INT,
|
||||
PRIMARY KEY (a),
|
||||
|
|
|
@ -1,31 +1,41 @@
|
|||
SET @save = @@global.group_concat_max_len;
|
||||
drop table if exists t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
## Creating new table t1 ##
|
||||
CREATE TABLE t1
|
||||
(
|
||||
id INT NOT NULL auto_increment,
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (id),
|
||||
rollno int NOT NULL,
|
||||
rollno INT NOT NULL,
|
||||
name VARCHAR(30)
|
||||
);
|
||||
'#--------------------FN_DYNVARS_034_01-------------------------#'
|
||||
## Setting initial value of variable to 4 ##
|
||||
## Setting initial value of variable to 4 ##
|
||||
SET @@global.group_concat_max_len = 4;
|
||||
## Inserting some rows in table ##
|
||||
INSERT into t1(rollno, name) values(1, 'Record_1');
|
||||
INSERT into t1(rollno, name) values(2, 'Record_2');
|
||||
INSERT into t1(rollno, name) values(1, 'Record_3');
|
||||
INSERT into t1(rollno, name) values(3, 'Record_4');
|
||||
INSERT into t1(rollno, name) values(1, 'Record_5');
|
||||
INSERT into t1(rollno, name) values(3, 'Record_6');
|
||||
INSERT into t1(rollno, name) values(4, 'Record_7');
|
||||
INSERT into t1(rollno, name) values(4, 'Record_8');
|
||||
## Creating two new connections ##
|
||||
## Inserting some rows in table ##
|
||||
INSERT INTO t1(rollno, name) VALUES(1, 'Record_1');
|
||||
INSERT INTO t1(rollno, name) VALUES(2, 'Record_2');
|
||||
INSERT INTO t1(rollno, name) VALUES(1, 'Record_3');
|
||||
INSERT INTO t1(rollno, name) VALUES(3, 'Record_4');
|
||||
INSERT INTO t1(rollno, name) VALUES(1, 'Record_5');
|
||||
INSERT INTO t1(rollno, name) VALUES(3, 'Record_6');
|
||||
INSERT INTO t1(rollno, name) VALUES(4, 'Record_7');
|
||||
INSERT INTO t1(rollno, name) VALUES(4, 'Record_8');
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
id rollno name
|
||||
1 1 Record_1
|
||||
2 2 Record_2
|
||||
3 1 Record_3
|
||||
4 3 Record_4
|
||||
5 1 Record_5
|
||||
6 3 Record_6
|
||||
7 4 Record_7
|
||||
8 4 Record_8
|
||||
## Creating two new connections ##
|
||||
'#--------------------FN_DYNVARS_034_02-------------------------#'
|
||||
## Connecting with test_con1 ##
|
||||
## Accessing data and using group_concat on column whose value is greater than 4 ##
|
||||
SELECT id, rollno, group_concat(name) FROM t1 GROUP BY rollno;
|
||||
id rollno group_concat(name)
|
||||
## Accessing data and using group_concat on column whose value is greater than 4 ##
|
||||
SELECT id, rollno, GROUP_CONCAT(name) FROM t1 GROUP BY rollno;
|
||||
id rollno GROUP_CONCAT(name)
|
||||
1 1 Reco
|
||||
2 2 Reco
|
||||
4 3 Reco
|
||||
|
@ -33,10 +43,10 @@ id rollno group_concat(name)
|
|||
Warnings:
|
||||
Warning 1260 4 line(s) were cut by GROUP_CONCAT()
|
||||
## Changing session value of variable and verifying its behavior, ##
|
||||
## warning should come here ##
|
||||
## warning should come here ##
|
||||
SET @@session.group_concat_max_len = 10;
|
||||
SELECT id, rollno, group_concat(name) FROM t1 GROUP BY rollno;
|
||||
id rollno group_concat(name)
|
||||
SELECT id, rollno, GROUP_CONCAT(name) FROM t1 GROUP BY rollno;
|
||||
id rollno GROUP_CONCAT(name)
|
||||
1 1 Record_1,R
|
||||
2 2 Record_2
|
||||
4 3 Record_4,R
|
||||
|
@ -44,18 +54,18 @@ id rollno group_concat(name)
|
|||
Warnings:
|
||||
Warning 1260 3 line(s) were cut by GROUP_CONCAT()
|
||||
'#--------------------FN_DYNVARS_034_03-------------------------#'
|
||||
## Connecting with new connection test_con2 ##
|
||||
## Verifying initial value of variable. It should be 4 ##
|
||||
## Connecting with new connection test_con2 ##
|
||||
## Verifying initial value of variable. It should be 4 ##
|
||||
SELECT @@session.group_concat_max_len = 4;
|
||||
@@session.group_concat_max_len = 4
|
||||
1
|
||||
## Setting session value of variable to 20 and verifying variable is concating ##
|
||||
## column's value to 20 or not ##
|
||||
## Setting session value of variable to 20 and verifying variable is concating ##
|
||||
## column's value to 20 or not ##
|
||||
SET @@session.group_concat_max_len = 20;
|
||||
## Verifying value of name column, it should not me more than 20 characters ##
|
||||
## Warning should come here ##
|
||||
SELECT id, rollno, group_concat(name) FROM t1 GROUP BY rollno;
|
||||
id rollno group_concat(name)
|
||||
SELECT id, rollno, GROUP_CONCAT(name) FROM t1 GROUP BY rollno;
|
||||
id rollno GROUP_CONCAT(name)
|
||||
1 1 Record_1,Record_3,Re
|
||||
2 2 Record_2
|
||||
4 3 Record_4,Record_6
|
||||
|
@ -63,17 +73,17 @@ id rollno group_concat(name)
|
|||
Warnings:
|
||||
Warning 1260 1 line(s) were cut by GROUP_CONCAT()
|
||||
'#--------------------FN_DYNVARS_034_04-------------------------#'
|
||||
## Setting session value of variable to 26. No warning should appear here ##
|
||||
## because the value after concatination is less than 30 ##
|
||||
## Setting session value of variable to 26. No warning should appear here ##
|
||||
## because the value after concatination is less than 30 ##
|
||||
SET @@session.group_concat_max_len = 26;
|
||||
## Verifying value of name column, it should not give warning now ##
|
||||
SELECT id, rollno, group_concat(name) FROM t1 GROUP BY rollno;
|
||||
id rollno group_concat(name)
|
||||
## Verifying value of name column, it should not give warning now ##
|
||||
SELECT id, rollno, GROUP_CONCAT(name) FROM t1 GROUP BY rollno;
|
||||
id rollno GROUP_CONCAT(name)
|
||||
1 1 Record_1,Record_3,Record_5
|
||||
2 2 Record_2
|
||||
4 3 Record_4,Record_6
|
||||
7 4 Record_7,Record_8
|
||||
## Dropping table t1 ##
|
||||
DROP table t1;
|
||||
DROP TABLE t1;
|
||||
## Disconnecting both the connection ##
|
||||
SET @@global.group_concat_max_len = @save;
|
||||
|
|
|
@ -520,6 +520,16 @@ a filler b
|
|||
4 zz 4
|
||||
5 qq 4
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a varchar(8), b set('a','b','c','d','e','f','g','h'),
|
||||
KEY b(b), KEY a(a));
|
||||
INSERT INTO t1 VALUES ('y',''), ('z','');
|
||||
SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR
|
||||
(a='pure-S') OR (a='DE80337a') OR (a='DE80799');
|
||||
b a
|
||||
y
|
||||
z
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
#---------------- ROR-index_merge tests -----------------------
|
||||
SET SESSION STORAGE_ENGINE = MyISAM;
|
||||
drop table if exists t0,t1,t2;
|
||||
|
|
|
@ -517,8 +517,8 @@ drop table t1;
|
|||
SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
|
||||
Table Create Table
|
||||
CHARACTER_SETS CREATE TEMPORARY TABLE `CHARACTER_SETS` (
|
||||
`CHARACTER_SET_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL DEFAULT '',
|
||||
`DESCRIPTION` varchar(60) NOT NULL DEFAULT '',
|
||||
`MAXLEN` bigint(3) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
|
@ -526,8 +526,8 @@ set names latin2;
|
|||
SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
|
||||
Table Create Table
|
||||
CHARACTER_SETS CREATE TEMPORARY TABLE `CHARACTER_SETS` (
|
||||
`CHARACTER_SET_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL DEFAULT '',
|
||||
`DESCRIPTION` varchar(60) NOT NULL DEFAULT '',
|
||||
`MAXLEN` bigint(3) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
|
@ -541,8 +541,8 @@ alter table t1 default character set utf8;
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`CHARACTER_SET_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL DEFAULT '',
|
||||
`CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
|
||||
`DEFAULT_COLLATE_NAME` varchar(32) NOT NULL DEFAULT '',
|
||||
`DESCRIPTION` varchar(60) NOT NULL DEFAULT '',
|
||||
`MAXLEN` bigint(3) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||
|
@ -716,8 +716,8 @@ select column_type from information_schema.columns
|
|||
where table_schema="information_schema" and table_name="COLUMNS" and
|
||||
(column_name="character_set_name" or column_name="collation_name");
|
||||
column_type
|
||||
varchar(64)
|
||||
varchar(64)
|
||||
varchar(32)
|
||||
varchar(32)
|
||||
select TABLE_ROWS from information_schema.tables where
|
||||
table_schema="information_schema" and table_name="COLUMNS";
|
||||
TABLE_ROWS
|
||||
|
@ -758,18 +758,14 @@ table_schema table_name column_name
|
|||
information_schema COLUMNS COLUMN_DEFAULT
|
||||
information_schema COLUMNS COLUMN_TYPE
|
||||
information_schema EVENTS EVENT_DEFINITION
|
||||
information_schema EVENTS SQL_MODE
|
||||
information_schema PARTITIONS PARTITION_EXPRESSION
|
||||
information_schema PARTITIONS SUBPARTITION_EXPRESSION
|
||||
information_schema PARTITIONS PARTITION_DESCRIPTION
|
||||
information_schema PLUGINS PLUGIN_DESCRIPTION
|
||||
information_schema PROCESSLIST INFO
|
||||
information_schema ROUTINES ROUTINE_DEFINITION
|
||||
information_schema ROUTINES SQL_MODE
|
||||
information_schema TRIGGERS ACTION_CONDITION
|
||||
information_schema TRIGGERS ACTION_STATEMENT
|
||||
information_schema TRIGGERS SQL_MODE
|
||||
information_schema TRIGGERS DEFINER
|
||||
information_schema VIEWS VIEW_DEFINITION
|
||||
select table_name, column_name, data_type from information_schema.columns
|
||||
where data_type = 'datetime';
|
||||
|
@ -1646,4 +1642,69 @@ drop table t1;
|
|||
drop function f1;
|
||||
select * from information_schema.tables where 1=sleep(100000);
|
||||
select * from information_schema.columns where 1=sleep(100000);
|
||||
explain select count(*) from information_schema.tables;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE tables ALL NULL NULL NULL NULL NULL Skip_open_table; Scanned all databases
|
||||
explain select count(*) from information_schema.columns;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE columns ALL NULL NULL NULL NULL NULL Open_frm_only; Scanned all databases
|
||||
explain select count(*) from information_schema.views;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE views ALL NULL NULL NULL NULL NULL Open_frm_only; Scanned all databases
|
||||
set global init_connect="drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;\
|
||||
drop table if exists t1;drop table if exists t1;";
|
||||
select * from information_schema.global_variables where variable_name='init_connect';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
INIT_CONNECT drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists t1;
|
||||
drop table if exists t1;drop table if exists
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'VARIABLE_VALUE' at row 1
|
||||
set global init_connect="";
|
||||
create table t0 select * from information_schema.global_status where VARIABLE_NAME='COM_SELECT';
|
||||
SELECT 1;
|
||||
1
|
||||
1
|
||||
select a.VARIABLE_VALUE - b.VARIABLE_VALUE from t0 b, information_schema.global_status a
|
||||
where a.VARIABLE_NAME = b.VARIABLE_NAME;
|
||||
a.VARIABLE_VALUE - b.VARIABLE_VALUE
|
||||
2
|
||||
drop table t0;
|
||||
End of 5.1 tests.
|
||||
|
|
|
@ -221,3 +221,24 @@ drop view testdb_1.v1, v2, testdb_1.v3, v4;
|
|||
drop database testdb_1;
|
||||
drop user testdb_1@localhost;
|
||||
drop user testdb_2@localhost;
|
||||
create database testdb_1;
|
||||
create table testdb_1.t1 (a int);
|
||||
create view testdb_1.v1 as select * from testdb_1.t1;
|
||||
grant show view on testdb_1.* to mysqltest_1@localhost;
|
||||
grant select on testdb_1.v1 to mysqltest_1@localhost;
|
||||
select table_schema, table_name, view_definition from information_schema.views
|
||||
where table_name='v1';
|
||||
table_schema table_name view_definition
|
||||
testdb_1 v1 select `testdb_1`.`t1`.`a` AS `a` from `testdb_1`.`t1`
|
||||
show create view testdb_1.v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `testdb_1`.`v1` AS select `testdb_1`.`t1`.`a` AS `a` from `testdb_1`.`t1` latin1 latin1_swedish_ci
|
||||
revoke select on testdb_1.v1 from mysqltest_1@localhost;
|
||||
select table_schema, table_name, view_definition from information_schema.views
|
||||
where table_name='v1';
|
||||
table_schema table_name view_definition
|
||||
testdb_1 v1
|
||||
show create view testdb_1.v1;
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v1'
|
||||
drop user mysqltest_1@localhost;
|
||||
drop database testdb_1;
|
||||
|
|
|
@ -119,7 +119,10 @@ SHOW CREATE TABLE t1;
|
|||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (a) SUBPARTITION BY LINEAR HASH (a) (PARTITION p0 VALUES LESS THAN (10) ENGINE = MyISAM) */
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (a)
|
||||
SUBPARTITION BY LINEAR HASH (a)
|
||||
(PARTITION p0 VALUES LESS THAN (10) ENGINE = MyISAM) */
|
||||
select SUBPARTITION_METHOD FROM information_schema.partitions WHERE
|
||||
table_schema="test" AND table_name="t1";
|
||||
SUBPARTITION_METHOD
|
||||
|
@ -134,9 +137,17 @@ SHOW CREATE TABLE t1;
|
|||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (a) (PARTITION p0 VALUES IN (10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53) ENGINE = MyISAM) */
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY LIST (a)
|
||||
(PARTITION p0 VALUES IN (10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53) ENGINE = MyISAM) */
|
||||
SELECT PARTITION_DESCRIPTION FROM information_schema.partitions WHERE
|
||||
table_schema = "test" AND table_name = "t1";
|
||||
PARTITION_DESCRIPTION
|
||||
10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53
|
||||
drop table t1;
|
||||
drop table if exists t1;
|
||||
create table t1 (f1 int key) partition by key(f1) partitions 2;
|
||||
select create_options from information_schema.tables where table_schema="test";
|
||||
create_options
|
||||
partitioned
|
||||
drop table t1;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
drop table if exists t1;
|
||||
set binlog_format=mixed;
|
||||
set session transaction isolation level read committed;
|
||||
create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
|
||||
insert into t1 values (1),(2),(3),(4),(5),(6),(7);
|
||||
|
@ -6,6 +7,7 @@ set autocommit=0;
|
|||
select * from t1 where a=3 lock in share mode;
|
||||
a
|
||||
3
|
||||
set binlog_format=mixed;
|
||||
set session transaction isolation level read committed;
|
||||
set autocommit=0;
|
||||
update t1 set a=10 where a=5;
|
||||
|
|
|
@ -1024,6 +1024,7 @@ id code name
|
|||
4 2 Erik
|
||||
5 3 Sasha
|
||||
COMMIT;
|
||||
SET binlog_format='MIXED';
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
insert into t1 (code, name) values (3, 'Jeremy'), (4, 'Matt');
|
||||
|
@ -2961,9 +2962,11 @@ drop table t1,t2;
|
|||
create table t1(a int not null, b int, primary key(a)) engine=innodb;
|
||||
insert into t1 values(1,1),(2,2),(3,1),(4,2),(5,1),(6,2),(7,3);
|
||||
commit;
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
update t1 set b = 5 where b = 1;
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
select * from t1 where a = 7 and b = 3 for update;
|
||||
|
@ -3002,6 +3005,7 @@ d e
|
|||
3 1
|
||||
8 6
|
||||
12 1
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
insert into t1 select * from t2;
|
||||
|
@ -3032,30 +3036,39 @@ a b
|
|||
3 1
|
||||
8 6
|
||||
12 1
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
insert into t1 select * from t2;
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
update t3 set b = (select b from t2 where a = d);
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
create table t4(a int not null, b int, primary key(a)) engine=innodb select * from t2;
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
insert into t5 (select * from t2 lock in share mode);
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
update t6 set e = (select b from t2 where a = d lock in share mode);
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
create table t7(a int not null, b int, primary key(a)) engine=innodb select * from t2 lock in share mode;
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
insert into t8 (select * from t2 for update);
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
update t9 set e = (select b from t2 where a = d for update);
|
||||
SET binlog_format='MIXED';
|
||||
set autocommit = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
create table t10(a int not null, b int, primary key(a)) engine=innodb select * from t2 for update;
|
||||
|
@ -3202,6 +3215,7 @@ id
|
|||
-10
|
||||
1
|
||||
DROP TABLE t1;
|
||||
SET binlog_format='MIXED';
|
||||
SET TX_ISOLATION='read-committed';
|
||||
SET AUTOCOMMIT=0;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
|
@ -3212,6 +3226,7 @@ CREATE TABLE t1 ( a int ) ENGINE=InnoDB;
|
|||
CREATE TABLE t2 LIKE t1;
|
||||
SELECT * FROM t2;
|
||||
a
|
||||
SET binlog_format='MIXED';
|
||||
SET TX_ISOLATION='read-committed';
|
||||
SET AUTOCOMMIT=0;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
@ -3219,10 +3234,12 @@ COMMIT;
|
|||
SELECT * FROM t1 WHERE a=1;
|
||||
a
|
||||
1
|
||||
SET binlog_format='MIXED';
|
||||
SET TX_ISOLATION='read-committed';
|
||||
SET AUTOCOMMIT=0;
|
||||
SELECT * FROM t2;
|
||||
a
|
||||
SET binlog_format='MIXED';
|
||||
SET TX_ISOLATION='read-committed';
|
||||
SET AUTOCOMMIT=0;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'#---------------------BS_STVARS_025_01----------------------#'
|
||||
SELECT COUNT(@@GLOBAL.innodb_data_home_dir);
|
||||
COUNT(@@GLOBAL.innodb_data_home_dir)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
'#---------------------BS_STVARS_025_02----------------------#'
|
||||
SET @@GLOBAL.innodb_data_home_dir=1;
|
||||
|
@ -9,7 +9,7 @@ ERROR HY000: Variable 'innodb_data_home_dir' is a read only variable
|
|||
Expected error 'Read only variable'
|
||||
SELECT COUNT(@@GLOBAL.innodb_data_home_dir);
|
||||
COUNT(@@GLOBAL.innodb_data_home_dir)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
'#---------------------BS_STVARS_025_03----------------------#'
|
||||
SELECT @@GLOBAL.innodb_data_home_dir = VARIABLE_VALUE
|
||||
|
@ -20,7 +20,7 @@ NULL
|
|||
1 Expected
|
||||
SELECT COUNT(@@GLOBAL.innodb_data_home_dir);
|
||||
COUNT(@@GLOBAL.innodb_data_home_dir)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
SELECT COUNT(VARIABLE_VALUE)
|
||||
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||
|
@ -36,7 +36,7 @@ NULL
|
|||
'#---------------------BS_STVARS_025_05----------------------#'
|
||||
SELECT COUNT(@@innodb_data_home_dir);
|
||||
COUNT(@@innodb_data_home_dir)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
SELECT COUNT(@@local.innodb_data_home_dir);
|
||||
ERROR HY000: Variable 'innodb_data_home_dir' is a GLOBAL variable
|
||||
|
@ -46,7 +46,7 @@ ERROR HY000: Variable 'innodb_data_home_dir' is a GLOBAL variable
|
|||
Expected error 'Variable is a GLOBAL variable'
|
||||
SELECT COUNT(@@GLOBAL.innodb_data_home_dir);
|
||||
COUNT(@@GLOBAL.innodb_data_home_dir)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
SELECT innodb_data_home_dir = @@SESSION.innodb_data_home_dir;
|
||||
ERROR 42S22: Unknown column 'innodb_data_home_dir' in 'field list'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'#---------------------BS_STVARS_029_01----------------------#'
|
||||
SELECT COUNT(@@GLOBAL.innodb_flush_method);
|
||||
COUNT(@@GLOBAL.innodb_flush_method)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
'#---------------------BS_STVARS_029_02----------------------#'
|
||||
SET @@GLOBAL.innodb_flush_method=1;
|
||||
|
@ -9,7 +9,7 @@ ERROR HY000: Variable 'innodb_flush_method' is a read only variable
|
|||
Expected error 'Read only variable'
|
||||
SELECT COUNT(@@GLOBAL.innodb_flush_method);
|
||||
COUNT(@@GLOBAL.innodb_flush_method)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
'#---------------------BS_STVARS_029_03----------------------#'
|
||||
SELECT @@GLOBAL.innodb_flush_method = VARIABLE_VALUE
|
||||
|
@ -20,7 +20,7 @@ NULL
|
|||
1 Expected
|
||||
SELECT COUNT(@@GLOBAL.innodb_flush_method);
|
||||
COUNT(@@GLOBAL.innodb_flush_method)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
SELECT COUNT(VARIABLE_VALUE)
|
||||
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||
|
@ -36,7 +36,7 @@ NULL
|
|||
'#---------------------BS_STVARS_029_05----------------------#'
|
||||
SELECT COUNT(@@innodb_flush_method);
|
||||
COUNT(@@innodb_flush_method)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
SELECT COUNT(@@local.innodb_flush_method);
|
||||
ERROR HY000: Variable 'innodb_flush_method' is a GLOBAL variable
|
||||
|
@ -46,7 +46,7 @@ ERROR HY000: Variable 'innodb_flush_method' is a GLOBAL variable
|
|||
Expected error 'Variable is a GLOBAL variable'
|
||||
SELECT COUNT(@@GLOBAL.innodb_flush_method);
|
||||
COUNT(@@GLOBAL.innodb_flush_method)
|
||||
0
|
||||
1
|
||||
1 Expected
|
||||
SELECT innodb_flush_method = @@SESSION.innodb_flush_method;
|
||||
ERROR 42S22: Unknown column 'innodb_flush_method' in 'field list'
|
||||
|
|
|
@ -1512,6 +1512,7 @@ ok
|
|||
drop table t1;
|
||||
SET SESSION AUTOCOMMIT = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
set binlog_format=mixed;
|
||||
# Switch to connection con1
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(256))
|
||||
ENGINE = InnoDB;
|
||||
|
@ -1667,3 +1668,18 @@ explain select a from t2 where a=b;
|
|||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index NULL a 10 NULL # Using where; Using index
|
||||
drop table t1, t2;
|
||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
select @@session.sql_log_bin, @@session.binlog_format, @@session.tx_isolation;
|
||||
@@session.sql_log_bin 1
|
||||
@@session.binlog_format STATEMENT
|
||||
@@session.tx_isolation READ-COMMITTED
|
||||
CREATE TABLE t1 ( a INT ) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES(1);
|
||||
DROP TABLE t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a char(50)) ENGINE=InnoDB;
|
||||
CREATE INDEX i1 on t1 (a(3));
|
||||
SELECT * FROM t1 WHERE a = 'abcde';
|
||||
a
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -747,11 +747,13 @@ select t1.b from v1a;
|
|||
ERROR 42S22: Unknown column 't1.b' in 'field list'
|
||||
select * from v1a join v1b on t1.b = t2.b;
|
||||
ERROR 42S22: Unknown column 't1.b' in 'on clause'
|
||||
select * from information_schema.statistics join information_schema.columns
|
||||
using(table_name,column_name) where table_name='user';
|
||||
TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
|
||||
user Host NULL mysql 0 mysql PRIMARY 1 A # NULL NULL BTREE NULL mysql 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI #
|
||||
user User NULL mysql 0 mysql PRIMARY 2 A # NULL NULL BTREE NULL mysql 2 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI #
|
||||
select
|
||||
statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT,
|
||||
columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.COLUMN_COMMENT
|
||||
from information_schema.statistics join information_schema.columns using(table_name,column_name) where table_name='user';
|
||||
TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA COLUMN_COMMENT
|
||||
user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL BTREE NULL mysql NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI
|
||||
user User NULL mysql 0 mysql PRIMARY 2 A NULL NULL BTREE NULL mysql NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
|
|
|
@ -111,3 +111,6 @@ set @a=-14632475938453979136;
|
|||
execute s using @a, @a;
|
||||
ERROR HY000: Incorrect arguments to EXECUTE
|
||||
End of 5.0 tests
|
||||
select 1 as a limit 4294967296,10;
|
||||
a
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -337,6 +337,126 @@ DROP VIEW v2;
|
|||
DROP VIEW v3;
|
||||
|
||||
# -- End of Bug#35469.
|
||||
Bug#37114
|
||||
SET SESSION character_set_client=latin1;
|
||||
SET SESSION character_set_server=latin1;
|
||||
SET SESSION character_set_connection=latin1;
|
||||
SET @OLD_SQL_MODE=@@SESSION.SQL_MODE;
|
||||
test LOAD DATA INFILE
|
||||
SET sql_mode = '';
|
||||
SELECT '1 \\aa\n' INTO DUMPFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt';
|
||||
CREATE TABLE t1 (id INT, val1 CHAR(3)) ENGINE=MyISAM;
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' REPLACE INTO TABLE t1 FIELDS TERMINATED BY ' ';
|
||||
SELECT * FROM t1;
|
||||
id val1
|
||||
1 \aa
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114_out.txt' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1;
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114_out.txt' FIELDS TERMINATED BY ' ' FROM t1;
|
||||
INSERT INTO t1 (id, val1) VALUES (1, '\aa');
|
||||
SELECT * FROM t1;
|
||||
id val1
|
||||
1 \aa
|
||||
1 \aa
|
||||
SET sql_mode='';
|
||||
INSERT INTO t1 (id, val1) VALUES (1, '\aa');
|
||||
SELECT * FROM t1;
|
||||
id val1
|
||||
1 \aa
|
||||
1 \aa
|
||||
1 aa
|
||||
DROP TABLE t1;
|
||||
test SELECT INTO OUTFILE
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY, val1 CHAR(4));
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SET sql_mode = '';
|
||||
INSERT INTO t1 (id, val1) VALUES (5, '\ttab');
|
||||
INSERT INTO t1 (id, val1) VALUES (4, '\\r');
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
INSERT INTO t1 (id, val1) VALUES (3, '\tx');
|
||||
1.1 NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS TERMINATED BY ' ';
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
t id val1 hex(val1)
|
||||
before 3 \tx 5C7478
|
||||
after 3 \tx 5C7478
|
||||
before 4 \r 5C72
|
||||
after 4 \r 5C72
|
||||
before 5 tab 09746162
|
||||
after 5 tab 09746162
|
||||
TRUNCATE t2;
|
||||
SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
|
||||
LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
|
||||
3 \tx
|
||||
4 \r
|
||||
5 tab
|
||||
|
||||
1.2 NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS ESCAPED BY '\' TERMINATED BY ' ' FROM t1 ORDER BY id;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS ESCAPED BY '\' TERMINATED BY ' ';
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
t id val1 hex(val1)
|
||||
before 3 \tx 5C7478
|
||||
after 3 \tx 5C7478
|
||||
before 4 \r 5C72
|
||||
after 4 \r 5C72
|
||||
before 5 tab 09746162
|
||||
after 5 tab 09746162
|
||||
TRUNCATE t2;
|
||||
SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
|
||||
LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
|
||||
3 \\tx
|
||||
4 \\r
|
||||
5 tab
|
||||
|
||||
SET sql_mode = '';
|
||||
2.1 !NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS TERMINATED BY ' ';
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
t id val1 hex(val1)
|
||||
before 3 \tx 5C7478
|
||||
after 3 \tx 5C7478
|
||||
before 4 \r 5C72
|
||||
after 4 \r 5C72
|
||||
before 5 tab 09746162
|
||||
after 5 tab 09746162
|
||||
TRUNCATE t2;
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
|
||||
LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
|
||||
3 \\tx
|
||||
4 \\r
|
||||
5 tab
|
||||
|
||||
SET sql_mode = '';
|
||||
2.2 !NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1 ORDER BY id;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS ESCAPED BY '' TERMINATED BY ' ';
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
t id val1 hex(val1)
|
||||
before 3 \tx 5C7478
|
||||
after 3 \tx 5C7478
|
||||
before 4 \r 5C72
|
||||
after 4 \r 5C72
|
||||
before 5 tab 09746162
|
||||
after 5 tab 09746162
|
||||
TRUNCATE t2;
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
|
||||
LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
|
||||
3 \tx
|
||||
4 \r
|
||||
5 tab
|
||||
|
||||
set session sql_mode=@OLD_SQL_MODE;
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests
|
||||
CREATE TABLE t1 (a int);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SET NAMES latin1;
|
||||
|
@ -364,3 +484,4 @@ SET character_set_filesystem=default;
|
|||
select @@character_set_filesystem;
|
||||
@@character_set_filesystem
|
||||
binary
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -96,6 +96,40 @@ alter table t1 auto_increment=0;
|
|||
alter table t1 auto_increment=0;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
a int(11) unsigned default NULL,
|
||||
b varchar(255) default NULL,
|
||||
UNIQUE KEY a (a),
|
||||
KEY b (b)
|
||||
);
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
CREATE TABLE t3 SELECT * FROM t1;
|
||||
# test altering of columns that multiupdate doesn't use
|
||||
# normal mode
|
||||
# PS mode
|
||||
# test altering of columns that multiupdate uses
|
||||
# normal mode
|
||||
# PS mode
|
||||
DROP TABLE t1, t2, t3;
|
||||
CREATE TABLE t1( a INT, b INT );
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
|
||||
# 1. test regular tables
|
||||
# 1.1. test altering of columns that multiupdate doesn't use
|
||||
# 1.1.1. normal mode
|
||||
# 1.1.2. PS mode
|
||||
# 1.2. test altering of columns that multiupdate uses
|
||||
# 1.2.1. normal mode
|
||||
# 1.2.2. PS mode
|
||||
ALTER TABLE t1 ADD COLUMN a INT;
|
||||
# 2. test UNIONs
|
||||
# 2.1. test altering of columns that multiupdate doesn't use
|
||||
# 2.1.1. normal mode
|
||||
# 2.1.2. PS mode
|
||||
# 2.2. test altering of columns that multiupdate uses
|
||||
# 2.2.1. normal mode
|
||||
# 2.2.2. PS mode
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
create table t1 (i int);
|
||||
lock table t1 read;
|
||||
|
|
|
@ -5,8 +5,8 @@ INIT_VALUE
|
|||
SELECT @@log AS INIT_VALUE;
|
||||
INIT_VALUE
|
||||
1
|
||||
SET @@global.log = ON;
|
||||
SET global log = 0;
|
||||
SET @@global.general_log = ON;
|
||||
SET global general_log = 0;
|
||||
'Bug# 34832: log is a system but it is not accessible using SET @@global.log;'
|
||||
'SET GLOBAL log; and SELECT @@global.log. SHOW VARIABLES shows the value of log.'
|
||||
'#--------------------FN_DYNVARS_062_02-------------------------#'
|
||||
|
|
|
@ -5,17 +5,17 @@ SELECT @start_global_value;
|
|||
'#--------------------FN_DYNVARS_064_01-------------------------#'
|
||||
SET @@global.log_bin_trust_routine_creators = TRUE;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SET @@global.log_bin_trust_routine_creators = DEFAULT;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
0
|
||||
'#--------------------FN_DYNVARS_064_02-------------------------#'
|
||||
SET @@global.log_bin_trust_routine_creators = DEFAULT;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators = 'FALSE';
|
||||
@@global.log_bin_trust_routine_creators = 'FALSE'
|
||||
1
|
||||
|
@ -24,37 +24,37 @@ Warning 1292 Truncated incorrect DOUBLE value: 'FALSE'
|
|||
'#--------------------FN_DYNVARS_064_03-------------------------#'
|
||||
SET @@global.log_bin_trust_routine_creators = ON;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
1
|
||||
SET @@global.log_bin_trust_routine_creators = OFF;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
0
|
||||
SET @@global.log_bin_trust_routine_creators = 0;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
0
|
||||
SET @@global.log_bin_trust_routine_creators = 1;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
1
|
||||
SET @@global.log_bin_trust_routine_creators = TRUE;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
1
|
||||
SET @@global.log_bin_trust_routine_creators = FALSE;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
0
|
||||
|
@ -70,7 +70,7 @@ SET @@global.log_bin_trust_routine_creators = "OFFF";
|
|||
ERROR 42000: Variable 'log_bin_trust_routine_creators' can't be set to the value of 'OFFF'
|
||||
SET @@global.log_bin_trust_routine_creators = OF;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
0
|
||||
|
@ -96,14 +96,14 @@ ERROR HY000: Variable 'log_bin_trust_routine_creators' is a GLOBAL variable
|
|||
'#---------------------FN_DYNVARS_064_07----------------------#'
|
||||
SET @@global.log_bin_trust_routine_creators = TRUE;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@log_bin_trust_routine_creators = @@global.log_bin_trust_routine_creators;
|
||||
@@log_bin_trust_routine_creators = @@global.log_bin_trust_routine_creators
|
||||
1
|
||||
'#---------------------FN_DYNVARS_064_08----------------------#'
|
||||
SET @@global.log_bin_trust_routine_creators = TRUE;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@log_bin_trust_routine_creators;
|
||||
@@log_bin_trust_routine_creators
|
||||
1
|
||||
|
@ -115,7 +115,7 @@ SELECT log_bin_trust_routine_creators = @@session.log_bin_trust_routine_creators
|
|||
ERROR 42S22: Unknown column 'log_bin_trust_routine_creators' in 'field list'
|
||||
SET @@global.log_bin_trust_routine_creators = @start_global_value;
|
||||
Warnings:
|
||||
Warning 1287 The syntax 'log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use 'log_bin_trust_function_creators' instead
|
||||
Warning 1287 The syntax '@@log_bin_trust_routine_creators' is deprecated and will be removed in MySQL 5.2. Please use '@@log_bin_trust_function_creators' instead
|
||||
SELECT @@global.log_bin_trust_routine_creators;
|
||||
@@global.log_bin_trust_routine_creators
|
||||
1
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
SET @start_value= @@global.log_output;
|
||||
SET @start_general_log= @@global.general_log;
|
||||
SET @start_general_log_file= @@global.general_log_file;
|
||||
'#--------------------FN_DYNVARS_065_01-------------------------#'
|
||||
SET @@global.log_output = 'NONE';
|
||||
'connect (con1,localhost,root,,,,)'
|
||||
'connection con1'
|
||||
SELECT @@global.log_output;
|
||||
@@global.log_output
|
||||
NONE
|
||||
SET @@global.log_output = 'TABLE,FILE';
|
||||
'connect (con2,localhost,root,,,,)'
|
||||
'connection con2'
|
||||
SELECT @@global.log_output;
|
||||
@@global.log_output
|
||||
FILE,TABLE
|
||||
|
@ -18,7 +16,7 @@ SET @@global.log_output = 'NONE';
|
|||
TRUNCATE TABLE mysql.general_log;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 value(1);
|
||||
INSERT INTO t1 VALUE(1);
|
||||
SELECT 'abc';
|
||||
abc
|
||||
abc
|
||||
|
@ -29,25 +27,33 @@ count(*)
|
|||
SET @@global.log_output = 'TABLE';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
create table t1(a int);
|
||||
INSERT INTO t1 value(1);
|
||||
CREATE TABLE t1(a int);
|
||||
INSERT INTO t1 VALUE(1);
|
||||
SELECT 'abc';
|
||||
abc
|
||||
abc
|
||||
SELECT count(*) from mysql.general_log;
|
||||
count(*)
|
||||
5
|
||||
'Bug#35371: Changing general_log file is crashing server'
|
||||
'SET @@global.general_log_file = @log_file;'
|
||||
SELECT count(*)>4 FROM mysql.general_log;
|
||||
count(*)>4
|
||||
1
|
||||
SET @@global.general_log = 'OFF';
|
||||
FLUSH LOGS;
|
||||
SET @@global.general_log_file = 'MYSQLTEST_VARDIR/run/mytest.log';
|
||||
SET @@global.general_log = 'ON';
|
||||
SET @@global.log_output = 'FILE';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
create table t1(a int);
|
||||
INSERT INTO t1 value(1);
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUE(1);
|
||||
SELECT 'abc';
|
||||
abc
|
||||
abc
|
||||
SELECT count(*) from mysql.general_log;
|
||||
SELECT count(*) FROM mysql.general_log;
|
||||
count(*)
|
||||
0
|
||||
DROP TABLE t1;
|
||||
connection default;
|
||||
SET @@global.general_log= 'OFF';
|
||||
SET @@global.general_log_file= @start_general_log_file;
|
||||
SET @@global.log_output= @start_value;
|
||||
SET @@global.general_log= @start_general_log;
|
||||
SET @@global.general_log= 'ON';
|
||||
|
|
|
@ -187,6 +187,8 @@ SELECT @@general_log, @@log;
|
|||
@@general_log @@log
|
||||
1 1
|
||||
SET GLOBAL log = 0;
|
||||
Warnings:
|
||||
Warning 1287 The syntax '@@log' is deprecated and will be removed in MySQL 7.0. Please use '@@general_log' instead
|
||||
SHOW VARIABLES LIKE 'general_log';
|
||||
Variable_name Value
|
||||
general_log OFF
|
||||
|
@ -216,6 +218,8 @@ SELECT @@slow_query_log, @@log_slow_queries;
|
|||
@@slow_query_log @@log_slow_queries
|
||||
0 0
|
||||
SET GLOBAL log_slow_queries = 0;
|
||||
Warnings:
|
||||
Warning 1287 The syntax '@@log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use '@@slow_query_log' instead
|
||||
SHOW VARIABLES LIKE 'slow_query_log';
|
||||
Variable_name Value
|
||||
slow_query_log OFF
|
||||
|
@ -270,4 +274,28 @@ SET GLOBAL general_log_file = @general_log_file_saved;
|
|||
SET GLOBAL slow_query_log_file = @slow_query_log_file_saved;
|
||||
|
||||
# -- End of Bug#32748.
|
||||
deprecated:
|
||||
SET GLOBAL log = 0;
|
||||
Warnings:
|
||||
Warning 1287 The syntax '@@log' is deprecated and will be removed in MySQL 7.0. Please use '@@general_log' instead
|
||||
SET GLOBAL log_slow_queries = 0;
|
||||
Warnings:
|
||||
Warning 1287 The syntax '@@log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use '@@slow_query_log' instead
|
||||
SET GLOBAL log = DEFAULT;
|
||||
Warnings:
|
||||
Warning 1287 The syntax '@@log' is deprecated and will be removed in MySQL 7.0. Please use '@@general_log' instead
|
||||
SET GLOBAL log_slow_queries = DEFAULT;
|
||||
Warnings:
|
||||
Warning 1287 The syntax '@@log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use '@@slow_query_log' instead
|
||||
not deprecated:
|
||||
SELECT @@global.general_log_file INTO @my_glf;
|
||||
SELECT @@global.slow_query_log_file INTO @my_sqlf;
|
||||
SET GLOBAL general_log = 0;
|
||||
SET GLOBAL slow_query_log = 0;
|
||||
SET GLOBAL general_log_file = 'WL4403_G.log';
|
||||
SET GLOBAL slow_query_log_file = 'WL4403_SQ.log';
|
||||
SET GLOBAL general_log_file = @my_glf;
|
||||
SET GLOBAL slow_query_log_file = @my_sqlf;
|
||||
SET GLOBAL general_log = DEFAULT;
|
||||
SET GLOBAL slow_query_log = DEFAULT;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
use mysql;
|
||||
SET @saved_long_query_time = @@long_query_time;
|
||||
SET @saved_log_output = @@log_output;
|
||||
SET @saved_general_log = @@GLOBAL.general_log;
|
||||
SET @saved_slow_query_log = @@GLOBAL.slow_query_log;
|
||||
SELECT @saved_long_query_time, @saved_log_output, @saved_general_log, @saved_slow_query_log;
|
||||
@saved_long_query_time @saved_log_output @saved_general_log @saved_slow_query_log
|
||||
10 FILE,TABLE 1 1
|
||||
truncate table general_log;
|
||||
select * from general_log;
|
||||
event_time user_host thread_id server_id command_type argument
|
||||
|
@ -136,6 +143,7 @@ sleep(2)
|
|||
select * from mysql.slow_log;
|
||||
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text
|
||||
TIMESTAMP USER_HOST QUERY_TIME 00:00:00 1 0 mysql 0 0 1 select sleep(2)
|
||||
set @@session.long_query_time = @saved_long_query_time;
|
||||
alter table mysql.general_log engine=myisam;
|
||||
ERROR HY000: You cannot 'ALTER' a log table if logging is enabled
|
||||
alter table mysql.slow_log engine=myisam;
|
||||
|
@ -213,6 +221,7 @@ TIMESTAMP USER_HOST THREAD_ID 1 Query truncate table mysql.slow_log
|
|||
TIMESTAMP USER_HOST THREAD_ID 1 Query set session long_query_time=1
|
||||
TIMESTAMP USER_HOST THREAD_ID 1 Query select sleep(2)
|
||||
TIMESTAMP USER_HOST THREAD_ID 1 Query select * from mysql.slow_log
|
||||
TIMESTAMP USER_HOST THREAD_ID 1 Query set @@session.long_query_time = @saved_long_query_time
|
||||
TIMESTAMP USER_HOST THREAD_ID 1 Query alter table mysql.general_log engine=myisam
|
||||
TIMESTAMP USER_HOST THREAD_ID 1 Query alter table mysql.slow_log engine=myisam
|
||||
TIMESTAMP USER_HOST THREAD_ID 1 Query drop table mysql.general_log
|
||||
|
@ -281,6 +290,7 @@ use mysql;
|
|||
lock tables general_log read local, help_category read local;
|
||||
ERROR HY000: You can't use locks with log tables.
|
||||
unlock tables;
|
||||
SET SESSION long_query_time = 1000;
|
||||
drop table if exists mysql.renamed_general_log;
|
||||
drop table if exists mysql.renamed_slow_log;
|
||||
drop table if exists mysql.general_log_new;
|
||||
|
@ -330,6 +340,7 @@ set global slow_query_log='ON';
|
|||
ERROR 42S02: Table 'mysql.slow_log' doesn't exist
|
||||
RENAME TABLE general_log2 TO general_log;
|
||||
RENAME TABLE slow_log2 TO slow_log;
|
||||
SET SESSION long_query_time = @saved_long_query_time;
|
||||
set global general_log='ON';
|
||||
set global slow_query_log='ON';
|
||||
flush logs;
|
||||
|
@ -390,7 +401,6 @@ SET GLOBAL general_log = 0;
|
|||
FLUSH LOGS;
|
||||
ALTER TABLE mysql.general_log DROP COLUMN seq;
|
||||
ALTER TABLE mysql.general_log ENGINE = CSV;
|
||||
SET @old_long_query_time:=@@long_query_time;
|
||||
SET GLOBAL slow_query_log = 0;
|
||||
FLUSH LOGS;
|
||||
TRUNCATE TABLE mysql.slow_log;
|
||||
|
@ -418,10 +428,11 @@ START_TIME USER_HOST QUERY_TIME 00:00:00 1 0 test 0 0 1 SELECT "My own slow quer
|
|||
START_TIME USER_HOST QUERY_TIME 00:00:00 1 0 test 0 0 1 SELECT "My own slow query", sleep(2) 3
|
||||
START_TIME USER_HOST QUERY_TIME 00:00:00 1 0 test 0 0 1 SELECT "My own slow query", sleep(2) 4
|
||||
SET GLOBAL slow_query_log = 0;
|
||||
SET SESSION long_query_time =@old_long_query_time;
|
||||
SET SESSION long_query_time =@saved_long_query_time;
|
||||
FLUSH LOGS;
|
||||
ALTER TABLE mysql.slow_log DROP COLUMN seq;
|
||||
ALTER TABLE mysql.slow_log ENGINE = CSV;
|
||||
SET GLOBAL slow_query_log = @saved_slow_query_log;
|
||||
drop procedure if exists proc25422_truncate_slow;
|
||||
drop procedure if exists proc25422_truncate_general;
|
||||
drop procedure if exists proc25422_alter_slow;
|
||||
|
@ -593,8 +604,6 @@ UNTIL done END REPEAT;
|
|||
CLOSE cur1;
|
||||
TRUNCATE mysql.general_log;
|
||||
END //
|
||||
SET @old_general_log_state = @@global.general_log;
|
||||
SET @old_slow_log_state = @@global.slow_query_log;
|
||||
SET GLOBAL general_log = ON;
|
||||
SET GLOBAL slow_query_log = ON;
|
||||
select "put something into general_log";
|
||||
|
@ -614,11 +623,10 @@ DROP TABLE `db_17876.general_log_data`;
|
|||
DROP PROCEDURE IF EXISTS `db_17876.archiveSlowLog`;
|
||||
DROP PROCEDURE IF EXISTS `db_17876.archiveGeneralLog`;
|
||||
DROP DATABASE IF EXISTS `db_17876`;
|
||||
SET GLOBAL general_log = @old_general_log_state;
|
||||
SET GLOBAL slow_query_log = @old_slow_log_state;
|
||||
SET GLOBAL general_log = @saved_general_log;
|
||||
SET GLOBAL slow_query_log = @saved_slow_query_log;
|
||||
select CONNECTION_ID() into @thread_id;
|
||||
truncate table mysql.general_log;
|
||||
set @old_general_log_state = @@global.general_log;
|
||||
set global general_log = on;
|
||||
set @lparam = "000 001 002 003 004 005 006 007 008 009"
|
||||
"010 011 012 013 014 015 016 017 018 019"
|
||||
|
@ -725,6 +733,7 @@ execute long_query using @lparam;
|
|||
set global general_log = off;
|
||||
select command_type, argument from mysql.general_log where thread_id = @thread_id;
|
||||
command_type argument
|
||||
Query set global general_log = on
|
||||
Query set @lparam = "000 001 002 003 004 005 006 007 008 009"
|
||||
"010 011 012 013 014 015 016 017 018 019"
|
||||
"020 021 022 023 024 025 026 027 028 029"
|
||||
|
@ -831,8 +840,34 @@ Query execute long_query using @lparam
|
|||
Execute select '000 001 002 003 004 005 006 007 008 009010 011 012 013 014 015 016 017 018 019020 021 022 023 024 025 026 027 028 029030 031 032 033 034 035 036 037 038 039040 041 042 043 044 045 046 047 048 049050 051 052 053 054 055 056 057 058 059060 061 062 063 064 065 066 067 068 069070 071 072 073 074 075 076 077 078 079080 081 082 083 084 085 086 087 088 089090 091 092 093 094 095 096 097 098 099100 101 102 103 104 105 106 107 108 109110 111 112 113 114 115 116 117 118 119120 121 122 123 124 125 126 127 128 129130 131 132 133 134 135 136 137 138 139140 141 142 143 144 145 146 147 148 149150 151 152 153 154 155 156 157 158 159160 161 162 163 164 165 166 167 168 169170 171 172 173 174 175 176 177 178 179180 181 182 183 184 185 186 187 188 189190 191 192 193 194 195 196 197 198 199200 201 202 203 204 205 206 207 208 209210 211 212 213 214 215 216 217 218 219220 221 222 223 224 225 226 227 228 229230 231 232 233 234 235 236 237 238 239240 241 242 243 244 245 246 247 248 249250 251 252 253 254 255 256 257 258 259260 261 262 263 264 265 266 267 268 269270 271 272 273 274 275 276 277 278 279280 281 282 283 284 285 286 287 288 289290 291 292 293 294 295 296 297 298 299300 301 302 303 304 305 306 307 308 309310 311 312 313 314 315 316 317 318 319320 321 322 323 324 325 326 327 328 329330 331 332 333 334 335 336 337 338 339340 341 342 343 344 345 346 347 348 349350 351 352 353 354 355 356 357 358 359360 361 362 363 364 365 366 367 368 369370 371 372 373 374 375 376 377 378 379380 381 382 383 384 385 386 387 388 389390 391 392 393 394 395 396 397 398 399400 401 402 403 404 405 406 407 408 409410 411 412 413 414 415 416 417 418 419420 421 422 423 424 425 426 427 428 429430 431 432 433 434 435 436 437 438 439440 441 442 443 444 445 446 447 448 449450 451 452 453 454 455 456 457 458 459460 461 462 463 464 465 466 467 468 469470 471 472 473 474 475 476 477 478 479480 481 482 483 484 485 486 487 488 489490 491 492 493 494 495 496 497 498 499500 501 502 503 504 505 506 507 508 509510 511 512 513 514 515 516 517 518 519520 521 522 523 524 525 526 527 528 529530 531 532 533 534 535 536 537 538 539540 541 542 543 544 545 546 547 548 549550 551 552 553 554 555 556 557 558 559560 561 562 563 564 565 566 567 568 569570 571 572 573 574 575 576 577 578 579580 581 582 583 584 585 586 587 588 589590 591 592 593 594 595 596 597 598 599600 601 602 603 604 605 606 607 608 609610 611 612 613 614 615 616 617 618 619620 621 622 623 624 625 626 627 628 629630 631 632 633 634 635 636 637 638 639640 641 642 643 644 645 646 647 648 649650 651 652 653 654 655 656 657 658 659660 661 662 663 664 665 666 667 668 669670 671 672 673 674 675 676 677 678 679680 681 682 683 684 685 686 687 688 689690 691 692 693 694 695 696 697 698 699700 701 702 703 704 705 706 707 708 709710 711 712 713 714 715 716 717 718 719720 721 722 723 724 725 726 727 728 729730 731 732 733 734 735 736 737 738 739740 741 742 743 744 745 746 747 748 749750 751 752 753 754 755 756 757 758 759760 761 762 763 764 765 766 767 768 769770 771 772 773 774 775 776 777 778 779780 781 782 783 784 785 786 787 788 789790 791 792 793 794 795 796 797 798 799800 801 802 803 804 805 806 807 808 809810 811 812 813 814 815 816 817 818 819820 821 822 823 824 825 826 827 828 829830 831 832 833 834 835 836 837 838 839840 841 842 843 844 845 846 847 848 849850 851 852 853 854 855 856 857 858 859860 861 862 863 864 865 866 867 868 869870 871 872 873 874 875 876 877 878 879880 881 882 883 884 885 886 887 888 889890 891 892 893 894 895 896 897 898 899900 901 902 903 904 905 906 907 908 909910 911 912 913 914 915 916 917 918 919920 921 922 923 924 925 926 927 928 929930 931 932 933 934 935 936 937 938 939940 941 942 943 944 945 946 947 948 949950 951 952 953 954 955 956 957 958 959960 961 962 963 964 965 966 967 968 969970 971 972 973 974 975 976 977 978 979980 981 982 983 984 985 986 987 988 989990 991 992 993 994 995 996 997 998 999' as long_query
|
||||
Query set global general_log = off
|
||||
deallocate prepare long_query;
|
||||
set global general_log = @old_general_log_state;
|
||||
SET @old_slow_log_state = @@global.slow_query_log;
|
||||
set global general_log = @saved_general_log;
|
||||
DROP TABLE IF EXISTS log_count;
|
||||
DROP TABLE IF EXISTS slow_log_copy;
|
||||
DROP TABLE IF EXISTS general_log_copy;
|
||||
CREATE TABLE log_count (count BIGINT(21));
|
||||
SET GLOBAL general_log = ON;
|
||||
SET GLOBAL slow_query_log = ON;
|
||||
CREATE TABLE slow_log_copy SELECT * FROM mysql.slow_log;
|
||||
INSERT INTO slow_log_copy SELECT * FROM mysql.slow_log;
|
||||
INSERT INTO log_count (count) VALUES ((SELECT count(*) FROM mysql.slow_log));
|
||||
DROP TABLE slow_log_copy;
|
||||
CREATE TABLE general_log_copy SELECT * FROM mysql.general_log;
|
||||
INSERT INTO general_log_copy SELECT * FROM mysql.general_log;
|
||||
INSERT INTO log_count (count) VALUES ((SELECT count(*) FROM mysql.general_log));
|
||||
DROP TABLE general_log_copy;
|
||||
SET GLOBAL general_log = OFF;
|
||||
SET GLOBAL slow_query_log = OFF;
|
||||
CREATE TABLE slow_log_copy SELECT * FROM mysql.slow_log;
|
||||
INSERT INTO slow_log_copy SELECT * FROM mysql.slow_log;
|
||||
INSERT INTO log_count (count) VALUES ((SELECT count(*) FROM mysql.slow_log));
|
||||
DROP TABLE slow_log_copy;
|
||||
CREATE TABLE general_log_copy SELECT * FROM mysql.general_log;
|
||||
INSERT INTO general_log_copy SELECT * FROM mysql.general_log;
|
||||
INSERT INTO log_count (count) VALUES ((SELECT count(*) FROM mysql.general_log));
|
||||
DROP TABLE general_log_copy;
|
||||
SET GLOBAL general_log = @saved_general_log;
|
||||
SET GLOBAL slow_query_log = @saved_slow_query_log;
|
||||
DROP TABLE log_count;
|
||||
SET SESSION long_query_time = 0;
|
||||
SET GLOBAL slow_query_log = ON;
|
||||
FLUSH LOGS;
|
||||
|
@ -858,5 +893,7 @@ TIMESTAMP 1 1 SELECT SQL_NO_CACHE 'Bug#31700 - KEY', f1,f2,f3,SLEEP(1.1) FROM t1
|
|||
TIMESTAMP 1 1 SELECT SQL_NO_CACHE 'Bug#31700 - PK', f1,f2,f3,SLEEP(1.1) FROM t1 WHERE f1=2
|
||||
DROP TABLE t1;
|
||||
TRUNCATE TABLE mysql.slow_log;
|
||||
SET GLOBAL slow_query_log = @old_slow_log_state;
|
||||
SET SESSION long_query_time =@old_long_query_time;
|
||||
SET GLOBAL slow_query_log = @saved_slow_query_log;
|
||||
SET GLOBAL general_log=@saved_general_log;
|
||||
SET SESSION long_query_time =@saved_long_query_time;
|
||||
SET GLOBAL LOG_OUTPUT = @saved_log_output;
|
||||
|
|
|
@ -2,10 +2,7 @@ SET @start_global_value = @@global.max_allowed_packet;
|
|||
SELECT @start_global_value;
|
||||
@start_global_value
|
||||
1048576
|
||||
SET @start_session_value = @@session.max_allowed_packet;
|
||||
SELECT @start_session_value;
|
||||
@start_session_value
|
||||
1048576
|
||||
SET @@global.max_allowed_packet = DEFAULT;
|
||||
'#--------------------FN_DYNVARS_070_01-------------------------#'
|
||||
SET @@global.max_allowed_packet = 1000;
|
||||
Warnings:
|
||||
|
@ -15,7 +12,9 @@ SELECT @@global.max_allowed_packet;
|
|||
@@global.max_allowed_packet
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = 20000;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SET @@session.max_allowed_packet = DEFAULT;
|
||||
ERROR 42000: Variable 'max_allowed_packet' doesn't have a default value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1048576
|
||||
|
@ -24,10 +23,6 @@ SET @@global.max_allowed_packet = DEFAULT;
|
|||
SELECT @@global.max_allowed_packet = 1048576;
|
||||
@@global.max_allowed_packet = 1048576
|
||||
1
|
||||
SET @@session.max_allowed_packet = DEFAULT;
|
||||
SELECT @@session.max_allowed_packet = 1048576;
|
||||
@@session.max_allowed_packet = 1048576
|
||||
1
|
||||
'#--------------------FN_DYNVARS_070_03-------------------------#'
|
||||
SET @@global.max_allowed_packet = 1024;
|
||||
SELECT @@global.max_allowed_packet;
|
||||
|
@ -48,25 +43,30 @@ SELECT @@global.max_allowed_packet;
|
|||
1073740800
|
||||
'#--------------------FN_DYNVARS_070_04-------------------------#'
|
||||
SET @@session.max_allowed_packet = 1024;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1024
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = 1025;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1024
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = 65535;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
64512
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = 1073741824;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1073741824
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = 1073741823;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1073740800
|
||||
1048576
|
||||
'#------------------FN_DYNVARS_070_05-----------------------#'
|
||||
SET @@global.max_allowed_packet = 0;
|
||||
Warnings:
|
||||
|
@ -103,37 +103,33 @@ SELECT @@global.max_allowed_packet;
|
|||
@@global.max_allowed_packet
|
||||
1073741824
|
||||
SET @@session.max_allowed_packet = 0;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_allowed_packet value: '0'
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1024
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = 1023;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_allowed_packet value: '1023'
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1024
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = -2;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_allowed_packet value: '0'
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1024
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = 65530.34.;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1
|
||||
SET @@session.max_allowed_packet = 10737418241;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_allowed_packet value: '10737418241'
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1073741824
|
||||
1048576
|
||||
'Bug # 34837: Errors are not coming on assigning invalid values to variable';
|
||||
SET @@session.max_allowed_packet = test;
|
||||
ERROR 42000: Incorrect argument type to variable 'max_allowed_packet'
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1073741824
|
||||
1048576
|
||||
'#------------------FN_DYNVARS_070_06-----------------------#'
|
||||
SELECT @@global.max_allowed_packet = VARIABLE_VALUE
|
||||
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||
|
@ -166,6 +162,7 @@ SELECT @@max_allowed_packet = @@global.max_allowed_packet;
|
|||
0
|
||||
'#---------------------FN_DYNVARS_070_10----------------------#'
|
||||
SET @@max_allowed_packet = 100000;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@max_allowed_packet = @@local.max_allowed_packet;
|
||||
@@max_allowed_packet = @@local.max_allowed_packet
|
||||
1
|
||||
|
@ -174,9 +171,10 @@ SELECT @@local.max_allowed_packet = @@session.max_allowed_packet;
|
|||
1
|
||||
'#---------------------FN_DYNVARS_070_11----------------------#'
|
||||
SET max_allowed_packet = 1024;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@max_allowed_packet;
|
||||
@@max_allowed_packet
|
||||
1024
|
||||
1048576
|
||||
SELECT local.max_allowed_packet;
|
||||
ERROR 42S02: Unknown table 'local' in field list
|
||||
SELECT session.max_allowed_packet;
|
||||
|
@ -187,7 +185,6 @@ SET @@global.max_allowed_packet = @start_global_value;
|
|||
SELECT @@global.max_allowed_packet;
|
||||
@@global.max_allowed_packet
|
||||
1048576
|
||||
SET @@session.max_allowed_packet = @start_session_value;
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1048576
|
||||
|
|
|
@ -10,24 +10,15 @@ name BLOB
|
|||
'#--------------------FN_DYNVARS_070_01-------------------------#'
|
||||
## Setting value of max_allowed packet and net_buffer_length to 1024 ##
|
||||
SET @@session.max_allowed_packet = 1024;
|
||||
SET @@session.net_buffer_length = 1024;
|
||||
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.max_allowed_packet;
|
||||
@@session.max_allowed_packet
|
||||
1024
|
||||
1048576
|
||||
SET @@session.net_buffer_length = 1024;
|
||||
ERROR HY000: SESSION variable 'net_buffer_length' is read-only. Use SET GLOBAL to assign the value
|
||||
SELECT @@session.net_buffer_length;
|
||||
@@session.net_buffer_length
|
||||
1024
|
||||
## Inserting and fetching data of length greater than 1024 ##
|
||||
INSERT into t1(name) values("aaassssssssddddddddffffffgggggggg, askdlfjalsdkjfalksdjflaksdjfalkjdflaksjdflakjdflajsflajflajdfalsjfdlajfladjslfajdflajdsflajsflakjsdfla;kjflsdjkf;aljfa;lkdsfjla;sjlkajffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllakjsdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa;;;;;;;;;;;;;;;;;;;;;;;;;;;dsklfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdkskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
|
||||
SELECT length("aaaaaasssssssssssdddddddfffffgggg, askdlfjalsdkjfalksdjflaksdjfalkjdflaksjdflakjdflajsflajflajdfalsjfdlajfladjslfajdflajdsflajsflakjsdfla;kjflsdjkf;aljfa;lkdsfjla;sjlkajffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllakjsdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa;;;;;;;;;;;;;;;;;;;;;;;;;;;dsklfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdkskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk") as len;
|
||||
len
|
||||
1470
|
||||
## Verifying record in table t1 ##
|
||||
SELECT * from t1;
|
||||
id name
|
||||
1 aaassssssssddddddddffffffgggggggg, askdlfjalsdkjfalksdjflaksdjfalkjdflaksjdflakjdflajsflajflajdfalsjfdlajfladjslfajdflajdsflajsflakjsdfla;kjflsdjkf;aljfa;lkdsfjla;sjlkajffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllakjsdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa;;;;;;;;;;;;;;;;;;;;;;;;;;;dsklfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdkskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
|
||||
'Bug#35381: Error is not coming on inserting and fetching data of length'
|
||||
'greater than max_allowed_packet size at session level';
|
||||
16384
|
||||
'#--------------------FN_DYNVARS_070_02-------------------------#'
|
||||
## Setting value of max_allowed packet and net_buffer_length to 1024 ##
|
||||
SET @@global.max_allowed_packet = 1024;
|
||||
|
|
|
@ -830,7 +830,7 @@ ERROR HY000: Unable to open underlying table which is differently defined or of
|
|||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3);
|
||||
SELECT * FROM t2;
|
||||
ERROR 42S02: Table 'test.t3' doesn't exist
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t1(a INT, b TEXT);
|
||||
CREATE TABLE tm1(a TEXT, b INT) ENGINE=MERGE UNION=(t1);
|
||||
|
@ -895,17 +895,19 @@ drop table t2;
|
|||
drop table t1;
|
||||
CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1, t2);
|
||||
SELECT * FROM tm1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
CHECK TABLE tm1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tm1 check Error Table 'test.t1' doesn't exist
|
||||
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
test.tm1 check error Corrupt
|
||||
CREATE TABLE t1(a INT);
|
||||
SELECT * FROM tm1;
|
||||
ERROR 42S02: Table 'test.t2' doesn't exist
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
CHECK TABLE tm1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tm1 check Error Table 'test.t2' doesn't exist
|
||||
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
test.tm1 check error Corrupt
|
||||
CREATE TABLE t2(a BLOB);
|
||||
SELECT * FROM tm1;
|
||||
|
@ -1199,7 +1201,7 @@ c1
|
|||
3
|
||||
RENAME TABLE t2 TO t5;
|
||||
SELECT * FROM t3 ORDER BY c1;
|
||||
ERROR 42S02: Table 'test.t2' doesn't exist
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
RENAME TABLE t5 TO t2;
|
||||
SELECT * FROM t3 ORDER BY c1;
|
||||
c1
|
||||
|
@ -1233,7 +1235,7 @@ UNLOCK TABLES;
|
|||
# 4. Alter table rename.
|
||||
ALTER TABLE t2 RENAME TO t5;
|
||||
SELECT * FROM t3 ORDER BY c1;
|
||||
ERROR 42S02: Table 'test.t2' doesn't exist
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
ALTER TABLE t5 RENAME TO t2;
|
||||
SELECT * FROM t3 ORDER BY c1;
|
||||
c1
|
||||
|
@ -1317,7 +1319,7 @@ LOCK TABLES t1 WRITE, t2 WRITE;
|
|||
INSERT INTO t1 VALUES (1);
|
||||
DROP TABLE t1;
|
||||
SELECT * FROM t2;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
SELECT * FROM t1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
UNLOCK TABLES;
|
||||
|
@ -2006,6 +2008,13 @@ test.t1 optimize status OK
|
|||
FLUSH TABLES m1, t1;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1, m1;
|
||||
CREATE TABLE tm1 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1) INSERT_METHOD=FIRST;
|
||||
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE
|
||||
TABLE_SCHEMA = 'test' and TABLE_NAME='tm1';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
|
||||
NULL test tm1 BASE TABLE NULL NULL NULL # # # # # # # # # # NULL # # Unable to open underlying table which is differently defined or of non-MyISAM ty
|
||||
DROP TABLE tm1;
|
||||
End of 5.1 tests
|
||||
CREATE TABLE t1(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM;
|
||||
CREATE TABLE t2(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM;
|
||||
CREATE TABLE t3(C1 INT, C2 INT, KEY C1(C1), KEY C2(C2)) ENGINE=MYISAM;
|
||||
|
|
|
@ -181,4 +181,21 @@ c1 c2
|
|||
3 3
|
||||
DROP VIEW v1,v2;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (i INT, d DATE);
|
||||
INSERT INTO t1 VALUES (1, '2008-01-01'), (2, '2008-01-02'), (3, '2008-01-03');
|
||||
SELECT COALESCE(d, d), IFNULL(d, d), IF(i, d, d),
|
||||
CASE i WHEN i THEN d ELSE d END, GREATEST(d, d), LEAST(d, d)
|
||||
FROM t1 ORDER BY RAND();
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
2008-01-01 2008-01-01 2008-01-01 2008-01-01 2008-01-01 2008-01-01
|
||||
2008-01-02 2008-01-02 2008-01-02 2008-01-02 2008-01-02 2008-01-02
|
||||
2008-01-03 2008-01-03 2008-01-03 2008-01-03 2008-01-03 2008-01-03
|
||||
COALESCE(d, d) IFNULL(d, d) IF(i, d, d) CASE i WHEN i THEN d ELSE d END GREATEST(d, d) LEAST(d, d)
|
||||
def CASE i WHEN i THEN d ELSE d END CASE i WHEN i THEN d ELSE d END 10 10 10 Y 128 0 63
|
||||
def COALESCE(d, d) COALESCE(d, d) 10 10 10 Y 128 0 63
|
||||
def GREATEST(d, d) GREATEST(d, d) 10 10 10 Y 128 0 63
|
||||
def IF(i, d, d) IF(i, d, d) 10 10 10 Y 128 0 63
|
||||
def IFNULL(d, d) IFNULL(d, d) 10 10 10 Y 128 0 63
|
||||
def LEAST(d, d) LEAST(d, d) 10 10 10 Y 128 0 63
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -378,29 +378,6 @@ where 0=1;
|
|||
delete t1, t2 from t2,t1
|
||||
where t1.id1=t2.id2 and 0=1;
|
||||
drop table t1,t2;
|
||||
create table t1 ( a int not null, b int not null) ;
|
||||
alter table t1 add index i1(a);
|
||||
delete from t1 where a > 2000000;
|
||||
create table t2 like t1;
|
||||
insert into t2 select * from t1;
|
||||
select 't2 rows before small delete', count(*) from t1;
|
||||
t2 rows before small delete count(*)
|
||||
t2 rows before small delete 2000000
|
||||
delete t1,t2 from t1,t2 where t1.b=t2.a and t1.a < 2;
|
||||
select 't2 rows after small delete', count(*) from t2;
|
||||
t2 rows after small delete count(*)
|
||||
t2 rows after small delete 1999999
|
||||
select 't1 rows after small delete', count(*) from t1;
|
||||
t1 rows after small delete count(*)
|
||||
t1 rows after small delete 1999999
|
||||
delete t1,t2 from t1,t2 where t1.b=t2.a and t1.a < 100*1000;
|
||||
select 't2 rows after big delete', count(*) from t2;
|
||||
t2 rows after big delete count(*)
|
||||
t2 rows after big delete 1900001
|
||||
select 't1 rows after big delete', count(*) from t1;
|
||||
t1 rows after big delete count(*)
|
||||
t1 rows after big delete 1900001
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 ( a int );
|
||||
CREATE TABLE t2 ( a int );
|
||||
DELETE t1 FROM t1, t2 AS t3;
|
||||
|
|
25
mysql-test/r/multi_update2.result
Normal file
25
mysql-test/r/multi_update2.result
Normal file
|
@ -0,0 +1,25 @@
|
|||
DROP TABLE IF EXISTS t1,t2;
|
||||
CREATE TABLE t1 ( a INT NOT NULL, b INT NOT NULL) ;
|
||||
# The protocolling of many inserts into t1 is suppressed.
|
||||
ALTER TABLE t1 ADD INDEX i1(a);
|
||||
DELETE FROM t1 WHERE a > 2000000;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT 't2 rows before small delete', COUNT(*) FROM t1;
|
||||
t2 rows before small delete COUNT(*)
|
||||
t2 rows before small delete 2000000
|
||||
DELETE t1,t2 FROM t1,t2 WHERE t1.b=t2.a AND t1.a < 2;
|
||||
SELECT 't2 rows after small delete', COUNT(*) FROM t2;
|
||||
t2 rows after small delete COUNT(*)
|
||||
t2 rows after small delete 1999999
|
||||
SELECT 't1 rows after small delete', COUNT(*) FROM t1;
|
||||
t1 rows after small delete COUNT(*)
|
||||
t1 rows after small delete 1999999
|
||||
DELETE t1,t2 FROM t1,t2 WHERE t1.b=t2.a AND t1.a < 100*1000;
|
||||
SELECT 't2 rows after big delete', COUNT(*) FROM t2;
|
||||
t2 rows after big delete COUNT(*)
|
||||
t2 rows after big delete 1900001
|
||||
SELECT 't1 rows after big delete', COUNT(*) FROM t1;
|
||||
t1 rows after big delete COUNT(*)
|
||||
t1 rows after big delete 1900001
|
||||
DROP TABLE t1,t2;
|
|
@ -98,6 +98,19 @@ drop view v_bug25347;
|
|||
drop table t_bug25347;
|
||||
drop database d_bug25347;
|
||||
use test;
|
||||
create view v1 as select * from information_schema.routines;
|
||||
check table v1, information_schema.routines;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 check status OK
|
||||
information_schema.routines check note The storage engine for the table doesn't support check
|
||||
drop view v1;
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE t2(a INT);
|
||||
test.t1
|
||||
Error : Incorrect information in file: './test/t1.frm'
|
||||
error : Corrupt
|
||||
test.t2 OK
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
create table t1(a int);
|
||||
create view v1 as select * from t1;
|
||||
|
|
|
@ -277,3 +277,16 @@ drop table t3;
|
|||
drop table t4;
|
||||
drop table t5;
|
||||
drop table t6;
|
||||
SELECT @@global.storage_engine INTO @old_engine;
|
||||
SET GLOBAL storage_engine=InnoDB;
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 VALUES();
|
||||
SELECT COUNT(*) FROM v1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT COUNT(*) FROM v1;
|
||||
COUNT(*)
|
||||
1
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL storage_engine=@old_engine;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue