Merge from 5.0 trunk.
This commit is contained in:
commit
dae4c823e9
4
.bzr-mysql/default.conf
Normal file
4
.bzr-mysql/default.conf
Normal file
@ -0,0 +1,4 @@
|
||||
[MYSQL]
|
||||
post_commit_to = "commits@lists.mysql.com"
|
||||
post_push_to = "commits@lists.mysql.com"
|
||||
tree_name = "mysql-5.0"
|
@ -27,6 +27,8 @@ EXTRA_DIST = FINISH.sh \
|
||||
compile-alpha-cxx \
|
||||
compile-alpha-debug \
|
||||
compile-amd64-debug-max \
|
||||
compile-amd64-gcov \
|
||||
compile-amd64-gprof \
|
||||
compile-amd64-max \
|
||||
compile-amd64-max-sci \
|
||||
compile-darwin-mwcc \
|
||||
@ -54,6 +56,8 @@ EXTRA_DIST = FINISH.sh \
|
||||
compile-pentium-valgrind-max \
|
||||
compile-pentium64-debug \
|
||||
compile-pentium64-debug-max \
|
||||
compile-pentium64-gcov \
|
||||
compile-pentium64-gprof \
|
||||
compile-pentium64-max-sci \
|
||||
compile-pentium64-valgrind-max \
|
||||
compile-ppc \
|
||||
@ -61,6 +65,10 @@ EXTRA_DIST = FINISH.sh \
|
||||
compile-ppc-debug-max \
|
||||
compile-ppc-debug-max-no-ndb \
|
||||
compile-ppc-max \
|
||||
compile-solaris-amd64 \
|
||||
compile-solaris-amd64-debug \
|
||||
compile-solaris-amd64-forte \
|
||||
compile-solaris-amd64-forte-debug \
|
||||
compile-solaris-sparc \
|
||||
compile-solaris-sparc-debug \
|
||||
compile-solaris-sparc-forte \
|
||||
|
@ -78,6 +78,10 @@ SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DDBUG_OFF
|
||||
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDBUG_OFF")
|
||||
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDBUG_OFF")
|
||||
|
||||
#TODO: update the code and remove the disabled warnings
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805")
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805")
|
||||
|
||||
IF(CMAKE_GENERATOR MATCHES "Visual Studio 8")
|
||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996")
|
||||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996")
|
||||
|
@ -154,7 +154,7 @@ test-bt:
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --force --comment=ps --ps-protocol
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --force --comment=funcs1_ps --ps-protocol --suite=funcs_1
|
||||
@PERL@ ./mysql-test-run.pl --force --comment=funcs1_ps --ps-protocol --reorder --suite=funcs_1
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --force --comment=funcs2 --suite=funcs_2
|
||||
-if [ -d mysql-test/suite/nist ] ; then \
|
||||
@ -179,7 +179,7 @@ test-force-full-pl: test-force-full
|
||||
|
||||
test-ext-funcs:
|
||||
cd mysql-test ; \
|
||||
@PERL@ ./mysql-test-run.pl --force --suite=funcs_1 ; \
|
||||
@PERL@ ./mysql-test-run.pl --force --reorder --suite=funcs_1 ; \
|
||||
@PERL@ ./mysql-test-run.pl --force --suite=funcs_2
|
||||
|
||||
test-ext: test-ext-funcs
|
||||
|
@ -1216,21 +1216,35 @@ sig_handler mysql_sigint(int sig)
|
||||
char kill_buffer[40];
|
||||
MYSQL *kill_mysql= NULL;
|
||||
|
||||
signal(SIGINT, mysql_sigint);
|
||||
|
||||
/* terminate if no query being executed, or we already tried interrupting */
|
||||
if (!executing_query || interrupted_query++)
|
||||
mysql_end(sig);
|
||||
goto err;
|
||||
|
||||
kill_mysql= mysql_init(kill_mysql);
|
||||
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
|
||||
"", opt_mysql_port, opt_mysql_unix_port,0))
|
||||
mysql_end(sig);
|
||||
goto err;
|
||||
/* kill_buffer is always big enough because max length of %lu is 15 */
|
||||
sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
|
||||
mysql_real_query(kill_mysql, kill_buffer, strlen(kill_buffer));
|
||||
mysql_close(kill_mysql);
|
||||
tee_fprintf(stdout, "Query aborted by Ctrl+C\n");
|
||||
|
||||
return;
|
||||
|
||||
err:
|
||||
#ifdef _WIN32
|
||||
/*
|
||||
When SIGINT is raised on Windows, the OS creates a new thread to handle the
|
||||
interrupt. Once that thread completes, the main thread continues running
|
||||
only to find that it's resources have already been free'd when the sigint
|
||||
handler called mysql_end().
|
||||
*/
|
||||
mysql_thread_end();
|
||||
return;
|
||||
#else
|
||||
mysql_end(sig);
|
||||
#endif
|
||||
}
|
||||
|
||||
sig_handler mysql_end(int sig)
|
||||
@ -1271,7 +1285,7 @@ sig_handler mysql_end(int sig)
|
||||
my_free(current_prompt,MYF(MY_ALLOW_ZERO_PTR));
|
||||
mysql_server_end();
|
||||
free_defaults(defaults_argv);
|
||||
my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
|
||||
my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : MY_CHECK_ERROR);
|
||||
exit(status.exit_status);
|
||||
}
|
||||
|
||||
@ -1765,7 +1779,7 @@ static int read_and_execute(bool interactive)
|
||||
the very beginning of a text file when
|
||||
you save the file using "Unicode UTF-8" format.
|
||||
*/
|
||||
if (!line_number &&
|
||||
if (line && !line_number &&
|
||||
(uchar) line[0] == 0xEF &&
|
||||
(uchar) line[1] == 0xBB &&
|
||||
(uchar) line[2] == 0xBF)
|
||||
@ -2067,37 +2081,6 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (!*ml_comment && !*in_string &&
|
||||
(end_of_line - pos) >= 10 &&
|
||||
!my_strnncoll(charset_info, (uchar*) pos, 10,
|
||||
(const uchar*) "delimiter ", 10))
|
||||
{
|
||||
// Flush previously accepted characters
|
||||
if (out != line)
|
||||
{
|
||||
buffer.append(line, (uint32) (out - line));
|
||||
out= line;
|
||||
}
|
||||
|
||||
// Flush possible comments in the buffer
|
||||
if (!buffer.is_empty())
|
||||
{
|
||||
if (com_go(&buffer, 0) > 0) // < 0 is not fatal
|
||||
DBUG_RETURN(1);
|
||||
buffer.length(0);
|
||||
}
|
||||
|
||||
/*
|
||||
Delimiter wants the get rest of the given line as argument to
|
||||
allow one to change ';' to ';;' and back
|
||||
*/
|
||||
buffer.append(pos);
|
||||
if (com_delimiter(&buffer, pos) > 0)
|
||||
DBUG_RETURN(1);
|
||||
|
||||
buffer.length(0);
|
||||
break;
|
||||
}
|
||||
else if (!*ml_comment && !*in_string && is_prefix(pos, delimiter))
|
||||
{
|
||||
// Found a statement. Continue parsing after the delimiter
|
||||
@ -2142,7 +2125,14 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
}
|
||||
else if (!*ml_comment && (!*in_string && (inchar == '#' ||
|
||||
inchar == '-' && pos[1] == '-' &&
|
||||
my_isspace(charset_info,pos[2]))))
|
||||
/*
|
||||
The third byte is either whitespace or is the
|
||||
end of the line -- which would occur only
|
||||
because of the user sending newline -- which is
|
||||
itself whitespace and should also match.
|
||||
*/
|
||||
(my_isspace(charset_info,pos[2]) ||
|
||||
!pos[2]))))
|
||||
{
|
||||
// Flush previously accepted characters
|
||||
if (out != line)
|
||||
|
@ -40,6 +40,8 @@ static DYNAMIC_STRING ds_args;
|
||||
static char *opt_password= 0;
|
||||
static my_bool tty_password= 0;
|
||||
|
||||
static char opt_tmpdir[FN_REFLEN];
|
||||
|
||||
#ifndef DBUG_OFF
|
||||
static char *default_dbug_option= (char*) "d:t:O,/tmp/mysql_upgrade.trace";
|
||||
#endif
|
||||
@ -105,6 +107,8 @@ static struct my_option my_long_options[]=
|
||||
#endif
|
||||
{"socket", 'S', "Socket file to use for connection.",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"tmpdir", 't', "Directory for temporary files",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"user", 'u', "User for login if not current user.", (gptr*) &opt_user,
|
||||
(gptr*) &opt_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#include <sslopt-longopts.h>
|
||||
@ -229,6 +233,11 @@ get_one_option(int optid, const struct my_option *opt,
|
||||
}
|
||||
break;
|
||||
|
||||
case 't':
|
||||
strnmov(opt_tmpdir, argument, sizeof(opt_tmpdir));
|
||||
add_option= FALSE;
|
||||
break;
|
||||
|
||||
case 'b': /* --basedir */
|
||||
case 'v': /* --verbose */
|
||||
case 'd': /* --datadir */
|
||||
@ -449,7 +458,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
|
||||
char query_file_path[FN_REFLEN];
|
||||
DBUG_ENTER("run_query");
|
||||
DBUG_PRINT("enter", ("query: %s", query));
|
||||
if ((fd= create_temp_file(query_file_path, NULL,
|
||||
if ((fd= create_temp_file(query_file_path, opt_tmpdir,
|
||||
"sql", O_CREAT | O_SHARE | O_RDWR,
|
||||
MYF(MY_WME))) < 0)
|
||||
die("Failed to create temporary file for defaults");
|
||||
|
@ -1474,7 +1474,7 @@ int main(int argc, char** argv)
|
||||
DBUG_ENTER("main");
|
||||
DBUG_PROCESS(argv[0]);
|
||||
|
||||
init_time(); // for time functions
|
||||
my_init_time(); // for time functions
|
||||
|
||||
parse_args(&argc, (char***)&argv);
|
||||
defaults_argv=argv;
|
||||
|
@ -550,6 +550,17 @@ static int do_send_query(struct st_connection *cn, const char *q, int q_len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void wait_query_thread_end(struct st_connection *con)
|
||||
{
|
||||
if (!con->query_done)
|
||||
{
|
||||
pthread_mutex_lock(&con->mutex);
|
||||
while (!con->query_done)
|
||||
pthread_cond_wait(&con->cond, &con->mutex);
|
||||
pthread_mutex_unlock(&con->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
#else /*EMBEDDED_LIBRARY*/
|
||||
|
||||
#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len)
|
||||
@ -1525,7 +1536,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
|
||||
DBUG_ENTER("dyn_string_cmp");
|
||||
DBUG_PRINT("enter", ("fname: %s", fname));
|
||||
|
||||
if ((fd= create_temp_file(temp_file_path, NULL,
|
||||
if ((fd= create_temp_file(temp_file_path, TMPDIR,
|
||||
"tmp", O_CREAT | O_SHARE | O_RDWR,
|
||||
MYF(MY_WME))) < 0)
|
||||
die("Failed to create temporary file for ds");
|
||||
@ -4071,7 +4082,14 @@ void do_close_connection(struct st_command *command)
|
||||
con->mysql.net.vio = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
/*
|
||||
As query could be still executed in a separate theread
|
||||
we need to check if the query's thread was finished and probably wait
|
||||
(embedded-server specific)
|
||||
*/
|
||||
wait_query_thread_end(con);
|
||||
#endif /*EMBEDDED_LIBRARY*/
|
||||
if (con->stmt)
|
||||
mysql_stmt_close(con->stmt);
|
||||
con->stmt= 0;
|
||||
@ -4361,6 +4379,9 @@ void do_connect(struct st_command *command)
|
||||
(int) (sizeof(connections)/sizeof(struct st_connection)));
|
||||
}
|
||||
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
con_slot->query_done= 1;
|
||||
#endif
|
||||
if (!mysql_init(&con_slot->mysql))
|
||||
die("Failed on mysql_init()");
|
||||
if (opt_compress || con_compress)
|
||||
@ -5443,6 +5464,7 @@ void init_win_path_patterns()
|
||||
const char* paths[] = { "$MYSQL_TEST_DIR",
|
||||
"$MYSQL_TMP_DIR",
|
||||
"$MYSQLTEST_VARDIR",
|
||||
"$MASTER_MYSOCK",
|
||||
"./test/" };
|
||||
int num_paths= sizeof(paths)/sizeof(char*);
|
||||
int i;
|
||||
@ -5848,16 +5870,11 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
|
||||
}
|
||||
#ifdef EMBEDDED_LIBRARY
|
||||
/*
|
||||
Here we handle 'reap' command, so we need to check if the
|
||||
query's thread was finished and probably wait
|
||||
Here we handle 'reap' command, so we need to check if the
|
||||
query's thread was finished and probably wait
|
||||
*/
|
||||
else if (flags & QUERY_REAP_FLAG)
|
||||
{
|
||||
pthread_mutex_lock(&cn->mutex);
|
||||
while (!cn->query_done)
|
||||
pthread_cond_wait(&cn->cond, &cn->mutex);
|
||||
pthread_mutex_unlock(&cn->mutex);
|
||||
}
|
||||
wait_query_thread_end(cn);
|
||||
#endif /*EMBEDDED_LIBRARY*/
|
||||
if (!(flags & QUERY_REAP_FLAG))
|
||||
DBUG_VOID_RETURN;
|
||||
|
@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
|
||||
AC_CANONICAL_SYSTEM
|
||||
# The Docs Makefile.am parses this line!
|
||||
# remember to also change ndb version below and update version.c in ndb
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.60)
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.68)
|
||||
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
|
||||
# ndb version
|
||||
NDB_VERSION_MAJOR=5
|
||||
NDB_VERSION_MINOR=0
|
||||
NDB_VERSION_BUILD=60
|
||||
NDB_VERSION_BUILD=68
|
||||
NDB_VERSION_STATUS=""
|
||||
|
||||
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
||||
@ -1776,15 +1776,18 @@ AC_ARG_WITH(debug,
|
||||
if test "$with_debug" = "yes"
|
||||
then
|
||||
# Medium debug.
|
||||
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||
CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DDBUG_ON -DSAFE_MUTEX $CFLAGS"
|
||||
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DDBUG_ON -DSAFE_MUTEX $CXXFLAGS"
|
||||
elif test "$with_debug" = "full"
|
||||
then
|
||||
# Full debug. Very slow in some cases
|
||||
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||
CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
|
||||
CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
|
||||
else
|
||||
# Optimized version. No debug
|
||||
AC_DEFINE([DBUG_OFF], [1], [Don't use libdbug])
|
||||
CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS"
|
||||
CXXFLAGS="$OPTIMIZE_CXXFLAGS -DDBUG_OFF $CXXFLAGS"
|
||||
fi
|
||||
|
2851
dbug/dbug.c
2851
dbug/dbug.c
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,13 @@
|
||||
#ifdef DBUG_OFF /* We are testing dbug */
|
||||
#undef DBUG_OFF
|
||||
#endif
|
||||
|
||||
int factorial(register int value) {
|
||||
if(value > 1) {
|
||||
value *= factorial(value-1);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include <my_global.h>
|
||||
|
||||
@ -15,3 +22,6 @@ register int value)
|
||||
DBUG_PRINT ("result", ("result is %d", value));
|
||||
DBUG_RETURN (value);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
297
dbug/user.r
297
dbug/user.r
@ -672,52 +672,26 @@ from the standard include directory.
|
||||
.SP 2
|
||||
.BL 20
|
||||
.LI DBUG_ENTER\
|
||||
Used to tell the runtime support module the name of the function
|
||||
being entered.
|
||||
The argument must be of type "pointer to character".
|
||||
The
|
||||
DBUG_ENTER
|
||||
macro must precede all executable lines in the
|
||||
function just entered, and must come after all local declarations.
|
||||
Each
|
||||
DBUG_ENTER
|
||||
macro must have a matching
|
||||
DBUG_RETURN
|
||||
or
|
||||
DBUG_VOID_RETURN
|
||||
macro
|
||||
at the function exit points.
|
||||
DBUG_ENTER
|
||||
macros used without a matching
|
||||
DBUG_RETURN
|
||||
or
|
||||
DBUG_VOID_RETURN
|
||||
macro
|
||||
will cause warning messages from the
|
||||
Used to tell the runtime support module the name of the function being
|
||||
entered. The argument must be of type "pointer to character". The
|
||||
DBUG_ENTER macro must precede all executable lines in the function
|
||||
just entered, and must come after all local declarations. Each
|
||||
DBUG_ENTER macro must have a matching DBUG_RETURN or DBUG_VOID_RETURN
|
||||
macro at the function exit points. DBUG_ENTER macros used without a
|
||||
matching DBUG_RETURN or DBUG_VOID_RETURN macro will cause warning
|
||||
messages from the
|
||||
.I dbug
|
||||
package runtime support module.
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_ENTER\ ("main");\fR
|
||||
.SP 1
|
||||
.LI DBUG_RETURN\
|
||||
Used at each exit point of a function containing a
|
||||
DBUG_ENTER
|
||||
macro
|
||||
at the entry point.
|
||||
The argument is the value to return.
|
||||
Functions which return no value (void) should use the
|
||||
DBUG_VOID_RETURN
|
||||
macro.
|
||||
It
|
||||
is an error to have a
|
||||
DBUG_RETURN
|
||||
or
|
||||
DBUG_VOID_RETURN
|
||||
macro in a function
|
||||
which has no matching
|
||||
DBUG_ENTER
|
||||
macro, and the compiler will complain
|
||||
if the macros are actually used (expanded).
|
||||
Used at each exit point of a function containing a DBUG_ENTER macro at
|
||||
the entry point. The argument is the value to return. Functions
|
||||
which return no value (void) should use the DBUG_VOID_RETURN macro.
|
||||
It is an error to have a DBUG_RETURN or DBUG_VOID_RETURN macro in a
|
||||
function which has no matching DBUG_ENTER macro, and the compiler will
|
||||
complain if the macros are actually used (expanded).
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_RETURN\ (value);\fR
|
||||
.br
|
||||
@ -727,24 +701,20 @@ EX:\ \fCDBUG_VOID_RETURN;\fR
|
||||
Used to name the current process being executed.
|
||||
A typical argument for this macro is "argv[0]", though
|
||||
it will be perfectly happy with any other string.
|
||||
Im multi-threaded environment threads may have different names.
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_PROCESS\ (argv[0]);\fR
|
||||
.SP 1
|
||||
.LI DBUG_PUSH\
|
||||
Sets a new debugger state by pushing the current
|
||||
.B dbug
|
||||
state onto an
|
||||
internal stack and setting up the new state using the debug control
|
||||
string passed as the macro argument.
|
||||
The most common usage is to set the state specified by a debug
|
||||
control string retrieved from the argument list.
|
||||
Note that the leading "-#" in a debug control string specified
|
||||
as a command line argument must
|
||||
.B not
|
||||
be passed as part of the macro argument.
|
||||
The proper usage is to pass a pointer to the first character
|
||||
.B after
|
||||
the "-#" string.
|
||||
state onto an internal stack and setting up the new state using the
|
||||
debug control string passed as the macro argument. The most common
|
||||
usage is to set the state specified by a debug control string
|
||||
retrieved from the argument list. If the control string is
|
||||
.I incremental,
|
||||
the new state is a copy of the old state, modified by the control
|
||||
string.
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_PUSH\ (\&(argv[i][2]));\fR
|
||||
.br
|
||||
@ -755,32 +725,38 @@ EX:\ \fCDBUG_PUSH\ ("");\fR
|
||||
.LI DBUG_POP\
|
||||
Restores the previous debugger state by popping the state stack.
|
||||
Attempting to pop more states than pushed will be ignored and no
|
||||
warning will be given.
|
||||
The
|
||||
DBUG_POP
|
||||
macro has no arguments.
|
||||
warning will be given. The DBUG_POP macro has no arguments.
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_POP\ ();\fR
|
||||
.SP 1
|
||||
.LI DBUG_SET\
|
||||
Modifies the current debugger state on top of the stack or pushes
|
||||
a new state if the current is set to the initial settings, using
|
||||
the debug control string passed as the macro argument. Unless
|
||||
.I incremental
|
||||
control string is used (see below), it's equivalent to a combination of
|
||||
DBUG_POP and DBUG_PUSH.
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_SET\ ("d:t");\fR
|
||||
.br
|
||||
EX:\ \fCDBUG_SET\ ("+d,info");\fR
|
||||
.br
|
||||
EX:\ \fCDBUG_SET\ ("+t:-d");\fR
|
||||
.SP 1
|
||||
.LI DBUG_FILE\
|
||||
The
|
||||
DBUG_FILE
|
||||
macro is used to do explicit I/O on the debug output
|
||||
stream.
|
||||
It is used in the same manner as the symbols "stdout" and "stderr"
|
||||
in the standard I/O package.
|
||||
The DBUG_FILE macro is used to do explicit I/O on the debug output
|
||||
stream. It is used in the same manner as the symbols "stdout" and
|
||||
"stderr" in the standard I/O package.
|
||||
.SP 1
|
||||
EX:\ \fCfprintf\ (DBUG_FILE,\ "Doing\ my\ own\ I/O!\\n");\fR
|
||||
.SP 1
|
||||
.LI DBUG_EXECUTE\
|
||||
The DBUG_EXECUTE macro is used to execute any arbitrary C code.
|
||||
The first argument is the debug keyword, used to trigger execution
|
||||
of the code specified as the second argument.
|
||||
This macro must be used cautiously because, like the
|
||||
DBUG_PRINT
|
||||
macro,
|
||||
it is automatically selected by default whenever the 'd' flag has
|
||||
no argument list (i.e., a "-#d:t" control string).
|
||||
The DBUG_EXECUTE macro is used to execute any arbitrary C code. The
|
||||
first argument is the debug keyword, used to trigger execution of the
|
||||
code specified as the second argument. This macro must be used
|
||||
cautiously because, like the DBUG_PRINT macro, it is automatically
|
||||
selected by default whenever the 'd' flag has no argument list (i.e.,
|
||||
a "-#d:t" control string).
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_EXECUTE\ ("status",\ print_status\ ());\fR
|
||||
.SP 1
|
||||
@ -794,17 +770,40 @@ artificial delay checking for race conditions.
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_EXECUTE_IF\ ("crashme",\ abort\ ());\fR
|
||||
.SP 1
|
||||
.LI DBUG_N\
|
||||
These macros, where N is in the range 2-5, are currently obsolete
|
||||
and will be removed in a future release.
|
||||
Use the new DBUG_PRINT macro.
|
||||
.LI DBUG_EVALUATE\
|
||||
The DBUG_EVALUATE macro is similar to DBUG_EXECUTE, but it can be used in
|
||||
the expression context. The first argument is the debug keyword that is used to
|
||||
choose whether the second (keyword is enabled) or the third (keyword is not
|
||||
enabled) argument is evaluated. When
|
||||
.B dbug
|
||||
is compiled off, the third argument is evaluated.
|
||||
.SP 1
|
||||
EX:\fC
|
||||
.br
|
||||
printf("Info-debug is %s",
|
||||
.br
|
||||
DBUG_EVALUATE\ ("info", "ON", "OFF"));\fR
|
||||
.SP 1
|
||||
.LI DBUG_EVALUATE_IF\
|
||||
Works like DBUG_EVALUATE macro, but the second argument is
|
||||
.B not
|
||||
evaluated, if the keyword is not explicitly listed in
|
||||
the 'd' flag. Like DBUG_EXECUTE_IF this could be used to conditionally execute
|
||||
"dangerous" actions.
|
||||
.SP 1
|
||||
EX:\fC
|
||||
.br
|
||||
if (prepare_transaction () ||
|
||||
.br
|
||||
DBUG_EVALUATE ("crashme", (abort (), 0), 0) ||
|
||||
.br
|
||||
commit_transaction () )\fR
|
||||
.SP 1
|
||||
.LI DBUG_PRINT\
|
||||
Used to do printing via the "fprintf" library function on the
|
||||
current debug stream,
|
||||
DBUG_FILE.
|
||||
The first argument is a debug keyword, the second is a format string
|
||||
and the corresponding argument list.
|
||||
Note that the format string and argument list are all one macro argument
|
||||
Used to do printing via the "fprintf" library function on the current
|
||||
debug stream, DBUG_FILE. The first argument is a debug keyword, the
|
||||
second is a format string and the corresponding argument list. Note
|
||||
that the format string and argument list are all one macro argument
|
||||
and
|
||||
.B must
|
||||
be enclosed in parentheses.
|
||||
@ -816,10 +815,10 @@ EX:\ \fCDBUG_PRINT\ ("type",\ ("type\ is\ %x", type));\fR
|
||||
EX:\ \fCDBUG_PRINT\ ("stp",\ ("%x\ ->\ %s", stp, stp\ ->\ name));\fR
|
||||
.SP 1
|
||||
.LI DBUG_DUMP\
|
||||
Used to dump a memory block in hex via the "fprintf" library function on the
|
||||
current debug stream, DBUG_FILE.
|
||||
The first argument is a debug keyword, the second is a pointer to
|
||||
a memory to dump, the third is a number of bytes to dump.
|
||||
Used to dump a memory block in hex via the "fprintf" library function
|
||||
on the current debug stream, DBUG_FILE. The first argument is a debug
|
||||
keyword, the second is a pointer to a memory to dump, the third is a
|
||||
number of bytes to dump.
|
||||
.SP 1
|
||||
EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR
|
||||
.SP 1
|
||||
@ -875,13 +874,28 @@ library. So there will be no need to disable asserts separately with NDEBUG.
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_ASSERT(\ a\ >\ 0\ );\fR
|
||||
.SP 1
|
||||
.LI DBUG_OUTPUT\
|
||||
In multi-threaded environment disables (or enables) any
|
||||
.I dbug
|
||||
output from the current thread.
|
||||
.LI DBUG_EXPLAIN\
|
||||
Generates control string corresponding to the current debug state.
|
||||
The macro takes two arguments - a buffer to store the result string
|
||||
into and its length. The macro (which could be used as a function)
|
||||
returns 1 if the control string didn't fit into the buffer and was
|
||||
truncated and 0 otherwise.
|
||||
.SP 1
|
||||
EX:\ \fCDBUG_OUTPUT(\ 0\ );\fR
|
||||
EX:\fC
|
||||
.br
|
||||
char buf[256];
|
||||
.br
|
||||
DBUG_EXPLAIN( buf, sizeof(buf) );\fR
|
||||
.SP 1
|
||||
.LI DBUG_SET_INITIAL\
|
||||
.LI DBUG_EXPLAIN_INITIAL\
|
||||
.br
|
||||
These two macros are identical to DBUG_SET and DBUG_EXPLAIN, but they
|
||||
operate on the debug state that any new thread starts from.
|
||||
Modifying
|
||||
.I initial
|
||||
value does not affect threads that are already running. Obviously,
|
||||
these macros are only useful in the multi-threaded environment.
|
||||
.LE
|
||||
|
||||
.SK
|
||||
@ -893,42 +907,51 @@ DEBUG CONTROL STRING
|
||||
The debug control string is used to set the state of the debugger
|
||||
via the
|
||||
.B DBUG_PUSH
|
||||
macro.
|
||||
This section summarizes the currently available debugger options
|
||||
and the flag characters which enable or disable them.
|
||||
Argument lists enclosed in '[' and ']' are optional.
|
||||
or
|
||||
.B DBUG_SET
|
||||
macros. Control string consists of colon separate flags. Colons
|
||||
that are part of ':\\', ':/', or '::' are not considered flag
|
||||
separators. A flag may take an argument or a list of arguments.
|
||||
If a control string starts from a '+' sign it works
|
||||
.I incrementally,
|
||||
that is, it can modify existing state without overriding it. In such a
|
||||
string every flag may be preceded by a '+' or '-' to enable or disable
|
||||
a corresponding option in the debugger state. This section summarizes
|
||||
the currently available debugger options and the flag characters which
|
||||
enable or disable them. Argument lists enclosed in '[' and ']' are
|
||||
optional.
|
||||
.SP 2
|
||||
.BL 22
|
||||
.LI a[,file]
|
||||
Redirect the debugger output stream and append it to the specified file.
|
||||
The default output stream is stderr.
|
||||
A null argument list causes output to be redirected to stdout.
|
||||
Double the colon, if you want it in the path
|
||||
Redirect the debugger output stream and append it to the specified
|
||||
file. The default output stream is stderr. A null argument list
|
||||
causes output to be redirected to stdout.
|
||||
.SP 1
|
||||
EX: \fCa,C::\\tmp\\log\fR
|
||||
EX: \fCa,C:\\tmp\\log\fR
|
||||
.LI A[,file]
|
||||
Like 'a[,file]' but ensure that data are written after each write
|
||||
(this typically implies flush or close/reopen). It helps to get
|
||||
a complete log file in case of crashes. This mode is implied in
|
||||
a complete log file in case of crashes. This mode is implicit in
|
||||
multi-threaded environment.
|
||||
.LI d[,keywords]
|
||||
Enable output from macros with specified keywords.
|
||||
A null list of keywords implies that all keywords are selected.
|
||||
An empty list of keywords implies that all keywords are selected.
|
||||
.LI D[,time]
|
||||
Delay for specified time after each output line, to let output drain.
|
||||
Time is given in tenths of a second (value of 10 is one second).
|
||||
Default is zero.
|
||||
.LI f[,functions]
|
||||
Limit debugger actions to the specified list of functions.
|
||||
A null list of functions implies that all functions are selected.
|
||||
An empty list of functions implies that all functions are selected.
|
||||
.LI F
|
||||
Mark each debugger output line with the name of the source file
|
||||
containing the macro causing the output.
|
||||
.LI i
|
||||
Mark each debugger output line with the PID of the current process.
|
||||
Mark each debugger output line with the PID (or thread ID) of the
|
||||
current process.
|
||||
.LI g,[functions]
|
||||
Enable profiling for the specified list of functions.
|
||||
By default profiling is enabled for all functions.
|
||||
An empty list of functions enables profiling for all functions.
|
||||
See
|
||||
.B PROFILING\ WITH\ DBUG
|
||||
below.
|
||||
@ -946,20 +969,18 @@ Like 'a[,file]' but overwrite old file, do not append.
|
||||
.LI O[,file]
|
||||
Like 'A[,file]' but overwrite old file, do not append.
|
||||
.LI p[,processes]
|
||||
Limit debugger actions to the specified processes.
|
||||
A null list implies all processes.
|
||||
This is useful for processes which run child processes.
|
||||
Note that each debugger output line can be marked with the name of
|
||||
the current process via the 'P' flag.
|
||||
The process name must match the argument passed to the
|
||||
Limit debugger actions to the specified processes. An empty list
|
||||
implies all processes. This is useful for processes which run child
|
||||
processes. Note that each debugger output line can be marked with the
|
||||
name of the current process via the 'P' flag. The process name must
|
||||
match the argument passed to the
|
||||
.B DBUG_PROCESS
|
||||
macro.
|
||||
.LI P
|
||||
Mark each debugger output line with the name of the current process.
|
||||
Most useful when used with a process which runs child processes that
|
||||
are also being debugged.
|
||||
Note that the parent process must arrange for the debugger control
|
||||
string to be passed to the child processes.
|
||||
are also being debugged. Note that the parent process must arrange
|
||||
for the debugger control string to be passed to the child processes.
|
||||
.LI r
|
||||
Used in conjunction with the
|
||||
.B DBUG_PUSH
|
||||
@ -981,7 +1002,59 @@ and
|
||||
Enable function control flow tracing.
|
||||
The maximum nesting depth is specified by N, and defaults to
|
||||
200.
|
||||
.LI T
|
||||
Mark each debugger output line with the current timestamp.
|
||||
The value is printed with microsecond resolution, as returned by
|
||||
.I gettimeofday()
|
||||
system call. The actual resolution is OS- and hardware-dependent.
|
||||
.LE
|
||||
|
||||
.SK
|
||||
.B
|
||||
MULTI-THREADED DEBUGGING
|
||||
.R
|
||||
|
||||
.P
|
||||
When
|
||||
.I dbug
|
||||
is used in a multi-threaded environment there are few differences from a single-threaded
|
||||
case to keep in mind. This section tries to summarize them.
|
||||
.SP 2
|
||||
.BL 5
|
||||
.LI
|
||||
Every thread has its own stack of debugger states.
|
||||
.B DBUG_PUSH
|
||||
and
|
||||
.B DBUG_POP
|
||||
affect only the thread that executed them.
|
||||
.LI
|
||||
At the bottom of the stack for all threads there is the common
|
||||
.I initial
|
||||
state. Changes to this state (for example, with
|
||||
.B DBUG_SET_INITIAL
|
||||
macro) affect all new threads and all running threads that didn't
|
||||
.B DBUG_PUSH
|
||||
yet.
|
||||
.LI
|
||||
Every thread can have its own name, that can be set with
|
||||
.B DBUG_PROCESS
|
||||
macro. Thus, "-#p,name1,name2" can be used to limit the output to specific threads.
|
||||
.LI
|
||||
When printing directly to
|
||||
.B DBUG_FILE
|
||||
it may be necessary to prevent other threads from writing something between two parts
|
||||
of logically indivisible output. It is done with
|
||||
.B DBUG_LOCK_FILE
|
||||
and
|
||||
.B DBUG_UNLOCK_FILE
|
||||
macors. See the appropriate section for examples.
|
||||
.LI
|
||||
"-#o,file" and "-#O,file" are treated as "-#a,file" and "-#A,file" respectively. That is
|
||||
all writes to a file are always followed by a flush.
|
||||
.LI
|
||||
"-#i" prints not a PID but a thread id in the form of "T@nnn"
|
||||
.LE
|
||||
|
||||
.SK
|
||||
.B
|
||||
PROFILING WITH DBUG
|
||||
|
@ -153,7 +153,9 @@ int main(int argc, char **argv) {
|
||||
my_init();
|
||||
|
||||
if (argc > argcnt && argv[argcnt][0] == '-' && argv[argcnt][1] == '#')
|
||||
{
|
||||
DBUG_PUSH(argv[argcnt++]+2);
|
||||
}
|
||||
|
||||
if (argc > argcnt)
|
||||
the_set = argv[argcnt++];
|
||||
|
@ -617,7 +617,6 @@ err:
|
||||
static int get_options(int argc,char *argv[])
|
||||
{
|
||||
char *pos,*progname;
|
||||
DEBUGGER_OFF;
|
||||
|
||||
progname= argv[0];
|
||||
|
||||
@ -646,7 +645,6 @@ static int get_options(int argc,char *argv[])
|
||||
printf("Usage: %s [-?ABIKLsWv] [-m#] [-t#]\n",progname);
|
||||
exit(0);
|
||||
case '#':
|
||||
DEBUGGER_ON;
|
||||
DBUG_PUSH (++pos);
|
||||
break;
|
||||
}
|
||||
|
@ -157,14 +157,12 @@ typedef uint rf_SetTimer;
|
||||
|
||||
#define Socket_defined
|
||||
#define my_socket SOCKET
|
||||
#define bool BOOL
|
||||
#define SIGPIPE SIGINT
|
||||
#define RETQSORTTYPE void
|
||||
#define QSORT_TYPE_IS_VOID
|
||||
#define RETSIGTYPE void
|
||||
#define SOCKET_SIZE_TYPE int
|
||||
#define my_socket_defined
|
||||
#define bool_defined
|
||||
#define byte_defined
|
||||
#define HUGE_PTR
|
||||
#define STDCALL __stdcall /* Used by libmysql.dll */
|
||||
@ -406,4 +404,4 @@ inline double ulonglong2double(ulonglong value)
|
||||
#define HAVE_CHARSET_ujis 1
|
||||
#define HAVE_CHARSET_utf8 1
|
||||
#define HAVE_UCA_COLLATIONS 1
|
||||
|
||||
#define HAVE_BOOL 1
|
||||
|
@ -20,15 +20,18 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
#if !defined(DBUG_OFF) && !defined(_lint)
|
||||
extern int _db_on_,_no_db_;
|
||||
extern FILE *_db_fp_;
|
||||
extern char *_db_process_;
|
||||
extern int _db_keyword_(const char *keyword);
|
||||
struct _db_code_state_;
|
||||
extern int _db_keyword_(struct _db_code_state_ *cs, const char *keyword);
|
||||
extern int _db_strict_keyword_(const char *keyword);
|
||||
extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len);
|
||||
extern int _db_explain_init_(char *buf, size_t len);
|
||||
extern void _db_setjmp_(void);
|
||||
extern void _db_longjmp_(void);
|
||||
extern void _db_process_(const char *name);
|
||||
extern void _db_push_(const char *control);
|
||||
extern void _db_pop_(void);
|
||||
extern void _db_set_(struct _db_code_state_ *cs, const char *control);
|
||||
extern void _db_set_init_(const char *control);
|
||||
extern void _db_enter_(const char *_func_,const char *_file_,uint _line_,
|
||||
const char **_sfunc_,const char **_sfile_,
|
||||
uint *_slevel_, char ***);
|
||||
@ -37,68 +40,73 @@ extern void _db_return_(uint _line_,const char **_sfunc_,const char **_sfile_,
|
||||
extern void _db_pargs_(uint _line_,const char *keyword);
|
||||
extern void _db_doprnt_ _VARARGS((const char *format,...))
|
||||
ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||
extern void _db_dump_(uint _line_,const char *keyword,const char *memory,
|
||||
uint length);
|
||||
extern void _db_output_(uint flag);
|
||||
extern void _db_dump_(uint _line_,const char *keyword,
|
||||
const unsigned char *memory, size_t length);
|
||||
extern void _db_end_(void);
|
||||
extern void _db_lock_file(void);
|
||||
extern void _db_unlock_file(void);
|
||||
extern void _db_lock_file_(void);
|
||||
extern void _db_unlock_file_(void);
|
||||
extern FILE *_db_fp_(void);
|
||||
|
||||
#define DBUG_ENTER(a) const char *_db_func_, *_db_file_; uint _db_level_; \
|
||||
char **_db_framep_; \
|
||||
_db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, \
|
||||
&_db_framep_)
|
||||
#define DBUG_LEAVE \
|
||||
(_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_))
|
||||
_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_)
|
||||
#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0)
|
||||
#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0)
|
||||
#define DBUG_EXECUTE(keyword,a1) \
|
||||
do {if (_db_on_) {if (_db_keyword_ (keyword)) { a1 }}} while(0)
|
||||
do {if (_db_keyword_(0, (keyword))) { a1 }} while(0)
|
||||
#define DBUG_EXECUTE_IF(keyword,a1) \
|
||||
do {if (_db_strict_keyword_ (keyword)) { a1 } } while(0)
|
||||
#define DBUG_EVALUATE(keyword,a1,a2) \
|
||||
(_db_keyword_(0,(keyword)) ? (a1) : (a2))
|
||||
#define DBUG_EVALUATE_IF(keyword,a1,a2) \
|
||||
(_db_strict_keyword_((keyword)) ? (a1) : (a2))
|
||||
#define DBUG_PRINT(keyword,arglist) \
|
||||
do {if (_db_on_) {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;}} while(0)
|
||||
do {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;} while(0)
|
||||
#define DBUG_PUSH(a1) _db_push_ (a1)
|
||||
#define DBUG_POP() _db_pop_ ()
|
||||
#define DBUG_PROCESS(a1) (_db_process_ = a1)
|
||||
#define DBUG_FILE (_db_fp_)
|
||||
#define DBUG_SET(a1) _db_set_ (0, (a1))
|
||||
#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1)
|
||||
#define DBUG_PROCESS(a1) _db_process_(a1)
|
||||
#define DBUG_FILE _db_fp_()
|
||||
#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1))
|
||||
#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))
|
||||
#define DBUG_DUMP(keyword,a1,a2)\
|
||||
do {if (_db_on_) {_db_dump_(__LINE__,keyword,a1,a2);}} while(0)
|
||||
#define DBUG_IN_USE (_db_fp_ && _db_fp_ != stderr)
|
||||
#define DEBUGGER_OFF _no_db_=1;_db_on_=0;
|
||||
#define DEBUGGER_ON _no_db_=0
|
||||
#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2)
|
||||
#define DBUG_END() _db_end_ ()
|
||||
#define DBUG_LOCK_FILE { _db_lock_file(); }
|
||||
#define DBUG_UNLOCK_FILE { _db_unlock_file(); }
|
||||
#define DBUG_OUTPUT(A) { _db_output_(A); }
|
||||
#define DBUG_LOCK_FILE _db_lock_file_()
|
||||
#define DBUG_UNLOCK_FILE _db_unlock_file_()
|
||||
#define DBUG_ASSERT(A) assert(A)
|
||||
#define DBUG_EXECUTE_IF(keyword,a1) \
|
||||
do {if (_db_on_) {if (_db_strict_keyword_ (keyword)) { a1 }}} while(0)
|
||||
#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len))
|
||||
#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len))
|
||||
#define IF_DBUG(A) A
|
||||
#else /* No debugger */
|
||||
|
||||
#define DBUG_ENTER(a1)
|
||||
#define DBUG_RETURN(a1) return(a1)
|
||||
#define DBUG_VOID_RETURN return
|
||||
#define DBUG_EXECUTE(keyword,a1) {}
|
||||
#define DBUG_EXECUTE_IF(keyword,a1) {}
|
||||
#define DBUG_PRINT(keyword,arglist) {}
|
||||
#define DBUG_PUSH(a1) {}
|
||||
#define DBUG_POP() {}
|
||||
#define DBUG_PROCESS(a1) {}
|
||||
#define DBUG_FILE (stderr)
|
||||
#define DBUG_SETJMP setjmp
|
||||
#define DBUG_LONGJMP longjmp
|
||||
#define DBUG_DUMP(keyword,a1,a2) {}
|
||||
#define DBUG_IN_USE 0
|
||||
#define DEBUGGER_OFF
|
||||
#define DEBUGGER_ON
|
||||
#define DBUG_END()
|
||||
#define DBUG_LOCK_FILE
|
||||
#define DBUG_UNLOCK_FILE
|
||||
#define DBUG_OUTPUT(A)
|
||||
#define DBUG_ASSERT(A) {}
|
||||
#define DBUG_LEAVE
|
||||
#define DBUG_RETURN(a1) do { return(a1); } while(0)
|
||||
#define DBUG_VOID_RETURN do { return; } while(0)
|
||||
#define DBUG_EXECUTE(keyword,a1) do { } while(0)
|
||||
#define DBUG_EXECUTE_IF(keyword,a1) do { } while(0)
|
||||
#define DBUG_EVALUATE(keyword,a1,a2) (a2)
|
||||
#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2)
|
||||
#define DBUG_PRINT(keyword,arglist) do { } while(0)
|
||||
#define DBUG_PUSH(a1)
|
||||
#define DBUG_SET(a1)
|
||||
#define DBUG_SET_INITIAL(a1)
|
||||
#define DBUG_POP()
|
||||
#define DBUG_PROCESS(a1)
|
||||
#define DBUG_SETJMP(a1) setjmp(a1)
|
||||
#define DBUG_LONGJMP(a1) longjmp(a1)
|
||||
#define DBUG_DUMP(keyword,a1,a2)
|
||||
#define DBUG_END()
|
||||
#define DBUG_ASSERT(A)
|
||||
#define DBUG_LOCK_FILE
|
||||
#define DBUG_FILE (stderr)
|
||||
#define DBUG_UNLOCK_FILE
|
||||
#define DBUG_EXPLAIN(buf,len)
|
||||
#define DBUG_EXPLAIN_INITIAL(buf,len)
|
||||
#define IF_DBUG(A)
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
|
@ -533,8 +533,12 @@ C_MODE_END
|
||||
#undef DBUG_OFF
|
||||
#endif
|
||||
|
||||
#if defined(_lint) && !defined(DBUG_OFF)
|
||||
#define DBUG_OFF
|
||||
/* We might be forced to turn debug off, if not turned off already */
|
||||
#if (defined(FORCE_DBUG_OFF) || defined(_lint)) && !defined(DBUG_OFF)
|
||||
# define DBUG_OFF
|
||||
# ifdef DBUG_ON
|
||||
# undef DBUG_ON
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <my_dbug.h>
|
||||
@ -980,7 +984,7 @@ typedef int myf; /* Type of MyFlags in my_funcs */
|
||||
typedef char byte; /* Smallest addressable unit */
|
||||
#endif
|
||||
typedef char my_bool; /* Small bool */
|
||||
#if !defined(bool) && !defined(bool_defined) && (!defined(HAVE_BOOL) || !defined(__cplusplus))
|
||||
#if !defined(bool) && (!defined(HAVE_BOOL) || !defined(__cplusplus))
|
||||
typedef char bool; /* Ordinary boolean values 0 1 */
|
||||
#endif
|
||||
/* Macros for converting *constants* to the right type */
|
||||
|
@ -94,7 +94,7 @@ long calc_daynr(uint year,uint month,uint day);
|
||||
uint calc_days_in_year(uint year);
|
||||
uint year_2000_handling(uint year);
|
||||
|
||||
void init_time(void);
|
||||
void my_init_time(void);
|
||||
|
||||
|
||||
/*
|
||||
|
@ -298,16 +298,12 @@ mysql_debug(const char *debug __attribute__((unused)))
|
||||
{
|
||||
#ifndef DBUG_OFF
|
||||
char *env;
|
||||
if (_db_on_)
|
||||
return; /* Already using debugging */
|
||||
if (debug)
|
||||
{
|
||||
DEBUGGER_ON;
|
||||
DBUG_PUSH(debug);
|
||||
}
|
||||
else if ((env = getenv("MYSQL_DEBUG")))
|
||||
{
|
||||
DEBUGGER_ON;
|
||||
DBUG_PUSH(env);
|
||||
#if !defined(_WINVER) && !defined(WINVER)
|
||||
puts("\n-------------------------------------------------------");
|
||||
@ -2448,7 +2444,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length)
|
||||
my_bool res;
|
||||
|
||||
DBUG_ENTER("execute");
|
||||
DBUG_DUMP("packet", packet, length);
|
||||
DBUG_DUMP("packet", (uchar*)packet, length);
|
||||
|
||||
mysql->last_used_con= mysql;
|
||||
int4store(buff, stmt->stmt_id); /* Send stmt id to server */
|
||||
|
@ -741,7 +741,7 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
char llbuff[22];
|
||||
uint diff_pos[2];
|
||||
DBUG_ENTER("chk_index");
|
||||
DBUG_DUMP("buff",(byte*) buff,mi_getint(buff));
|
||||
DBUG_DUMP("buff",(uchar*) buff,mi_getint(buff));
|
||||
|
||||
/* TODO: implement appropriate check for RTree keys */
|
||||
if (keyinfo->flag & HA_SPATIAL)
|
||||
@ -799,9 +799,9 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
(flag=ha_key_cmp(keyinfo->seg,info->lastkey,key,key_length,
|
||||
comp_flag, diff_pos)) >=0)
|
||||
{
|
||||
DBUG_DUMP("old",(byte*) info->lastkey, info->lastkey_length);
|
||||
DBUG_DUMP("new",(byte*) key, key_length);
|
||||
DBUG_DUMP("new_in_page",(char*) old_keypos,(uint) (keypos-old_keypos));
|
||||
DBUG_DUMP("old",(uchar*) info->lastkey, info->lastkey_length);
|
||||
DBUG_DUMP("new",(uchar*) key, key_length);
|
||||
DBUG_DUMP("new_in_page",(uchar*) old_keypos,(uint) (keypos-old_keypos));
|
||||
|
||||
if (comp_flag & SEARCH_FIND && flag == 0)
|
||||
mi_check_print_error(param,"Found duplicated key at page %s",llstr(page,llbuff));
|
||||
@ -870,8 +870,8 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
DBUG_PRINT("test",("page: %s record: %s filelength: %s",
|
||||
llstr(page,llbuff),llstr(record,llbuff2),
|
||||
llstr(info->state->data_file_length,llbuff3)));
|
||||
DBUG_DUMP("key",(byte*) key,key_length);
|
||||
DBUG_DUMP("new_in_page",(char*) old_keypos,(uint) (keypos-old_keypos));
|
||||
DBUG_DUMP("key",(uchar*) key,key_length);
|
||||
DBUG_DUMP("new_in_page",(uchar*) old_keypos,(uint) (keypos-old_keypos));
|
||||
goto err;
|
||||
}
|
||||
param->record_checksum+=(ha_checksum) record;
|
||||
@ -1631,7 +1631,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
|
||||
{
|
||||
if (my_errno != HA_ERR_FOUND_DUPP_KEY)
|
||||
goto err;
|
||||
DBUG_DUMP("record",(byte*) sort_param.record,share->base.pack_reclength);
|
||||
DBUG_DUMP("record",(uchar*) sort_param.record,share->base.pack_reclength);
|
||||
mi_check_print_info(param,"Duplicate key %2d for record at %10s against new record at %10s",
|
||||
info->errkey+1,
|
||||
llstr(sort_param.start_recpos,llbuff),
|
||||
@ -1935,7 +1935,7 @@ int mi_sort_index(MI_CHECK *param, register MI_INFO *info, my_string name)
|
||||
for (key= 0,keyinfo= &share->keyinfo[0]; key < share->base.keys ;
|
||||
key++,keyinfo++)
|
||||
if (keyinfo->key_alg == HA_KEY_ALG_RTREE)
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
|
||||
if (!(param->testflag & T_SILENT))
|
||||
printf("- Sorting index for MyISAM-table '%s'\n",name);
|
||||
@ -2062,7 +2062,7 @@ static int sort_one_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
("From page: %ld, keyoffset: %lu used_length: %d",
|
||||
(ulong) pagepos, (ulong) (keypos - buff),
|
||||
(int) used_length));
|
||||
DBUG_DUMP("buff",(byte*) buff,used_length);
|
||||
DBUG_DUMP("buff",(uchar*) buff,used_length);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
@ -4024,7 +4024,7 @@ static int sort_insert_key(MI_SORT_PARAM *sort_param,
|
||||
else if (my_pwrite(info->s->kfile,(byte*) anc_buff,
|
||||
(uint) keyinfo->block_length,filepos, param->myf_rw))
|
||||
DBUG_RETURN(1);
|
||||
DBUG_DUMP("buff",(byte*) anc_buff,mi_getint(anc_buff));
|
||||
DBUG_DUMP("buff",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||
|
||||
/* Write separator-key to block in next level */
|
||||
if (sort_insert_key(sort_param,key_block+1,key_block->lastkey,filepos))
|
||||
@ -4129,7 +4129,7 @@ int flush_pending_blocks(MI_SORT_PARAM *sort_param)
|
||||
else if (my_pwrite(info->s->kfile,(byte*) key_block->buff,
|
||||
(uint) keyinfo->block_length,filepos, myf_rw))
|
||||
DBUG_RETURN(1);
|
||||
DBUG_DUMP("buff",(byte*) key_block->buff,length);
|
||||
DBUG_DUMP("buff",(uchar*) key_block->buff,length);
|
||||
nod_flag=1;
|
||||
}
|
||||
info->s->state.key_root[sort_param->key]=filepos; /* Last is root for tree */
|
||||
|
@ -223,7 +223,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
my_off_t leaf_page,next_block;
|
||||
uchar lastkey[MI_MAX_KEY_BUFF];
|
||||
DBUG_ENTER("d_search");
|
||||
DBUG_DUMP("page",(byte*) anc_buff,mi_getint(anc_buff));
|
||||
DBUG_DUMP("page",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||
|
||||
search_key_length= (comp_flag & SEARCH_FIND) ? key_length : USE_WHOLE_KEY;
|
||||
flag=(*keyinfo->bin_search)(info,keyinfo,anc_buff,key, search_key_length,
|
||||
@ -381,7 +381,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
ret_value|=_mi_write_keypage(info,keyinfo,page,DFLT_INIT_HITS,anc_buff);
|
||||
else
|
||||
{
|
||||
DBUG_DUMP("page",(byte*) anc_buff,mi_getint(anc_buff));
|
||||
DBUG_DUMP("page",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||
}
|
||||
my_afree((byte*) leaf_buff);
|
||||
DBUG_PRINT("exit",("Return: %d",ret_value));
|
||||
@ -411,7 +411,7 @@ static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key,
|
||||
DBUG_ENTER("del");
|
||||
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx", (long) leaf_page,
|
||||
(ulong) keypos));
|
||||
DBUG_DUMP("leaf_buff",(byte*) leaf_buff,mi_getint(leaf_buff));
|
||||
DBUG_DUMP("leaf_buff",(uchar*) leaf_buff,mi_getint(leaf_buff));
|
||||
|
||||
endpos=leaf_buff+mi_getint(leaf_buff);
|
||||
if (!(key_start=_mi_get_last_key(info,keyinfo,leaf_buff,keybuff,endpos,
|
||||
@ -428,7 +428,7 @@ static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key,
|
||||
ret_value= -1;
|
||||
else
|
||||
{
|
||||
DBUG_DUMP("next_page",(byte*) next_buff,mi_getint(next_buff));
|
||||
DBUG_DUMP("next_page",(uchar*) next_buff,mi_getint(next_buff));
|
||||
if ((ret_value=del(info,keyinfo,key,anc_buff,next_page,next_buff,
|
||||
keypos,next_block,ret_key)) >0)
|
||||
{
|
||||
@ -517,8 +517,8 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
DBUG_ENTER("underflow");
|
||||
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx",(long) leaf_page,
|
||||
(ulong) keypos));
|
||||
DBUG_DUMP("anc_buff",(byte*) anc_buff,mi_getint(anc_buff));
|
||||
DBUG_DUMP("leaf_buff",(byte*) leaf_buff,mi_getint(leaf_buff));
|
||||
DBUG_DUMP("anc_buff",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||
DBUG_DUMP("leaf_buff",(uchar*) leaf_buff,mi_getint(leaf_buff));
|
||||
|
||||
buff=info->buff;
|
||||
info->buff_used=1;
|
||||
@ -554,7 +554,7 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
if (!_mi_fetch_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,buff,0))
|
||||
goto err;
|
||||
buff_length=mi_getint(buff);
|
||||
DBUG_DUMP("next",(byte*) buff,buff_length);
|
||||
DBUG_DUMP("next",(uchar*) buff,buff_length);
|
||||
|
||||
/* find keys to make a big key-page */
|
||||
bmove((byte*) next_keypos-key_reflength,(byte*) buff+2,
|
||||
@ -659,7 +659,7 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
goto err;
|
||||
buff_length=mi_getint(buff);
|
||||
endpos=buff+buff_length;
|
||||
DBUG_DUMP("prev",(byte*) buff,buff_length);
|
||||
DBUG_DUMP("prev",(uchar*) buff,buff_length);
|
||||
|
||||
/* find keys to make a big key-page */
|
||||
bmove((byte*) next_keypos - key_reflength,(byte*) leaf_buff+2,
|
||||
@ -715,8 +715,8 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
goto err;
|
||||
_mi_kpointer(info,leaf_key+key_length,leaf_page);
|
||||
/* Save key in anc_buff */
|
||||
DBUG_DUMP("anc_buff",(byte*) anc_buff,anc_length);
|
||||
DBUG_DUMP("key_to_anc",(byte*) leaf_key,key_length);
|
||||
DBUG_DUMP("anc_buff",(uchar*) anc_buff,anc_length);
|
||||
DBUG_DUMP("key_to_anc",(uchar*) leaf_key,key_length);
|
||||
|
||||
temp_pos=anc_buff+anc_length;
|
||||
t_length=(*keyinfo->pack_key)(keyinfo,key_reflength,
|
||||
@ -737,7 +737,7 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
bmove((byte*) leaf_buff+2,(byte*) half_pos-nod_flag,(size_t) nod_flag);
|
||||
if (!(length=(*keyinfo->get_key)(keyinfo,nod_flag,&half_pos,leaf_key)))
|
||||
goto err;
|
||||
DBUG_DUMP("key_to_leaf",(byte*) leaf_key,length);
|
||||
DBUG_DUMP("key_to_leaf",(uchar*) leaf_key,length);
|
||||
t_length=(*keyinfo->pack_key)(keyinfo,nod_flag, (uchar*) 0,
|
||||
(uchar*) 0, (uchar*) 0, leaf_key, &s_temp);
|
||||
length=(uint) ((buff+buff_length)-half_pos);
|
||||
|
@ -509,7 +509,7 @@ int _mi_write_part_record(MI_INFO *info,
|
||||
}
|
||||
length= *reclength+head_length; /* Write only what is needed */
|
||||
}
|
||||
DBUG_DUMP("header",(byte*) temp,head_length);
|
||||
DBUG_DUMP("header",(uchar*) temp,head_length);
|
||||
|
||||
/* Make a long block for one write */
|
||||
record_end= *record+length-head_length;
|
||||
@ -1137,7 +1137,7 @@ err:
|
||||
my_errno= HA_ERR_WRONG_IN_RECORD;
|
||||
DBUG_PRINT("error",("to_end: 0x%lx -> 0x%lx from_end: 0x%lx -> 0x%lx",
|
||||
(long) to, (long) to_end, (long) from, (long) from_end));
|
||||
DBUG_DUMP("from",(byte*) info->rec_buff,info->s->base.min_pack_length);
|
||||
DBUG_DUMP("from",(uchar*) info->rec_buff,info->s->base.min_pack_length);
|
||||
DBUG_RETURN(MY_FILE_ERROR);
|
||||
} /* _mi_rec_unpack */
|
||||
|
||||
@ -1698,7 +1698,7 @@ uint _mi_get_block_info(MI_BLOCK_INFO *info, File file, my_off_t filepos)
|
||||
sizeof(info->header))
|
||||
goto err;
|
||||
}
|
||||
DBUG_DUMP("header",(byte*) header,MI_BLOCK_INFO_HEADER_LENGTH);
|
||||
DBUG_DUMP("header",(uchar*) header,MI_BLOCK_INFO_HEADER_LENGTH);
|
||||
if (info->second_read)
|
||||
{
|
||||
if (info->header[0] <= 6 || info->header[0] == 13)
|
||||
|
@ -189,7 +189,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
|
||||
}
|
||||
_mi_dpointer(info,key,filepos);
|
||||
DBUG_PRINT("exit",("keynr: %d",keynr));
|
||||
DBUG_DUMP("key",(byte*) start,(uint) (key-start)+keyseg->length);
|
||||
DBUG_DUMP("key",(uchar*) start,(uint) (key-start)+keyseg->length);
|
||||
DBUG_EXECUTE("key",
|
||||
_mi_print_key(DBUG_FILE,info->s->keyinfo[keynr].seg,start,
|
||||
(uint) (key-start)););
|
||||
|
@ -158,4 +158,5 @@ void mi_change_key_cache(KEY_CACHE *old_key_cache,
|
||||
*/
|
||||
multi_key_cache_change(old_key_cache, new_key_cache);
|
||||
pthread_mutex_unlock(&THR_LOCK_myisam);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
||||
(byte*) myisam_file_magic, 4))
|
||||
{
|
||||
DBUG_PRINT("error",("Wrong header in %s",name_buff));
|
||||
DBUG_DUMP("error_dump",(char*) share->state.header.file_version,
|
||||
DBUG_DUMP("error_dump",(uchar*) share->state.header.file_version,
|
||||
head_length);
|
||||
my_errno=HA_ERR_NOT_A_TABLE;
|
||||
goto err;
|
||||
|
@ -1368,7 +1368,7 @@ uint _mi_pack_get_block_info(MI_INFO *myisam, MI_BIT_BUFF *bit_buff,
|
||||
VOID(my_seek(file,filepos,MY_SEEK_SET,MYF(0)));
|
||||
if (my_read(file,(char*) header,ref_length,MYF(MY_NABP)))
|
||||
return BLOCK_FATAL_ERROR;
|
||||
DBUG_DUMP("header",(byte*) header,ref_length);
|
||||
DBUG_DUMP("header",(uchar*) header,ref_length);
|
||||
}
|
||||
head_length= read_pack_length((uint) myisam->s->pack.version, header,
|
||||
&info->rec_len);
|
||||
|
@ -49,7 +49,7 @@ uchar *_mi_fetch_keypage(register MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
{
|
||||
DBUG_PRINT("error",("page %lu had wrong page length: %u",
|
||||
(ulong) page, page_size));
|
||||
DBUG_DUMP("page", (char*) tmp, keyinfo->block_length);
|
||||
DBUG_DUMP("page", (uchar*) tmp, keyinfo->block_length);
|
||||
info->last_keypage = HA_OFFSET_ERROR;
|
||||
mi_print_error(info->s, HA_ERR_CRASHED);
|
||||
my_errno = HA_ERR_CRASHED;
|
||||
@ -80,7 +80,7 @@ int _mi_write_keypage(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
DBUG_RETURN((-1));
|
||||
}
|
||||
DBUG_PRINT("page",("write page at: %lu",(long) page));
|
||||
DBUG_DUMP("buff",(byte*) buff,mi_getint(buff));
|
||||
DBUG_DUMP("buff",(uchar*) buff,mi_getint(buff));
|
||||
#endif
|
||||
|
||||
if ((length=keyinfo->block_length) > IO_SIZE*2 &&
|
||||
|
@ -78,7 +78,7 @@ int _mi_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
if (!(buff=_mi_fetch_keypage(info,keyinfo,pos,DFLT_INIT_HITS,info->buff,
|
||||
test(!(nextflag & SEARCH_SAVE_BUFF)))))
|
||||
goto err;
|
||||
DBUG_DUMP("page",(byte*) buff,mi_getint(buff));
|
||||
DBUG_DUMP("page",(uchar*) buff,mi_getint(buff));
|
||||
|
||||
flag=(*keyinfo->bin_search)(info,keyinfo,buff,key,key_len,nextflag,
|
||||
&keypos,lastkey, &last_key);
|
||||
@ -814,7 +814,7 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
||||
DBUG_PRINT("error",
|
||||
("Found too long null packed key: %u of %u at %lx",
|
||||
length, keyseg->length, (long) *page_pos));
|
||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
||||
DBUG_DUMP("key",(uchar*) *page_pos,16);
|
||||
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||
my_errno=HA_ERR_CRASHED;
|
||||
return 0;
|
||||
@ -871,7 +871,7 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
||||
{
|
||||
DBUG_PRINT("error",("Found too long packed key: %u of %u at %lx",
|
||||
length, keyseg->length, (long) *page_pos));
|
||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
||||
DBUG_DUMP("key",(uchar*) *page_pos,16);
|
||||
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||
my_errno=HA_ERR_CRASHED;
|
||||
return 0; /* Error */
|
||||
@ -942,7 +942,7 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
||||
{
|
||||
DBUG_PRINT("error",("Found too long binary packed key: %u of %u at %lx",
|
||||
length, keyinfo->maxlength, (long) *page_pos));
|
||||
DBUG_DUMP("key",(char*) *page_pos,16);
|
||||
DBUG_DUMP("key",(uchar*) *page_pos,16);
|
||||
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||
my_errno=HA_ERR_CRASHED;
|
||||
DBUG_RETURN(0); /* Wrong key */
|
||||
|
@ -137,8 +137,8 @@ int _mi_cmp_static_record(register MI_INFO *info, register const byte *old)
|
||||
if (memcmp((byte*) info->rec_buff, (byte*) old,
|
||||
(uint) info->s->base.reclength))
|
||||
{
|
||||
DBUG_DUMP("read",old,info->s->base.reclength);
|
||||
DBUG_DUMP("disk",info->rec_buff,info->s->base.reclength);
|
||||
DBUG_DUMP("read",(uchar *)old,info->s->base.reclength);
|
||||
DBUG_DUMP("disk",(uchar *)info->rec_buff,info->s->base.reclength);
|
||||
my_errno=HA_ERR_RECORD_CHANGED; /* Record have changed */
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
@ -647,7 +647,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
printf("test1 Ver 1.2 \n");
|
||||
exit(0);
|
||||
case '#':
|
||||
DEBUGGER_ON;
|
||||
DBUG_PUSH (argument);
|
||||
break;
|
||||
case '?':
|
||||
|
@ -449,8 +449,8 @@ int main(int argc, char *argv[])
|
||||
bcmp(read_record2,read_record3,reclength))
|
||||
{
|
||||
printf("Can't find last record\n");
|
||||
DBUG_DUMP("record2",(byte*) read_record2,reclength);
|
||||
DBUG_DUMP("record3",(byte*) read_record3,reclength);
|
||||
DBUG_DUMP("record2",(uchar*) read_record2,reclength);
|
||||
DBUG_DUMP("record3",(uchar*) read_record3,reclength);
|
||||
goto end;
|
||||
}
|
||||
ant=1;
|
||||
@ -863,7 +863,6 @@ err:
|
||||
static void get_options(int argc, char **argv)
|
||||
{
|
||||
char *pos,*progname;
|
||||
DEBUGGER_OFF;
|
||||
|
||||
progname= argv[0];
|
||||
|
||||
@ -976,7 +975,6 @@ static void get_options(int argc, char **argv)
|
||||
progname);
|
||||
exit(0);
|
||||
case '#':
|
||||
DEBUGGER_ON;
|
||||
DBUG_PUSH (++pos);
|
||||
break;
|
||||
default:
|
||||
|
@ -119,7 +119,6 @@ int main(int argc,char **argv)
|
||||
static void get_options(int argc, char **argv)
|
||||
{
|
||||
char *pos,*progname;
|
||||
DEBUGGER_OFF;
|
||||
|
||||
progname= argv[0];
|
||||
|
||||
@ -149,7 +148,6 @@ static void get_options(int argc, char **argv)
|
||||
printf("Usage: %s [-?lKA] [-f#] [-t#]\n",progname);
|
||||
exit(0);
|
||||
case '#':
|
||||
DEBUGGER_ON;
|
||||
DBUG_PUSH (++pos);
|
||||
break;
|
||||
default:
|
||||
|
@ -476,7 +476,7 @@ int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
if (key_pos != anc_buff+2+nod_flag && (keyinfo->flag &
|
||||
(HA_BINARY_PACK_KEY | HA_PACK_KEY)))
|
||||
{
|
||||
DBUG_DUMP("prev_key",(byte*) key_buff,_mi_keylength(keyinfo,key_buff));
|
||||
DBUG_DUMP("prev_key",(uchar*) key_buff,_mi_keylength(keyinfo,key_buff));
|
||||
}
|
||||
if (keyinfo->flag & HA_PACK_KEY)
|
||||
{
|
||||
@ -583,7 +583,7 @@ int _mi_split_page(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
MI_KEY_PARAM s_temp;
|
||||
DBUG_ENTER("mi_split_page");
|
||||
LINT_INIT(after_key);
|
||||
DBUG_DUMP("buff",(byte*) buff,mi_getint(buff));
|
||||
DBUG_DUMP("buff",(uchar*) buff,mi_getint(buff));
|
||||
|
||||
if (info->s->keyinfo+info->lastinx == keyinfo)
|
||||
info->page_changed=1; /* Info->buff is used */
|
||||
@ -630,7 +630,7 @@ int _mi_split_page(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
|
||||
if (_mi_write_keypage(info,keyinfo,new_pos,DFLT_INIT_HITS,info->buff))
|
||||
DBUG_RETURN(-1);
|
||||
DBUG_DUMP("key",(byte*) key,_mi_keylength(keyinfo,key));
|
||||
DBUG_DUMP("key",(uchar*) key,_mi_keylength(keyinfo,key));
|
||||
DBUG_RETURN(2); /* Middle key up */
|
||||
} /* _mi_split_page */
|
||||
|
||||
@ -784,7 +784,7 @@ static int _mi_balance_page(register MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
|
||||
if (!_mi_fetch_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,info->buff,0))
|
||||
goto err;
|
||||
DBUG_DUMP("next",(byte*) info->buff,mi_getint(info->buff));
|
||||
DBUG_DUMP("next",(uchar*) info->buff,mi_getint(info->buff));
|
||||
|
||||
/* Test if there is room to share keys */
|
||||
|
||||
|
@ -92,6 +92,6 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,int inx, const byte *key,
|
||||
mi->once_flags|= RRND_PRESERVE_LASTINX;
|
||||
DBUG_PRINT("info", ("using table no: %d",
|
||||
(int) (info->current_table - info->open_tables + 1)));
|
||||
DBUG_DUMP("result key", (byte*) mi->lastkey, mi->lastkey_length);
|
||||
DBUG_DUMP("result key", (uchar*) mi->lastkey, mi->lastkey_length);
|
||||
DBUG_RETURN(_myrg_mi_read_record(mi,buf));
|
||||
}
|
||||
|
@ -45,7 +45,8 @@ dist-hook:
|
||||
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
||||
$(distdir)/std_data \
|
||||
$(distdir)/std_data/ndb_backup50_data_be $(distdir)/std_data/ndb_backup50_data_le \
|
||||
$(distdir)/lib
|
||||
$(distdir)/lib \
|
||||
$(distdir)/std_data/funcs_1
|
||||
-$(INSTALL_DATA) $(srcdir)/t/*.def $(distdir)/t
|
||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(distdir)/t
|
||||
-$(INSTALL_DATA) $(srcdir)/t/*.imtest $(distdir)/t
|
||||
@ -66,6 +67,7 @@ dist-hook:
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_be/BACKUP* $(distdir)/std_data/ndb_backup50_data_be
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_le/BACKUP* $(distdir)/std_data/ndb_backup50_data_le
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/funcs_1/*.txt $(distdir)/std_data/funcs_1
|
||||
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
|
||||
-rm -rf `find $(distdir)/suite -type d -name SCCS`
|
||||
|
||||
@ -77,7 +79,8 @@ install-data-local:
|
||||
$(DESTDIR)$(testdir)/std_data \
|
||||
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be \
|
||||
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le \
|
||||
$(DESTDIR)$(testdir)/lib
|
||||
$(DESTDIR)$(testdir)/lib \
|
||||
$(DESTDIR)$(testdir)/std_data/funcs_1
|
||||
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
|
||||
-$(INSTALL_DATA) $(srcdir)/t/*.def $(DESTDIR)$(testdir)/t
|
||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(DESTDIR)$(testdir)/t
|
||||
@ -103,6 +106,7 @@ install-data-local:
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_be/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/ndb_backup50_data_le/BACKUP* $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/funcs_1/*.txt $(DESTDIR)$(testdir)/std_data/funcs_1
|
||||
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
|
||||
for f in `(cd $(srcdir); find suite -type f | grep -v SCCS)`; \
|
||||
do \
|
||||
|
3
mysql-test/include/show_binary_logs.inc
Normal file
3
mysql-test/include/show_binary_logs.inc
Normal file
@ -0,0 +1,3 @@
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--replace_column 2 #
|
||||
show binary logs;
|
@ -1,4 +1,10 @@
|
||||
--let $binlog_start=98
|
||||
--replace_column 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\//
|
||||
# $binlog_start can be set by caller or take a default value
|
||||
|
||||
if (!$binlog_start)
|
||||
{
|
||||
let $binlog_start=98;
|
||||
}
|
||||
--replace_result $binlog_start <binlog_start>
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/
|
||||
--eval show binlog events from $binlog_start
|
||||
|
59
mysql-test/include/wait_condition.inc
Normal file
59
mysql-test/include/wait_condition.inc
Normal file
@ -0,0 +1,59 @@
|
||||
# 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
|
@ -110,6 +110,7 @@ our $glob_basedir;
|
||||
|
||||
our $path_charsetsdir;
|
||||
our $path_client_bindir;
|
||||
our $path_client_libdir;
|
||||
our $path_language;
|
||||
our $path_timefile;
|
||||
our $path_snapshot;
|
||||
@ -623,6 +624,8 @@ sub command_line_setup () {
|
||||
'vardir=s' => \$opt_vardir,
|
||||
'benchdir=s' => \$glob_mysql_bench_dir,
|
||||
'mem' => \$opt_mem,
|
||||
'client-bindir=s' => \$path_client_bindir,
|
||||
'client-libdir=s' => \$path_client_libdir,
|
||||
|
||||
# Misc
|
||||
'report-features' => \$opt_report_features,
|
||||
@ -717,11 +720,19 @@ sub command_line_setup () {
|
||||
#
|
||||
|
||||
# Look for the client binaries directory
|
||||
$path_client_bindir= mtr_path_exists("$glob_basedir/client_release",
|
||||
"$glob_basedir/client_debug",
|
||||
vs_config_dirs('client', ''),
|
||||
"$glob_basedir/client",
|
||||
"$glob_basedir/bin");
|
||||
if ($path_client_bindir)
|
||||
{
|
||||
# --client-bindir=path set on command line, check that the path exists
|
||||
$path_client_bindir= mtr_path_exists($path_client_bindir);
|
||||
}
|
||||
else
|
||||
{
|
||||
$path_client_bindir= mtr_path_exists("$glob_basedir/client_release",
|
||||
"$glob_basedir/client_debug",
|
||||
vs_config_dirs('client', ''),
|
||||
"$glob_basedir/client",
|
||||
"$glob_basedir/bin");
|
||||
}
|
||||
|
||||
if (!$opt_extern)
|
||||
{
|
||||
@ -1367,7 +1378,15 @@ sub datadir_list_setup () {
|
||||
|
||||
sub collect_mysqld_features () {
|
||||
my $found_variable_list_start= 0;
|
||||
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
|
||||
my $tmpdir;
|
||||
if ( $opt_tmpdir ) {
|
||||
# Use the requested tmpdir
|
||||
mkpath($opt_tmpdir) if (! -d $opt_tmpdir);
|
||||
$tmpdir= $opt_tmpdir;
|
||||
}
|
||||
else {
|
||||
$tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
|
||||
}
|
||||
|
||||
#
|
||||
# Execute "mysqld --no-defaults --help --verbose" to get a
|
||||
@ -1428,7 +1447,7 @@ sub collect_mysqld_features () {
|
||||
}
|
||||
}
|
||||
}
|
||||
rmtree($tmpdir);
|
||||
rmtree($tmpdir) if (!$opt_tmpdir);
|
||||
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
|
||||
mtr_error("Could not find variabes list") unless $found_variable_list_start;
|
||||
|
||||
@ -1737,6 +1756,7 @@ sub mysql_upgrade_arguments()
|
||||
mtr_add_arg($args, "--socket=$master->[0]->{'path_sock'}");
|
||||
mtr_add_arg($args, "--datadir=$master->[0]->{'path_myddir'}");
|
||||
mtr_add_arg($args, "--basedir=$glob_basedir");
|
||||
mtr_add_arg($args, "--tmpdir=$opt_tmpdir");
|
||||
|
||||
if ( $opt_debug )
|
||||
{
|
||||
@ -1755,19 +1775,25 @@ sub environment_setup () {
|
||||
|
||||
my @ld_library_paths;
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Setup LD_LIBRARY_PATH so the libraries from this distro/clone
|
||||
# are used in favor of the system installed ones
|
||||
# --------------------------------------------------------------------------
|
||||
if ( $source_dist )
|
||||
if ($path_client_libdir)
|
||||
{
|
||||
push(@ld_library_paths, "$glob_basedir/libmysql/.libs/",
|
||||
"$glob_basedir/libmysql_r/.libs/",
|
||||
"$glob_basedir/zlib.libs/");
|
||||
# Use the --client-libdir passed on commandline
|
||||
push(@ld_library_paths, "$path_client_libdir");
|
||||
}
|
||||
else
|
||||
{
|
||||
push(@ld_library_paths, "$glob_basedir/lib");
|
||||
# Setup LD_LIBRARY_PATH so the libraries from this distro/clone
|
||||
# are used in favor of the system installed ones
|
||||
if ( $source_dist )
|
||||
{
|
||||
push(@ld_library_paths, "$glob_basedir/libmysql/.libs/",
|
||||
"$glob_basedir/libmysql_r/.libs/",
|
||||
"$glob_basedir/zlib.libs/");
|
||||
}
|
||||
else
|
||||
{
|
||||
push(@ld_library_paths, "$glob_basedir/lib");
|
||||
}
|
||||
}
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
@ -2019,6 +2045,9 @@ sub environment_setup () {
|
||||
{
|
||||
$cmdline_mysqlbinlog .=" --character-sets-dir=$path_charsetsdir";
|
||||
}
|
||||
# Always use the given tmpdir for the LOAD files created
|
||||
# by mysqlbinlog
|
||||
$cmdline_mysqlbinlog .=" --local-load=$opt_tmpdir";
|
||||
|
||||
if ( $opt_debug )
|
||||
{
|
||||
@ -3739,9 +3768,9 @@ sub mysqld_arguments ($$$$) {
|
||||
{
|
||||
# By default, prevent the started mysqld to access files outside of vardir
|
||||
my $secure_file_dir= $opt_vardir;
|
||||
if ( $opt_suite ne "main" )
|
||||
if ( $opt_suite ne "main" and $opt_suite ne "funcs_1" )
|
||||
{
|
||||
# When running a suite other than default allow the mysqld
|
||||
# When running a suite other than default or funcs_1 allow the mysqld
|
||||
# access to subdirs of mysql-test/ in order to make it possible
|
||||
# to "load data" from the suites data/ directory.
|
||||
$secure_file_dir= $glob_mysql_test_dir;
|
||||
@ -5235,6 +5264,8 @@ Misc options
|
||||
warnings | log-warnings Pass --log-warnings to mysqld
|
||||
|
||||
sleep=SECONDS Passed to mysqltest, will be used as fixed sleep time
|
||||
client-bindir=PATH Path to the directory where client binaries are located
|
||||
client-libdir=PATH Path to the directory where client libraries are located
|
||||
|
||||
Deprecated options
|
||||
with-openssl Deprecated option for ssl
|
||||
|
@ -1325,7 +1325,6 @@ set @a=repeat(' ',20);
|
||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'v' at row 1
|
||||
Note 1265 Data truncated for column 'c' at row 1
|
||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||
concat('*',v,'*',c,'*',t,'*')
|
||||
*+ *+*+ *
|
||||
|
39
mysql-test/r/binlog_index.result
Normal file
39
mysql-test/r/binlog_index.result
Normal file
@ -0,0 +1,39 @@
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
master-bin.000003 #
|
||||
master-bin.000004 #
|
||||
purge binary logs TO 'master-bin.000004';
|
||||
Warnings:
|
||||
Warning 1477 Being purged log MYSQLTEST_VARDIR/log/master-bin.000001 was not found
|
||||
*** must show a list starting from the 'TO' argument of PURGE ***
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000004 #
|
||||
reset master;
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
*** must be a warning master-bin.000001 was not found ***
|
||||
Warnings:
|
||||
Warning 1477 Being purged log MYSQLTEST_VARDIR/log/master-bin.000001 was not found
|
||||
*** must show one record, of the active binlog, left in the index file after PURGE ***
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000004 #
|
||||
reset master;
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
purge binary logs TO 'master-bin.000002';
|
||||
ERROR HY000: Fatal error during log purge
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Error 1377 a problem with deleting MYSQLTEST_VARDIR/log/master-bin.000001; consider examining correspondence of your binlog index file to the actual binlog files
|
||||
Error 1377 Fatal error during log purge
|
||||
reset master;
|
||||
End of tests
|
@ -34,6 +34,6 @@ END|
|
||||
INSERT INTO t2 VALUES (2),(10+bug23333());
|
||||
SHOW MASTER STATUS;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
# 184136
|
||||
# 184141
|
||||
DROP FUNCTION bug23333;
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -16,10 +16,10 @@ create table t2 (a int, b int) ENGINE=MyISAM;
|
||||
reset master;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Begin_load_query 1 # ;file_id=1;block_len=12
|
||||
master-bin.000001 133 Execute_load_query 1 # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */ ;file_id=1
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12
|
||||
master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */ ;file_id=#
|
||||
select
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
|
@ -138,3 +138,20 @@ ALTER TABLE t1 DROP INDEX a;
|
||||
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
||||
DELETE FROM t1 WHERE a=10;
|
||||
DROP TABLE t1;
|
||||
reset master;
|
||||
create table t1 (a int auto_increment, primary key (a)) engine=blackhole;
|
||||
insert into t1 values (11), (NULL), (NULL), (NULL);
|
||||
set insert_id= 3;
|
||||
insert into t1 values (NULL), (33), (NULL);
|
||||
set insert_id= 5;
|
||||
insert into t1 values (55), (NULL);
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (a int auto_increment, primary key (a)) engine=blackhole
|
||||
master-bin.000001 # Intvar 1 # INSERT_ID=1
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values (11), (NULL), (NULL), (NULL)
|
||||
master-bin.000001 # Intvar 1 # INSERT_ID=3
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values (NULL), (33), (NULL)
|
||||
master-bin.000001 # Intvar 1 # INSERT_ID=5
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values (55), (NULL)
|
||||
drop table t1;
|
||||
|
@ -34,12 +34,12 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 362 Query 1 528 use `test`; CREATE TABLE t4 (s1 CHAR(50) CHARACTER SET latin1,
|
||||
s2 CHAR(50) CHARACTER SET cp932,
|
||||
d DECIMAL(10,2))
|
||||
master-bin.000001 528 Query 1 776 use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE bug18293 (IN ins1 CHAR(50),
|
||||
master-bin.000001 528 Query 1 777 use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `bug18293`(IN ins1 CHAR(50),
|
||||
IN ins2 CHAR(50) CHARACTER SET cp932,
|
||||
IN ind DECIMAL(10,2))
|
||||
BEGIN
|
||||
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
||||
END
|
||||
master-bin.000001 776 Query 1 987 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 987 Query 1 1076 use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 1076 Query 1 1155 use `test`; DROP TABLE t4
|
||||
master-bin.000001 777 Query 1 988 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 988 Query 1 1077 use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 1077 Query 1 1156 use `test`; DROP TABLE t4
|
||||
|
@ -247,4 +247,11 @@ t1 CREATE TABLE `t1` (
|
||||
`c2` text NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=gbk
|
||||
drop table t1;
|
||||
CREATE TABLE t1(a MEDIUMTEXT CHARACTER SET gbk,
|
||||
b MEDIUMTEXT CHARACTER SET big5);
|
||||
INSERT INTO t1 VALUES
|
||||
(REPEAT(0x1125,200000), REPEAT(0x1125,200000)), ('', ''), ('', '');
|
||||
SELECT a FROM t1 GROUP BY 1 LIMIT 1 INTO @nullll;
|
||||
SELECT b FROM t1 GROUP BY 1 LIMIT 1 INTO @nullll;
|
||||
DROP TABLES t1;
|
||||
End of 5.0 tests
|
||||
|
0
mysql-test/r/federated_disabled.result
Normal file
0
mysql-test/r/federated_disabled.result
Normal file
@ -72,3 +72,4 @@ flush tables with read lock;
|
||||
unlock tables;
|
||||
drop table t1, t2;
|
||||
set session low_priority_updates=default;
|
||||
select benchmark(200, (select sin(1))) > 1000;
|
||||
|
@ -82,3 +82,10 @@ a
|
||||
1234562
|
||||
x
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (c1 varchar(100), c2 varchar(100));
|
||||
INSERT INTO t1 VALUES ('',''), ('','First'), ('Random','Random');
|
||||
SELECT * FROM t1 WHERE CONCAT(c1,' ',c2) REGEXP 'First.*';
|
||||
c1 c2
|
||||
First
|
||||
DROP TABLE t1;
|
||||
# End of 5.0 tests
|
||||
|
@ -946,4 +946,30 @@ GROUP BY 1
|
||||
d1
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
INSERT INTO t1 VALUES(1);
|
||||
SELECT GROUP_CONCAT(DISTINCT t2.a) FROM t1 LEFT JOIN t2 ON t2.a = t1.a GROUP BY t1.a;
|
||||
GROUP_CONCAT(DISTINCT t2.a)
|
||||
NULL
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (a INT, KEY(a));
|
||||
CREATE TABLE t2 (b INT);
|
||||
INSERT INTO t1 VALUES (NULL), (8), (2);
|
||||
INSERT INTO t2 VALUES (4), (10);
|
||||
SELECT 1 FROM t1 WHERE t1.a NOT IN
|
||||
(
|
||||
SELECT GROUP_CONCAT(DISTINCT t1.a)
|
||||
FROM t1 WHERE t1.a IN
|
||||
(
|
||||
SELECT b FROM t2
|
||||
)
|
||||
AND NOT t1.a >= (SELECT t1.a FROM t1 LIMIT 1)
|
||||
GROUP BY t1.a
|
||||
);
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
|
@ -1419,4 +1419,10 @@ Note 1003 select (`test`.`t1`.`a` + 1) AS `y` from `test`.`t1` group by (`test`.
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
SET SQL_MODE=DEFAULT;
|
||||
CREATE TABLE t1(a DOUBLE);
|
||||
INSERT INTO t1 VALUES (10), (20);
|
||||
SELECT AVG(a), CAST(AVG(a) AS DECIMAL) FROM t1;
|
||||
AVG(a) CAST(AVG(a) AS DECIMAL)
|
||||
15 15
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -99,41 +99,99 @@ t1 CREATE TABLE `t1` (
|
||||
`length(uuid())` int(10) NOT NULL default '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 (a timestamp default '2005-05-05 01:01:01',
|
||||
b timestamp default '2005-05-05 01:01:01');
|
||||
insert into t1 set a = now();
|
||||
select sleep(3);
|
||||
sleep(3)
|
||||
0
|
||||
update t1 set b = now();
|
||||
select timediff(b, a) >= '00:00:03' from t1;
|
||||
timediff(b, a) >= '00:00:03'
|
||||
#------------------------------------------------------------------------
|
||||
# Tests for Bug#6760 and Bug#12689
|
||||
SET @row_count = 4;
|
||||
SET @sleep_time_per_result_row = 1;
|
||||
SET @max_acceptable_delay = 2;
|
||||
SET @@global.query_cache_size = 1024 * 64;
|
||||
DROP TEMPORARY TABLE IF EXISTS t_history;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TEMPORARY TABLE t_history (attempt SMALLINT,
|
||||
start_ts DATETIME, end_ts DATETIME,
|
||||
start_cached INTEGER, end_cached INTEGER);
|
||||
CREATE TABLE t1 (f1 BIGINT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t_history
|
||||
SET attempt = 4 - 4 + 1, start_ts = NOW(),
|
||||
start_cached = 0;
|
||||
SELECT *, SLEEP(@sleep_time_per_result_row) FROM t1;
|
||||
f1 SLEEP(@sleep_time_per_result_row)
|
||||
1 0
|
||||
1 0
|
||||
1 0
|
||||
1 0
|
||||
UPDATE t_history SET end_ts = NOW()
|
||||
WHERE attempt = 4 - 4 + 1;
|
||||
UPDATE t_history SET end_cached = 0
|
||||
WHERE attempt = 4 - 4 + 1;
|
||||
INSERT INTO t_history
|
||||
SET attempt = 4 - 3 + 1, start_ts = NOW(),
|
||||
start_cached = 0;
|
||||
SELECT *, SLEEP(@sleep_time_per_result_row) FROM t1;
|
||||
f1 SLEEP(@sleep_time_per_result_row)
|
||||
1 0
|
||||
1 0
|
||||
1 0
|
||||
1 0
|
||||
UPDATE t_history SET end_ts = NOW()
|
||||
WHERE attempt = 4 - 3 + 1;
|
||||
UPDATE t_history SET end_cached = 0
|
||||
WHERE attempt = 4 - 3 + 1;
|
||||
INSERT INTO t_history
|
||||
SET attempt = 4 - 2 + 1, start_ts = NOW(),
|
||||
start_cached = 0;
|
||||
SELECT *, SLEEP(@sleep_time_per_result_row) FROM t1;
|
||||
f1 SLEEP(@sleep_time_per_result_row)
|
||||
1 0
|
||||
1 0
|
||||
1 0
|
||||
1 0
|
||||
UPDATE t_history SET end_ts = NOW()
|
||||
WHERE attempt = 4 - 2 + 1;
|
||||
UPDATE t_history SET end_cached = 0
|
||||
WHERE attempt = 4 - 2 + 1;
|
||||
INSERT INTO t_history
|
||||
SET attempt = 4 - 1 + 1, start_ts = NOW(),
|
||||
start_cached = 0;
|
||||
SELECT *, SLEEP(@sleep_time_per_result_row) FROM t1;
|
||||
f1 SLEEP(@sleep_time_per_result_row)
|
||||
1 0
|
||||
1 0
|
||||
1 0
|
||||
1 0
|
||||
UPDATE t_history SET end_ts = NOW()
|
||||
WHERE attempt = 4 - 1 + 1;
|
||||
UPDATE t_history SET end_cached = 0
|
||||
WHERE attempt = 4 - 1 + 1;
|
||||
# Test 1: Does the query with SLEEP need a reasonable time?
|
||||
SELECT COUNT(*) >= 4 - 1 INTO @aux1 FROM t_history
|
||||
WHERE TIMEDIFF(end_ts,start_ts) - @sleep_time_per_result_row * @row_count
|
||||
BETWEEN 0 AND @max_acceptable_delay;
|
||||
SELECT @aux1 AS "Expect 1";
|
||||
Expect 1
|
||||
1
|
||||
drop table t1;
|
||||
set global query_cache_size=1355776;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1),(1),(1);
|
||||
create table t2 (a datetime default null, b datetime default null);
|
||||
insert into t2 set a = now();
|
||||
select a from t1 where sleep(1);
|
||||
a
|
||||
update t2 set b = now() where b is null;
|
||||
insert into t2 set a = now();
|
||||
select a from t1 where sleep(a);
|
||||
a
|
||||
update t2 set b = now() where b is null;
|
||||
insert into t2 set a = now();
|
||||
select a from t1 where sleep(1);
|
||||
a
|
||||
update t2 set b = now() where b is null;
|
||||
select timediff(b, a) >= '00:00:03' from t2;
|
||||
timediff(b, a) >= '00:00:03'
|
||||
# Test 2: Does the query with SLEEP need a reasonable time even in case
|
||||
# of the non first execution?
|
||||
SELECT COUNT(*) >= 4 - 1 - 1 INTO @aux2 FROM t_history
|
||||
WHERE TIMEDIFF(end_ts,start_ts) - @sleep_time_per_result_row * @row_count
|
||||
BETWEEN 0 AND @max_acceptable_delay
|
||||
AND attempt > 1;
|
||||
SELECT @aux2 AS "Expect 1";
|
||||
Expect 1
|
||||
1
|
||||
# Test 3: The query with SLEEP must be not cached.
|
||||
SELECT COUNT(*) = 4 INTO @aux3 FROM t_history
|
||||
WHERE end_cached = start_cached;
|
||||
SELECT @aux3 AS "Expect 1";
|
||||
Expect 1
|
||||
1
|
||||
1
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
set global query_cache_size=default;
|
||||
DROP TABLE t1;
|
||||
DROP TEMPORARY TABLE t_history;
|
||||
SET @@global.query_cache_size = default;
|
||||
create table t1 select INET_ATON('255.255.0.1') as `a`;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
|
@ -1129,4 +1129,26 @@ DROP USER mysqltest_1@localhost;
|
||||
DROP DATABASE db27878;
|
||||
use test;
|
||||
DROP TABLE t1;
|
||||
drop table if exists test;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test'
|
||||
drop function if exists test_function;
|
||||
Warnings:
|
||||
Note 1305 FUNCTION test_function does not exist
|
||||
drop view if exists v1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.v1'
|
||||
create table test (col1 varchar(30));
|
||||
create function test_function() returns varchar(30)
|
||||
begin
|
||||
declare tmp varchar(30);
|
||||
select col1 from test limit 1 into tmp;
|
||||
return '1';
|
||||
end|
|
||||
create view v1 as select test.* from test where test.col1=test_function();
|
||||
grant update (col1) on v1 to 'greg'@'localhost';
|
||||
drop user 'greg'@'localhost';
|
||||
drop view v1;
|
||||
drop table test;
|
||||
drop function test_function;
|
||||
End of 5.0 tests
|
||||
|
@ -1213,4 +1213,150 @@ FROM t1;
|
||||
ERROR 21000: Subquery returns more than 1 row
|
||||
DROP TABLE t1;
|
||||
SET @@sql_mode = @old_sql_mode;
|
||||
#
|
||||
# Bug#27219: Aggregate functions in ORDER BY.
|
||||
#
|
||||
SET @save_sql_mode=@@sql_mode;
|
||||
SET @@sql_mode='ONLY_FULL_GROUP_BY';
|
||||
CREATE TABLE t1 (a INT, b INT, c INT DEFAULT 0);
|
||||
INSERT INTO t1 (a, b) VALUES (3,3), (2,2), (3,3), (2,2), (3,3), (4,4);
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*);
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*) + 1;
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*) + a;
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*), 1;
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*), a;
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT 1 FROM t1 ORDER BY SUM(a);
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 ORDER BY SUM(a + 1);
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 ORDER BY SUM(a) + 1;
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 ORDER BY SUM(a), b;
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT a FROM t1 ORDER BY COUNT(b);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2);
|
||||
a
|
||||
3
|
||||
2
|
||||
3
|
||||
2
|
||||
3
|
||||
4
|
||||
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a), t2.a FROM t2);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2 ORDER BY t2.a);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1 ORDER BY (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1
|
||||
WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
|
||||
a
|
||||
2
|
||||
3
|
||||
4
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a > ANY (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1
|
||||
WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
SELECT t1.a FROM t1
|
||||
WHERE t1.a = (SELECT t2.a FROM t2 GROUP BY t2.a
|
||||
ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1);
|
||||
a
|
||||
4
|
||||
SELECT t1.a, SUM(t1.b) FROM t1
|
||||
WHERE t1.a = (SELECT SUM(t2.b) FROM t2 GROUP BY t2.a
|
||||
ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1)
|
||||
GROUP BY t1.a;
|
||||
a SUM(t1.b)
|
||||
4 4
|
||||
SELECT t1.a, SUM(t1.b) FROM t1
|
||||
WHERE t1.a = (SELECT SUM(t2.b) FROM t2
|
||||
ORDER BY SUM(t2.b) + SUM(t1.b) LIMIT 1)
|
||||
GROUP BY t1.a;
|
||||
a SUM(t1.b)
|
||||
SELECT t1.a, SUM(t1.b) FROM t1
|
||||
WHERE t1.a = (SELECT SUM(t2.b) FROM t2
|
||||
ORDER BY SUM(t2.b + t1.a) LIMIT 1)
|
||||
GROUP BY t1.a;
|
||||
a SUM(t1.b)
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING (1, 1) = (SELECT SUM(t1.a), t1.a FROM t2 LIMIT 1);
|
||||
a
|
||||
select avg (
|
||||
(select
|
||||
(select sum(outr.a + innr.a) from t1 as innr limit 1) as tt
|
||||
from t1 as outr order by outr.a limit 1))
|
||||
from t1 as most_outer;
|
||||
avg (
|
||||
(select
|
||||
(select sum(outr.a + innr.a) from t1 as innr limit 1) as tt
|
||||
from t1 as outr order by outr.a limit 1))
|
||||
29.0000
|
||||
select avg (
|
||||
(select (
|
||||
(select sum(outr.a + innr.a) from t1 as innr limit 1)) as tt
|
||||
from t1 as outr order by count(outr.a) limit 1)) as tt
|
||||
from t1 as most_outer;
|
||||
ERROR 42000: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
|
||||
select (select sum(outr.a + t1.a) from t1 limit 1) as tt from t1 as outr order by outr.a;
|
||||
tt
|
||||
29
|
||||
29
|
||||
35
|
||||
35
|
||||
35
|
||||
41
|
||||
SET sql_mode=@save_sql_mode;
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
|
@ -256,7 +256,6 @@ set @a=repeat(' ',20);
|
||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'v' at row 1
|
||||
Note 1265 Data truncated for column 'c' at row 1
|
||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||
concat('*',v,'*',c,'*',t,'*')
|
||||
*+ *+*+ *
|
||||
|
@ -1428,8 +1428,19 @@ select * from `information_schema`.`VIEWS` where `TABLE_SCHEMA` = NULL;
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||
select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||
End of 5.0 tests.
|
||||
show fields from information_schema.table_names;
|
||||
ERROR 42S02: Unknown table 'table_names' in information_schema
|
||||
show keys from information_schema.table_names;
|
||||
ERROR 42S02: Unknown table 'table_names' in information_schema
|
||||
USE information_schema;
|
||||
SET max_heap_table_size = 16384;
|
||||
CREATE TABLE test.t1( a INT );
|
||||
SELECT *
|
||||
FROM tables ta
|
||||
JOIN collations co ON ( co.collation_name = ta.table_catalog )
|
||||
JOIN character_sets cs ON ( cs.character_set_name = ta.table_catalog );
|
||||
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 COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN CHARACTER_SET_NAME DEFAULT_COLLATE_NAME DESCRIPTION MAXLEN
|
||||
DROP TABLE test.t1;
|
||||
SET max_heap_table_size = DEFAULT;
|
||||
USE test;
|
||||
End of 5.0 tests.
|
||||
|
@ -1901,7 +1901,6 @@ set @a=repeat(' ',20);
|
||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'v' at row 1
|
||||
Note 1265 Data truncated for column 'c' at row 1
|
||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||
concat('*',v,'*',c,'*',t,'*')
|
||||
*+ *+*+ *
|
||||
|
@ -252,3 +252,79 @@ SELECT * FROM t1;
|
||||
c1 c2 c3 c4
|
||||
10 1970-02-01 01:02:03 1.1e-100 1.1e+100
|
||||
DROP TABLE t1;
|
||||
|
||||
# --
|
||||
# -- Bug#35469: server crash with LOAD DATA INFILE to a VIEW.
|
||||
# --
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP VIEW IF EXISTS v2;
|
||||
DROP VIEW IF EXISTS v3;
|
||||
|
||||
CREATE TABLE t1(c1 INT, c2 VARCHAR(255));
|
||||
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
CREATE VIEW v2 AS SELECT 1 + 2 AS c0, c1, c2 FROM t1;
|
||||
CREATE VIEW v3 AS SELECT 1 AS d1, 2 AS d2;
|
||||
|
||||
LOAD DATA INFILE '../std_data_ln/bug35469.dat' INTO TABLE v1
|
||||
FIELDS ESCAPED BY '\\'
|
||||
TERMINATED BY ','
|
||||
ENCLOSED BY '"'
|
||||
LINES TERMINATED BY '\n' (c1, c2);
|
||||
|
||||
SELECT * FROM t1;
|
||||
c1 c2
|
||||
1 "string1"
|
||||
2 "string2"
|
||||
3 "string3"
|
||||
|
||||
SELECT * FROM v1;
|
||||
c1 c2
|
||||
1 "string1"
|
||||
2 "string2"
|
||||
3 "string3"
|
||||
|
||||
DELETE FROM t1;
|
||||
|
||||
LOAD DATA INFILE '../std_data_ln/bug35469.dat' INTO TABLE v2
|
||||
FIELDS ESCAPED BY '\\'
|
||||
TERMINATED BY ','
|
||||
ENCLOSED BY '"'
|
||||
LINES TERMINATED BY '\n' (c1, c2);
|
||||
|
||||
SELECT * FROM t1;
|
||||
c1 c2
|
||||
1 "string1"
|
||||
2 "string2"
|
||||
3 "string3"
|
||||
|
||||
SELECT * FROM v2;
|
||||
c0 c1 c2
|
||||
3 1 "string1"
|
||||
3 2 "string2"
|
||||
3 3 "string3"
|
||||
|
||||
DELETE FROM t1;
|
||||
|
||||
LOAD DATA INFILE '../std_data_ln/bug35469.dat' INTO TABLE v2
|
||||
FIELDS ESCAPED BY '\\'
|
||||
TERMINATED BY ','
|
||||
ENCLOSED BY '"'
|
||||
LINES TERMINATED BY '\n' (c0, c2);
|
||||
ERROR HY000: Invalid column reference (v2.c0) in LOAD DATA
|
||||
|
||||
LOAD DATA INFILE '../std_data_ln/bug35469.dat' INTO TABLE v3
|
||||
FIELDS ESCAPED BY '\\'
|
||||
TERMINATED BY ','
|
||||
ENCLOSED BY '"'
|
||||
LINES TERMINATED BY '\n' (d1, d2);
|
||||
ERROR HY000: The target table v3 of the LOAD is not updatable
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
DROP VIEW v2;
|
||||
DROP VIEW v3;
|
||||
|
||||
# -- End of Bug#35469.
|
||||
|
@ -6,12 +6,12 @@ begin;
|
||||
insert into t1 values(1);
|
||||
insert into t2 select * from t1;
|
||||
commit;
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(1)
|
||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 347 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(1)
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
@ -21,12 +21,12 @@ insert into t2 select * from t1;
|
||||
rollback;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(2)
|
||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 347 Query 1 # use `test`; ROLLBACK
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(2)
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
@ -39,15 +39,15 @@ rollback to savepoint my_savepoint;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
commit;
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(3)
|
||||
master-bin.000001 253 Query 1 # use `test`; savepoint my_savepoint
|
||||
master-bin.000001 338 Query 1 # use `test`; insert into t1 values(4)
|
||||
master-bin.000001 425 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 519 Query 1 # use `test`; rollback to savepoint my_savepoint
|
||||
master-bin.000001 616 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(3)
|
||||
master-bin.000001 # Query # # use `test`; savepoint my_savepoint
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(4)
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Query # # use `test`; rollback to savepoint my_savepoint
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
@ -65,16 +65,16 @@ select a from t1 order by a;
|
||||
a
|
||||
5
|
||||
7
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(5)
|
||||
master-bin.000001 253 Query 1 # use `test`; savepoint my_savepoint
|
||||
master-bin.000001 338 Query 1 # use `test`; insert into t1 values(6)
|
||||
master-bin.000001 425 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 519 Query 1 # use `test`; rollback to savepoint my_savepoint
|
||||
master-bin.000001 616 Query 1 # use `test`; insert into t1 values(7)
|
||||
master-bin.000001 703 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(5)
|
||||
master-bin.000001 # Query # # use `test`; savepoint my_savepoint
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(6)
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Query # # use `test`; rollback to savepoint my_savepoint
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(7)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
@ -87,46 +87,46 @@ insert into t2 select * from t1;
|
||||
select get_lock("a",10);
|
||||
get_lock("a",10)
|
||||
1
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(8)
|
||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 347 Query 1 # use `test`; ROLLBACK
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(8)
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
insert into t1 values(9);
|
||||
insert into t2 select * from t1;
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(9)
|
||||
master-bin.000001 253 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 280 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(9)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
insert into t1 values(10);
|
||||
begin;
|
||||
insert into t2 select * from t1;
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(10)
|
||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 281 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(10)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
insert into t1 values(11);
|
||||
commit;
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(10)
|
||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 281 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 375 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 443 Query 1 # use `test`; insert into t1 values(11)
|
||||
master-bin.000001 531 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(10)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(11)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
alter table t2 engine=INNODB;
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
@ -135,12 +135,12 @@ begin;
|
||||
insert into t1 values(12);
|
||||
insert into t2 select * from t1;
|
||||
commit;
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(12)
|
||||
master-bin.000001 254 Query 1 # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 348 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(12)
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
@ -148,7 +148,7 @@ begin;
|
||||
insert into t1 values(13);
|
||||
insert into t2 select * from t1;
|
||||
rollback;
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
@ -160,11 +160,11 @@ insert into t1 values(15);
|
||||
insert into t2 select * from t1;
|
||||
rollback to savepoint my_savepoint;
|
||||
commit;
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(14)
|
||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(14)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
@ -180,12 +180,12 @@ select a from t1 order by a;
|
||||
a
|
||||
16
|
||||
18
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(16)
|
||||
master-bin.000001 254 Query 1 # use `test`; insert into t1 values(18)
|
||||
master-bin.000001 342 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(16)
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(18)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
alter table t2 type=MyISAM;
|
||||
@ -232,35 +232,35 @@ insert into t2 values (3);
|
||||
select get_lock("lock1",60);
|
||||
get_lock("lock1",60)
|
||||
1
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(16)
|
||||
master-bin.000001 254 Query 1 # use `test`; insert into t1 values(18)
|
||||
master-bin.000001 342 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 369 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 437 Query 1 # use `test`; delete from t1
|
||||
master-bin.000001 514 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 541 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 609 Query 1 # use `test`; delete from t2
|
||||
master-bin.000001 686 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 713 Query 1 # use `test`; alter table t2 type=MyISAM
|
||||
master-bin.000001 802 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 870 Query 1 # use `test`; insert into t1 values (1)
|
||||
master-bin.000001 958 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 985 Query 1 # use `test`; insert into t2 values (20)
|
||||
master-bin.000001 1074 Query 1 # use `test`; drop table t1,t2
|
||||
master-bin.000001 1153 Query 1 # use `test`; create temporary table ti (a int) engine=innodb
|
||||
master-bin.000001 1263 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 1331 Query 1 # use `test`; insert into ti values(1)
|
||||
master-bin.000001 1418 Xid 1 # COMMIT /* XID */
|
||||
master-bin.000001 1445 Query 1 # use `test`; create temporary table t1 (a int) engine=myisam
|
||||
master-bin.000001 1555 Query 1 # use `test`; insert t1 values (1)
|
||||
master-bin.000001 1638 Query 1 # use `test`; create table t0 (n int)
|
||||
master-bin.000001 1724 Query 1 # use `test`; insert t0 select * from t1
|
||||
master-bin.000001 1813 Query 1 # use `test`; insert into t0 select GET_LOCK("lock1",null)
|
||||
master-bin.000001 1920 Query 1 # use `test`; create table t2 (n int) engine=innodb
|
||||
master-bin.000001 2020 Query 1 # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(16)
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(18)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; delete from t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; delete from t2
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; alter table t2 type=MyISAM
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values (1)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values (20)
|
||||
master-bin.000001 # Query # # use `test`; drop table t1,t2
|
||||
master-bin.000001 # Query # # use `test`; create temporary table ti (a int) engine=innodb
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into ti values(1)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; create temporary table t1 (a int) engine=myisam
|
||||
master-bin.000001 # Query # # use `test`; insert t1 values (1)
|
||||
master-bin.000001 # Query # # use `test`; create table t0 (n int)
|
||||
master-bin.000001 # Query # # use `test`; insert t0 select * from t1
|
||||
master-bin.000001 # Query # # use `test`; insert into t0 select GET_LOCK("lock1",null)
|
||||
master-bin.000001 # Query # # use `test`; create table t2 (n int) engine=innodb
|
||||
master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
|
||||
do release_lock("lock1");
|
||||
drop table t0,t2;
|
||||
reset master;
|
||||
|
@ -573,8 +573,8 @@ count(*)
|
||||
select count(*) from t3 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; delete t3.* from t2,t3 where t2.a=t3.a
|
||||
master-bin.000001 # Query # # use `test`; delete t3.* from t2,t3 where t2.a=t3.a
|
||||
drop table t1, t2, t3;
|
||||
end of tests
|
||||
|
45
mysql-test/r/multi_update_tiny_hash.result
Normal file
45
mysql-test/r/multi_update_tiny_hash.result
Normal file
@ -0,0 +1,45 @@
|
||||
drop table if exists t1, t2;
|
||||
#
|
||||
# Bug #36676: multiupdate using LEFT JOIN updates only
|
||||
# first row or fails with an error:
|
||||
# ERROR 1022 (23000): Can't write; duplicate key in table ''
|
||||
#
|
||||
|
||||
#
|
||||
# Multiupdate creates MyISAM temporary table without MEMORY table
|
||||
#
|
||||
CREATE TABLE t1 (ID INT);
|
||||
CREATE TABLE t2 (ID INT,
|
||||
s1 TEXT, s2 TEXT, s3 VARCHAR(10), s4 TEXT, s5 VARCHAR(10));
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
INSERT INTO t2 VALUES (1,'test', 'test', 'test', 'test', 'test'),
|
||||
(2,'test', 'test', 'test', 'test', 'test');
|
||||
SELECT * FROM t1 LEFT JOIN t2 USING(ID);
|
||||
ID s1 s2 s3 s4 s5
|
||||
1 test test test test test
|
||||
2 test test test test test
|
||||
UPDATE t1 LEFT JOIN t2 USING(ID) SET s1 = 'changed';
|
||||
UPDATE t1 JOIN t2 USING(ID) SET s2 = 'changed';
|
||||
UPDATE t1 LEFT JOIN t2 USING(ID) SET s3 = 'changed';
|
||||
UPDATE t1 LEFT JOIN t2 USING(ID) SET s4 = 'changed', s5 = 'changed';
|
||||
SELECT * FROM t1 LEFT JOIN t2 USING(ID);
|
||||
ID s1 s2 s3 s4 s5
|
||||
1 changed changed changed changed changed
|
||||
2 changed changed changed changed changed
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Multiupdate creates temporary MyISAM table from MEMORY table
|
||||
#
|
||||
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
|
||||
CREATE TABLE t2 (id INT, s1 CHAR(255));
|
||||
INSERT INTO t1 VALUES (0), (0), (0), (0), (0), (0), (0), (0);
|
||||
INSERT INTO t1 (SELECT 0 FROM t1);
|
||||
INSERT INTO t1 (SELECT 0 FROM t1);
|
||||
INSERT INTO t1 (SELECT 0 FROM t1);
|
||||
INSERT INTO t2 (SELECT ID, 'a' FROM t1);
|
||||
UPDATE t1 LEFT JOIN t2 USING(id) SET s1 = 'b';
|
||||
SELECT DISTINCT s1 FROM t1 LEFT JOIN t2 USING(id);
|
||||
s1
|
||||
b
|
||||
DROP TABLE t1, t2;
|
||||
# End of 5.0 tests
|
@ -1104,7 +1104,6 @@ set @a=repeat(' ',20);
|
||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'v' at row 1
|
||||
Note 1265 Data truncated for column 'c' at row 1
|
||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||
concat('*',v,'*',c,'*',t,'*')
|
||||
*+ *+*+ *
|
||||
|
@ -38,6 +38,8 @@ t2
|
||||
t3
|
||||
Tables_in_test
|
||||
t1
|
||||
delimiter
|
||||
1
|
||||
_
|
||||
Test delimiter : from command line
|
||||
a
|
||||
|
@ -268,7 +268,7 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
|
||||
SET @@session.sql_mode=0/*!*/;
|
||||
/*!\C latin1 *//*!*/;
|
||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` procedure p1()
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
|
||||
begin
|
||||
select 1;
|
||||
end
|
||||
|
@ -1166,3 +1166,42 @@ EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 35 NULL 3 Using where; Using index
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY KEY (f1));
|
||||
INSERT INTO t1 VALUES (127),(254),(0),(1),(255);
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256;
|
||||
COUNT(*)
|
||||
5
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0;
|
||||
COUNT(*)
|
||||
5
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255;
|
||||
COUNT(*)
|
||||
4
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1;
|
||||
COUNT(*)
|
||||
5
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY KEY (f1));
|
||||
INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127);
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128;
|
||||
COUNT(*)
|
||||
5
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0;
|
||||
COUNT(*)
|
||||
5
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127;
|
||||
COUNT(*)
|
||||
4
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129;
|
||||
COUNT(*)
|
||||
5
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0;
|
||||
COUNT(*)
|
||||
5
|
||||
SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128;
|
||||
COUNT(*)
|
||||
4
|
||||
DROP TABLE t1;
|
||||
|
@ -115,3 +115,39 @@ SET myisam_repair_threads=@@global.myisam_repair_threads;
|
||||
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
||||
DROP TABLE t1;
|
||||
End of 4.1 tests
|
||||
# Test with a saved table from 4.1
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 MyISAM 9 Fixed 2 5 10 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL
|
||||
SELECT * FROM t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
# Run CHECK TABLE, it should indicate table need a REPAIR TABLE
|
||||
CHECK TABLE t1 FOR UPGRADE;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check error Table upgrade required. Please do "REPAIR TABLE `t1`" to fix it!
|
||||
# REPAIR old table USE_FRM should fail
|
||||
REPAIR TABLE t1 USE_FRM;
|
||||
Table Op Msg_type Msg_text
|
||||
t1 repair error Failed reparing incompatible .FRM file
|
||||
# Run REPAIR TABLE to upgrade .frm file
|
||||
REPAIR TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 MyISAM 10 Fixed 2 7 14 1970324836974591 1024 0 NULL # # NULL latin1_swedish_ci NULL
|
||||
SELECT * FROM t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
REPAIR TABLE t1 USE_FRM;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair warning Number of rows changed from 0 to 2
|
||||
test.t1 repair status OK
|
||||
SELECT * FROM t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
DROP TABLE t1;
|
||||
|
165
mysql-test/r/rpl_auto_increment_bug33029.result
Normal file
165
mysql-test/r/rpl_auto_increment_bug33029.result
Normal file
@ -0,0 +1,165 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP PROCEDURE IF EXISTS p2;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY);
|
||||
CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY);
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE ins_count INT DEFAULT 10;
|
||||
WHILE ins_count > 0 DO
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET ins_count = ins_count - 1;
|
||||
END WHILE;
|
||||
DELETE FROM t1 WHERE id = 1;
|
||||
DELETE FROM t1 WHERE id = 2;
|
||||
DELETE FROM t2 WHERE id = 1;
|
||||
DELETE FROM t2 WHERE id = 2;
|
||||
END//
|
||||
CREATE PROCEDURE p2()
|
||||
BEGIN
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
DELETE FROM t1 WHERE id = f1(3);
|
||||
DELETE FROM t1 WHERE id = f1(4);
|
||||
DELETE FROM t2 WHERE id = 3;
|
||||
DELETE FROM t2 WHERE id = 4;
|
||||
END//
|
||||
CREATE TRIGGER tr1 BEFORE DELETE
|
||||
ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t2 VALUES (NULL);
|
||||
END//
|
||||
CREATE FUNCTION f1 (i int) RETURNS int
|
||||
BEGIN
|
||||
INSERT INTO t2 VALUES (NULL);
|
||||
RETURN i;
|
||||
END//
|
||||
CALL p1();
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=1
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=2
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=3
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=5
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=7
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=8
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=9
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t1 WHERE id = 1
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t1 WHERE id = 2
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t2 WHERE id = 1
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t2 WHERE id = 2
|
||||
# Result on master
|
||||
SELECT * FROM t1;
|
||||
id
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
SELECT * FROM t2;
|
||||
id
|
||||
# Result on slave
|
||||
SELECT * FROM t1;
|
||||
id
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
SELECT * FROM t2;
|
||||
id
|
||||
DROP TRIGGER tr1;
|
||||
CALL p2();
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=11
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (NULL)
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t1 WHERE id = f1(3)
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t1 WHERE id = f1(4)
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t2 WHERE id = 3
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t2 WHERE id = 4
|
||||
# Result on master
|
||||
SELECT * FROM t1;
|
||||
id
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
SELECT * FROM t2;
|
||||
id
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
# Result on slave
|
||||
SELECT * FROM t1;
|
||||
id
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
SELECT * FROM t2;
|
||||
id
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP PROCEDURE IF EXISTS p2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
@ -6,6 +6,10 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
drop database if exists DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||
create database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||
SET @@global.max_allowed_packet=1024;
|
||||
SET @@global.net_buffer_length=1024;
|
||||
STOP SLAVE;
|
||||
START SLAVE;
|
||||
select @@net_buffer_length, @@max_allowed_packet;
|
||||
@@net_buffer_length @@max_allowed_packet
|
||||
1024 1024
|
||||
|
@ -386,7 +386,7 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # drop database if exists mysqltest1
|
||||
master-bin.000001 # Query 1 # create database mysqltest1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a varchar(100))
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo()
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
|
||||
begin
|
||||
declare b int;
|
||||
set b = 8;
|
||||
@ -396,20 +396,20 @@ end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values ( NAME_CONST('b',8))
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (unix_timestamp())
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo2()
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`()
|
||||
select * from mysqltest1.t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo2 contains sql
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop table t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo3()
|
||||
deterministic
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
|
||||
DETERMINISTIC
|
||||
insert into t1 values (15)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` procedure foo4()
|
||||
deterministic
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t2 values(3);
|
||||
insert into t1 values (5);
|
||||
@ -423,8 +423,8 @@ master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (5)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo4()
|
||||
deterministic
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo4`()
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t2 values(20),(20);
|
||||
end
|
||||
@ -433,9 +433,8 @@ master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo4
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo3
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1(x int)
|
||||
returns int
|
||||
deterministic
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t1 values (x);
|
||||
return x+2;
|
||||
@ -444,32 +443,27 @@ master-bin.000001 # Query 1 # use `mysqltest1`; delete t1,t2 from t1,t2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21))
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1()
|
||||
returns int
|
||||
no sql
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`() RETURNS int(11)
|
||||
NO SQL
|
||||
begin
|
||||
return unix_timestamp();
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values(fn1())
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` function fn2()
|
||||
returns int
|
||||
no sql
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11)
|
||||
NO SQL
|
||||
begin
|
||||
return unix_timestamp();
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn3()
|
||||
returns int
|
||||
not deterministic
|
||||
reads sql data
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS int(11)
|
||||
READS SQL DATA
|
||||
begin
|
||||
return 0;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1(x int)
|
||||
returns int
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||
begin
|
||||
insert into t2 values(x),(x);
|
||||
return 10;
|
||||
@ -482,15 +476,15 @@ master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop trigger trg
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo()
|
||||
not deterministic
|
||||
reads sql data
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
|
||||
READS SQL DATA
|
||||
select * from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query 1 # drop database mysqltest1
|
||||
master-bin.000001 # Query 1 # drop user "zedjzlcsjhd"@127.0.0.1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` function f1() returns int reads sql data
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
READS SQL DATA
|
||||
begin
|
||||
declare var integer;
|
||||
declare c cursor for select a from v1;
|
||||
@ -499,19 +493,21 @@ fetch c into var;
|
||||
close c;
|
||||
return var;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 as a
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `a`
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (a int)
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 (a) values (f1())
|
||||
master-bin.000001 # Query 1 # use `test`; drop view v1
|
||||
master-bin.000001 # Query 1 # use `test`; drop function f1
|
||||
master-bin.000001 # Query 1 # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1(col VARCHAR(10))
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE p1(arg VARCHAR(10))
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
|
||||
INSERT INTO t1 VALUES(arg)
|
||||
master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test'))
|
||||
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE p1() SET @a = 1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION f1() RETURNS INT RETURN 0
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
|
||||
SET @a = 1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
RETURN 0
|
||||
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1
|
||||
master-bin.000001 # Query 1 # use `test`; DROP FUNCTION f1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||
@ -520,9 +516,10 @@ master-bin.000001 # Query 1 # drop database if exists mysqltest2
|
||||
master-bin.000001 # Query 1 # create database mysqltest
|
||||
master-bin.000001 # Query 1 # create database mysqltest2
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; create table t ( t integer )
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` procedure mysqltest.test() begin end
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`()
|
||||
begin end
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; insert into t values ( 1 )
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` function f1 () returns int
|
||||
master-bin.000001 # Query 1 # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
begin
|
||||
insert into t values (1);
|
||||
return 0;
|
||||
@ -532,3 +529,407 @@ set global log_bin_trust_function_creators=0;
|
||||
set global log_bin_trust_function_creators=0;
|
||||
drop database mysqltest;
|
||||
drop database mysqltest2;
|
||||
use test;
|
||||
/*!50001 create procedure `mysqltestbug36570_p1`() */
|
||||
begin
|
||||
select 1;
|
||||
end|
|
||||
use mysql|
|
||||
create procedure test.` mysqltestbug36570_p2`(/*!50001 a int*/)`label`:
|
||||
begin
|
||||
select a;
|
||||
end|
|
||||
/*!50001 create function test.mysqltestbug36570_f1() */
|
||||
returns int
|
||||
/*!50001 deterministic */
|
||||
begin
|
||||
return 3;
|
||||
end|
|
||||
use test|
|
||||
show procedure status like '%mysqltestbug36570%';
|
||||
Db Name Type Definer Modified Created Security_type Comment
|
||||
test mysqltestbug36570_p2 PROCEDURE root@localhost t t DEFINER
|
||||
test mysqltestbug36570_p1 PROCEDURE root@localhost t t DEFINER
|
||||
show create procedure ` mysqltestbug36570_p2`;
|
||||
Procedure sql_mode Create Procedure
|
||||
mysqltestbug36570_p2 CREATE DEFINER=`root`@`localhost` PROCEDURE ` mysqltestbug36570_p2`(/*!50001 a int*/)
|
||||
`label`:
|
||||
begin
|
||||
select a;
|
||||
end
|
||||
show procedure status like '%mysqltestbug36570%';
|
||||
Db Name Type Definer Modified Created Security_type Comment
|
||||
test mysqltestbug36570_p2 PROCEDURE root@localhost t t DEFINER
|
||||
test mysqltestbug36570_p1 PROCEDURE root@localhost t t DEFINER
|
||||
show create procedure ` mysqltestbug36570_p2`;
|
||||
Procedure sql_mode Create Procedure
|
||||
mysqltestbug36570_p2 CREATE DEFINER=`root`@`localhost` PROCEDURE ` mysqltestbug36570_p2`(/*!50001 a int*/)
|
||||
`label`:
|
||||
begin
|
||||
select a;
|
||||
end
|
||||
call ` mysqltestbug36570_p2`(42);
|
||||
a
|
||||
42
|
||||
show function status like '%mysqltestbug36570%';
|
||||
Db Name Type Definer Modified Created Security_type Comment
|
||||
test mysqltestbug36570_f1 FUNCTION root@localhost t t DEFINER
|
||||
flush logs;
|
||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||
DELIMITER /*!*/;
|
||||
ROLLBACK/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
|
||||
SET @@session.sql_mode=0/*!*/;
|
||||
/*!\C latin1 *//*!*/;
|
||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||
drop database if exists mysqltest1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create database mysqltest1
|
||||
/*!*/;
|
||||
use mysqltest1/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create table t1 (a varchar(100))
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
|
||||
begin
|
||||
declare b int;
|
||||
set b = 8;
|
||||
insert into t1 values (b);
|
||||
insert into t1 values (unix_timestamp());
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values ( NAME_CONST('b',8))
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (unix_timestamp())
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`()
|
||||
select * from mysqltest1.t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
alter procedure foo2 contains sql
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop table t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create table t1 (a int)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create table t2 like t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
|
||||
DETERMINISTIC
|
||||
insert into t1 values (15)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t2 values(3);
|
||||
insert into t1 values (5);
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(3)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (15)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(3)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
alter procedure foo4 sql security invoker
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(3)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (5)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t2
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
alter table t2 add unique (a)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop procedure foo4
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo4`()
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t2 values(20),(20);
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(20),(20)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop procedure foo4
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop procedure foo
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop procedure foo2
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop procedure foo3
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||
DETERMINISTIC
|
||||
begin
|
||||
insert into t1 values (x);
|
||||
return x+2;
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete t1,t2 from t1,t2
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
SELECT `mysqltest1`.`fn1`(20)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t2 values(fn1(21))
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop function fn1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`() RETURNS int(11)
|
||||
NO SQL
|
||||
begin
|
||||
return unix_timestamp();
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values(fn1())
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11)
|
||||
NO SQL
|
||||
begin
|
||||
return unix_timestamp();
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS int(11)
|
||||
READS SQL DATA
|
||||
begin
|
||||
return 0;
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t2
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
alter table t2 add unique (a)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop function fn1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||
begin
|
||||
insert into t2 values(x),(x);
|
||||
return 10;
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
SELECT `mysqltest1`.`fn1`(100)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
SELECT `mysqltest1`.`fn1`(20)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (1)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
delete from t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop trigger trg
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 values (1)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
|
||||
READS SQL DATA
|
||||
select * from t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop procedure foo
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop function fn1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop database mysqltest1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop user "zedjzlcsjhd"@127.0.0.1
|
||||
/*!*/;
|
||||
use test/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
READS SQL DATA
|
||||
begin
|
||||
declare var integer;
|
||||
declare c cursor for select a from v1;
|
||||
open c;
|
||||
fetch c into var;
|
||||
close c;
|
||||
return var;
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `a`
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create table t1 (a int)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t1 (a) values (f1())
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop view v1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop function f1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
DROP TABLE IF EXISTS t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE TABLE t1(col VARCHAR(10))
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
|
||||
INSERT INTO t1 VALUES(arg)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test'))
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
DROP PROCEDURE p1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
|
||||
SET @a = 1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
RETURN 0
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
DROP PROCEDURE p1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
DROP FUNCTION f1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop table t1
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop database if exists mysqltest
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop database if exists mysqltest2
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create database mysqltest
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create database mysqltest2
|
||||
/*!*/;
|
||||
use mysqltest2/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
create table t ( t integer )
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`()
|
||||
begin end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
insert into t values ( 1 )
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||
begin
|
||||
insert into t values (1);
|
||||
return 0;
|
||||
end
|
||||
/*!*/;
|
||||
use mysqltest/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
SELECT `mysqltest2`.`f1`()
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop database mysqltest
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
drop database mysqltest2
|
||||
/*!*/;
|
||||
use test/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltestbug36570_p1`()
|
||||
begin
|
||||
select 1;
|
||||
end
|
||||
/*!*/;
|
||||
use mysql/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`.` mysqltestbug36570_p2`(/*!50001 a int*/)
|
||||
`label`:
|
||||
begin
|
||||
select a;
|
||||
end
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
CREATE DEFINER=`root`@`localhost` FUNCTION `test`.`mysqltestbug36570_f1`() RETURNS int(11)
|
||||
DETERMINISTIC
|
||||
begin
|
||||
return 3;
|
||||
end
|
||||
/*!*/;
|
||||
DELIMITER ;
|
||||
# End of log file
|
||||
ROLLBACK /* added by mysqlbinlog */;
|
||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||
use test;
|
||||
drop procedure mysqltestbug36570_p1;
|
||||
drop procedure ` mysqltestbug36570_p2`;
|
||||
drop function mysqltestbug36570_f1;
|
||||
|
@ -35,11 +35,11 @@ drop user 'not_exist_user1'@'fakehost', 'not_exist_user2'@'fakehost';
|
||||
ERROR HY000: Operation DROP USER failed for 'not_exist_user1'@'fakehost','not_exist_user2'@'fakehost'
|
||||
select Host,User from mysql.user where Host='fakehost';
|
||||
Host User
|
||||
show binlog events from 98;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 # use `test`; create user 'foo'@'fakehost'
|
||||
master-bin.000001 189 Query 1 # use `test`; create user 'foo'@'fakehost', 'bar'@'fakehost'
|
||||
master-bin.000001 298 Query 1 # use `test`; rename user 'foo'@'fakehost' to 'foofoo'@'fakehost'
|
||||
master-bin.000001 412 Query 1 # use `test`; rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost'
|
||||
master-bin.000001 579 Query 1 # use `test`; drop user 'foofoo'@'fakehost'
|
||||
master-bin.000001 671 Query 1 # use `test`; drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost'
|
||||
master-bin.000001 # Query # # use `test`; create user 'foo'@'fakehost'
|
||||
master-bin.000001 # Query # # use `test`; create user 'foo'@'fakehost', 'bar'@'fakehost'
|
||||
master-bin.000001 # Query # # use `test`; rename user 'foo'@'fakehost' to 'foofoo'@'fakehost'
|
||||
master-bin.000001 # Query # # use `test`; rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost'
|
||||
master-bin.000001 # Query # # use `test`; drop user 'foofoo'@'fakehost'
|
||||
master-bin.000001 # Query # # use `test`; drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost'
|
||||
|
@ -47,11 +47,11 @@ show binlog events limit 1,100;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query 1 # use `test`; create table t1 (a int)
|
||||
slave-bin.000001 # Query 1 # use `test`; insert into t1 values (1)
|
||||
slave-bin.000001 # Query 1 # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select a from t1
|
||||
slave-bin.000001 # Query 1 # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`a` AS `a` from `test`.`t1`
|
||||
slave-bin.000001 # Query 1 # use `test`; insert into v1 values (2)
|
||||
slave-bin.000001 # Query 1 # use `test`; update v1 set a=3 where a=1
|
||||
slave-bin.000001 # Query 1 # use `test`; delete from v1 where a=2
|
||||
slave-bin.000001 # Query 1 # use `test`; ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select a as b from t1
|
||||
slave-bin.000001 # Query 1 # use `test`; ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`a` AS `b` from `test`.`t1`
|
||||
slave-bin.000001 # Query 1 # use `test`; drop view v1
|
||||
slave-bin.000001 # Query 1 # use `test`; drop table t1
|
||||
|
||||
@ -112,4 +112,18 @@ CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
ERROR 42S01: Table 'v1' already exists
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
# create view as output from mysqldump 10.11 (5.0.62)
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where (`t1`.`a` < 3) */
|
||||
/*!50002 WITH CASCADED CHECK OPTION */;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where (`t1`.`a` < 3) WITH CASCADED CHECK OPTION
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` where (`t1`.`a` < 3) WITH CASCADED CHECK OPTION
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -842,4 +842,32 @@ Pos Instruction
|
||||
21 jump 3
|
||||
drop procedure proc_33618_h;
|
||||
drop procedure proc_33618_c;
|
||||
drop procedure if exists p_20906_a;
|
||||
drop procedure if exists p_20906_b;
|
||||
create procedure p_20906_a() SET @a=@a+1, @b=@b+1;
|
||||
show procedure code p_20906_a;
|
||||
Pos Instruction
|
||||
0 stmt 32 "SET @a=@a+1"
|
||||
1 stmt 32 "SET @b=@b+1"
|
||||
set @a=1;
|
||||
set @b=1;
|
||||
call p_20906_a();
|
||||
select @a, @b;
|
||||
@a @b
|
||||
2 2
|
||||
create procedure p_20906_b() SET @a=@a+1, @b=@b+1, @c=@c+1;
|
||||
show procedure code p_20906_b;
|
||||
Pos Instruction
|
||||
0 stmt 32 "SET @a=@a+1"
|
||||
1 stmt 32 "SET @b=@b+1"
|
||||
2 stmt 32 "SET @c=@c+1"
|
||||
set @a=1;
|
||||
set @b=1;
|
||||
set @c=1;
|
||||
call p_20906_b();
|
||||
select @a, @b, @c;
|
||||
@a @b @c
|
||||
2 2 2
|
||||
drop procedure p_20906_a;
|
||||
drop procedure p_20906_b;
|
||||
End of 5.0 tests.
|
||||
|
@ -934,8 +934,6 @@ NULL NULL
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6));
|
||||
INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'col1' at row 3
|
||||
INSERT INTO t1 (col1) VALUES ('hellobob');
|
||||
ERROR 22001: Data too long for column 'col1' at row 1
|
||||
INSERT INTO t1 (col2) VALUES ('hellobob');
|
||||
|
@ -4374,4 +4374,26 @@ a4 f3 a6
|
||||
1 NULL NULL
|
||||
2 NULL NULL
|
||||
DROP TABLE t1, t2, t3, t4;
|
||||
create table t1 (a float(5,4) zerofill);
|
||||
create table t2 (a float(5,4),b float(2,0));
|
||||
select t1.a from t1 where
|
||||
t1.a= (select b from t2 limit 1) and not
|
||||
t1.a= (select a from t2 limit 1) ;
|
||||
a
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,<exists>(select 1 AS `1` from `test`.`t1` group by `test`.`t1`.`a` having (<cache>(1) = <ref_null_helper>(1))))
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 WHERE a > 3 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,<exists>(select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a` having (<cache>(1) = <ref_null_helper>(1))))
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests.
|
||||
|
@ -758,5 +758,25 @@ EXPLAIN SELECT a FROM t1 WHERE a NOT IN (SELECT a FROM t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
2 DEPENDENT SUBQUERY t2 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES(1);
|
||||
CREATE TABLE t2 (placeholder CHAR(11));
|
||||
INSERT INTO t2 VALUES("placeholder");
|
||||
SELECT ROW(1, 2) IN (SELECT t1.a, 2) FROM t1 GROUP BY t1.a;
|
||||
ROW(1, 2) IN (SELECT t1.a, 2)
|
||||
1
|
||||
SELECT ROW(1, 2) IN (SELECT t1.a, 2 FROM t2) FROM t1 GROUP BY t1.a;
|
||||
ROW(1, 2) IN (SELECT t1.a, 2 FROM t2)
|
||||
1
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
SELECT 1 FROM t1 WHERE t1.a NOT IN (SELECT 1 FROM t1, t2 WHERE 0);
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
|
@ -125,7 +125,6 @@ create table t1 (c char(2), vc varchar(2));
|
||||
insert into t1 values(0x4120, 0x4120);
|
||||
insert into t1 values(0x412020, 0x412020);
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c' at row 1
|
||||
Note 1265 Data truncated for column 'vc' at row 1
|
||||
drop table t1;
|
||||
set @old_sql_mode= @@sql_mode, sql_mode= 'traditional';
|
||||
|
@ -821,4 +821,156 @@ LENGTH(c) CHAR_LENGTH(c)
|
||||
65535 65535
|
||||
65535 65535
|
||||
DROP TABLE t;
|
||||
drop table if exists b15776;
|
||||
create table b15776 (data blob(2147483647));
|
||||
drop table b15776;
|
||||
create table b15776 (data blob(-1));
|
||||
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 '-1))' at line 1
|
||||
create table b15776 (data blob(2147483648));
|
||||
drop table b15776;
|
||||
create table b15776 (data blob(4294967294));
|
||||
drop table b15776;
|
||||
create table b15776 (data blob(4294967295));
|
||||
drop table b15776;
|
||||
create table b15776 (data blob(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'data' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a blob(2147483647), b blob(2147483648), c blob(4294967295), a1 text(2147483647), b1 text(2147483648), c1 text(4294967295) );
|
||||
show columns from b15776;
|
||||
Field Type Null Key Default Extra
|
||||
a longblob YES NULL
|
||||
b longblob YES NULL
|
||||
c longblob YES NULL
|
||||
a1 longtext YES NULL
|
||||
b1 longtext YES NULL
|
||||
c1 longtext YES NULL
|
||||
drop table b15776;
|
||||
CREATE TABLE b15776 (a blob(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a text(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a blob(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a text(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a int(0));
|
||||
INSERT INTO b15776 values (NULL), (1), (42), (654);
|
||||
SELECT * from b15776 ORDER BY a;
|
||||
a
|
||||
NULL
|
||||
1
|
||||
42
|
||||
654
|
||||
DROP TABLE b15776;
|
||||
CREATE TABLE b15776 (a int(-1));
|
||||
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 '-1))' at line 1
|
||||
CREATE TABLE b15776 (a int(255));
|
||||
DROP TABLE b15776;
|
||||
CREATE TABLE b15776 (a int(256));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 255)
|
||||
CREATE TABLE b15776 (data blob(-1));
|
||||
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 '-1))' at line 1
|
||||
CREATE TABLE b15776 (a char(2147483647));
|
||||
ERROR 42000: Column length too big for column 'a' (max = 255); use BLOB or TEXT instead
|
||||
CREATE TABLE b15776 (a char(2147483648));
|
||||
ERROR 42000: Column length too big for column 'a' (max = 255); use BLOB or TEXT instead
|
||||
CREATE TABLE b15776 (a char(4294967295));
|
||||
ERROR 42000: Column length too big for column 'a' (max = 255); use BLOB or TEXT instead
|
||||
CREATE TABLE b15776 (a char(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a year(4294967295));
|
||||
INSERT INTO b15776 VALUES (42);
|
||||
SELECT * FROM b15776;
|
||||
a
|
||||
2042
|
||||
DROP TABLE b15776;
|
||||
CREATE TABLE b15776 (a year(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a year(0));
|
||||
DROP TABLE b15776;
|
||||
CREATE TABLE b15776 (a year(-2));
|
||||
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 '-2))' at line 1
|
||||
CREATE TABLE b15776 (a timestamp(4294967294));
|
||||
Warnings:
|
||||
Warning 1287 'TIMESTAMP(4294967294)' is deprecated; use 'TIMESTAMP' instead
|
||||
DROP TABLE b15776;
|
||||
CREATE TABLE b15776 (a timestamp(4294967295));
|
||||
Warnings:
|
||||
Warning 1287 'TIMESTAMP(4294967295)' is deprecated; use 'TIMESTAMP' instead
|
||||
DROP TABLE b15776;
|
||||
CREATE TABLE b15776 (a timestamp(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a timestamp(-1));
|
||||
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 '-1))' at line 1
|
||||
CREATE TABLE b15776 (a timestamp(-2));
|
||||
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 '-2))' at line 1
|
||||
CREATE TABLE b15776 (a int(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a year(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 (a timestamp(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||
CREATE TABLE b15776 select cast(null as char(4294967295));
|
||||
show columns from b15776;
|
||||
Field Type Null Key Default Extra
|
||||
cast(null as char(4294967295)) char(0) YES NULL
|
||||
drop table b15776;
|
||||
CREATE TABLE b15776 select cast(null as nchar(4294967295));
|
||||
show columns from b15776;
|
||||
Field Type Null Key Default Extra
|
||||
cast(null as nchar(4294967295)) char(0) YES NULL
|
||||
drop table b15776;
|
||||
CREATE TABLE b15776 select cast(null as binary(4294967295));
|
||||
show columns from b15776;
|
||||
Field Type Null Key Default Extra
|
||||
cast(null as binary(4294967295)) binary(0) YES NULL
|
||||
drop table b15776;
|
||||
explain select cast(1 as char(4294967295));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
explain select cast(1 as nchar(4294967295));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
explain select cast(1 as binary(4294967295));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
explain select cast(1 as char(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
explain select cast(1 as nchar(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
explain select cast(1 as binary(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
explain select cast(1 as decimal(-1));
|
||||
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 '-1))' at line 1
|
||||
explain select cast(1 as decimal(64, 30));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
explain select cast(1 as decimal(64, 999999999999999999999999999999));
|
||||
Got one of the listed errors
|
||||
explain select cast(1 as decimal(4294967296));
|
||||
Got one of the listed errors
|
||||
explain select cast(1 as decimal(999999999999999999999999999999999999));
|
||||
Got one of the listed errors
|
||||
explain select convert(1, char(4294967295));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
explain select convert(1, char(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
explain select convert(1, char(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
explain select convert(1, nchar(4294967295));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
explain select convert(1, nchar(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
explain select convert(1, nchar(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
explain select convert(1, binary(4294967295));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
explain select convert(1, binary(4294967296));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
explain select convert(1, binary(999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999));
|
||||
ERROR 42000: Display width out of range for column 'cast as char' (max = 4294967295)
|
||||
End of 5.0 tests
|
||||
|
@ -946,4 +946,11 @@ SELECT ROUND(20061108085411.000002);
|
||||
ROUND(20061108085411.000002)
|
||||
20061108085411
|
||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
||||
create table t1(`c` decimal(9,2));
|
||||
insert into t1 values (300),(201.11);
|
||||
select max(case 1 when 1 then c else null end) from t1 group by c;
|
||||
max(case 1 when 1 then c else null end)
|
||||
201.11
|
||||
300.00
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
@ -3659,6 +3659,24 @@ DROP TABLE t1;
|
||||
|
||||
# -- End of test case for Bug#34337.
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# -- Bug#35193: VIEW query is rewritten without "FROM DUAL",
|
||||
# -- causing syntax error
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
CREATE VIEW v1 AS SELECT 1 FROM DUAL WHERE 1;
|
||||
|
||||
SELECT * FROM v1;
|
||||
1
|
||||
1
|
||||
SHOW CREATE TABLE v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` from DUAL where 1
|
||||
|
||||
DROP VIEW v1;
|
||||
|
||||
# -- End of test case for Bug#35193.
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# -- End of 5.0 tests.
|
||||
# -----------------------------------------------------------------
|
||||
|
@ -305,7 +305,6 @@ set @q = repeat('q', 256);
|
||||
set sql_mode = '';
|
||||
insert into t1 values(@c, @c, @c);
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c_char' at row 1
|
||||
Note 1265 Data truncated for column 'c_varchar' at row 1
|
||||
Note 1265 Data truncated for column 'c_tinytext' at row 1
|
||||
insert into t2 values(@c);
|
||||
@ -322,7 +321,6 @@ Warning 1265 Data truncated for column 'c_tinyblob' at row 1
|
||||
set sql_mode = 'traditional';
|
||||
insert into t1 values(@c, @c, @c);
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'c_char' at row 1
|
||||
Note 1265 Data truncated for column 'c_varchar' at row 1
|
||||
Note 1265 Data truncated for column 'c_tinytext' at row 1
|
||||
insert into t2 values(@c);
|
||||
|
3
mysql-test/std_data/bug35469.dat
Normal file
3
mysql-test/std_data/bug35469.dat
Normal file
@ -0,0 +1,3 @@
|
||||
"1", "string1"
|
||||
"2", "string2"
|
||||
"3", "string3"
|
BIN
mysql-test/std_data/bug36055.MYD
Normal file
BIN
mysql-test/std_data/bug36055.MYD
Normal file
Binary file not shown.
BIN
mysql-test/std_data/bug36055.MYI
Normal file
BIN
mysql-test/std_data/bug36055.MYI
Normal file
Binary file not shown.
BIN
mysql-test/std_data/bug36055.frm
Normal file
BIN
mysql-test/std_data/bug36055.frm
Normal file
Binary file not shown.
1
mysql-test/std_data/funcs_1/load_file.txt
Normal file
1
mysql-test/std_data/funcs_1/load_file.txt
Normal file
@ -0,0 +1 @@
|
||||
Here is content from load_file
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user