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-cxx \
|
||||||
compile-alpha-debug \
|
compile-alpha-debug \
|
||||||
compile-amd64-debug-max \
|
compile-amd64-debug-max \
|
||||||
|
compile-amd64-gcov \
|
||||||
|
compile-amd64-gprof \
|
||||||
compile-amd64-max \
|
compile-amd64-max \
|
||||||
compile-amd64-max-sci \
|
compile-amd64-max-sci \
|
||||||
compile-darwin-mwcc \
|
compile-darwin-mwcc \
|
||||||
@ -54,6 +56,8 @@ EXTRA_DIST = FINISH.sh \
|
|||||||
compile-pentium-valgrind-max \
|
compile-pentium-valgrind-max \
|
||||||
compile-pentium64-debug \
|
compile-pentium64-debug \
|
||||||
compile-pentium64-debug-max \
|
compile-pentium64-debug-max \
|
||||||
|
compile-pentium64-gcov \
|
||||||
|
compile-pentium64-gprof \
|
||||||
compile-pentium64-max-sci \
|
compile-pentium64-max-sci \
|
||||||
compile-pentium64-valgrind-max \
|
compile-pentium64-valgrind-max \
|
||||||
compile-ppc \
|
compile-ppc \
|
||||||
@ -61,6 +65,10 @@ EXTRA_DIST = FINISH.sh \
|
|||||||
compile-ppc-debug-max \
|
compile-ppc-debug-max \
|
||||||
compile-ppc-debug-max-no-ndb \
|
compile-ppc-debug-max-no-ndb \
|
||||||
compile-ppc-max \
|
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 \
|
||||||
compile-solaris-sparc-debug \
|
compile-solaris-sparc-debug \
|
||||||
compile-solaris-sparc-forte \
|
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_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DDBUG_OFF")
|
||||||
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -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")
|
IF(CMAKE_GENERATOR MATCHES "Visual Studio 8")
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996")
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996")
|
||||||
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996")
|
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996")
|
||||||
|
@ -154,7 +154,7 @@ test-bt:
|
|||||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||||
@PERL@ ./mysql-test-run.pl --force --comment=ps --ps-protocol
|
@PERL@ ./mysql-test-run.pl --force --comment=ps --ps-protocol
|
||||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
-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 \
|
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||||
@PERL@ ./mysql-test-run.pl --force --comment=funcs2 --suite=funcs_2
|
@PERL@ ./mysql-test-run.pl --force --comment=funcs2 --suite=funcs_2
|
||||||
-if [ -d mysql-test/suite/nist ] ; then \
|
-if [ -d mysql-test/suite/nist ] ; then \
|
||||||
@ -179,7 +179,7 @@ test-force-full-pl: test-force-full
|
|||||||
|
|
||||||
test-ext-funcs:
|
test-ext-funcs:
|
||||||
cd mysql-test ; \
|
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
|
@PERL@ ./mysql-test-run.pl --force --suite=funcs_2
|
||||||
|
|
||||||
test-ext: test-ext-funcs
|
test-ext: test-ext-funcs
|
||||||
|
@ -1216,21 +1216,35 @@ sig_handler mysql_sigint(int sig)
|
|||||||
char kill_buffer[40];
|
char kill_buffer[40];
|
||||||
MYSQL *kill_mysql= NULL;
|
MYSQL *kill_mysql= NULL;
|
||||||
|
|
||||||
signal(SIGINT, mysql_sigint);
|
|
||||||
|
|
||||||
/* terminate if no query being executed, or we already tried interrupting */
|
/* terminate if no query being executed, or we already tried interrupting */
|
||||||
if (!executing_query || interrupted_query++)
|
if (!executing_query || interrupted_query++)
|
||||||
mysql_end(sig);
|
goto err;
|
||||||
|
|
||||||
kill_mysql= mysql_init(kill_mysql);
|
kill_mysql= mysql_init(kill_mysql);
|
||||||
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
|
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
|
||||||
"", opt_mysql_port, opt_mysql_unix_port,0))
|
"", 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 */
|
/* kill_buffer is always big enough because max length of %lu is 15 */
|
||||||
sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
|
sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
|
||||||
mysql_real_query(kill_mysql, kill_buffer, strlen(kill_buffer));
|
mysql_real_query(kill_mysql, kill_buffer, strlen(kill_buffer));
|
||||||
mysql_close(kill_mysql);
|
mysql_close(kill_mysql);
|
||||||
tee_fprintf(stdout, "Query aborted by Ctrl+C\n");
|
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)
|
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));
|
my_free(current_prompt,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
mysql_server_end();
|
mysql_server_end();
|
||||||
free_defaults(defaults_argv);
|
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);
|
exit(status.exit_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1765,7 +1779,7 @@ static int read_and_execute(bool interactive)
|
|||||||
the very beginning of a text file when
|
the very beginning of a text file when
|
||||||
you save the file using "Unicode UTF-8" format.
|
you save the file using "Unicode UTF-8" format.
|
||||||
*/
|
*/
|
||||||
if (!line_number &&
|
if (line && !line_number &&
|
||||||
(uchar) line[0] == 0xEF &&
|
(uchar) line[0] == 0xEF &&
|
||||||
(uchar) line[1] == 0xBB &&
|
(uchar) line[1] == 0xBB &&
|
||||||
(uchar) line[2] == 0xBF)
|
(uchar) line[2] == 0xBF)
|
||||||
@ -2067,37 +2081,6 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
|||||||
continue;
|
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))
|
else if (!*ml_comment && !*in_string && is_prefix(pos, delimiter))
|
||||||
{
|
{
|
||||||
// Found a statement. Continue parsing after the 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 == '#' ||
|
else if (!*ml_comment && (!*in_string && (inchar == '#' ||
|
||||||
inchar == '-' && pos[1] == '-' &&
|
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
|
// Flush previously accepted characters
|
||||||
if (out != line)
|
if (out != line)
|
||||||
|
@ -40,6 +40,8 @@ static DYNAMIC_STRING ds_args;
|
|||||||
static char *opt_password= 0;
|
static char *opt_password= 0;
|
||||||
static my_bool tty_password= 0;
|
static my_bool tty_password= 0;
|
||||||
|
|
||||||
|
static char opt_tmpdir[FN_REFLEN];
|
||||||
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
static char *default_dbug_option= (char*) "d:t:O,/tmp/mysql_upgrade.trace";
|
static char *default_dbug_option= (char*) "d:t:O,/tmp/mysql_upgrade.trace";
|
||||||
#endif
|
#endif
|
||||||
@ -105,6 +107,8 @@ static struct my_option my_long_options[]=
|
|||||||
#endif
|
#endif
|
||||||
{"socket", 'S', "Socket file to use for connection.",
|
{"socket", 'S', "Socket file to use for connection.",
|
||||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
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,
|
{"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},
|
(gptr*) &opt_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#include <sslopt-longopts.h>
|
#include <sslopt-longopts.h>
|
||||||
@ -229,6 +233,11 @@ get_one_option(int optid, const struct my_option *opt,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
strnmov(opt_tmpdir, argument, sizeof(opt_tmpdir));
|
||||||
|
add_option= FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'b': /* --basedir */
|
case 'b': /* --basedir */
|
||||||
case 'v': /* --verbose */
|
case 'v': /* --verbose */
|
||||||
case 'd': /* --datadir */
|
case 'd': /* --datadir */
|
||||||
@ -449,7 +458,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
|
|||||||
char query_file_path[FN_REFLEN];
|
char query_file_path[FN_REFLEN];
|
||||||
DBUG_ENTER("run_query");
|
DBUG_ENTER("run_query");
|
||||||
DBUG_PRINT("enter", ("query: %s", 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,
|
"sql", O_CREAT | O_SHARE | O_RDWR,
|
||||||
MYF(MY_WME))) < 0)
|
MYF(MY_WME))) < 0)
|
||||||
die("Failed to create temporary file for defaults");
|
die("Failed to create temporary file for defaults");
|
||||||
|
@ -1474,7 +1474,7 @@ int main(int argc, char** argv)
|
|||||||
DBUG_ENTER("main");
|
DBUG_ENTER("main");
|
||||||
DBUG_PROCESS(argv[0]);
|
DBUG_PROCESS(argv[0]);
|
||||||
|
|
||||||
init_time(); // for time functions
|
my_init_time(); // for time functions
|
||||||
|
|
||||||
parse_args(&argc, (char***)&argv);
|
parse_args(&argc, (char***)&argv);
|
||||||
defaults_argv=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;
|
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*/
|
#else /*EMBEDDED_LIBRARY*/
|
||||||
|
|
||||||
#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len)
|
#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_ENTER("dyn_string_cmp");
|
||||||
DBUG_PRINT("enter", ("fname: %s", fname));
|
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,
|
"tmp", O_CREAT | O_SHARE | O_RDWR,
|
||||||
MYF(MY_WME))) < 0)
|
MYF(MY_WME))) < 0)
|
||||||
die("Failed to create temporary file for ds");
|
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;
|
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)
|
if (con->stmt)
|
||||||
mysql_stmt_close(con->stmt);
|
mysql_stmt_close(con->stmt);
|
||||||
con->stmt= 0;
|
con->stmt= 0;
|
||||||
@ -4361,6 +4379,9 @@ void do_connect(struct st_command *command)
|
|||||||
(int) (sizeof(connections)/sizeof(struct st_connection)));
|
(int) (sizeof(connections)/sizeof(struct st_connection)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef EMBEDDED_LIBRARY
|
||||||
|
con_slot->query_done= 1;
|
||||||
|
#endif
|
||||||
if (!mysql_init(&con_slot->mysql))
|
if (!mysql_init(&con_slot->mysql))
|
||||||
die("Failed on mysql_init()");
|
die("Failed on mysql_init()");
|
||||||
if (opt_compress || con_compress)
|
if (opt_compress || con_compress)
|
||||||
@ -5443,6 +5464,7 @@ void init_win_path_patterns()
|
|||||||
const char* paths[] = { "$MYSQL_TEST_DIR",
|
const char* paths[] = { "$MYSQL_TEST_DIR",
|
||||||
"$MYSQL_TMP_DIR",
|
"$MYSQL_TMP_DIR",
|
||||||
"$MYSQLTEST_VARDIR",
|
"$MYSQLTEST_VARDIR",
|
||||||
|
"$MASTER_MYSOCK",
|
||||||
"./test/" };
|
"./test/" };
|
||||||
int num_paths= sizeof(paths)/sizeof(char*);
|
int num_paths= sizeof(paths)/sizeof(char*);
|
||||||
int i;
|
int i;
|
||||||
@ -5848,16 +5870,11 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
|
|||||||
}
|
}
|
||||||
#ifdef EMBEDDED_LIBRARY
|
#ifdef EMBEDDED_LIBRARY
|
||||||
/*
|
/*
|
||||||
Here we handle 'reap' command, so we need to check if the
|
Here we handle 'reap' command, so we need to check if the
|
||||||
query's thread was finished and probably wait
|
query's thread was finished and probably wait
|
||||||
*/
|
*/
|
||||||
else if (flags & QUERY_REAP_FLAG)
|
else if (flags & QUERY_REAP_FLAG)
|
||||||
{
|
wait_query_thread_end(cn);
|
||||||
pthread_mutex_lock(&cn->mutex);
|
|
||||||
while (!cn->query_done)
|
|
||||||
pthread_cond_wait(&cn->cond, &cn->mutex);
|
|
||||||
pthread_mutex_unlock(&cn->mutex);
|
|
||||||
}
|
|
||||||
#endif /*EMBEDDED_LIBRARY*/
|
#endif /*EMBEDDED_LIBRARY*/
|
||||||
if (!(flags & QUERY_REAP_FLAG))
|
if (!(flags & QUERY_REAP_FLAG))
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
|
|||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
# The Docs Makefile.am parses this line!
|
# The Docs Makefile.am parses this line!
|
||||||
# remember to also change ndb version below and update version.c in ndb
|
# 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])
|
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
||||||
|
|
||||||
PROTOCOL_VERSION=10
|
PROTOCOL_VERSION=10
|
||||||
@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
|
|||||||
# ndb version
|
# ndb version
|
||||||
NDB_VERSION_MAJOR=5
|
NDB_VERSION_MAJOR=5
|
||||||
NDB_VERSION_MINOR=0
|
NDB_VERSION_MINOR=0
|
||||||
NDB_VERSION_BUILD=60
|
NDB_VERSION_BUILD=68
|
||||||
NDB_VERSION_STATUS=""
|
NDB_VERSION_STATUS=""
|
||||||
|
|
||||||
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
# 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"
|
if test "$with_debug" = "yes"
|
||||||
then
|
then
|
||||||
# Medium debug.
|
# Medium debug.
|
||||||
|
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||||
CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DDBUG_ON -DSAFE_MUTEX $CFLAGS"
|
CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DDBUG_ON -DSAFE_MUTEX $CFLAGS"
|
||||||
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DDBUG_ON -DSAFE_MUTEX $CXXFLAGS"
|
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DDBUG_ON -DSAFE_MUTEX $CXXFLAGS"
|
||||||
elif test "$with_debug" = "full"
|
elif test "$with_debug" = "full"
|
||||||
then
|
then
|
||||||
# Full debug. Very slow in some cases
|
# Full debug. Very slow in some cases
|
||||||
|
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||||
CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
|
CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
|
||||||
CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
|
CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
|
||||||
else
|
else
|
||||||
# Optimized version. No debug
|
# Optimized version. No debug
|
||||||
|
AC_DEFINE([DBUG_OFF], [1], [Don't use libdbug])
|
||||||
CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS"
|
CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS"
|
||||||
CXXFLAGS="$OPTIMIZE_CXXFLAGS -DDBUG_OFF $CXXFLAGS"
|
CXXFLAGS="$OPTIMIZE_CXXFLAGS -DDBUG_OFF $CXXFLAGS"
|
||||||
fi
|
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 */
|
#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>
|
#include <my_global.h>
|
||||||
|
|
||||||
@ -15,3 +22,6 @@ register int value)
|
|||||||
DBUG_PRINT ("result", ("result is %d", value));
|
DBUG_PRINT ("result", ("result is %d", value));
|
||||||
DBUG_RETURN (value);
|
DBUG_RETURN (value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
297
dbug/user.r
297
dbug/user.r
@ -672,52 +672,26 @@ from the standard include directory.
|
|||||||
.SP 2
|
.SP 2
|
||||||
.BL 20
|
.BL 20
|
||||||
.LI DBUG_ENTER\
|
.LI DBUG_ENTER\
|
||||||
Used to tell the runtime support module the name of the function
|
Used to tell the runtime support module the name of the function being
|
||||||
being entered.
|
entered. The argument must be of type "pointer to character". The
|
||||||
The argument must be of type "pointer to character".
|
DBUG_ENTER macro must precede all executable lines in the function
|
||||||
The
|
just entered, and must come after all local declarations. Each
|
||||||
DBUG_ENTER
|
DBUG_ENTER macro must have a matching DBUG_RETURN or DBUG_VOID_RETURN
|
||||||
macro must precede all executable lines in the
|
macro at the function exit points. DBUG_ENTER macros used without a
|
||||||
function just entered, and must come after all local declarations.
|
matching DBUG_RETURN or DBUG_VOID_RETURN macro will cause warning
|
||||||
Each
|
messages from the
|
||||||
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
|
.I dbug
|
||||||
package runtime support module.
|
package runtime support module.
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_ENTER\ ("main");\fR
|
EX:\ \fCDBUG_ENTER\ ("main");\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_RETURN\
|
.LI DBUG_RETURN\
|
||||||
Used at each exit point of a function containing a
|
Used at each exit point of a function containing a DBUG_ENTER macro at
|
||||||
DBUG_ENTER
|
the entry point. The argument is the value to return. Functions
|
||||||
macro
|
which return no value (void) should use the DBUG_VOID_RETURN macro.
|
||||||
at the entry point.
|
It is an error to have a DBUG_RETURN or DBUG_VOID_RETURN macro in a
|
||||||
The argument is the value to return.
|
function which has no matching DBUG_ENTER macro, and the compiler will
|
||||||
Functions which return no value (void) should use the
|
complain if the macros are actually used (expanded).
|
||||||
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
|
.SP 1
|
||||||
EX:\ \fCDBUG_RETURN\ (value);\fR
|
EX:\ \fCDBUG_RETURN\ (value);\fR
|
||||||
.br
|
.br
|
||||||
@ -727,24 +701,20 @@ EX:\ \fCDBUG_VOID_RETURN;\fR
|
|||||||
Used to name the current process being executed.
|
Used to name the current process being executed.
|
||||||
A typical argument for this macro is "argv[0]", though
|
A typical argument for this macro is "argv[0]", though
|
||||||
it will be perfectly happy with any other string.
|
it will be perfectly happy with any other string.
|
||||||
|
Im multi-threaded environment threads may have different names.
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_PROCESS\ (argv[0]);\fR
|
EX:\ \fCDBUG_PROCESS\ (argv[0]);\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_PUSH\
|
.LI DBUG_PUSH\
|
||||||
Sets a new debugger state by pushing the current
|
Sets a new debugger state by pushing the current
|
||||||
.B dbug
|
.B dbug
|
||||||
state onto an
|
state onto an internal stack and setting up the new state using the
|
||||||
internal stack and setting up the new state using the debug control
|
debug control string passed as the macro argument. The most common
|
||||||
string passed as the macro argument.
|
usage is to set the state specified by a debug control string
|
||||||
The most common usage is to set the state specified by a debug
|
retrieved from the argument list. If the control string is
|
||||||
control string retrieved from the argument list.
|
.I incremental,
|
||||||
Note that the leading "-#" in a debug control string specified
|
the new state is a copy of the old state, modified by the control
|
||||||
as a command line argument must
|
string.
|
||||||
.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.
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_PUSH\ (\&(argv[i][2]));\fR
|
EX:\ \fCDBUG_PUSH\ (\&(argv[i][2]));\fR
|
||||||
.br
|
.br
|
||||||
@ -755,32 +725,38 @@ EX:\ \fCDBUG_PUSH\ ("");\fR
|
|||||||
.LI DBUG_POP\
|
.LI DBUG_POP\
|
||||||
Restores the previous debugger state by popping the state stack.
|
Restores the previous debugger state by popping the state stack.
|
||||||
Attempting to pop more states than pushed will be ignored and no
|
Attempting to pop more states than pushed will be ignored and no
|
||||||
warning will be given.
|
warning will be given. The DBUG_POP macro has no arguments.
|
||||||
The
|
|
||||||
DBUG_POP
|
|
||||||
macro has no arguments.
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_POP\ ();\fR
|
EX:\ \fCDBUG_POP\ ();\fR
|
||||||
.SP 1
|
.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\
|
.LI DBUG_FILE\
|
||||||
The
|
The DBUG_FILE macro is used to do explicit I/O on the debug output
|
||||||
DBUG_FILE
|
stream. It is used in the same manner as the symbols "stdout" and
|
||||||
macro is used to do explicit I/O on the debug output
|
"stderr" in the standard I/O package.
|
||||||
stream.
|
|
||||||
It is used in the same manner as the symbols "stdout" and "stderr"
|
|
||||||
in the standard I/O package.
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCfprintf\ (DBUG_FILE,\ "Doing\ my\ own\ I/O!\\n");\fR
|
EX:\ \fCfprintf\ (DBUG_FILE,\ "Doing\ my\ own\ I/O!\\n");\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_EXECUTE\
|
.LI DBUG_EXECUTE\
|
||||||
The DBUG_EXECUTE macro is used to execute any arbitrary C code.
|
The DBUG_EXECUTE macro is used to execute any arbitrary C code. The
|
||||||
The first argument is the debug keyword, used to trigger execution
|
first argument is the debug keyword, used to trigger execution of the
|
||||||
of the code specified as the second argument.
|
code specified as the second argument. This macro must be used
|
||||||
This macro must be used cautiously because, like the
|
cautiously because, like the DBUG_PRINT macro, it is automatically
|
||||||
DBUG_PRINT
|
selected by default whenever the 'd' flag has no argument list (i.e.,
|
||||||
macro,
|
a "-#d:t" control string).
|
||||||
it is automatically selected by default whenever the 'd' flag has
|
|
||||||
no argument list (i.e., a "-#d:t" control string).
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_EXECUTE\ ("status",\ print_status\ ());\fR
|
EX:\ \fCDBUG_EXECUTE\ ("status",\ print_status\ ());\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
@ -794,17 +770,40 @@ artificial delay checking for race conditions.
|
|||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_EXECUTE_IF\ ("crashme",\ abort\ ());\fR
|
EX:\ \fCDBUG_EXECUTE_IF\ ("crashme",\ abort\ ());\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_N\
|
.LI DBUG_EVALUATE\
|
||||||
These macros, where N is in the range 2-5, are currently obsolete
|
The DBUG_EVALUATE macro is similar to DBUG_EXECUTE, but it can be used in
|
||||||
and will be removed in a future release.
|
the expression context. The first argument is the debug keyword that is used to
|
||||||
Use the new DBUG_PRINT macro.
|
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\
|
.LI DBUG_PRINT\
|
||||||
Used to do printing via the "fprintf" library function on the
|
Used to do printing via the "fprintf" library function on the current
|
||||||
current debug stream,
|
debug stream, DBUG_FILE. The first argument is a debug keyword, the
|
||||||
DBUG_FILE.
|
second is a format string and the corresponding argument list. Note
|
||||||
The first argument is a debug keyword, the second is a format string
|
that the format string and argument list are all one macro argument
|
||||||
and the corresponding argument list.
|
|
||||||
Note that the format string and argument list are all one macro argument
|
|
||||||
and
|
and
|
||||||
.B must
|
.B must
|
||||||
be enclosed in parentheses.
|
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
|
EX:\ \fCDBUG_PRINT\ ("stp",\ ("%x\ ->\ %s", stp, stp\ ->\ name));\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_DUMP\
|
.LI DBUG_DUMP\
|
||||||
Used to dump a memory block in hex via the "fprintf" library function on the
|
Used to dump a memory block in hex via the "fprintf" library function
|
||||||
current debug stream, DBUG_FILE.
|
on the current debug stream, DBUG_FILE. The first argument is a debug
|
||||||
The first argument is a debug keyword, the second is a pointer to
|
keyword, the second is a pointer to a memory to dump, the third is a
|
||||||
a memory to dump, the third is a number of bytes to dump.
|
number of bytes to dump.
|
||||||
.SP 1
|
.SP 1
|
||||||
EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR
|
EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
@ -875,13 +874,28 @@ library. So there will be no need to disable asserts separately with NDEBUG.
|
|||||||
.SP 1
|
.SP 1
|
||||||
EX:\ \fCDBUG_ASSERT(\ a\ >\ 0\ );\fR
|
EX:\ \fCDBUG_ASSERT(\ a\ >\ 0\ );\fR
|
||||||
.SP 1
|
.SP 1
|
||||||
.LI DBUG_OUTPUT\
|
.LI DBUG_EXPLAIN\
|
||||||
In multi-threaded environment disables (or enables) any
|
Generates control string corresponding to the current debug state.
|
||||||
.I dbug
|
The macro takes two arguments - a buffer to store the result string
|
||||||
output from the current thread.
|
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
|
.SP 1
|
||||||
EX:\ \fCDBUG_OUTPUT(\ 0\ );\fR
|
EX:\fC
|
||||||
|
.br
|
||||||
|
char buf[256];
|
||||||
|
.br
|
||||||
|
DBUG_EXPLAIN( buf, sizeof(buf) );\fR
|
||||||
.SP 1
|
.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
|
.LE
|
||||||
|
|
||||||
.SK
|
.SK
|
||||||
@ -893,42 +907,51 @@ DEBUG CONTROL STRING
|
|||||||
The debug control string is used to set the state of the debugger
|
The debug control string is used to set the state of the debugger
|
||||||
via the
|
via the
|
||||||
.B DBUG_PUSH
|
.B DBUG_PUSH
|
||||||
macro.
|
or
|
||||||
This section summarizes the currently available debugger options
|
.B DBUG_SET
|
||||||
and the flag characters which enable or disable them.
|
macros. Control string consists of colon separate flags. Colons
|
||||||
Argument lists enclosed in '[' and ']' are optional.
|
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
|
.SP 2
|
||||||
.BL 22
|
.BL 22
|
||||||
.LI a[,file]
|
.LI a[,file]
|
||||||
Redirect the debugger output stream and append it to the specified file.
|
Redirect the debugger output stream and append it to the specified
|
||||||
The default output stream is stderr.
|
file. The default output stream is stderr. A null argument list
|
||||||
A null argument list causes output to be redirected to stdout.
|
causes output to be redirected to stdout.
|
||||||
Double the colon, if you want it in the path
|
|
||||||
.SP 1
|
.SP 1
|
||||||
EX: \fCa,C::\\tmp\\log\fR
|
EX: \fCa,C:\\tmp\\log\fR
|
||||||
.LI A[,file]
|
.LI A[,file]
|
||||||
Like 'a[,file]' but ensure that data are written after each write
|
Like 'a[,file]' but ensure that data are written after each write
|
||||||
(this typically implies flush or close/reopen). It helps to get
|
(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.
|
multi-threaded environment.
|
||||||
.LI d[,keywords]
|
.LI d[,keywords]
|
||||||
Enable output from macros with specified 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]
|
.LI D[,time]
|
||||||
Delay for specified time after each output line, to let output drain.
|
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).
|
Time is given in tenths of a second (value of 10 is one second).
|
||||||
Default is zero.
|
Default is zero.
|
||||||
.LI f[,functions]
|
.LI f[,functions]
|
||||||
Limit debugger actions to the specified list of 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
|
.LI F
|
||||||
Mark each debugger output line with the name of the source file
|
Mark each debugger output line with the name of the source file
|
||||||
containing the macro causing the output.
|
containing the macro causing the output.
|
||||||
.LI i
|
.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]
|
.LI g,[functions]
|
||||||
Enable profiling for the specified list of 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
|
See
|
||||||
.B PROFILING\ WITH\ DBUG
|
.B PROFILING\ WITH\ DBUG
|
||||||
below.
|
below.
|
||||||
@ -946,20 +969,18 @@ Like 'a[,file]' but overwrite old file, do not append.
|
|||||||
.LI O[,file]
|
.LI O[,file]
|
||||||
Like 'A[,file]' but overwrite old file, do not append.
|
Like 'A[,file]' but overwrite old file, do not append.
|
||||||
.LI p[,processes]
|
.LI p[,processes]
|
||||||
Limit debugger actions to the specified processes.
|
Limit debugger actions to the specified processes. An empty list
|
||||||
A null list implies all processes.
|
implies all processes. This is useful for processes which run child
|
||||||
This is useful for processes which run child processes.
|
processes. Note that each debugger output line can be marked with the
|
||||||
Note that each debugger output line can be marked with the name of
|
name of the current process via the 'P' flag. The process name must
|
||||||
the current process via the 'P' flag.
|
match the argument passed to the
|
||||||
The process name must match the argument passed to the
|
|
||||||
.B DBUG_PROCESS
|
.B DBUG_PROCESS
|
||||||
macro.
|
macro.
|
||||||
.LI P
|
.LI P
|
||||||
Mark each debugger output line with the name of the current process.
|
Mark each debugger output line with the name of the current process.
|
||||||
Most useful when used with a process which runs child processes that
|
Most useful when used with a process which runs child processes that
|
||||||
are also being debugged.
|
are also being debugged. Note that the parent process must arrange
|
||||||
Note that the parent process must arrange for the debugger control
|
for the debugger control string to be passed to the child processes.
|
||||||
string to be passed to the child processes.
|
|
||||||
.LI r
|
.LI r
|
||||||
Used in conjunction with the
|
Used in conjunction with the
|
||||||
.B DBUG_PUSH
|
.B DBUG_PUSH
|
||||||
@ -981,7 +1002,59 @@ and
|
|||||||
Enable function control flow tracing.
|
Enable function control flow tracing.
|
||||||
The maximum nesting depth is specified by N, and defaults to
|
The maximum nesting depth is specified by N, and defaults to
|
||||||
200.
|
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
|
.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
|
.SK
|
||||||
.B
|
.B
|
||||||
PROFILING WITH DBUG
|
PROFILING WITH DBUG
|
||||||
|
@ -153,7 +153,9 @@ int main(int argc, char **argv) {
|
|||||||
my_init();
|
my_init();
|
||||||
|
|
||||||
if (argc > argcnt && argv[argcnt][0] == '-' && argv[argcnt][1] == '#')
|
if (argc > argcnt && argv[argcnt][0] == '-' && argv[argcnt][1] == '#')
|
||||||
|
{
|
||||||
DBUG_PUSH(argv[argcnt++]+2);
|
DBUG_PUSH(argv[argcnt++]+2);
|
||||||
|
}
|
||||||
|
|
||||||
if (argc > argcnt)
|
if (argc > argcnt)
|
||||||
the_set = argv[argcnt++];
|
the_set = argv[argcnt++];
|
||||||
|
@ -617,7 +617,6 @@ err:
|
|||||||
static int get_options(int argc,char *argv[])
|
static int get_options(int argc,char *argv[])
|
||||||
{
|
{
|
||||||
char *pos,*progname;
|
char *pos,*progname;
|
||||||
DEBUGGER_OFF;
|
|
||||||
|
|
||||||
progname= argv[0];
|
progname= argv[0];
|
||||||
|
|
||||||
@ -646,7 +645,6 @@ static int get_options(int argc,char *argv[])
|
|||||||
printf("Usage: %s [-?ABIKLsWv] [-m#] [-t#]\n",progname);
|
printf("Usage: %s [-?ABIKLsWv] [-m#] [-t#]\n",progname);
|
||||||
exit(0);
|
exit(0);
|
||||||
case '#':
|
case '#':
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH (++pos);
|
DBUG_PUSH (++pos);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -157,14 +157,12 @@ typedef uint rf_SetTimer;
|
|||||||
|
|
||||||
#define Socket_defined
|
#define Socket_defined
|
||||||
#define my_socket SOCKET
|
#define my_socket SOCKET
|
||||||
#define bool BOOL
|
|
||||||
#define SIGPIPE SIGINT
|
#define SIGPIPE SIGINT
|
||||||
#define RETQSORTTYPE void
|
#define RETQSORTTYPE void
|
||||||
#define QSORT_TYPE_IS_VOID
|
#define QSORT_TYPE_IS_VOID
|
||||||
#define RETSIGTYPE void
|
#define RETSIGTYPE void
|
||||||
#define SOCKET_SIZE_TYPE int
|
#define SOCKET_SIZE_TYPE int
|
||||||
#define my_socket_defined
|
#define my_socket_defined
|
||||||
#define bool_defined
|
|
||||||
#define byte_defined
|
#define byte_defined
|
||||||
#define HUGE_PTR
|
#define HUGE_PTR
|
||||||
#define STDCALL __stdcall /* Used by libmysql.dll */
|
#define STDCALL __stdcall /* Used by libmysql.dll */
|
||||||
@ -406,4 +404,4 @@ inline double ulonglong2double(ulonglong value)
|
|||||||
#define HAVE_CHARSET_ujis 1
|
#define HAVE_CHARSET_ujis 1
|
||||||
#define HAVE_CHARSET_utf8 1
|
#define HAVE_CHARSET_utf8 1
|
||||||
#define HAVE_UCA_COLLATIONS 1
|
#define HAVE_UCA_COLLATIONS 1
|
||||||
|
#define HAVE_BOOL 1
|
||||||
|
@ -20,15 +20,18 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
#if !defined(DBUG_OFF) && !defined(_lint)
|
#if !defined(DBUG_OFF) && !defined(_lint)
|
||||||
extern int _db_on_,_no_db_;
|
struct _db_code_state_;
|
||||||
extern FILE *_db_fp_;
|
extern int _db_keyword_(struct _db_code_state_ *cs, const char *keyword);
|
||||||
extern char *_db_process_;
|
|
||||||
extern int _db_keyword_(const char *keyword);
|
|
||||||
extern int _db_strict_keyword_(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_setjmp_(void);
|
||||||
extern void _db_longjmp_(void);
|
extern void _db_longjmp_(void);
|
||||||
|
extern void _db_process_(const char *name);
|
||||||
extern void _db_push_(const char *control);
|
extern void _db_push_(const char *control);
|
||||||
extern void _db_pop_(void);
|
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_,
|
extern void _db_enter_(const char *_func_,const char *_file_,uint _line_,
|
||||||
const char **_sfunc_,const char **_sfile_,
|
const char **_sfunc_,const char **_sfile_,
|
||||||
uint *_slevel_, char ***);
|
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_pargs_(uint _line_,const char *keyword);
|
||||||
extern void _db_doprnt_ _VARARGS((const char *format,...))
|
extern void _db_doprnt_ _VARARGS((const char *format,...))
|
||||||
ATTRIBUTE_FORMAT(printf, 1, 2);
|
ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||||
extern void _db_dump_(uint _line_,const char *keyword,const char *memory,
|
extern void _db_dump_(uint _line_,const char *keyword,
|
||||||
uint length);
|
const unsigned char *memory, size_t length);
|
||||||
extern void _db_output_(uint flag);
|
|
||||||
extern void _db_end_(void);
|
extern void _db_end_(void);
|
||||||
extern void _db_lock_file(void);
|
extern void _db_lock_file_(void);
|
||||||
extern void _db_unlock_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_; \
|
#define DBUG_ENTER(a) const char *_db_func_, *_db_file_; uint _db_level_; \
|
||||||
char **_db_framep_; \
|
char **_db_framep_; \
|
||||||
_db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, \
|
_db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, \
|
||||||
&_db_framep_)
|
&_db_framep_)
|
||||||
#define DBUG_LEAVE \
|
#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_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0)
|
||||||
#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0)
|
#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0)
|
||||||
#define DBUG_EXECUTE(keyword,a1) \
|
#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) \
|
#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_PUSH(a1) _db_push_ (a1)
|
||||||
#define DBUG_POP() _db_pop_ ()
|
#define DBUG_POP() _db_pop_ ()
|
||||||
#define DBUG_PROCESS(a1) (_db_process_ = a1)
|
#define DBUG_SET(a1) _db_set_ (0, (a1))
|
||||||
#define DBUG_FILE (_db_fp_)
|
#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_SETJMP(a1) (_db_setjmp_ (), setjmp (a1))
|
||||||
#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))
|
#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))
|
||||||
#define DBUG_DUMP(keyword,a1,a2)\
|
#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,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_END() _db_end_ ()
|
#define DBUG_END() _db_end_ ()
|
||||||
#define DBUG_LOCK_FILE { _db_lock_file(); }
|
#define DBUG_LOCK_FILE _db_lock_file_()
|
||||||
#define DBUG_UNLOCK_FILE { _db_unlock_file(); }
|
#define DBUG_UNLOCK_FILE _db_unlock_file_()
|
||||||
#define DBUG_OUTPUT(A) { _db_output_(A); }
|
|
||||||
#define DBUG_ASSERT(A) assert(A)
|
#define DBUG_ASSERT(A) assert(A)
|
||||||
#define DBUG_EXECUTE_IF(keyword,a1) \
|
#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len))
|
||||||
do {if (_db_on_) {if (_db_strict_keyword_ (keyword)) { a1 }}} while(0)
|
#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len))
|
||||||
#define IF_DBUG(A) A
|
#define IF_DBUG(A) A
|
||||||
#else /* No debugger */
|
#else /* No debugger */
|
||||||
|
|
||||||
#define DBUG_ENTER(a1)
|
#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_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)
|
#define IF_DBUG(A)
|
||||||
#endif
|
#endif
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -533,8 +533,12 @@ C_MODE_END
|
|||||||
#undef DBUG_OFF
|
#undef DBUG_OFF
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_lint) && !defined(DBUG_OFF)
|
/* We might be forced to turn debug off, if not turned off already */
|
||||||
#define DBUG_OFF
|
#if (defined(FORCE_DBUG_OFF) || defined(_lint)) && !defined(DBUG_OFF)
|
||||||
|
# define DBUG_OFF
|
||||||
|
# ifdef DBUG_ON
|
||||||
|
# undef DBUG_ON
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <my_dbug.h>
|
#include <my_dbug.h>
|
||||||
@ -980,7 +984,7 @@ typedef int myf; /* Type of MyFlags in my_funcs */
|
|||||||
typedef char byte; /* Smallest addressable unit */
|
typedef char byte; /* Smallest addressable unit */
|
||||||
#endif
|
#endif
|
||||||
typedef char my_bool; /* Small bool */
|
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 */
|
typedef char bool; /* Ordinary boolean values 0 1 */
|
||||||
#endif
|
#endif
|
||||||
/* Macros for converting *constants* to the right type */
|
/* 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 calc_days_in_year(uint year);
|
||||||
uint year_2000_handling(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
|
#ifndef DBUG_OFF
|
||||||
char *env;
|
char *env;
|
||||||
if (_db_on_)
|
|
||||||
return; /* Already using debugging */
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH(debug);
|
DBUG_PUSH(debug);
|
||||||
}
|
}
|
||||||
else if ((env = getenv("MYSQL_DEBUG")))
|
else if ((env = getenv("MYSQL_DEBUG")))
|
||||||
{
|
{
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH(env);
|
DBUG_PUSH(env);
|
||||||
#if !defined(_WINVER) && !defined(WINVER)
|
#if !defined(_WINVER) && !defined(WINVER)
|
||||||
puts("\n-------------------------------------------------------");
|
puts("\n-------------------------------------------------------");
|
||||||
@ -2448,7 +2444,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length)
|
|||||||
my_bool res;
|
my_bool res;
|
||||||
|
|
||||||
DBUG_ENTER("execute");
|
DBUG_ENTER("execute");
|
||||||
DBUG_DUMP("packet", packet, length);
|
DBUG_DUMP("packet", (uchar*)packet, length);
|
||||||
|
|
||||||
mysql->last_used_con= mysql;
|
mysql->last_used_con= mysql;
|
||||||
int4store(buff, stmt->stmt_id); /* Send stmt id to server */
|
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];
|
char llbuff[22];
|
||||||
uint diff_pos[2];
|
uint diff_pos[2];
|
||||||
DBUG_ENTER("chk_index");
|
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 */
|
/* TODO: implement appropriate check for RTree keys */
|
||||||
if (keyinfo->flag & HA_SPATIAL)
|
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,
|
(flag=ha_key_cmp(keyinfo->seg,info->lastkey,key,key_length,
|
||||||
comp_flag, diff_pos)) >=0)
|
comp_flag, diff_pos)) >=0)
|
||||||
{
|
{
|
||||||
DBUG_DUMP("old",(byte*) info->lastkey, info->lastkey_length);
|
DBUG_DUMP("old",(uchar*) info->lastkey, info->lastkey_length);
|
||||||
DBUG_DUMP("new",(byte*) key, key_length);
|
DBUG_DUMP("new",(uchar*) key, key_length);
|
||||||
DBUG_DUMP("new_in_page",(char*) old_keypos,(uint) (keypos-old_keypos));
|
DBUG_DUMP("new_in_page",(uchar*) old_keypos,(uint) (keypos-old_keypos));
|
||||||
|
|
||||||
if (comp_flag & SEARCH_FIND && flag == 0)
|
if (comp_flag & SEARCH_FIND && flag == 0)
|
||||||
mi_check_print_error(param,"Found duplicated key at page %s",llstr(page,llbuff));
|
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",
|
DBUG_PRINT("test",("page: %s record: %s filelength: %s",
|
||||||
llstr(page,llbuff),llstr(record,llbuff2),
|
llstr(page,llbuff),llstr(record,llbuff2),
|
||||||
llstr(info->state->data_file_length,llbuff3)));
|
llstr(info->state->data_file_length,llbuff3)));
|
||||||
DBUG_DUMP("key",(byte*) key,key_length);
|
DBUG_DUMP("key",(uchar*) key,key_length);
|
||||||
DBUG_DUMP("new_in_page",(char*) old_keypos,(uint) (keypos-old_keypos));
|
DBUG_DUMP("new_in_page",(uchar*) old_keypos,(uint) (keypos-old_keypos));
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
param->record_checksum+=(ha_checksum) record;
|
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)
|
if (my_errno != HA_ERR_FOUND_DUPP_KEY)
|
||||||
goto err;
|
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",
|
mi_check_print_info(param,"Duplicate key %2d for record at %10s against new record at %10s",
|
||||||
info->errkey+1,
|
info->errkey+1,
|
||||||
llstr(sort_param.start_recpos,llbuff),
|
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 ;
|
for (key= 0,keyinfo= &share->keyinfo[0]; key < share->base.keys ;
|
||||||
key++,keyinfo++)
|
key++,keyinfo++)
|
||||||
if (keyinfo->key_alg == HA_KEY_ALG_RTREE)
|
if (keyinfo->key_alg == HA_KEY_ALG_RTREE)
|
||||||
return 0;
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
if (!(param->testflag & T_SILENT))
|
if (!(param->testflag & T_SILENT))
|
||||||
printf("- Sorting index for MyISAM-table '%s'\n",name);
|
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",
|
("From page: %ld, keyoffset: %lu used_length: %d",
|
||||||
(ulong) pagepos, (ulong) (keypos - buff),
|
(ulong) pagepos, (ulong) (keypos - buff),
|
||||||
(int) used_length));
|
(int) used_length));
|
||||||
DBUG_DUMP("buff",(byte*) buff,used_length);
|
DBUG_DUMP("buff",(uchar*) buff,used_length);
|
||||||
goto err;
|
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,
|
else if (my_pwrite(info->s->kfile,(byte*) anc_buff,
|
||||||
(uint) keyinfo->block_length,filepos, param->myf_rw))
|
(uint) keyinfo->block_length,filepos, param->myf_rw))
|
||||||
DBUG_RETURN(1);
|
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 */
|
/* Write separator-key to block in next level */
|
||||||
if (sort_insert_key(sort_param,key_block+1,key_block->lastkey,filepos))
|
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,
|
else if (my_pwrite(info->s->kfile,(byte*) key_block->buff,
|
||||||
(uint) keyinfo->block_length,filepos, myf_rw))
|
(uint) keyinfo->block_length,filepos, myf_rw))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
DBUG_DUMP("buff",(byte*) key_block->buff,length);
|
DBUG_DUMP("buff",(uchar*) key_block->buff,length);
|
||||||
nod_flag=1;
|
nod_flag=1;
|
||||||
}
|
}
|
||||||
info->s->state.key_root[sort_param->key]=filepos; /* Last is root for tree */
|
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;
|
my_off_t leaf_page,next_block;
|
||||||
uchar lastkey[MI_MAX_KEY_BUFF];
|
uchar lastkey[MI_MAX_KEY_BUFF];
|
||||||
DBUG_ENTER("d_search");
|
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;
|
search_key_length= (comp_flag & SEARCH_FIND) ? key_length : USE_WHOLE_KEY;
|
||||||
flag=(*keyinfo->bin_search)(info,keyinfo,anc_buff,key, search_key_length,
|
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);
|
ret_value|=_mi_write_keypage(info,keyinfo,page,DFLT_INIT_HITS,anc_buff);
|
||||||
else
|
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);
|
my_afree((byte*) leaf_buff);
|
||||||
DBUG_PRINT("exit",("Return: %d",ret_value));
|
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_ENTER("del");
|
||||||
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx", (long) leaf_page,
|
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx", (long) leaf_page,
|
||||||
(ulong) keypos));
|
(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);
|
endpos=leaf_buff+mi_getint(leaf_buff);
|
||||||
if (!(key_start=_mi_get_last_key(info,keyinfo,leaf_buff,keybuff,endpos,
|
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;
|
ret_value= -1;
|
||||||
else
|
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,
|
if ((ret_value=del(info,keyinfo,key,anc_buff,next_page,next_buff,
|
||||||
keypos,next_block,ret_key)) >0)
|
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_ENTER("underflow");
|
||||||
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx",(long) leaf_page,
|
DBUG_PRINT("enter",("leaf_page: %ld keypos: 0x%lx",(long) leaf_page,
|
||||||
(ulong) keypos));
|
(ulong) keypos));
|
||||||
DBUG_DUMP("anc_buff",(byte*) anc_buff,mi_getint(anc_buff));
|
DBUG_DUMP("anc_buff",(uchar*) anc_buff,mi_getint(anc_buff));
|
||||||
DBUG_DUMP("leaf_buff",(byte*) leaf_buff,mi_getint(leaf_buff));
|
DBUG_DUMP("leaf_buff",(uchar*) leaf_buff,mi_getint(leaf_buff));
|
||||||
|
|
||||||
buff=info->buff;
|
buff=info->buff;
|
||||||
info->buff_used=1;
|
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))
|
if (!_mi_fetch_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,buff,0))
|
||||||
goto err;
|
goto err;
|
||||||
buff_length=mi_getint(buff);
|
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 */
|
/* find keys to make a big key-page */
|
||||||
bmove((byte*) next_keypos-key_reflength,(byte*) buff+2,
|
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;
|
goto err;
|
||||||
buff_length=mi_getint(buff);
|
buff_length=mi_getint(buff);
|
||||||
endpos=buff+buff_length;
|
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 */
|
/* find keys to make a big key-page */
|
||||||
bmove((byte*) next_keypos - key_reflength,(byte*) leaf_buff+2,
|
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;
|
goto err;
|
||||||
_mi_kpointer(info,leaf_key+key_length,leaf_page);
|
_mi_kpointer(info,leaf_key+key_length,leaf_page);
|
||||||
/* Save key in anc_buff */
|
/* Save key in anc_buff */
|
||||||
DBUG_DUMP("anc_buff",(byte*) anc_buff,anc_length);
|
DBUG_DUMP("anc_buff",(uchar*) anc_buff,anc_length);
|
||||||
DBUG_DUMP("key_to_anc",(byte*) leaf_key,key_length);
|
DBUG_DUMP("key_to_anc",(uchar*) leaf_key,key_length);
|
||||||
|
|
||||||
temp_pos=anc_buff+anc_length;
|
temp_pos=anc_buff+anc_length;
|
||||||
t_length=(*keyinfo->pack_key)(keyinfo,key_reflength,
|
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);
|
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)))
|
if (!(length=(*keyinfo->get_key)(keyinfo,nod_flag,&half_pos,leaf_key)))
|
||||||
goto err;
|
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,
|
t_length=(*keyinfo->pack_key)(keyinfo,nod_flag, (uchar*) 0,
|
||||||
(uchar*) 0, (uchar*) 0, leaf_key, &s_temp);
|
(uchar*) 0, (uchar*) 0, leaf_key, &s_temp);
|
||||||
length=(uint) ((buff+buff_length)-half_pos);
|
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 */
|
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 */
|
/* Make a long block for one write */
|
||||||
record_end= *record+length-head_length;
|
record_end= *record+length-head_length;
|
||||||
@ -1137,7 +1137,7 @@ err:
|
|||||||
my_errno= HA_ERR_WRONG_IN_RECORD;
|
my_errno= HA_ERR_WRONG_IN_RECORD;
|
||||||
DBUG_PRINT("error",("to_end: 0x%lx -> 0x%lx from_end: 0x%lx -> 0x%lx",
|
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));
|
(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);
|
DBUG_RETURN(MY_FILE_ERROR);
|
||||||
} /* _mi_rec_unpack */
|
} /* _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))
|
sizeof(info->header))
|
||||||
goto err;
|
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->second_read)
|
||||||
{
|
{
|
||||||
if (info->header[0] <= 6 || info->header[0] == 13)
|
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);
|
_mi_dpointer(info,key,filepos);
|
||||||
DBUG_PRINT("exit",("keynr: %d",keynr));
|
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",
|
DBUG_EXECUTE("key",
|
||||||
_mi_print_key(DBUG_FILE,info->s->keyinfo[keynr].seg,start,
|
_mi_print_key(DBUG_FILE,info->s->keyinfo[keynr].seg,start,
|
||||||
(uint) (key-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);
|
multi_key_cache_change(old_key_cache, new_key_cache);
|
||||||
pthread_mutex_unlock(&THR_LOCK_myisam);
|
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))
|
(byte*) myisam_file_magic, 4))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("error",("Wrong header in %s",name_buff));
|
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);
|
head_length);
|
||||||
my_errno=HA_ERR_NOT_A_TABLE;
|
my_errno=HA_ERR_NOT_A_TABLE;
|
||||||
goto err;
|
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)));
|
VOID(my_seek(file,filepos,MY_SEEK_SET,MYF(0)));
|
||||||
if (my_read(file,(char*) header,ref_length,MYF(MY_NABP)))
|
if (my_read(file,(char*) header,ref_length,MYF(MY_NABP)))
|
||||||
return BLOCK_FATAL_ERROR;
|
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,
|
head_length= read_pack_length((uint) myisam->s->pack.version, header,
|
||||||
&info->rec_len);
|
&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",
|
DBUG_PRINT("error",("page %lu had wrong page length: %u",
|
||||||
(ulong) page, page_size));
|
(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;
|
info->last_keypage = HA_OFFSET_ERROR;
|
||||||
mi_print_error(info->s, HA_ERR_CRASHED);
|
mi_print_error(info->s, HA_ERR_CRASHED);
|
||||||
my_errno = 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_RETURN((-1));
|
||||||
}
|
}
|
||||||
DBUG_PRINT("page",("write page at: %lu",(long) page));
|
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
|
#endif
|
||||||
|
|
||||||
if ((length=keyinfo->block_length) > IO_SIZE*2 &&
|
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,
|
if (!(buff=_mi_fetch_keypage(info,keyinfo,pos,DFLT_INIT_HITS,info->buff,
|
||||||
test(!(nextflag & SEARCH_SAVE_BUFF)))))
|
test(!(nextflag & SEARCH_SAVE_BUFF)))))
|
||||||
goto err;
|
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,
|
flag=(*keyinfo->bin_search)(info,keyinfo,buff,key,key_len,nextflag,
|
||||||
&keypos,lastkey, &last_key);
|
&keypos,lastkey, &last_key);
|
||||||
@ -814,7 +814,7 @@ uint _mi_get_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag,
|
|||||||
DBUG_PRINT("error",
|
DBUG_PRINT("error",
|
||||||
("Found too long null packed key: %u of %u at %lx",
|
("Found too long null packed key: %u of %u at %lx",
|
||||||
length, keyseg->length, (long) *page_pos));
|
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);
|
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
return 0;
|
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",
|
DBUG_PRINT("error",("Found too long packed key: %u of %u at %lx",
|
||||||
length, keyseg->length, (long) *page_pos));
|
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);
|
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
return 0; /* Error */
|
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",
|
DBUG_PRINT("error",("Found too long binary packed key: %u of %u at %lx",
|
||||||
length, keyinfo->maxlength, (long) *page_pos));
|
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);
|
mi_print_error(keyinfo->share, HA_ERR_CRASHED);
|
||||||
my_errno=HA_ERR_CRASHED;
|
my_errno=HA_ERR_CRASHED;
|
||||||
DBUG_RETURN(0); /* Wrong key */
|
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,
|
if (memcmp((byte*) info->rec_buff, (byte*) old,
|
||||||
(uint) info->s->base.reclength))
|
(uint) info->s->base.reclength))
|
||||||
{
|
{
|
||||||
DBUG_DUMP("read",old,info->s->base.reclength);
|
DBUG_DUMP("read",(uchar *)old,info->s->base.reclength);
|
||||||
DBUG_DUMP("disk",info->rec_buff,info->s->base.reclength);
|
DBUG_DUMP("disk",(uchar *)info->rec_buff,info->s->base.reclength);
|
||||||
my_errno=HA_ERR_RECORD_CHANGED; /* Record have changed */
|
my_errno=HA_ERR_RECORD_CHANGED; /* Record have changed */
|
||||||
DBUG_RETURN(1);
|
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");
|
printf("test1 Ver 1.2 \n");
|
||||||
exit(0);
|
exit(0);
|
||||||
case '#':
|
case '#':
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH (argument);
|
DBUG_PUSH (argument);
|
||||||
break;
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
|
@ -449,8 +449,8 @@ int main(int argc, char *argv[])
|
|||||||
bcmp(read_record2,read_record3,reclength))
|
bcmp(read_record2,read_record3,reclength))
|
||||||
{
|
{
|
||||||
printf("Can't find last record\n");
|
printf("Can't find last record\n");
|
||||||
DBUG_DUMP("record2",(byte*) read_record2,reclength);
|
DBUG_DUMP("record2",(uchar*) read_record2,reclength);
|
||||||
DBUG_DUMP("record3",(byte*) read_record3,reclength);
|
DBUG_DUMP("record3",(uchar*) read_record3,reclength);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
ant=1;
|
ant=1;
|
||||||
@ -863,7 +863,6 @@ err:
|
|||||||
static void get_options(int argc, char **argv)
|
static void get_options(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *pos,*progname;
|
char *pos,*progname;
|
||||||
DEBUGGER_OFF;
|
|
||||||
|
|
||||||
progname= argv[0];
|
progname= argv[0];
|
||||||
|
|
||||||
@ -976,7 +975,6 @@ static void get_options(int argc, char **argv)
|
|||||||
progname);
|
progname);
|
||||||
exit(0);
|
exit(0);
|
||||||
case '#':
|
case '#':
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH (++pos);
|
DBUG_PUSH (++pos);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -119,7 +119,6 @@ int main(int argc,char **argv)
|
|||||||
static void get_options(int argc, char **argv)
|
static void get_options(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *pos,*progname;
|
char *pos,*progname;
|
||||||
DEBUGGER_OFF;
|
|
||||||
|
|
||||||
progname= argv[0];
|
progname= argv[0];
|
||||||
|
|
||||||
@ -149,7 +148,6 @@ static void get_options(int argc, char **argv)
|
|||||||
printf("Usage: %s [-?lKA] [-f#] [-t#]\n",progname);
|
printf("Usage: %s [-?lKA] [-f#] [-t#]\n",progname);
|
||||||
exit(0);
|
exit(0);
|
||||||
case '#':
|
case '#':
|
||||||
DEBUGGER_ON;
|
|
||||||
DBUG_PUSH (++pos);
|
DBUG_PUSH (++pos);
|
||||||
break;
|
break;
|
||||||
default:
|
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 &
|
if (key_pos != anc_buff+2+nod_flag && (keyinfo->flag &
|
||||||
(HA_BINARY_PACK_KEY | HA_PACK_KEY)))
|
(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)
|
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;
|
MI_KEY_PARAM s_temp;
|
||||||
DBUG_ENTER("mi_split_page");
|
DBUG_ENTER("mi_split_page");
|
||||||
LINT_INIT(after_key);
|
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)
|
if (info->s->keyinfo+info->lastinx == keyinfo)
|
||||||
info->page_changed=1; /* Info->buff is used */
|
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))
|
if (_mi_write_keypage(info,keyinfo,new_pos,DFLT_INIT_HITS,info->buff))
|
||||||
DBUG_RETURN(-1);
|
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 */
|
DBUG_RETURN(2); /* Middle key up */
|
||||||
} /* _mi_split_page */
|
} /* _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))
|
if (!_mi_fetch_keypage(info,keyinfo,next_page,DFLT_INIT_HITS,info->buff,0))
|
||||||
goto err;
|
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 */
|
/* 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;
|
mi->once_flags|= RRND_PRESERVE_LASTINX;
|
||||||
DBUG_PRINT("info", ("using table no: %d",
|
DBUG_PRINT("info", ("using table no: %d",
|
||||||
(int) (info->current_table - info->open_tables + 1)));
|
(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));
|
DBUG_RETURN(_myrg_mi_read_record(mi,buf));
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,8 @@ dist-hook:
|
|||||||
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
||||||
$(distdir)/std_data \
|
$(distdir)/std_data \
|
||||||
$(distdir)/std_data/ndb_backup50_data_be $(distdir)/std_data/ndb_backup50_data_le \
|
$(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/*.def $(distdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(distdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.test $(distdir)/t
|
||||||
-$(INSTALL_DATA) $(srcdir)/t/*.imtest $(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/*.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_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/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
|
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
|
||||||
-rm -rf `find $(distdir)/suite -type d -name SCCS`
|
-rm -rf `find $(distdir)/suite -type d -name SCCS`
|
||||||
|
|
||||||
@ -77,7 +79,8 @@ install-data-local:
|
|||||||
$(DESTDIR)$(testdir)/std_data \
|
$(DESTDIR)$(testdir)/std_data \
|
||||||
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be \
|
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be \
|
||||||
$(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le \
|
$(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)/README $(DESTDIR)$(testdir)
|
||||||
-$(INSTALL_DATA) $(srcdir)/t/*.def $(DESTDIR)$(testdir)/t
|
-$(INSTALL_DATA) $(srcdir)/t/*.def $(DESTDIR)$(testdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(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/*.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_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/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
|
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
|
||||||
for f in `(cd $(srcdir); find suite -type f | grep -v SCCS)`; \
|
for f in `(cd $(srcdir); find suite -type f | grep -v SCCS)`; \
|
||||||
do \
|
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
|
# $binlog_start can be set by caller or take a default value
|
||||||
--replace_column 5 #
|
|
||||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\//
|
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
|
--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_charsetsdir;
|
||||||
our $path_client_bindir;
|
our $path_client_bindir;
|
||||||
|
our $path_client_libdir;
|
||||||
our $path_language;
|
our $path_language;
|
||||||
our $path_timefile;
|
our $path_timefile;
|
||||||
our $path_snapshot;
|
our $path_snapshot;
|
||||||
@ -623,6 +624,8 @@ sub command_line_setup () {
|
|||||||
'vardir=s' => \$opt_vardir,
|
'vardir=s' => \$opt_vardir,
|
||||||
'benchdir=s' => \$glob_mysql_bench_dir,
|
'benchdir=s' => \$glob_mysql_bench_dir,
|
||||||
'mem' => \$opt_mem,
|
'mem' => \$opt_mem,
|
||||||
|
'client-bindir=s' => \$path_client_bindir,
|
||||||
|
'client-libdir=s' => \$path_client_libdir,
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
'report-features' => \$opt_report_features,
|
'report-features' => \$opt_report_features,
|
||||||
@ -717,11 +720,19 @@ sub command_line_setup () {
|
|||||||
#
|
#
|
||||||
|
|
||||||
# Look for the client binaries directory
|
# Look for the client binaries directory
|
||||||
$path_client_bindir= mtr_path_exists("$glob_basedir/client_release",
|
if ($path_client_bindir)
|
||||||
"$glob_basedir/client_debug",
|
{
|
||||||
vs_config_dirs('client', ''),
|
# --client-bindir=path set on command line, check that the path exists
|
||||||
"$glob_basedir/client",
|
$path_client_bindir= mtr_path_exists($path_client_bindir);
|
||||||
"$glob_basedir/bin");
|
}
|
||||||
|
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)
|
if (!$opt_extern)
|
||||||
{
|
{
|
||||||
@ -1367,7 +1378,15 @@ sub datadir_list_setup () {
|
|||||||
|
|
||||||
sub collect_mysqld_features () {
|
sub collect_mysqld_features () {
|
||||||
my $found_variable_list_start= 0;
|
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
|
# 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 version of MySQL") unless $mysql_version_id;
|
||||||
mtr_error("Could not find variabes list") unless $found_variable_list_start;
|
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, "--socket=$master->[0]->{'path_sock'}");
|
||||||
mtr_add_arg($args, "--datadir=$master->[0]->{'path_myddir'}");
|
mtr_add_arg($args, "--datadir=$master->[0]->{'path_myddir'}");
|
||||||
mtr_add_arg($args, "--basedir=$glob_basedir");
|
mtr_add_arg($args, "--basedir=$glob_basedir");
|
||||||
|
mtr_add_arg($args, "--tmpdir=$opt_tmpdir");
|
||||||
|
|
||||||
if ( $opt_debug )
|
if ( $opt_debug )
|
||||||
{
|
{
|
||||||
@ -1755,19 +1775,25 @@ sub environment_setup () {
|
|||||||
|
|
||||||
my @ld_library_paths;
|
my @ld_library_paths;
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
if ($path_client_libdir)
|
||||||
# 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/",
|
# Use the --client-libdir passed on commandline
|
||||||
"$glob_basedir/libmysql_r/.libs/",
|
push(@ld_library_paths, "$path_client_libdir");
|
||||||
"$glob_basedir/zlib.libs/");
|
|
||||||
}
|
}
|
||||||
else
|
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";
|
$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 )
|
if ( $opt_debug )
|
||||||
{
|
{
|
||||||
@ -3739,9 +3768,9 @@ sub mysqld_arguments ($$$$) {
|
|||||||
{
|
{
|
||||||
# By default, prevent the started mysqld to access files outside of vardir
|
# By default, prevent the started mysqld to access files outside of vardir
|
||||||
my $secure_file_dir= $opt_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
|
# access to subdirs of mysql-test/ in order to make it possible
|
||||||
# to "load data" from the suites data/ directory.
|
# to "load data" from the suites data/ directory.
|
||||||
$secure_file_dir= $glob_mysql_test_dir;
|
$secure_file_dir= $glob_mysql_test_dir;
|
||||||
@ -5235,6 +5264,8 @@ Misc options
|
|||||||
warnings | log-warnings Pass --log-warnings to mysqld
|
warnings | log-warnings Pass --log-warnings to mysqld
|
||||||
|
|
||||||
sleep=SECONDS Passed to mysqltest, will be used as fixed sleep time
|
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
|
Deprecated options
|
||||||
with-openssl Deprecated option for ssl
|
with-openssl Deprecated option for ssl
|
||||||
|
@ -1325,7 +1325,6 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
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;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
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());
|
INSERT INTO t2 VALUES (2),(10+bug23333());
|
||||||
SHOW MASTER STATUS;
|
SHOW MASTER STATUS;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
# 184136
|
# 184141
|
||||||
DROP FUNCTION bug23333;
|
DROP FUNCTION bug23333;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
@ -16,10 +16,10 @@ create table t2 (a int, b int) ENGINE=MyISAM;
|
|||||||
reset master;
|
reset master;
|
||||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
|
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
|
||||||
ERROR 70100: Query execution was interrupted
|
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
|
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 # Begin_load_query # # ;file_id=#;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 # 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
|
select
|
||||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||||
is not null;
|
is not null;
|
||||||
|
@ -138,3 +138,20 @@ ALTER TABLE t1 DROP INDEX a;
|
|||||||
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
ALTER TABLE t1 ADD PRIMARY KEY(a);
|
||||||
DELETE FROM t1 WHERE a=10;
|
DELETE FROM t1 WHERE a=10;
|
||||||
DROP TABLE t1;
|
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,
|
master-bin.000001 362 Query 1 528 use `test`; CREATE TABLE t4 (s1 CHAR(50) CHARACTER SET latin1,
|
||||||
s2 CHAR(50) CHARACTER SET cp932,
|
s2 CHAR(50) CHARACTER SET cp932,
|
||||||
d DECIMAL(10,2))
|
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 ins2 CHAR(50) CHARACTER SET cp932,
|
||||||
IN ind DECIMAL(10,2))
|
IN ind DECIMAL(10,2))
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
||||||
END
|
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 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 987 Query 1 1076 use `test`; DROP PROCEDURE bug18293
|
master-bin.000001 988 Query 1 1077 use `test`; DROP PROCEDURE bug18293
|
||||||
master-bin.000001 1076 Query 1 1155 use `test`; DROP TABLE t4
|
master-bin.000001 1077 Query 1 1156 use `test`; DROP TABLE t4
|
||||||
|
@ -247,4 +247,11 @@ t1 CREATE TABLE `t1` (
|
|||||||
`c2` text NOT NULL
|
`c2` text NOT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=gbk
|
) ENGINE=MyISAM DEFAULT CHARSET=gbk
|
||||||
drop table t1;
|
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
|
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;
|
unlock tables;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
set session low_priority_updates=default;
|
set session low_priority_updates=default;
|
||||||
|
select benchmark(200, (select sin(1))) > 1000;
|
||||||
|
@ -82,3 +82,10 @@ a
|
|||||||
1234562
|
1234562
|
||||||
x
|
x
|
||||||
drop table t1;
|
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
|
d1
|
||||||
NULL
|
NULL
|
||||||
DROP TABLE t1;
|
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
|
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 VIEW v1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET SQL_MODE=DEFAULT;
|
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
|
End of 5.0 tests
|
||||||
|
@ -99,41 +99,99 @@ t1 CREATE TABLE `t1` (
|
|||||||
`length(uuid())` int(10) NOT NULL default '0'
|
`length(uuid())` int(10) NOT NULL default '0'
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a timestamp default '2005-05-05 01:01:01',
|
#------------------------------------------------------------------------
|
||||||
b timestamp default '2005-05-05 01:01:01');
|
# Tests for Bug#6760 and Bug#12689
|
||||||
insert into t1 set a = now();
|
SET @row_count = 4;
|
||||||
select sleep(3);
|
SET @sleep_time_per_result_row = 1;
|
||||||
sleep(3)
|
SET @max_acceptable_delay = 2;
|
||||||
0
|
SET @@global.query_cache_size = 1024 * 64;
|
||||||
update t1 set b = now();
|
DROP TEMPORARY TABLE IF EXISTS t_history;
|
||||||
select timediff(b, a) >= '00:00:03' from t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
timediff(b, a) >= '00:00:03'
|
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
|
1
|
||||||
drop table t1;
|
# Test 2: Does the query with SLEEP need a reasonable time even in case
|
||||||
set global query_cache_size=1355776;
|
# of the non first execution?
|
||||||
create table t1 (a int);
|
SELECT COUNT(*) >= 4 - 1 - 1 INTO @aux2 FROM t_history
|
||||||
insert into t1 values (1),(1),(1);
|
WHERE TIMEDIFF(end_ts,start_ts) - @sleep_time_per_result_row * @row_count
|
||||||
create table t2 (a datetime default null, b datetime default null);
|
BETWEEN 0 AND @max_acceptable_delay
|
||||||
insert into t2 set a = now();
|
AND attempt > 1;
|
||||||
select a from t1 where sleep(1);
|
SELECT @aux2 AS "Expect 1";
|
||||||
a
|
Expect 1
|
||||||
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'
|
|
||||||
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
|
||||||
1
|
DROP TABLE t1;
|
||||||
drop table t2;
|
DROP TEMPORARY TABLE t_history;
|
||||||
drop table t1;
|
SET @@global.query_cache_size = default;
|
||||||
set global query_cache_size=default;
|
|
||||||
create table t1 select INET_ATON('255.255.0.1') as `a`;
|
create table t1 select INET_ATON('255.255.0.1') as `a`;
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
|
@ -1129,4 +1129,26 @@ DROP USER mysqltest_1@localhost;
|
|||||||
DROP DATABASE db27878;
|
DROP DATABASE db27878;
|
||||||
use test;
|
use test;
|
||||||
DROP TABLE t1;
|
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
|
End of 5.0 tests
|
||||||
|
@ -1213,4 +1213,150 @@ FROM t1;
|
|||||||
ERROR 21000: Subquery returns more than 1 row
|
ERROR 21000: Subquery returns more than 1 row
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET @@sql_mode = @old_sql_mode;
|
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
|
End of 5.0 tests
|
||||||
|
@ -256,7 +256,6 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
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;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
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
|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||||
select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
|
select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
|
||||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
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;
|
show fields from information_schema.table_names;
|
||||||
ERROR 42S02: Unknown table 'table_names' in information_schema
|
ERROR 42S02: Unknown table 'table_names' in information_schema
|
||||||
show keys from information_schema.table_names;
|
show keys from information_schema.table_names;
|
||||||
ERROR 42S02: Unknown table 'table_names' in information_schema
|
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));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
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;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
@ -252,3 +252,79 @@ SELECT * FROM t1;
|
|||||||
c1 c2 c3 c4
|
c1 c2 c3 c4
|
||||||
10 1970-02-01 01:02:03 1.1e-100 1.1e+100
|
10 1970-02-01 01:02:03 1.1e-100 1.1e+100
|
||||||
DROP TABLE t1;
|
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 t1 values(1);
|
||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(1)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(1)
|
||||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 347 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -21,12 +21,12 @@ insert into t2 select * from t1;
|
|||||||
rollback;
|
rollback;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
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
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(2)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(2)
|
||||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 347 Query 1 # use `test`; ROLLBACK
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -39,15 +39,15 @@ rollback to savepoint my_savepoint;
|
|||||||
Warnings:
|
Warnings:
|
||||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(3)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(3)
|
||||||
master-bin.000001 253 Query 1 # use `test`; savepoint my_savepoint
|
master-bin.000001 # Query # # use `test`; savepoint my_savepoint
|
||||||
master-bin.000001 338 Query 1 # use `test`; insert into t1 values(4)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(4)
|
||||||
master-bin.000001 425 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 519 Query 1 # use `test`; rollback to savepoint my_savepoint
|
master-bin.000001 # Query # # use `test`; rollback to savepoint my_savepoint
|
||||||
master-bin.000001 616 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -65,16 +65,16 @@ select a from t1 order by a;
|
|||||||
a
|
a
|
||||||
5
|
5
|
||||||
7
|
7
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(5)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(5)
|
||||||
master-bin.000001 253 Query 1 # use `test`; savepoint my_savepoint
|
master-bin.000001 # Query # # use `test`; savepoint my_savepoint
|
||||||
master-bin.000001 338 Query 1 # use `test`; insert into t1 values(6)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(6)
|
||||||
master-bin.000001 425 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 519 Query 1 # use `test`; rollback to savepoint my_savepoint
|
master-bin.000001 # Query # # use `test`; rollback to savepoint my_savepoint
|
||||||
master-bin.000001 616 Query 1 # use `test`; insert into t1 values(7)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(7)
|
||||||
master-bin.000001 703 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -87,46 +87,46 @@ insert into t2 select * from t1;
|
|||||||
select get_lock("a",10);
|
select get_lock("a",10);
|
||||||
get_lock("a",10)
|
get_lock("a",10)
|
||||||
1
|
1
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(8)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(8)
|
||||||
master-bin.000001 253 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 347 Query 1 # use `test`; ROLLBACK
|
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
insert into t1 values(9);
|
insert into t1 values(9);
|
||||||
insert into t2 select * from t1;
|
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
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(9)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(9)
|
||||||
master-bin.000001 253 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 280 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
insert into t1 values(10);
|
insert into t1 values(10);
|
||||||
begin;
|
begin;
|
||||||
insert into t2 select * from t1;
|
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
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(10)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(10)
|
||||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 281 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
insert into t1 values(11);
|
insert into t1 values(11);
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(10)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(10)
|
||||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 281 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 375 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 443 Query 1 # use `test`; insert into t1 values(11)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(11)
|
||||||
master-bin.000001 531 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
alter table t2 engine=INNODB;
|
alter table t2 engine=INNODB;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
@ -135,12 +135,12 @@ begin;
|
|||||||
insert into t1 values(12);
|
insert into t1 values(12);
|
||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(12)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(12)
|
||||||
master-bin.000001 254 Query 1 # use `test`; insert into t2 select * from t1
|
master-bin.000001 # Query # # use `test`; insert into t2 select * from t1
|
||||||
master-bin.000001 348 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -148,7 +148,7 @@ begin;
|
|||||||
insert into t1 values(13);
|
insert into t1 values(13);
|
||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
rollback;
|
rollback;
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
@ -160,11 +160,11 @@ insert into t1 values(15);
|
|||||||
insert into t2 select * from t1;
|
insert into t2 select * from t1;
|
||||||
rollback to savepoint my_savepoint;
|
rollback to savepoint my_savepoint;
|
||||||
commit;
|
commit;
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(14)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(14)
|
||||||
master-bin.000001 254 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
reset master;
|
reset master;
|
||||||
@ -180,12 +180,12 @@ select a from t1 order by a;
|
|||||||
a
|
a
|
||||||
16
|
16
|
||||||
18
|
18
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(16)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(16)
|
||||||
master-bin.000001 254 Query 1 # use `test`; insert into t1 values(18)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(18)
|
||||||
master-bin.000001 342 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
delete from t1;
|
delete from t1;
|
||||||
delete from t2;
|
delete from t2;
|
||||||
alter table t2 type=MyISAM;
|
alter table t2 type=MyISAM;
|
||||||
@ -232,35 +232,35 @@ insert into t2 values (3);
|
|||||||
select get_lock("lock1",60);
|
select get_lock("lock1",60);
|
||||||
get_lock("lock1",60)
|
get_lock("lock1",60)
|
||||||
1
|
1
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 98 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 166 Query 1 # use `test`; insert into t1 values(16)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(16)
|
||||||
master-bin.000001 254 Query 1 # use `test`; insert into t1 values(18)
|
master-bin.000001 # Query # # use `test`; insert into t1 values(18)
|
||||||
master-bin.000001 342 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 369 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 437 Query 1 # use `test`; delete from t1
|
master-bin.000001 # Query # # use `test`; delete from t1
|
||||||
master-bin.000001 514 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 541 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 609 Query 1 # use `test`; delete from t2
|
master-bin.000001 # Query # # use `test`; delete from t2
|
||||||
master-bin.000001 686 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 713 Query 1 # use `test`; alter table t2 type=MyISAM
|
master-bin.000001 # Query # # use `test`; alter table t2 type=MyISAM
|
||||||
master-bin.000001 802 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 870 Query 1 # use `test`; insert into t1 values (1)
|
master-bin.000001 # Query # # use `test`; insert into t1 values (1)
|
||||||
master-bin.000001 958 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 985 Query 1 # use `test`; insert into t2 values (20)
|
master-bin.000001 # Query # # use `test`; insert into t2 values (20)
|
||||||
master-bin.000001 1074 Query 1 # use `test`; drop table t1,t2
|
master-bin.000001 # Query # # 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 # Query # # use `test`; create temporary table ti (a int) engine=innodb
|
||||||
master-bin.000001 1263 Query 1 # use `test`; BEGIN
|
master-bin.000001 # Query # # use `test`; BEGIN
|
||||||
master-bin.000001 1331 Query 1 # use `test`; insert into ti values(1)
|
master-bin.000001 # Query # # use `test`; insert into ti values(1)
|
||||||
master-bin.000001 1418 Xid 1 # COMMIT /* XID */
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 1445 Query 1 # use `test`; create temporary table t1 (a int) engine=myisam
|
master-bin.000001 # Query # # 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 # Query # # use `test`; insert t1 values (1)
|
||||||
master-bin.000001 1638 Query 1 # use `test`; create table t0 (n int)
|
master-bin.000001 # Query # # use `test`; create table t0 (n int)
|
||||||
master-bin.000001 1724 Query 1 # use `test`; insert t0 select * from t1
|
master-bin.000001 # Query # # 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 # Query # # 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 # Query # # 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`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
|
||||||
do release_lock("lock1");
|
do release_lock("lock1");
|
||||||
drop table t0,t2;
|
drop table t0,t2;
|
||||||
reset master;
|
reset master;
|
||||||
|
@ -573,8 +573,8 @@ count(*)
|
|||||||
select count(*) from t3 /* must be 1 */;
|
select count(*) from t3 /* must be 1 */;
|
||||||
count(*)
|
count(*)
|
||||||
1
|
1
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
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;
|
drop table t1, t2, t3;
|
||||||
end of tests
|
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));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
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;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
@ -38,6 +38,8 @@ t2
|
|||||||
t3
|
t3
|
||||||
Tables_in_test
|
Tables_in_test
|
||||||
t1
|
t1
|
||||||
|
delimiter
|
||||||
|
1
|
||||||
_
|
_
|
||||||
Test delimiter : from command line
|
Test delimiter : from command line
|
||||||
a
|
a
|
||||||
|
@ -268,7 +268,7 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
|
|||||||
SET @@session.sql_mode=0/*!*/;
|
SET @@session.sql_mode=0/*!*/;
|
||||||
/*!\C latin1 *//*!*/;
|
/*!\C latin1 *//*!*/;
|
||||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
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
|
begin
|
||||||
select 1;
|
select 1;
|
||||||
end
|
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
|
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
|
1 SIMPLE t1 range a a 35 NULL 3 Using where; Using index
|
||||||
DROP TABLE t1;
|
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;
|
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
End of 4.1 tests
|
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;
|
start slave;
|
||||||
drop database if exists DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
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_____________________;
|
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;
|
select @@net_buffer_length, @@max_allowed_packet;
|
||||||
@@net_buffer_length @@max_allowed_packet
|
@@net_buffer_length @@max_allowed_packet
|
||||||
1024 1024
|
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 # drop database if exists mysqltest1
|
||||||
master-bin.000001 # Query 1 # create database 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 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
|
begin
|
||||||
declare b int;
|
declare b int;
|
||||||
set b = 8;
|
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 ( NAME_CONST('b',8))
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (unix_timestamp())
|
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`; 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
|
select * from mysqltest1.t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter procedure foo2 contains sql
|
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`; drop table t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; create table t1 (a int)
|
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 table t2 like t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo3()
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
|
||||||
deterministic
|
DETERMINISTIC
|
||||||
insert into t1 values (15)
|
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 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 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`; 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()
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
|
||||||
deterministic
|
DETERMINISTIC
|
||||||
begin
|
begin
|
||||||
insert into t2 values(3);
|
insert into t2 values(3);
|
||||||
insert into t1 values (5);
|
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`; delete from t2
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
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`; drop procedure foo4
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` procedure foo4()
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo4`()
|
||||||
deterministic
|
DETERMINISTIC
|
||||||
begin
|
begin
|
||||||
insert into t2 values(20),(20);
|
insert into t2 values(20),(20);
|
||||||
end
|
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 foo
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo2
|
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`; drop procedure foo3
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1(x int)
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||||
returns int
|
DETERMINISTIC
|
||||||
deterministic
|
|
||||||
begin
|
begin
|
||||||
insert into t1 values (x);
|
insert into t1 values (x);
|
||||||
return x+2;
|
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`; SELECT `mysqltest1`.`fn1`(20)
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21))
|
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`; drop function fn1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn1()
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`() RETURNS int(11)
|
||||||
returns int
|
NO SQL
|
||||||
no sql
|
|
||||||
begin
|
begin
|
||||||
return unix_timestamp();
|
return unix_timestamp();
|
||||||
end
|
end
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
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`; insert into t1 values(fn1())
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` function fn2()
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11)
|
||||||
returns int
|
NO SQL
|
||||||
no sql
|
|
||||||
begin
|
begin
|
||||||
return unix_timestamp();
|
return unix_timestamp();
|
||||||
end
|
end
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` function fn3()
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS int(11)
|
||||||
returns int
|
READS SQL DATA
|
||||||
not deterministic
|
|
||||||
reads sql data
|
|
||||||
begin
|
begin
|
||||||
return 0;
|
return 0;
|
||||||
end
|
end
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
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`; alter table t2 add unique (a)
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
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)
|
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
|
||||||
returns int
|
|
||||||
begin
|
begin
|
||||||
insert into t2 values(x),(x);
|
insert into t2 values(x),(x);
|
||||||
return 10;
|
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`; delete from t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop trigger trg
|
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`; insert into t1 values (1)
|
||||||
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`()
|
||||||
not deterministic
|
READS SQL DATA
|
||||||
reads sql data
|
|
||||||
select * from t1
|
select * from t1
|
||||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop procedure foo
|
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 # use `mysqltest1`; drop function fn1
|
||||||
master-bin.000001 # Query 1 # drop database mysqltest1
|
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 # 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
|
begin
|
||||||
declare var integer;
|
declare var integer;
|
||||||
declare c cursor for select a from v1;
|
declare c cursor for select a from v1;
|
||||||
@ -499,19 +493,21 @@ fetch c into var;
|
|||||||
close c;
|
close c;
|
||||||
return var;
|
return var;
|
||||||
end
|
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`; 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`; insert into t1 (a) values (f1())
|
||||||
master-bin.000001 # Query 1 # use `test`; drop view v1
|
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 function f1
|
||||||
master-bin.000001 # Query 1 # use `test`; DROP TABLE IF EXISTS t1
|
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 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)
|
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`; 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`; 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` PROCEDURE `p1`()
|
||||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION f1() RETURNS INT RETURN 0
|
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 PROCEDURE p1
|
||||||
master-bin.000001 # Query 1 # use `test`; DROP FUNCTION f1
|
master-bin.000001 # Query 1 # use `test`; DROP FUNCTION f1
|
||||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
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 mysqltest
|
||||||
master-bin.000001 # Query 1 # create database mysqltest2
|
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 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`; 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
|
begin
|
||||||
insert into t values (1);
|
insert into t values (1);
|
||||||
return 0;
|
return 0;
|
||||||
@ -532,3 +529,407 @@ set global log_bin_trust_function_creators=0;
|
|||||||
set global log_bin_trust_function_creators=0;
|
set global log_bin_trust_function_creators=0;
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
drop database mysqltest2;
|
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'
|
ERROR HY000: Operation DROP USER failed for 'not_exist_user1'@'fakehost','not_exist_user2'@'fakehost'
|
||||||
select Host,User from mysql.user where Host='fakehost';
|
select Host,User from mysql.user where Host='fakehost';
|
||||||
Host User
|
Host User
|
||||||
show binlog events from 98;
|
show binlog events from <binlog_start>;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
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 # Query # # use `test`; create user 'foo'@'fakehost'
|
||||||
master-bin.000001 189 Query 1 # use `test`; create user 'foo'@'fakehost', 'bar'@'fakehost'
|
master-bin.000001 # Query # # 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 # Query # # 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 # Query # # 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 # Query # # 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`; 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
|
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`; create table t1 (a int)
|
||||||
slave-bin.000001 # Query 1 # use `test`; insert into t1 values (1)
|
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`; 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`; 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`; 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 view v1
|
||||||
slave-bin.000001 # Query 1 # use `test`; drop table t1
|
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
|
ERROR 42S01: Table 'v1' already exists
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
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
|
End of 5.0 tests
|
||||||
|
@ -842,4 +842,32 @@ Pos Instruction
|
|||||||
21 jump 3
|
21 jump 3
|
||||||
drop procedure proc_33618_h;
|
drop procedure proc_33618_h;
|
||||||
drop procedure proc_33618_c;
|
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.
|
End of 5.0 tests.
|
||||||
|
@ -934,8 +934,6 @@ NULL NULL
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6));
|
CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6));
|
||||||
INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
|
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');
|
INSERT INTO t1 (col1) VALUES ('hellobob');
|
||||||
ERROR 22001: Data too long for column 'col1' at row 1
|
ERROR 22001: Data too long for column 'col1' at row 1
|
||||||
INSERT INTO t1 (col2) VALUES ('hellobob');
|
INSERT INTO t1 (col2) VALUES ('hellobob');
|
||||||
|
@ -4374,4 +4374,26 @@ a4 f3 a6
|
|||||||
1 NULL NULL
|
1 NULL NULL
|
||||||
2 NULL NULL
|
2 NULL NULL
|
||||||
DROP TABLE t1, t2, t3, t4;
|
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.
|
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
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
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
|
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
|
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(0x4120, 0x4120);
|
||||||
insert into t1 values(0x412020, 0x412020);
|
insert into t1 values(0x412020, 0x412020);
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'c' at row 1
|
|
||||||
Note 1265 Data truncated for column 'vc' at row 1
|
Note 1265 Data truncated for column 'vc' at row 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set @old_sql_mode= @@sql_mode, sql_mode= 'traditional';
|
set @old_sql_mode= @@sql_mode, sql_mode= 'traditional';
|
||||||
|
@ -821,4 +821,156 @@ LENGTH(c) CHAR_LENGTH(c)
|
|||||||
65535 65535
|
65535 65535
|
||||||
65535 65535
|
65535 65535
|
||||||
DROP TABLE t;
|
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
|
End of 5.0 tests
|
||||||
|
@ -946,4 +946,11 @@ SELECT ROUND(20061108085411.000002);
|
|||||||
ROUND(20061108085411.000002)
|
ROUND(20061108085411.000002)
|
||||||
20061108085411
|
20061108085411
|
||||||
DROP TABLE t1, t2, t3, t4, t5, t6;
|
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
|
End of 5.0 tests
|
||||||
|
@ -3659,6 +3659,24 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
# -- End of test case for Bug#34337.
|
# -- 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.
|
# -- End of 5.0 tests.
|
||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
|
@ -305,7 +305,6 @@ set @q = repeat('q', 256);
|
|||||||
set sql_mode = '';
|
set sql_mode = '';
|
||||||
insert into t1 values(@c, @c, @c);
|
insert into t1 values(@c, @c, @c);
|
||||||
Warnings:
|
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_varchar' at row 1
|
||||||
Note 1265 Data truncated for column 'c_tinytext' at row 1
|
Note 1265 Data truncated for column 'c_tinytext' at row 1
|
||||||
insert into t2 values(@c);
|
insert into t2 values(@c);
|
||||||
@ -322,7 +321,6 @@ Warning 1265 Data truncated for column 'c_tinyblob' at row 1
|
|||||||
set sql_mode = 'traditional';
|
set sql_mode = 'traditional';
|
||||||
insert into t1 values(@c, @c, @c);
|
insert into t1 values(@c, @c, @c);
|
||||||
Warnings:
|
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_varchar' at row 1
|
||||||
Note 1265 Data truncated for column 'c_tinytext' at row 1
|
Note 1265 Data truncated for column 'c_tinytext' at row 1
|
||||||
insert into t2 values(@c);
|
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