mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
auto-merge
This commit is contained in:
@ -137,6 +137,7 @@ ENDIF(MSVC)
|
|||||||
|
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE")
|
ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE")
|
||||||
|
ADD_DEFINITIONS("-D_WIN32_WINNT=0x0501")
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
||||||
# default to x86 platform. We'll check for X64 in a bit
|
# default to x86 platform. We'll check for X64 in a bit
|
||||||
|
@ -3561,7 +3561,7 @@ static void print_warnings()
|
|||||||
messages. To be safe, skip printing the duplicate only if it is the only
|
messages. To be safe, skip printing the duplicate only if it is the only
|
||||||
warning.
|
warning.
|
||||||
*/
|
*/
|
||||||
if (!cur || num_rows == 1 && error == (uint) strtoul(cur[1], NULL, 10))
|
if (!cur || (num_rows == 1 && error == (uint) strtoul(cur[1], NULL, 10)))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
/* Print the warnings */
|
/* Print the warnings */
|
||||||
|
@ -54,6 +54,8 @@ static char **defaults_argv;
|
|||||||
|
|
||||||
static my_bool not_used; /* Can't use GET_BOOL without a value pointer */
|
static my_bool not_used; /* Can't use GET_BOOL without a value pointer */
|
||||||
|
|
||||||
|
static my_bool opt_write_binlog;
|
||||||
|
|
||||||
#include <help_start.h>
|
#include <help_start.h>
|
||||||
|
|
||||||
static struct my_option my_long_options[]=
|
static struct my_option my_long_options[]=
|
||||||
@ -124,6 +126,11 @@ static struct my_option my_long_options[]=
|
|||||||
{"verbose", 'v', "Display more output about the process",
|
{"verbose", 'v', "Display more output about the process",
|
||||||
(uchar**) &opt_verbose, (uchar**) &opt_verbose, 0,
|
(uchar**) &opt_verbose, (uchar**) &opt_verbose, 0,
|
||||||
GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
||||||
|
{"write-binlog", OPT_WRITE_BINLOG,
|
||||||
|
"All commands including mysqlcheck are binlogged. Enabled by default;"
|
||||||
|
"use --skip-write-binlog when commands should not be sent to replication slaves.",
|
||||||
|
(uchar**) &opt_write_binlog, (uchar**) &opt_write_binlog, 0, GET_BOOL, NO_ARG,
|
||||||
|
1, 0, 0, 0, 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -448,6 +455,8 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
|
|||||||
int ret;
|
int ret;
|
||||||
File fd;
|
File fd;
|
||||||
char query_file_path[FN_REFLEN];
|
char query_file_path[FN_REFLEN];
|
||||||
|
const uchar sql_log_bin[]= "SET SQL_LOG_BIN=0;";
|
||||||
|
|
||||||
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, opt_tmpdir,
|
if ((fd= create_temp_file(query_file_path, opt_tmpdir,
|
||||||
@ -455,6 +464,22 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
|
|||||||
MYF(MY_WME))) < 0)
|
MYF(MY_WME))) < 0)
|
||||||
die("Failed to create temporary file for defaults");
|
die("Failed to create temporary file for defaults");
|
||||||
|
|
||||||
|
/*
|
||||||
|
Master and slave should be upgraded separately. All statements executed
|
||||||
|
by mysql_upgrade will not be binlogged.
|
||||||
|
'SET SQL_LOG_BIN=0' is executed before any other statements.
|
||||||
|
*/
|
||||||
|
if (!opt_write_binlog)
|
||||||
|
{
|
||||||
|
if (my_write(fd, sql_log_bin, sizeof(sql_log_bin)-1,
|
||||||
|
MYF(MY_FNABP | MY_WME)))
|
||||||
|
{
|
||||||
|
my_close(fd, MYF(0));
|
||||||
|
my_delete(query_file_path, MYF(0));
|
||||||
|
die("Failed to write to '%s'", query_file_path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (my_write(fd, (uchar*) query, strlen(query),
|
if (my_write(fd, (uchar*) query, strlen(query),
|
||||||
MYF(MY_FNABP | MY_WME)))
|
MYF(MY_FNABP | MY_WME)))
|
||||||
{
|
{
|
||||||
@ -648,6 +673,7 @@ static int run_mysqlcheck_upgrade(void)
|
|||||||
"--check-upgrade",
|
"--check-upgrade",
|
||||||
"--all-databases",
|
"--all-databases",
|
||||||
"--auto-repair",
|
"--auto-repair",
|
||||||
|
opt_write_binlog ? "--write-binlog" : "--skip-write-binlog",
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -662,6 +688,7 @@ static int run_mysqlcheck_fixnames(void)
|
|||||||
"--all-databases",
|
"--all-databases",
|
||||||
"--fix-db-names",
|
"--fix-db-names",
|
||||||
"--fix-table-names",
|
"--fix-table-names",
|
||||||
|
opt_write_binlog ? "--write-binlog" : "--skip-write-binlog",
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,6 +652,17 @@ static int use_db(char *database)
|
|||||||
return 0;
|
return 0;
|
||||||
} /* use_db */
|
} /* use_db */
|
||||||
|
|
||||||
|
static int disable_binlog()
|
||||||
|
{
|
||||||
|
const char *stmt= "SET SQL_LOG_BIN=0";
|
||||||
|
if (mysql_query(sock, stmt))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed to %s\n", stmt);
|
||||||
|
fprintf(stderr, "Error: %s\n", mysql_error(sock));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int handle_request_for_tables(char *tables, uint length)
|
static int handle_request_for_tables(char *tables, uint length)
|
||||||
{
|
{
|
||||||
@ -844,6 +855,14 @@ int main(int argc, char **argv)
|
|||||||
if (dbConnect(current_host, current_user, opt_password))
|
if (dbConnect(current_host, current_user, opt_password))
|
||||||
exit(EX_MYSQLERR);
|
exit(EX_MYSQLERR);
|
||||||
|
|
||||||
|
if (!opt_write_binlog)
|
||||||
|
{
|
||||||
|
if (disable_binlog()) {
|
||||||
|
first_error= 1;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (opt_auto_repair &&
|
if (opt_auto_repair &&
|
||||||
my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16,64))
|
my_init_dynamic_array(&tables4repair, sizeof(char)*(NAME_LEN*2+2),16,64))
|
||||||
{
|
{
|
||||||
|
@ -423,6 +423,7 @@ void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
|
|||||||
stats *sptr;
|
stats *sptr;
|
||||||
conclusions conclusion;
|
conclusions conclusion;
|
||||||
unsigned long long client_limit;
|
unsigned long long client_limit;
|
||||||
|
int sysret;
|
||||||
|
|
||||||
head_sptr= (stats *)my_malloc(sizeof(stats) * iterations,
|
head_sptr= (stats *)my_malloc(sizeof(stats) * iterations,
|
||||||
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
|
MYF(MY_ZEROFILL|MY_FAE|MY_WME));
|
||||||
@ -463,7 +464,9 @@ void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
|
|||||||
run_query(mysql, "SET AUTOCOMMIT=0", strlen("SET AUTOCOMMIT=0"));
|
run_query(mysql, "SET AUTOCOMMIT=0", strlen("SET AUTOCOMMIT=0"));
|
||||||
|
|
||||||
if (pre_system)
|
if (pre_system)
|
||||||
system(pre_system);
|
if ((sysret= system(pre_system)) != 0)
|
||||||
|
fprintf(stderr, "Warning: Execution of pre_system option returned %d.\n",
|
||||||
|
sysret);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Pre statements are always run after all other logic so they can
|
Pre statements are always run after all other logic so they can
|
||||||
@ -478,7 +481,9 @@ void concurrency_loop(MYSQL *mysql, uint current, option_string *eptr)
|
|||||||
run_statements(mysql, post_statements);
|
run_statements(mysql, post_statements);
|
||||||
|
|
||||||
if (post_system)
|
if (post_system)
|
||||||
system(post_system);
|
if ((sysret= system(post_system)) != 0)
|
||||||
|
fprintf(stderr, "Warning: Execution of post_system option returned %d.\n",
|
||||||
|
sysret);
|
||||||
|
|
||||||
/* We are finished with this run */
|
/* We are finished with this run */
|
||||||
if (auto_generate_sql_autoincrement || auto_generate_sql_guid_primary)
|
if (auto_generate_sql_autoincrement || auto_generate_sql_guid_primary)
|
||||||
|
@ -417,6 +417,7 @@ static struct st_expected_errors saved_expected_errors;
|
|||||||
struct st_command
|
struct st_command
|
||||||
{
|
{
|
||||||
char *query, *query_buf,*first_argument,*last_argument,*end;
|
char *query, *query_buf,*first_argument,*last_argument,*end;
|
||||||
|
DYNAMIC_STRING content;
|
||||||
int first_word_len, query_len;
|
int first_word_len, query_len;
|
||||||
my_bool abort_on_error;
|
my_bool abort_on_error;
|
||||||
struct st_expected_errors expected_errors;
|
struct st_expected_errors expected_errors;
|
||||||
@ -1140,6 +1141,8 @@ void free_used_memory()
|
|||||||
{
|
{
|
||||||
struct st_command **q= dynamic_element(&q_lines, i, struct st_command**);
|
struct st_command **q= dynamic_element(&q_lines, i, struct st_command**);
|
||||||
my_free((*q)->query_buf,MYF(MY_ALLOW_ZERO_PTR));
|
my_free((*q)->query_buf,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
|
if ((*q)->content.str)
|
||||||
|
dynstr_free(&(*q)->content);
|
||||||
my_free((*q),MYF(0));
|
my_free((*q),MYF(0));
|
||||||
}
|
}
|
||||||
for (i= 0; i < 10; i++)
|
for (i= 0; i < 10; i++)
|
||||||
@ -1532,7 +1535,7 @@ void show_diff(DYNAMIC_STRING* ds,
|
|||||||
else
|
else
|
||||||
diff_name = 0;
|
diff_name = 0;
|
||||||
#else
|
#else
|
||||||
diff_name = "diff"; // Otherwise always assume it's called diff
|
diff_name = "diff"; /* Otherwise always assume it's called diff */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (diff_name)
|
if (diff_name)
|
||||||
@ -3290,21 +3293,30 @@ void do_write_file_command(struct st_command *command, my_bool append)
|
|||||||
sizeof(write_file_args)/sizeof(struct command_arg),
|
sizeof(write_file_args)/sizeof(struct command_arg),
|
||||||
' ');
|
' ');
|
||||||
|
|
||||||
/* If no delimiter was provided, use EOF */
|
|
||||||
if (ds_delimiter.length == 0)
|
|
||||||
dynstr_set(&ds_delimiter, "EOF");
|
|
||||||
|
|
||||||
if (!append && access(ds_filename.str, F_OK) == 0)
|
if (!append && access(ds_filename.str, F_OK) == 0)
|
||||||
{
|
{
|
||||||
/* The file should not be overwritten */
|
/* The file should not be overwritten */
|
||||||
die("File already exist: '%s'", ds_filename.str);
|
die("File already exist: '%s'", ds_filename.str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ds_content= command->content;
|
||||||
|
/* If it hasn't been done already by a loop iteration, fill it in */
|
||||||
|
if (! ds_content.str)
|
||||||
|
{
|
||||||
|
/* If no delimiter was provided, use EOF */
|
||||||
|
if (ds_delimiter.length == 0)
|
||||||
|
dynstr_set(&ds_delimiter, "EOF");
|
||||||
|
|
||||||
init_dynamic_string(&ds_content, "", 1024, 1024);
|
init_dynamic_string(&ds_content, "", 1024, 1024);
|
||||||
read_until_delimiter(&ds_content, &ds_delimiter);
|
read_until_delimiter(&ds_content, &ds_delimiter);
|
||||||
|
command->content= ds_content;
|
||||||
|
}
|
||||||
|
/* This function could be called even if "false", so check before printing */
|
||||||
|
if (cur_block->ok)
|
||||||
|
{
|
||||||
DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str));
|
DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str));
|
||||||
str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append);
|
str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append);
|
||||||
dynstr_free(&ds_content);
|
}
|
||||||
dynstr_free(&ds_filename);
|
dynstr_free(&ds_filename);
|
||||||
dynstr_free(&ds_delimiter);
|
dynstr_free(&ds_delimiter);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@ -3447,12 +3459,17 @@ void do_diff_files(struct st_command *command)
|
|||||||
die("command \"diff_files\" failed, file '%s' does not exist",
|
die("command \"diff_files\" failed, file '%s' does not exist",
|
||||||
ds_filename2.str);
|
ds_filename2.str);
|
||||||
|
|
||||||
if ((error= compare_files(ds_filename.str, ds_filename2.str)))
|
if ((error= compare_files(ds_filename.str, ds_filename2.str)) &&
|
||||||
|
match_expected_error(command, error, NULL) < 0)
|
||||||
{
|
{
|
||||||
/* Compare of the two files failed, append them to output
|
/* Compare of the two files failed, append them to output
|
||||||
so the failure can be analyzed
|
so the failure can be analyzed, but only if it was not
|
||||||
|
expected to fail.
|
||||||
*/
|
*/
|
||||||
show_diff(&ds_res, ds_filename.str, ds_filename2.str);
|
show_diff(&ds_res, ds_filename.str, ds_filename2.str);
|
||||||
|
log_file.write(&ds_res);
|
||||||
|
log_file.flush();
|
||||||
|
dynstr_set(&ds_res, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
dynstr_free(&ds_filename);
|
dynstr_free(&ds_filename);
|
||||||
@ -7165,6 +7182,10 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
|||||||
run_query_normal(cn, command, flags, query, query_len,
|
run_query_normal(cn, command, flags, query, query_len,
|
||||||
ds, &ds_warnings);
|
ds, &ds_warnings);
|
||||||
|
|
||||||
|
dynstr_free(&ds_warnings);
|
||||||
|
if (command->type == Q_EVAL)
|
||||||
|
dynstr_free(&eval_query);
|
||||||
|
|
||||||
if (display_result_sorted)
|
if (display_result_sorted)
|
||||||
{
|
{
|
||||||
/* Sort the result set and append it to result */
|
/* Sort the result set and append it to result */
|
||||||
@ -7195,11 +7216,8 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
|||||||
check_require(ds, command->require_file);
|
check_require(ds, command->require_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
dynstr_free(&ds_warnings);
|
|
||||||
if (ds == &ds_result)
|
if (ds == &ds_result)
|
||||||
dynstr_free(&ds_result);
|
dynstr_free(&ds_result);
|
||||||
if (command->type == Q_EVAL)
|
|
||||||
dynstr_free(&eval_query);
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7684,7 +7702,31 @@ int main(int argc, char **argv)
|
|||||||
command->type= Q_COMMENT;
|
command->type= Q_COMMENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cur_block->ok)
|
my_bool ok_to_do= cur_block->ok;
|
||||||
|
/*
|
||||||
|
Some commands need to be "done" the first time if they may get
|
||||||
|
re-iterated over in a true context. This can only happen if there's
|
||||||
|
a while loop at some level above the current block.
|
||||||
|
*/
|
||||||
|
if (!ok_to_do)
|
||||||
|
{
|
||||||
|
if (command->type == Q_SOURCE ||
|
||||||
|
command->type == Q_WRITE_FILE ||
|
||||||
|
command->type == Q_APPEND_FILE ||
|
||||||
|
command->type == Q_PERL)
|
||||||
|
{
|
||||||
|
for (struct st_block *stb= cur_block-1; stb >= block_stack; stb--)
|
||||||
|
{
|
||||||
|
if (stb->cmd == cmd_while)
|
||||||
|
{
|
||||||
|
ok_to_do= 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ok_to_do)
|
||||||
{
|
{
|
||||||
command->last_argument= command->first_argument;
|
command->last_argument= command->first_argument;
|
||||||
processed = 1;
|
processed = 1;
|
||||||
@ -7993,6 +8035,8 @@ int main(int argc, char **argv)
|
|||||||
if (parsing_disabled)
|
if (parsing_disabled)
|
||||||
die("Test ended with parsing disabled");
|
die("Test ended with parsing disabled");
|
||||||
|
|
||||||
|
my_bool empty_result= FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The whole test has been executed _sucessfully_.
|
The whole test has been executed _sucessfully_.
|
||||||
Time to compare result or save it to record file.
|
Time to compare result or save it to record file.
|
||||||
@ -8032,12 +8076,21 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
/* Empty output is an error *unless* we also have an empty result file */
|
||||||
|
if (! result_file_name || record ||
|
||||||
|
compare_files (log_file.file_name(), result_file_name))
|
||||||
{
|
{
|
||||||
die("The test didn't produce any output");
|
die("The test didn't produce any output");
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
empty_result= TRUE; /* Meaning empty was expected */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!command_executed && result_file_name)
|
if (!command_executed && result_file_name && !empty_result)
|
||||||
die("No queries executed but result file found!");
|
die("No queries executed but non-empty result file found!");
|
||||||
|
|
||||||
verbose_msg("Test has succeeded!");
|
verbose_msg("Test has succeeded!");
|
||||||
timer_output();
|
timer_output();
|
||||||
|
@ -465,10 +465,10 @@ rl_redisplay ()
|
|||||||
int newlines, lpos, temp, modmark;
|
int newlines, lpos, temp, modmark;
|
||||||
const char *prompt_this_line;
|
const char *prompt_this_line;
|
||||||
#if defined (HANDLE_MULTIBYTE)
|
#if defined (HANDLE_MULTIBYTE)
|
||||||
int num, n0;
|
int num, n0= 0;
|
||||||
wchar_t wc;
|
wchar_t wc;
|
||||||
size_t wc_bytes;
|
size_t wc_bytes;
|
||||||
int wc_width;
|
int wc_width= 0;
|
||||||
mbstate_t ps;
|
mbstate_t ps;
|
||||||
int _rl_wrapped_multicolumn = 0;
|
int _rl_wrapped_multicolumn = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -828,7 +828,7 @@ rl_redisplay ()
|
|||||||
cpos_buffer_position = out;
|
cpos_buffer_position = out;
|
||||||
lb_linenum = newlines;
|
lb_linenum = newlines;
|
||||||
}
|
}
|
||||||
for (i = in; i < in+wc_bytes; i++)
|
for (i = in; i < in+(int)wc_bytes; i++)
|
||||||
line[out++] = rl_line_buffer[i];
|
line[out++] = rl_line_buffer[i];
|
||||||
for (i = 0; i < wc_width; i++)
|
for (i = 0; i < wc_width; i++)
|
||||||
CHECK_LPOS();
|
CHECK_LPOS();
|
||||||
|
@ -81,8 +81,13 @@ rl_alphabetic (c)
|
|||||||
|
|
||||||
#if defined (HANDLE_MULTIBYTE)
|
#if defined (HANDLE_MULTIBYTE)
|
||||||
int
|
int
|
||||||
_rl_walphabetic (wc)
|
/*
|
||||||
wchar_t wc;
|
Portability issue with VisualAge C++ Professional / C for AIX Compiler, Version 6:
|
||||||
|
"util.c", line 84.1: 1506-343 (S) Redeclaration of _rl_walphabetic differs
|
||||||
|
from previous declaration on line 110 of "rlmbutil.h".
|
||||||
|
So, put type in the function signature here.
|
||||||
|
*/
|
||||||
|
_rl_walphabetic (wchar_t wc)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ AC_CANONICAL_SYSTEM
|
|||||||
#
|
#
|
||||||
# When changing major version number please also check switch statement
|
# When changing major version number please also check switch statement
|
||||||
# in mysqlbinlog::check_master_version().
|
# in mysqlbinlog::check_master_version().
|
||||||
AM_INIT_AUTOMAKE(mysql, 5.1.39)
|
AM_INIT_AUTOMAKE(mysql, 5.1.40)
|
||||||
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
||||||
|
|
||||||
PROTOCOL_VERSION=10
|
PROTOCOL_VERSION=10
|
||||||
|
@ -441,7 +441,7 @@ public:
|
|||||||
const Ciphers& GetCiphers() const;
|
const Ciphers& GetCiphers() const;
|
||||||
const DH_Parms& GetDH_Parms() const;
|
const DH_Parms& GetDH_Parms() const;
|
||||||
const Stats& GetStats() const;
|
const Stats& GetStats() const;
|
||||||
const VerifyCallback getVerifyCallback() const;
|
VerifyCallback getVerifyCallback() const;
|
||||||
pem_password_cb GetPasswordCb() const;
|
pem_password_cb GetPasswordCb() const;
|
||||||
void* GetUserData() const;
|
void* GetUserData() const;
|
||||||
bool GetSessionCacheOff() const;
|
bool GetSessionCacheOff() const;
|
||||||
|
@ -1833,7 +1833,7 @@ SSL_CTX::GetCA_List() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const VerifyCallback SSL_CTX::getVerifyCallback() const
|
VerifyCallback SSL_CTX::getVerifyCallback() const
|
||||||
{
|
{
|
||||||
return verifyCallback_;
|
return verifyCallback_;
|
||||||
}
|
}
|
||||||
|
@ -137,13 +137,13 @@ extern FILE *_db_fp_(void);
|
|||||||
#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2)
|
#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2)
|
||||||
#define DBUG_PRINT(keyword,arglist) do { } while(0)
|
#define DBUG_PRINT(keyword,arglist) do { } while(0)
|
||||||
#define DBUG_PUSH(a1)
|
#define DBUG_PUSH(a1)
|
||||||
#define DBUG_SET(a1)
|
#define DBUG_SET(a1) do { } while(0)
|
||||||
#define DBUG_SET_INITIAL(a1)
|
#define DBUG_SET_INITIAL(a1) do { } while(0)
|
||||||
#define DBUG_POP()
|
#define DBUG_POP()
|
||||||
#define DBUG_PROCESS(a1)
|
#define DBUG_PROCESS(a1)
|
||||||
#define DBUG_SETJMP(a1) setjmp(a1)
|
#define DBUG_SETJMP(a1) setjmp(a1)
|
||||||
#define DBUG_LONGJMP(a1) longjmp(a1)
|
#define DBUG_LONGJMP(a1) longjmp(a1)
|
||||||
#define DBUG_DUMP(keyword,a1,a2)
|
#define DBUG_DUMP(keyword,a1,a2) do { } while(0)
|
||||||
#define DBUG_END()
|
#define DBUG_END()
|
||||||
#define DBUG_ASSERT(A) do { } while(0)
|
#define DBUG_ASSERT(A) do { } while(0)
|
||||||
#define DBUG_LOCK_FILE
|
#define DBUG_LOCK_FILE
|
||||||
|
@ -558,12 +558,6 @@ int __void__;
|
|||||||
#define LINT_INIT(var)
|
#define LINT_INIT(var)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || defined(HAVE_purify)
|
|
||||||
#define PURIFY_OR_LINT_INIT(var) var=0
|
|
||||||
#else
|
|
||||||
#define PURIFY_OR_LINT_INIT(var)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Suppress uninitialized variable warning without generating code.
|
Suppress uninitialized variable warning without generating code.
|
||||||
|
|
||||||
|
@ -164,6 +164,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
|||||||
port=0;
|
port=0;
|
||||||
unix_socket=0;
|
unix_socket=0;
|
||||||
|
|
||||||
|
client_flag|=mysql->options.client_flag;
|
||||||
/* Send client information for access check */
|
/* Send client information for access check */
|
||||||
client_flag|=CLIENT_CAPABILITIES;
|
client_flag|=CLIENT_CAPABILITIES;
|
||||||
if (client_flag & CLIENT_MULTI_STATEMENTS)
|
if (client_flag & CLIENT_MULTI_STATEMENTS)
|
||||||
|
@ -17,7 +17,8 @@
|
|||||||
|
|
||||||
## Process this file with automake to create Makefile.in
|
## Process this file with automake to create Makefile.in
|
||||||
|
|
||||||
testdir = $(prefix)/mysql-test
|
testroot = $(prefix)
|
||||||
|
testdir = $(testroot)/mysql-test
|
||||||
|
|
||||||
test_SCRIPTS = mtr \
|
test_SCRIPTS = mtr \
|
||||||
mysql-test-run \
|
mysql-test-run \
|
||||||
|
@ -23,3 +23,10 @@ The syntax is as follows:
|
|||||||
start with the same characters up to the last letter before the asterisk
|
start with the same characters up to the last letter before the asterisk
|
||||||
are considered experimental:
|
are considered experimental:
|
||||||
main.a* # get rid of main.alias, main.alibaba and main.agliolio
|
main.a* # get rid of main.alias, main.alibaba and main.agliolio
|
||||||
|
|
||||||
|
6) Optionally, the test case may be followed by one or more platform
|
||||||
|
qualifiers beginning with @ or @!. The test will then be considered
|
||||||
|
experimental only/except on that platform. Basic OS names as
|
||||||
|
reported by $^O in Perl, or 'windows' are supported, this includes
|
||||||
|
solaris, linux, windows, aix, darwin, ... Example:
|
||||||
|
main.alias @aix @windows # Fails on those
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
funcs_1.charset_collation_1 # depends on compile-time decisions
|
funcs_1.charset_collation_1 # depends on compile-time decisions
|
||||||
binlog.binlog_tmp_table # Bug#45578: Test binlog_tmp_table fails ramdonly on PB2: Unknown table 't2'
|
main.plugin_load @solaris # Bug#42144
|
||||||
main.ctype_gbk_binlog # Bug#46010: main.ctype_gbk_binlog fails sporadically : Table 't2' already exists
|
binlog.binlog_tmp_table* # Bug#45578: Test binlog_tmp_table fails ramdonly on PB2: Unknown table 't2'
|
||||||
rpl.rpl_row_create_table # Bug#45576: rpl_row_create_table fails on PB2
|
main.ctype_gbk_binlog @solaris # Bug#46010: main.ctype_gbk_binlog fails sporadically : Table 't2' already exists
|
||||||
|
rpl.rpl_row_create_table* # Bug#45576: rpl_row_create_table fails on PB2
|
||||||
rpl_ndb.rpl_ndb_log # Bug#38998
|
rpl_ndb.rpl_ndb_log # Bug#38998
|
||||||
rpl.rpl_innodb_bug28430 # Bug#46029
|
rpl.rpl_innodb_bug28430* @solaris # Bug#46029
|
||||||
|
rpl.rpl_get_master_version_and_clock* # Bug#46931 2009-08-26 alik rpl.rpl_get_master_version_and_clock fails on hpux11.31
|
||||||
|
@ -1,27 +1,62 @@
|
|||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop database if exists `drop-temp+table-test`;
|
DROP DATABASE IF EXISTS `drop-temp+table-test`;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
connect (con1,localhost,root,,);
|
connect (con1,localhost,root,,);
|
||||||
connect (con2,localhost,root,,);
|
connect (con2,localhost,root,,);
|
||||||
connection con1;
|
connection con1;
|
||||||
reset master;
|
RESET MASTER;
|
||||||
create database `drop-temp+table-test`;
|
CREATE DATABASE `drop-temp+table-test`;
|
||||||
use `drop-temp+table-test`;
|
USE `drop-temp+table-test`;
|
||||||
create temporary table shortn1 (a int);
|
CREATE TEMPORARY TABLE shortn1 (a INT);
|
||||||
create temporary table `table:name` (a int);
|
CREATE TEMPORARY TABLE `table:name` (a INT);
|
||||||
create temporary table shortn2 (a int);
|
CREATE TEMPORARY TABLE shortn2 (a INT);
|
||||||
select get_lock("a",10);
|
|
||||||
|
##############################################################################
|
||||||
|
# BUG#46572 DROP TEMPORARY table IF EXISTS does not have a consistent behavior
|
||||||
|
# in ROW mode
|
||||||
|
#
|
||||||
|
# In RBR, 'DROP TEMPORARY TABLE ...' statement should never be binlogged no
|
||||||
|
# matter if the tables exist or not. In contrast, both in SBR and MBR, the
|
||||||
|
# statement should be always binlogged no matter if the tables exist or not.
|
||||||
|
##############################################################################
|
||||||
|
CREATE TEMPORARY TABLE tmp(c1 int);
|
||||||
|
CREATE TEMPORARY TABLE tmp1(c1 int);
|
||||||
|
CREATE TEMPORARY TABLE tmp2(c1 int);
|
||||||
|
CREATE TEMPORARY TABLE tmp3(c1 int);
|
||||||
|
CREATE TABLE t(c1 int);
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
# Before fixing BUG#46572, 'DROP TEMPORARY TABLE IF EXISTS...' statement was
|
||||||
|
# binlogged when the table did not exist in RBR.
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
||||||
|
|
||||||
|
# In RBR, 'DROP TEMPORARY TABLE ...' statement is never binlogged no matter if
|
||||||
|
# the tables exist or not.
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp, tmp1;
|
||||||
|
DROP TEMPORARY TABLE tmp3;
|
||||||
|
|
||||||
|
#In RBR, tmp2 will NOT be binlogged, because it is a temporary table.
|
||||||
|
DROP TABLE IF EXISTS tmp2, t;
|
||||||
|
|
||||||
|
#In RBR, tmp2 will be binlogged, because it does not exist and master do not know
|
||||||
|
# whether it is a temporary table or not.
|
||||||
|
DROP TABLE IF EXISTS tmp2, t;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
SELECT GET_LOCK("a",10);
|
||||||
disconnect con1;
|
disconnect con1;
|
||||||
|
|
||||||
connection con2;
|
connection con2;
|
||||||
# We want to SHOW BINLOG EVENTS, to know what was logged. But there is no
|
# We want to SHOW BINLOG EVENTS, to know what was logged. But there is no
|
||||||
# guarantee that logging of the terminated con1 has been done yet.
|
# guarantee that logging of the terminated con1 has been done yet.
|
||||||
# To be sure that logging has been done, we use a user lock.
|
# To be sure that logging has been done, we use a user lock.
|
||||||
select get_lock("a",10);
|
SELECT GET_LOCK("a",10);
|
||||||
let $VERSION=`select version()`;
|
let $VERSION=`SELECT VERSION()`;
|
||||||
source include/show_binlog_events.inc;
|
source include/show_binlog_events.inc;
|
||||||
drop database `drop-temp+table-test`;
|
DROP DATABASE `drop-temp+table-test`;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -22,6 +22,8 @@ DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t14a,t15,t1
|
|||||||
# should stop the slave. #
|
# should stop the slave. #
|
||||||
#################################################
|
#################################################
|
||||||
|
|
||||||
|
call mtr.add_suppression("Slave: Unknown table 't6' Error_code: 1051");
|
||||||
|
|
||||||
--echo **** Diff Table Def Start ****
|
--echo **** Diff Table Def Start ****
|
||||||
|
|
||||||
##############################################
|
##############################################
|
||||||
|
@ -41,7 +41,17 @@ eval SELECT RELEASE_LOCK($debug_lock);
|
|||||||
connection slave;
|
connection slave;
|
||||||
source include/wait_for_slave_io_error.inc;
|
source include/wait_for_slave_io_error.inc;
|
||||||
let $last_io_errno= query_get_value("show slave status", Last_IO_Errno, 1);
|
let $last_io_errno= query_get_value("show slave status", Last_IO_Errno, 1);
|
||||||
echo Slave_IO_Errno= $last_io_errno;
|
--echo Check network error happened here
|
||||||
|
if (`SELECT '$last_io_errno' = '2013' || # CR_SERVER_LOST
|
||||||
|
'$last_io_errno' = '2003' || # CR_CONN_HOST_ERROR
|
||||||
|
'$last_io_errno' = '2002' || # CR_CONNECTION_ERROR
|
||||||
|
'$last_io_errno' = '2006' || # CR_SERVER_GONE_ERROR
|
||||||
|
'$last_io_errno' = '1040' || # ER_CON_COUNT_ERROR
|
||||||
|
'$last_io_errno' = '1053' # ER_SERVER_SHUTDOWN
|
||||||
|
`)
|
||||||
|
{
|
||||||
|
--echo NETWORK ERROR
|
||||||
|
}
|
||||||
|
|
||||||
# Write file to make mysql-test-run.pl start up the server again
|
# Write file to make mysql-test-run.pl start up the server again
|
||||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||||
|
4
mysql-test/include/have_mysql_upgrade.inc
Normal file
4
mysql-test/include/have_mysql_upgrade.inc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
--require r/have_mysql_upgrade.result
|
||||||
|
--disable_query_log
|
||||||
|
select LENGTH("$MYSQL_UPGRADE")>0 as have_mysql_upgrade;
|
||||||
|
--enable_query_log
|
4
mysql-test/include/have_not_innodb_plugin.inc
Normal file
4
mysql-test/include/have_not_innodb_plugin.inc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
disable_query_log;
|
||||||
|
--require r/not_true.require
|
||||||
|
select (PLUGIN_LIBRARY LIKE 'ha_innodb_plugin%') as `TRUE` from information_schema.plugins where PLUGIN_NAME='InnoDB';
|
||||||
|
enable_query_log;
|
@ -132,7 +132,7 @@ INSERT INTO global_suppressions VALUES
|
|||||||
|
|
||||||
("Error in Log_event::read_log_event\\\(\\\): 'Sanity check failed', data_len: 258, event_type: 49"),
|
("Error in Log_event::read_log_event\\\(\\\): 'Sanity check failed', data_len: 258, event_type: 49"),
|
||||||
|
|
||||||
("Statement is not safe to log in statement format"),
|
("Statement may not be safe to log in statement format"),
|
||||||
|
|
||||||
/* test case for Bug#bug29807 copies a stray frm into database */
|
/* test case for Bug#bug29807 copies a stray frm into database */
|
||||||
("InnoDB: Error: table `test`.`bug29807` does not exist in the InnoDB internal"),
|
("InnoDB: Error: table `test`.`bug29807` does not exist in the InnoDB internal"),
|
||||||
@ -162,6 +162,8 @@ INSERT INTO global_suppressions VALUES
|
|||||||
("Slave: Unknown column 'c7' in 't15' Error_code: 1054"),
|
("Slave: Unknown column 'c7' in 't15' Error_code: 1054"),
|
||||||
("Slave: Can't DROP 'c7'.* 1091"),
|
("Slave: Can't DROP 'c7'.* 1091"),
|
||||||
("Slave: Key column 'c6'.* 1072"),
|
("Slave: Key column 'c6'.* 1072"),
|
||||||
|
("Slave I/O: The slave I/O thread stops because a fatal error is encountered when it try to get the value of SERVER_ID variable from master."),
|
||||||
|
(".SELECT UNIX_TIMESTAMP... failed on master, do not trust column Seconds_Behind_Master of SHOW SLAVE STATUS"),
|
||||||
|
|
||||||
/* Test case for Bug#31590 in order_by.test produces the following error */
|
/* Test case for Bug#31590 in order_by.test produces the following error */
|
||||||
("Out of sort memory; increase server sort buffer size"),
|
("Out of sort memory; increase server sort buffer size"),
|
||||||
@ -171,6 +173,7 @@ INSERT INTO global_suppressions VALUES
|
|||||||
this error message.
|
this error message.
|
||||||
*/
|
*/
|
||||||
("Can't find file: '.\\\\test\\\\\\?{8}.frm'"),
|
("Can't find file: '.\\\\test\\\\\\?{8}.frm'"),
|
||||||
|
("Slave: Unknown table 't1' Error_code: 1051"),
|
||||||
|
|
||||||
("THE_LAST_SUPPRESSION")||
|
("THE_LAST_SUPPRESSION")||
|
||||||
|
|
||||||
|
@ -204,8 +204,10 @@ my @mysqld_rules=
|
|||||||
{ 'port' => \&fix_port },
|
{ 'port' => \&fix_port },
|
||||||
{ 'socket' => \&fix_socket },
|
{ 'socket' => \&fix_socket },
|
||||||
{ '#log-error' => \&fix_log_error },
|
{ '#log-error' => \&fix_log_error },
|
||||||
{ 'log' => \&fix_log },
|
{ 'general_log' => 1 },
|
||||||
{ 'log-slow-queries' => \&fix_log_slow_queries },
|
{ 'general_log_file' => \&fix_log },
|
||||||
|
{ 'slow_query_log' => 1 },
|
||||||
|
{ 'slow_query_log_file' => \&fix_log_slow_queries },
|
||||||
{ '#user' => sub { return shift->{ARGS}->{user} || ""; } },
|
{ '#user' => sub { return shift->{ARGS}->{user} || ""; } },
|
||||||
{ '#password' => sub { return shift->{ARGS}->{password} || ""; } },
|
{ '#password' => sub { return shift->{ARGS}->{password} || ""; } },
|
||||||
{ 'server-id' => \&fix_server_id, },
|
{ 'server-id' => \&fix_server_id, },
|
||||||
|
@ -106,10 +106,13 @@ sub check_socket_path_length {
|
|||||||
my ($path)= @_;
|
my ($path)= @_;
|
||||||
|
|
||||||
return 0 if IS_WINDOWS;
|
return 0 if IS_WINDOWS;
|
||||||
|
# This may not be true, but we can't test for it on AIX due to Perl bug
|
||||||
|
# See Bug #45771
|
||||||
|
return 0 if ($^O eq 'aix');
|
||||||
|
|
||||||
require IO::Socket::UNIX;
|
require IO::Socket::UNIX;
|
||||||
|
|
||||||
my $truncated= 1; # Be negative
|
my $truncated= undef;
|
||||||
|
|
||||||
# Create a tempfile name with same length as "path"
|
# Create a tempfile name with same length as "path"
|
||||||
my $tmpdir = tempdir( CLEANUP => 0);
|
my $tmpdir = tempdir( CLEANUP => 0);
|
||||||
@ -122,6 +125,7 @@ sub check_socket_path_length {
|
|||||||
Local => $testfile,
|
Local => $testfile,
|
||||||
Listen => 1,
|
Listen => 1,
|
||||||
);
|
);
|
||||||
|
$truncated= 1; # Be negatvie
|
||||||
|
|
||||||
die "Could not create UNIX domain socket: $!"
|
die "Could not create UNIX domain socket: $!"
|
||||||
unless defined $sock;
|
unless defined $sock;
|
||||||
@ -133,6 +137,9 @@ sub check_socket_path_length {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
die "Unexpected failure when checking socket path length: $@"
|
||||||
|
if $@ and not defined $truncated;
|
||||||
|
|
||||||
$sock= undef; # Close socket
|
$sock= undef; # Close socket
|
||||||
rmtree($tmpdir); # Remove the tempdir and any socket file created
|
rmtree($tmpdir); # Remove the tempdir and any socket file created
|
||||||
return $truncated;
|
return $truncated;
|
||||||
|
@ -13,7 +13,8 @@
|
|||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
safedir = $(prefix)/mysql-test/lib/My/SafeProcess
|
testroot = $(prefix)
|
||||||
|
safedir = $(testroot)/mysql-test/lib/My/SafeProcess
|
||||||
#nobase_bin_PROGRAMS = ...
|
#nobase_bin_PROGRAMS = ...
|
||||||
safe_PROGRAMS = my_safe_process
|
safe_PROGRAMS = my_safe_process
|
||||||
|
|
||||||
|
@ -163,6 +163,7 @@ int main(int argc, const char** argv )
|
|||||||
HANDLE job_handle;
|
HANDLE job_handle;
|
||||||
HANDLE wait_handles[NUM_HANDLES]= {0};
|
HANDLE wait_handles[NUM_HANDLES]= {0};
|
||||||
PROCESS_INFORMATION process_info= {0};
|
PROCESS_INFORMATION process_info= {0};
|
||||||
|
BOOL nocore= FALSE;
|
||||||
|
|
||||||
sprintf(safe_process_name, "safe_process[%d]", pid);
|
sprintf(safe_process_name, "safe_process[%d]", pid);
|
||||||
|
|
||||||
@ -188,13 +189,20 @@ int main(int argc, const char** argv )
|
|||||||
die("No real args -> nothing to do");
|
die("No real args -> nothing to do");
|
||||||
/* Copy the remaining args to child_arg */
|
/* Copy the remaining args to child_arg */
|
||||||
for (int j= i+1; j < argc; j++) {
|
for (int j= i+1; j < argc; j++) {
|
||||||
to+= _snprintf(to, child_args + sizeof(child_args) - to, "%s ", argv[j]);
|
if (strchr (argv[j], ' ')) {
|
||||||
|
/* Protect with "" if this arg contains a space */
|
||||||
|
to+= _snprintf(to, child_args + sizeof(child_args) - to,
|
||||||
|
"\"%s\" ", argv[j]);
|
||||||
|
} else {
|
||||||
|
to+= _snprintf(to, child_args + sizeof(child_args) - to,
|
||||||
|
"%s ", argv[j]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
if ( strcmp(arg, "--verbose") == 0 )
|
if (strcmp(arg, "--verbose") == 0)
|
||||||
verbose++;
|
verbose++;
|
||||||
else if ( strncmp(arg, "--parent-pid", 10) == 0 )
|
else if (strncmp(arg, "--parent-pid", 10) == 0)
|
||||||
{
|
{
|
||||||
/* Override parent_pid with a value provided by user */
|
/* Override parent_pid with a value provided by user */
|
||||||
const char* start;
|
const char* start;
|
||||||
@ -204,6 +212,10 @@ int main(int argc, const char** argv )
|
|||||||
if ((parent_pid= atoi(start)) == 0)
|
if ((parent_pid= atoi(start)) == 0)
|
||||||
die("Invalid value '%s' passed to --parent-id", start);
|
die("Invalid value '%s' passed to --parent-id", start);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(arg, "--nocore") == 0)
|
||||||
|
{
|
||||||
|
nocore= TRUE;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
die("Unknown option: %s", arg);
|
die("Unknown option: %s", arg);
|
||||||
}
|
}
|
||||||
@ -241,6 +253,11 @@ int main(int argc, const char** argv )
|
|||||||
&jeli, sizeof(jeli)) == 0)
|
&jeli, sizeof(jeli)) == 0)
|
||||||
message("SetInformationJobObject failed, continue anyway...");
|
message("SetInformationJobObject failed, continue anyway...");
|
||||||
|
|
||||||
|
/* Avoid popup box */
|
||||||
|
if (nocore)
|
||||||
|
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX
|
||||||
|
| SEM_NOOPENFILEERRORBOX);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Setup stdin, stdout and stderr redirect */
|
/* Setup stdin, stdout and stderr redirect */
|
||||||
si.dwFlags= STARTF_USESTDHANDLES;
|
si.dwFlags= STARTF_USESTDHANDLES;
|
||||||
|
@ -41,6 +41,7 @@ our $opt_with_ndbcluster_only;
|
|||||||
our $defaults_file;
|
our $defaults_file;
|
||||||
our $defaults_extra_file;
|
our $defaults_extra_file;
|
||||||
our $reorder= 1;
|
our $reorder= 1;
|
||||||
|
our $quick_collect;
|
||||||
|
|
||||||
sub collect_option {
|
sub collect_option {
|
||||||
my ($opt, $value)= @_;
|
my ($opt, $value)= @_;
|
||||||
@ -68,6 +69,9 @@ require "mtr_misc.pl";
|
|||||||
my $do_test_reg;
|
my $do_test_reg;
|
||||||
my $skip_test_reg;
|
my $skip_test_reg;
|
||||||
|
|
||||||
|
# If "Quick collect", set to 1 once a test to run has been found.
|
||||||
|
my $some_test_found;
|
||||||
|
|
||||||
sub init_pattern {
|
sub init_pattern {
|
||||||
my ($from, $what)= @_;
|
my ($from, $what)= @_;
|
||||||
return undef unless defined $from;
|
return undef unless defined $from;
|
||||||
@ -102,6 +106,7 @@ sub collect_test_cases ($$) {
|
|||||||
foreach my $suite (split(",", $suites))
|
foreach my $suite (split(",", $suites))
|
||||||
{
|
{
|
||||||
push(@$cases, collect_one_suite($suite, $opt_cases));
|
push(@$cases, collect_one_suite($suite, $opt_cases));
|
||||||
|
last if $some_test_found;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( @$opt_cases )
|
if ( @$opt_cases )
|
||||||
@ -139,7 +144,7 @@ sub collect_test_cases ($$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $reorder )
|
if ( $reorder && !$quick_collect)
|
||||||
{
|
{
|
||||||
# Reorder the test cases in an order that will make them faster to run
|
# Reorder the test cases in an order that will make them faster to run
|
||||||
my %sort_criteria;
|
my %sort_criteria;
|
||||||
@ -386,7 +391,7 @@ sub collect_one_suite($)
|
|||||||
# Read combinations for this suite and build testcases x combinations
|
# Read combinations for this suite and build testcases x combinations
|
||||||
# if any combinations exists
|
# if any combinations exists
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
if ( ! $skip_combinations )
|
if ( ! $skip_combinations && ! $quick_collect )
|
||||||
{
|
{
|
||||||
my @combinations;
|
my @combinations;
|
||||||
my $combination_file= "$suitedir/combinations";
|
my $combination_file= "$suitedir/combinations";
|
||||||
@ -644,6 +649,12 @@ sub optimize_cases {
|
|||||||
if ( $default_engine =~ /^innodb/i );
|
if ( $default_engine =~ /^innodb/i );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($quick_collect && ! $tinfo->{'skip'})
|
||||||
|
{
|
||||||
|
$some_test_found= 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -908,14 +919,14 @@ sub collect_one_test_case {
|
|||||||
if ( $tinfo->{'big_test'} and ! $::opt_big_test )
|
if ( $tinfo->{'big_test'} and ! $::opt_big_test )
|
||||||
{
|
{
|
||||||
$tinfo->{'skip'}= 1;
|
$tinfo->{'skip'}= 1;
|
||||||
$tinfo->{'comment'}= "Test need 'big-test' option";
|
$tinfo->{'comment'}= "Test needs 'big-test' option";
|
||||||
return $tinfo
|
return $tinfo
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $tinfo->{'need_debug'} && ! $::debug_compiled_binaries )
|
if ( $tinfo->{'need_debug'} && ! $::debug_compiled_binaries )
|
||||||
{
|
{
|
||||||
$tinfo->{'skip'}= 1;
|
$tinfo->{'skip'}= 1;
|
||||||
$tinfo->{'comment'}= "Test need debug binaries";
|
$tinfo->{'comment'}= "Test needs debug binaries";
|
||||||
return $tinfo
|
return $tinfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -951,14 +962,14 @@ sub collect_one_test_case {
|
|||||||
|
|
||||||
if ($tinfo->{'federated_test'})
|
if ($tinfo->{'federated_test'})
|
||||||
{
|
{
|
||||||
# This is a test that need federated, enable it
|
# This is a test that needs federated, enable it
|
||||||
push(@{$tinfo->{'master_opt'}}, "--loose-federated");
|
push(@{$tinfo->{'master_opt'}}, "--loose-federated");
|
||||||
push(@{$tinfo->{'slave_opt'}}, "--loose-federated");
|
push(@{$tinfo->{'slave_opt'}}, "--loose-federated");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $tinfo->{'innodb_test'} )
|
if ( $tinfo->{'innodb_test'} )
|
||||||
{
|
{
|
||||||
# This is a test that need innodb
|
# This is a test that needs innodb
|
||||||
if ( $::mysqld_variables{'innodb'} eq "OFF" ||
|
if ( $::mysqld_variables{'innodb'} eq "OFF" ||
|
||||||
! exists $::mysqld_variables{'innodb'} )
|
! exists $::mysqld_variables{'innodb'} )
|
||||||
{
|
{
|
||||||
@ -979,7 +990,7 @@ sub collect_one_test_case {
|
|||||||
if (grep(/^--skip-log-bin/, @::opt_extra_mysqld_opt) )
|
if (grep(/^--skip-log-bin/, @::opt_extra_mysqld_opt) )
|
||||||
{
|
{
|
||||||
$tinfo->{'skip'}= 1;
|
$tinfo->{'skip'}= 1;
|
||||||
$tinfo->{'comment'}= "Test need binlog";
|
$tinfo->{'comment'}= "Test needs binlog";
|
||||||
return $tinfo;
|
return $tinfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,8 +134,8 @@ sub mtr_report_test ($) {
|
|||||||
# an asterisk at the end, determine if the characters up to
|
# an asterisk at the end, determine if the characters up to
|
||||||
# but excluding the asterisk are the same
|
# but excluding the asterisk are the same
|
||||||
if ( $exp ne "" && substr($exp, -1, 1) eq "*" ) {
|
if ( $exp ne "" && substr($exp, -1, 1) eq "*" ) {
|
||||||
$exp = substr($exp, 0, length($exp) - 1);
|
my $nexp = substr($exp, 0, length($exp) - 1);
|
||||||
if ( substr($test_name, 0, length($exp)) ne $exp ) {
|
if ( substr($test_name, 0, length($nexp)) ne $nexp ) {
|
||||||
# no match, try next entry
|
# no match, try next entry
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
6
mysql-test/lib/v1/incompatible.tests
Normal file
6
mysql-test/lib/v1/incompatible.tests
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# This file lists tests that cannot run in MTR v1 for some reason.
|
||||||
|
# They will be skipped.
|
||||||
|
# Any text following white space after full test name is ignored
|
||||||
|
# Only exact test names can be used, no regexp.
|
||||||
|
|
||||||
|
main.fulltext_plugin # Refers to $SIMPLE_PARSER_OPT which is not set
|
@ -32,6 +32,7 @@ sub mtr_options_from_test_file($$);
|
|||||||
|
|
||||||
my $do_test;
|
my $do_test;
|
||||||
my $skip_test;
|
my $skip_test;
|
||||||
|
my %incompatible;
|
||||||
|
|
||||||
sub init_pattern {
|
sub init_pattern {
|
||||||
my ($from, $what)= @_;
|
my ($from, $what)= @_;
|
||||||
@ -47,6 +48,15 @@ sub init_pattern {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub collect_incomp_tests {
|
||||||
|
open (INCOMP, "lib/v1/incompatible.tests");
|
||||||
|
while (<INCOMP>)
|
||||||
|
{
|
||||||
|
next unless /^\w/;
|
||||||
|
s/\s.*\n//; # Ignore anything from first white space
|
||||||
|
$incompatible{$_}= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
@ -58,6 +68,8 @@ sub collect_test_cases ($) {
|
|||||||
$do_test= init_pattern($::opt_do_test, "--do-test");
|
$do_test= init_pattern($::opt_do_test, "--do-test");
|
||||||
$skip_test= init_pattern($::opt_skip_test, "--skip-test");
|
$skip_test= init_pattern($::opt_skip_test, "--skip-test");
|
||||||
|
|
||||||
|
collect_incomp_tests();
|
||||||
|
|
||||||
my $suites= shift; # Semicolon separated list of test suites
|
my $suites= shift; # Semicolon separated list of test suites
|
||||||
my $cases = []; # Array of hash
|
my $cases = []; # Array of hash
|
||||||
|
|
||||||
@ -528,6 +540,17 @@ sub collect_one_test_case($$$$$$$$$) {
|
|||||||
$tinfo->{'component_id'} = $component_id;
|
$tinfo->{'component_id'} = $component_id;
|
||||||
push(@$cases, $tinfo);
|
push(@$cases, $tinfo);
|
||||||
|
|
||||||
|
# Remove "combinations" part of test name
|
||||||
|
my $test_base_name= $tinfo->{'name'};
|
||||||
|
$test_base_name=~ s/\s.*\n//;
|
||||||
|
|
||||||
|
if (exists ($incompatible{$test_base_name}))
|
||||||
|
{
|
||||||
|
$tinfo->{'skip'}= 1;
|
||||||
|
$tinfo->{'comment'}= "Test cannot run in mtr v1";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
# Skip some tests but include in list, just mark them to skip
|
# Skip some tests but include in list, just mark them to skip
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
@ -841,7 +864,7 @@ sub collect_one_test_case($$$$$$$$$) {
|
|||||||
if ( $tinfo->{'innodb_test'} )
|
if ( $tinfo->{'innodb_test'} )
|
||||||
{
|
{
|
||||||
# This is a test that need innodb
|
# This is a test that need innodb
|
||||||
if ( $::mysqld_variables{'innodb'} ne "TRUE" )
|
if ( $::mysqld_variables{'innodb'} eq "OFF" )
|
||||||
{
|
{
|
||||||
# innodb is not supported, skip it
|
# innodb is not supported, skip it
|
||||||
$tinfo->{'skip'}= 1;
|
$tinfo->{'skip'}= 1;
|
||||||
|
@ -14,17 +14,16 @@
|
|||||||
#
|
#
|
||||||
# Design of stress script should allow one:
|
# Design of stress script should allow one:
|
||||||
#
|
#
|
||||||
# - To stress test the mysqltest binary test engine.
|
# - to use for stress testing mysqltest binary as test engine
|
||||||
# - To stress test the regular test suite and any additional test suites
|
# - to use for stress testing both regular test suite and any
|
||||||
# (such as mysql-test-extra-5.0).
|
# additional test suites (e.g. mysql-test-extra-5.0)
|
||||||
# - To specify files with lists of tests both for initialization of
|
# - to specify files with lists of tests both for initialization of
|
||||||
# stress db and for further testing itself.
|
# stress db and for further testing itself
|
||||||
# - To define the number of threads to be concurrently used in testing.
|
# - to define number of threads that will be concurrently used in testing
|
||||||
# - To define limitations for the test run. such as the number of tests or
|
# - to define limitations for test run. e.g. number of tests or loops
|
||||||
# loops for execution or duration of testing, delay between test
|
# for execution or duration of testing, delay between test executions, etc.
|
||||||
# executions, and so forth.
|
# - to get readable log file which can be used for identification of
|
||||||
# - To get a readable log file that can be used for identification of
|
# errors arose during testing
|
||||||
# errors that occur during testing.
|
|
||||||
#
|
#
|
||||||
# Basic scenarios:
|
# Basic scenarios:
|
||||||
#
|
#
|
||||||
@ -58,6 +57,8 @@
|
|||||||
# to reproduce and debug errors that was found in continued stress
|
# to reproduce and debug errors that was found in continued stress
|
||||||
# testing
|
# testing
|
||||||
#
|
#
|
||||||
|
# 2009-01-28 OBN Additions and modifications per WL#4685
|
||||||
|
#
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
use Config;
|
use Config;
|
||||||
@ -114,13 +115,15 @@ $opt_stress_mode="random";
|
|||||||
$opt_loop_count=0;
|
$opt_loop_count=0;
|
||||||
$opt_test_count=0;
|
$opt_test_count=0;
|
||||||
$opt_test_duration=0;
|
$opt_test_duration=0;
|
||||||
$opt_abort_on_error=0;
|
# OBN: Changing abort-on-error default to -1 (for WL-4626/4685): -1 means no abort
|
||||||
|
$opt_abort_on_error=-1;
|
||||||
$opt_sleep_time = 0;
|
$opt_sleep_time = 0;
|
||||||
$opt_threads=1;
|
$opt_threads=1;
|
||||||
$pid_file="mysql_stress_test.pid";
|
$pid_file="mysql_stress_test.pid";
|
||||||
$opt_mysqltest= ($^O =~ /mswin32/i) ? "mysqltest.exe" : "mysqltest";
|
$opt_mysqltest= ($^O =~ /mswin32/i) ? "mysqltest.exe" : "mysqltest";
|
||||||
$opt_check_tests_file="";
|
$opt_check_tests_file="";
|
||||||
@mysqltest_args=("--silent", "-v", "--skip-safemalloc");
|
# OBM adding a setting for 'max-connect-retries=7' the default of 500 is to high
|
||||||
|
@mysqltest_args=("--silent", "-v", "--skip-safemalloc", "--max-connect-retries=7");
|
||||||
|
|
||||||
# Client ip address
|
# Client ip address
|
||||||
$client_ip=inet_ntoa((gethostbyname(hostname()))[4]);
|
$client_ip=inet_ntoa((gethostbyname(hostname()))[4]);
|
||||||
@ -133,24 +136,31 @@ $client_ip=~ s/\.//g;
|
|||||||
#
|
#
|
||||||
# S1 - Critical errors - cause immediately abort of testing. These errors
|
# S1 - Critical errors - cause immediately abort of testing. These errors
|
||||||
# could be caused by server crash or impossibility
|
# could be caused by server crash or impossibility
|
||||||
# of test execution
|
# of test execution.
|
||||||
#
|
#
|
||||||
# S2 - Serious errors - these errors are bugs for sure as it knowns that
|
# S2 - Serious errors - these errors are bugs for sure as it knowns that
|
||||||
# they shouldn't appear during stress testing
|
# they shouldn't appear during stress testing
|
||||||
#
|
#
|
||||||
# S3 - Non-seriuos errros - these errors could be caused by fact that
|
# S3 - Unknown errors - Errors were returned but we don't know what they are
|
||||||
|
# so script can't determine if they are OK or not
|
||||||
|
#
|
||||||
|
# S4 - Non-seriuos errros - these errors could be caused by fact that
|
||||||
# we execute simultaneously statements that
|
# we execute simultaneously statements that
|
||||||
# affect tests executed by other threads
|
# affect tests executed by other threads
|
||||||
|
|
||||||
%error_strings = ( 'Failed in mysql_real_connect()' => S1,
|
%error_strings = ( 'Failed in mysql_real_connect()' => S1,
|
||||||
|
'Can\'t connect' => S1,
|
||||||
'not found (Errcode: 2)' => S1 );
|
'not found (Errcode: 2)' => S1 );
|
||||||
|
|
||||||
%error_codes = ( 1012 => S2, 1015 => S2, 1021 => S2,
|
%error_codes = ( 1012 => S2, 1015 => S2, 1021 => S2,
|
||||||
1027 => S2, 1037 => S2, 1038 => S2,
|
1027 => S2, 1037 => S2, 1038 => S2,
|
||||||
1039 => S2, 1040 => S2, 1046 => S2,
|
1039 => S2, 1040 => S2, 1046 => S2,
|
||||||
1180 => S2, 1181 => S2, 1203 => S2,
|
1053 => S2, 1180 => S2, 1181 => S2,
|
||||||
1205 => S2, 1206 => S2, 1207 => S2,
|
1203 => S2, 1205 => S4, 1206 => S2,
|
||||||
1223 => S2, 2013 => S1);
|
1207 => S2, 1213 => S4, 1223 => S2,
|
||||||
|
2002 => S1, 2003 => S1, 2006 => S1,
|
||||||
|
2013 => S1
|
||||||
|
);
|
||||||
|
|
||||||
share(%test_counters);
|
share(%test_counters);
|
||||||
%test_counters=( loop_count => 0, test_count=>0);
|
%test_counters=( loop_count => 0, test_count=>0);
|
||||||
@ -158,6 +168,35 @@ share(%test_counters);
|
|||||||
share($exiting);
|
share($exiting);
|
||||||
$exiting=0;
|
$exiting=0;
|
||||||
|
|
||||||
|
# OBN Code and 'set_exit_code' function added by ES to set an exit code based on the error category returned
|
||||||
|
# in combination with the --abort-on-error value see WL#4685)
|
||||||
|
use constant ABORT_MAKEWEIGHT => 20;
|
||||||
|
share($gExitCode);
|
||||||
|
$gExitCode = 0; # global exit code
|
||||||
|
sub set_exit_code {
|
||||||
|
my $severity = shift;
|
||||||
|
my $code = 0;
|
||||||
|
if ( $severity =~ /^S(\d+)/ ) {
|
||||||
|
$severity = $1;
|
||||||
|
$code = 11 - $severity; # S1=10, S2=9, ... -- as per WL
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# we know how we call the sub: severity should be S<num>; so, we should never be here...
|
||||||
|
print STDERR "Unknown severity format: $severity; setting to S1\n";
|
||||||
|
$severity = 1;
|
||||||
|
}
|
||||||
|
$abort = 0;
|
||||||
|
if ( $severity <= $opt_abort_on_error ) {
|
||||||
|
# the test finished with a failure severe enough to abort. We are adding the 'abort flag' to the exit code
|
||||||
|
$code += ABORT_MAKEWEIGHT;
|
||||||
|
# but are not exiting just yet -- we need to update global exit code first
|
||||||
|
$abort = 1;
|
||||||
|
}
|
||||||
|
lock $gExitCode; # we can use lock here because the script uses threads anyway
|
||||||
|
$gExitCode = $code if $code > $gExitCode;
|
||||||
|
kill INT, $$ if $abort; # this is just a way to call sig_INT_handler: it will set exiting flag, which should do the rest
|
||||||
|
}
|
||||||
|
|
||||||
share($test_counters_lock);
|
share($test_counters_lock);
|
||||||
$test_counters_lock=0;
|
$test_counters_lock=0;
|
||||||
share($log_file_lock);
|
share($log_file_lock);
|
||||||
@ -176,7 +215,8 @@ GetOptions("server-host=s", "server-logs-dir=s", "server-port=s",
|
|||||||
"threads=s", "sleep-time=s", "loop-count=i", "test-count=i",
|
"threads=s", "sleep-time=s", "loop-count=i", "test-count=i",
|
||||||
"test-duration=i", "test-suffix=s", "check-tests-file",
|
"test-duration=i", "test-suffix=s", "check-tests-file",
|
||||||
"verbose", "log-error-details", "cleanup", "mysqltest=s",
|
"verbose", "log-error-details", "cleanup", "mysqltest=s",
|
||||||
"abort-on-error", "help") || usage();
|
# OBN: (changing 'abort-on-error' to numberic for WL-4626/4685)
|
||||||
|
"abort-on-error=i" => \$opt_abort_on_error, "help") || usage();
|
||||||
|
|
||||||
usage() if ($opt_help);
|
usage() if ($opt_help);
|
||||||
|
|
||||||
@ -563,7 +603,15 @@ EOF
|
|||||||
|
|
||||||
if ($opt_test_duration)
|
if ($opt_test_duration)
|
||||||
{
|
{
|
||||||
sleep($opt_test_duration);
|
# OBN - At this point we need to wait for the duration of the test, hoever
|
||||||
|
# we need to be able to quit if an 'abort-on-error' condition has happend
|
||||||
|
# with one of the children (WL#4685). Using solution by ES and replacing
|
||||||
|
# the 'sleep' command with a loop checking the abort condition every second
|
||||||
|
|
||||||
|
foreach ( 1..$opt_test_duration ) {
|
||||||
|
last if $exiting;
|
||||||
|
sleep 1;
|
||||||
|
}
|
||||||
kill INT, $$; #Interrupt child threads
|
kill INT, $$; #Interrupt child threads
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -580,6 +628,8 @@ EOF
|
|||||||
print "EXIT\n";
|
print "EXIT\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exit $gExitCode; # ES WL#4685: script should return a meaningful exit code
|
||||||
|
|
||||||
sub test_init
|
sub test_init
|
||||||
{
|
{
|
||||||
my ($env)=@_;
|
my ($env)=@_;
|
||||||
@ -681,7 +731,9 @@ sub test_execute
|
|||||||
{
|
{
|
||||||
if (!exists($error_codes{$err_code}))
|
if (!exists($error_codes{$err_code}))
|
||||||
{
|
{
|
||||||
$severity="S3";
|
# OBN Changing severity level to S4 from S3 as S3 now reserved
|
||||||
|
# for the case where the error is unknown (for WL#4626/4685
|
||||||
|
$severity="S4";
|
||||||
$err_code=0;
|
$err_code=0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -734,6 +786,7 @@ sub test_execute
|
|||||||
{
|
{
|
||||||
push @{$env->{test_status}}, "Severity $severity: $total";
|
push @{$env->{test_status}}, "Severity $severity: $total";
|
||||||
$env->{errors}->{total}=+$total;
|
$env->{errors}->{total}=+$total;
|
||||||
|
set_exit_code($severity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -748,18 +801,20 @@ sub test_execute
|
|||||||
|
|
||||||
log_session_errors($env, $test_file);
|
log_session_errors($env, $test_file);
|
||||||
|
|
||||||
if (!$exiting && ($signal_num == 2 || $signal_num == 15 ||
|
#OBN Removing the case of S1 and abort-on-error as that is now set
|
||||||
($opt_abort_on_error && $env->{errors}->{S1} > 0)))
|
# inside the set_exit_code function (for WL#4626/4685)
|
||||||
|
#if (!$exiting && ($signal_num == 2 || $signal_num == 15 ||
|
||||||
|
# ($opt_abort_on_error && $env->{errors}->{S1} > 0)))
|
||||||
|
if (!$exiting && ($signal_num == 2 || $signal_num == 15))
|
||||||
{
|
{
|
||||||
#mysqltest was interrupted with INT or TERM signals or test was
|
#mysqltest was interrupted with INT or TERM signals
|
||||||
#ran with --abort-on-error option and we got errors with severity S1
|
|
||||||
#so we assume that we should cancel testing and exit
|
#so we assume that we should cancel testing and exit
|
||||||
$exiting=1;
|
$exiting=1;
|
||||||
|
# OBN - Adjusted text to exclude case of S1 and abort-on-error that
|
||||||
|
# was mentioned (for WL#4626/4685)
|
||||||
print STDERR<<EOF;
|
print STDERR<<EOF;
|
||||||
WARNING:
|
WARNING:
|
||||||
mysqltest was interrupted with INT or TERM signals or test was
|
mysqltest was interrupted with INT or TERM signals so we assume that
|
||||||
ran with --abort-on-error option and we got errors with severity S1
|
|
||||||
(test cann't connect to the server or server crashed) so we assume that
|
|
||||||
we should cancel testing and exit. Please check log file for this thread
|
we should cancel testing and exit. Please check log file for this thread
|
||||||
in $stress_log_file or
|
in $stress_log_file or
|
||||||
inspect below output of the last test case executed with mysqltest to
|
inspect below output of the last test case executed with mysqltest to
|
||||||
@ -840,12 +895,23 @@ LOOP:
|
|||||||
$client_env{test_count}."]:".
|
$client_env{test_count}."]:".
|
||||||
" TID ".$client_env{thread_id}.
|
" TID ".$client_env{thread_id}.
|
||||||
" test: '$test_name' ".
|
" test: '$test_name' ".
|
||||||
" Errors: ".join(" ",@{$client_env{test_status}}),"\n";
|
" Errors: ".join(" ",@{$client_env{test_status}}).
|
||||||
print "\n";
|
( $exiting ? " (thread aborting)" : "" )."\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep($opt_sleep_time) if($opt_sleep_time);
|
# OBN - At this point we need to wait until the 'wait' time between test
|
||||||
|
# executions passes (in case it is specifed) passes, hoever we need
|
||||||
|
# to be able to quit and break out of the test if an 'abort-on-error'
|
||||||
|
# condition has happend with one of the other children (WL#4685).
|
||||||
|
# Using solution by ES and replacing the 'sleep' command with a loop
|
||||||
|
# checking the abort condition every second
|
||||||
|
|
||||||
|
if ( $opt_sleep_time ) {
|
||||||
|
foreach ( 1..$opt_sleep_time ) {
|
||||||
|
last if $exiting;
|
||||||
|
sleep 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1119,6 +1185,9 @@ mysql-stress-test.pl --stress-basedir=<dir> --stress-suite-basedir=<dir> --serve
|
|||||||
--cleanup
|
--cleanup
|
||||||
Force to clean up working directory (specified with --stress-basedir)
|
Force to clean up working directory (specified with --stress-basedir)
|
||||||
|
|
||||||
|
--abort-on-error=<number>
|
||||||
|
Causes the script to abort if an error with severity <= number was encounterd
|
||||||
|
|
||||||
--log-error-details
|
--log-error-details
|
||||||
Enable errors details in the global error log file. (Default: off)
|
Enable errors details in the global error log file. (Default: off)
|
||||||
|
|
||||||
|
@ -209,6 +209,7 @@ sub check_timeout { return $opt_testcase_timeout * 6; };
|
|||||||
|
|
||||||
my $opt_start;
|
my $opt_start;
|
||||||
my $opt_start_dirty;
|
my $opt_start_dirty;
|
||||||
|
my $start_only;
|
||||||
my $opt_wait_all;
|
my $opt_wait_all;
|
||||||
my $opt_repeat= 1;
|
my $opt_repeat= 1;
|
||||||
my $opt_retry= 3;
|
my $opt_retry= 3;
|
||||||
@ -984,6 +985,9 @@ sub command_line_setup {
|
|||||||
|
|
||||||
if ( $opt_experimental )
|
if ( $opt_experimental )
|
||||||
{
|
{
|
||||||
|
# $^O on Windows considered not generic enough
|
||||||
|
my $plat= (IS_WINDOWS) ? 'windows' : $^O;
|
||||||
|
|
||||||
# read the list of experimental test cases from the file specified on
|
# read the list of experimental test cases from the file specified on
|
||||||
# the command line
|
# the command line
|
||||||
open(FILE, "<", $opt_experimental) or mtr_error("Can't read experimental file: $opt_experimental");
|
open(FILE, "<", $opt_experimental) or mtr_error("Can't read experimental file: $opt_experimental");
|
||||||
@ -994,6 +998,15 @@ sub command_line_setup {
|
|||||||
# remove comments (# foo) at the beginning of the line, or after a
|
# remove comments (# foo) at the beginning of the line, or after a
|
||||||
# blank at the end of the line
|
# blank at the end of the line
|
||||||
s/( +|^)#.*$//;
|
s/( +|^)#.*$//;
|
||||||
|
# If @ platform specifier given, use this entry only if it contains
|
||||||
|
# @<platform> or @!<xxx> where xxx != platform
|
||||||
|
if (/\@.*/)
|
||||||
|
{
|
||||||
|
next if (/\@!$plat/);
|
||||||
|
next unless (/\@$plat/ or /\@!/);
|
||||||
|
# Then remove @ and everything after it
|
||||||
|
s/\@.*$//;
|
||||||
|
}
|
||||||
# remove whitespace
|
# remove whitespace
|
||||||
s/^ +//;
|
s/^ +//;
|
||||||
s/ +$//;
|
s/ +$//;
|
||||||
@ -1241,13 +1254,28 @@ sub command_line_setup {
|
|||||||
{
|
{
|
||||||
mtr_error("Can't use --extern when using debugger");
|
mtr_error("Can't use --extern when using debugger");
|
||||||
}
|
}
|
||||||
|
# Set one week timeout (check-testcase timeout will be 1/10th)
|
||||||
|
$opt_testcase_timeout= 7 * 24 * 60;
|
||||||
|
$opt_suite_timeout= 7 * 24 * 60;
|
||||||
|
# One day to shutdown
|
||||||
|
$opt_shutdown_timeout= 24 * 60;
|
||||||
|
# One day for PID file creation (this is given in seconds not minutes)
|
||||||
|
$opt_start_timeout= 24 * 60 * 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
# Modified behavior with --start options
|
||||||
|
# --------------------------------------------------------------------------
|
||||||
|
if ($opt_start or $opt_start_dirty) {
|
||||||
|
collect_option ('quick-collect', 1);
|
||||||
|
$start_only= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Check use of wait-all
|
# Check use of wait-all
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
|
|
||||||
if ($opt_wait_all && ! ($opt_start_dirty || $opt_start))
|
if ($opt_wait_all && ! $start_only)
|
||||||
{
|
{
|
||||||
mtr_error("--wait-all can only be used with --start or --start-dirty");
|
mtr_error("--wait-all can only be used with --start or --start-dirty");
|
||||||
}
|
}
|
||||||
@ -1506,6 +1534,10 @@ sub collect_mysqld_features_from_running_server ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# "Convert" innodb flag
|
||||||
|
$mysqld_variables{'innodb'}= "ON"
|
||||||
|
if ($mysqld_variables{'have_innodb'} eq "YES");
|
||||||
|
|
||||||
# Parse version
|
# Parse version
|
||||||
my $version_str= $mysqld_variables{'version'};
|
my $version_str= $mysqld_variables{'version'};
|
||||||
if ( $version_str =~ /^([0-9]*)\.([0-9]*)\.([0-9]*)/ )
|
if ( $version_str =~ /^([0-9]*)\.([0-9]*)\.([0-9]*)/ )
|
||||||
@ -1772,7 +1804,8 @@ sub environment_setup {
|
|||||||
}
|
}
|
||||||
my $lib_example_plugin=
|
my $lib_example_plugin=
|
||||||
mtr_file_exists(vs_config_dirs('storage/example',$plugin_filename),
|
mtr_file_exists(vs_config_dirs('storage/example',$plugin_filename),
|
||||||
"$basedir/storage/example/.libs/".$plugin_filename);
|
"$basedir/storage/example/.libs/".$plugin_filename,
|
||||||
|
"$basedir/lib/mysql/plugin/".$plugin_filename);
|
||||||
$ENV{'EXAMPLE_PLUGIN'}=
|
$ENV{'EXAMPLE_PLUGIN'}=
|
||||||
($lib_example_plugin ? basename($lib_example_plugin) : "");
|
($lib_example_plugin ? basename($lib_example_plugin) : "");
|
||||||
$ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=".
|
$ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=".
|
||||||
@ -2811,7 +2844,7 @@ sub run_testcase_check_skip_test($)
|
|||||||
|
|
||||||
if ( $tinfo->{'skip'} )
|
if ( $tinfo->{'skip'} )
|
||||||
{
|
{
|
||||||
mtr_report_test_skipped($tinfo);
|
mtr_report_test_skipped($tinfo) unless $start_only;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3298,9 +3331,16 @@ sub run_testcase ($) {
|
|||||||
# server exits
|
# server exits
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
if ( $opt_start or $opt_start_dirty )
|
if ( $start_only )
|
||||||
{
|
{
|
||||||
mtr_print("\nStarted", started(all_servers()));
|
mtr_print("\nStarted", started(all_servers()));
|
||||||
|
mtr_print("Using config for test", $tinfo->{name});
|
||||||
|
mtr_print("Port and socket path for server(s):");
|
||||||
|
foreach my $mysqld ( mysqlds() )
|
||||||
|
{
|
||||||
|
mtr_print ($mysqld->name() . " " . $mysqld->value('port') .
|
||||||
|
" " . $mysqld->value('socket'));
|
||||||
|
}
|
||||||
mtr_print("Waiting for server(s) to exit...");
|
mtr_print("Waiting for server(s) to exit...");
|
||||||
if ( $opt_wait_all ) {
|
if ( $opt_wait_all ) {
|
||||||
My::SafeProcess->wait_all();
|
My::SafeProcess->wait_all();
|
||||||
@ -3542,8 +3582,8 @@ sub run_testcase ($) {
|
|||||||
# error log and write all lines that look
|
# error log and write all lines that look
|
||||||
# suspicious into $error_log.warnings
|
# suspicious into $error_log.warnings
|
||||||
#
|
#
|
||||||
sub extract_warning_lines ($) {
|
sub extract_warning_lines ($$) {
|
||||||
my ($error_log) = @_;
|
my ($error_log, $tname) = @_;
|
||||||
|
|
||||||
# Open the servers .err log file and read all lines
|
# Open the servers .err log file and read all lines
|
||||||
# belonging to current tets into @lines
|
# belonging to current tets into @lines
|
||||||
@ -3551,15 +3591,28 @@ sub extract_warning_lines ($) {
|
|||||||
or mtr_error("Could not open file '$error_log' for reading: $!");
|
or mtr_error("Could not open file '$error_log' for reading: $!");
|
||||||
|
|
||||||
my @lines;
|
my @lines;
|
||||||
|
my $found_test= 0; # Set once we've found the log of this test
|
||||||
while ( my $line = <$Ferr> )
|
while ( my $line = <$Ferr> )
|
||||||
{
|
{
|
||||||
if ( $line =~ /^CURRENT_TEST:/ )
|
if ($found_test)
|
||||||
{
|
{
|
||||||
# Throw away lines from previous tests
|
# If test wasn't last after all, discard what we found, test again.
|
||||||
@lines = ();
|
if ( $line =~ /^CURRENT_TEST:/)
|
||||||
|
{
|
||||||
|
@lines= ();
|
||||||
|
$found_test= $line =~ /^CURRENT_TEST: $tname/;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
push(@lines, $line);
|
push(@lines, $line);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# Search for beginning of test, until found
|
||||||
|
$found_test= 1 if ($line =~ /^CURRENT_TEST: $tname/);
|
||||||
|
}
|
||||||
|
}
|
||||||
$Ferr = undef; # Close error log file
|
$Ferr = undef; # Close error log file
|
||||||
|
|
||||||
# mysql_client_test.test sends a COM_DEBUG packet to the server
|
# mysql_client_test.test sends a COM_DEBUG packet to the server
|
||||||
@ -3595,10 +3648,8 @@ sub extract_warning_lines ($) {
|
|||||||
# and correcting them shows a few additional harmless warnings.
|
# and correcting them shows a few additional harmless warnings.
|
||||||
# Thus those patterns are temporarily removed from the list
|
# Thus those patterns are temporarily removed from the list
|
||||||
# of patterns. For more info see BUG#42408
|
# of patterns. For more info see BUG#42408
|
||||||
# qr/^Warning:|mysqld: Warning|\[Warning\]/,
|
qr/^Warning:|mysqld: Warning|\[Warning\]/,
|
||||||
# qr/^Error:|\[ERROR\]/,
|
qr/^Error:|\[ERROR\]/,
|
||||||
qr/^Warning:|mysqld: Warning/,
|
|
||||||
qr/^Error:/,
|
|
||||||
qr/^==.* at 0x/,
|
qr/^==.* at 0x/,
|
||||||
qr/InnoDB: Warning|InnoDB: Error/,
|
qr/InnoDB: Warning|InnoDB: Error/,
|
||||||
qr/^safe_mutex:|allocated at line/,
|
qr/^safe_mutex:|allocated at line/,
|
||||||
@ -3638,7 +3689,7 @@ sub start_check_warnings ($$) {
|
|||||||
my $log_error= $mysqld->value('#log-error');
|
my $log_error= $mysqld->value('#log-error');
|
||||||
# To be communicated to the test
|
# To be communicated to the test
|
||||||
$ENV{MTR_LOG_ERROR}= $log_error;
|
$ENV{MTR_LOG_ERROR}= $log_error;
|
||||||
extract_warning_lines($log_error);
|
extract_warning_lines($log_error, $tinfo->{name});
|
||||||
|
|
||||||
my $args;
|
my $args;
|
||||||
mtr_init_args(\$args);
|
mtr_init_args(\$args);
|
||||||
@ -4078,8 +4129,8 @@ sub mysqld_arguments ($$$) {
|
|||||||
|
|
||||||
if ( $mysql_version_id >= 50106 )
|
if ( $mysql_version_id >= 50106 )
|
||||||
{
|
{
|
||||||
# Turn on logging to both tables and file
|
# Turn on logging to file
|
||||||
mtr_add_arg($args, "--log-output=table,file");
|
mtr_add_arg($args, "--log-output=file");
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if "extra_opt" contains skip-log-bin
|
# Check if "extra_opt" contains skip-log-bin
|
||||||
@ -5123,7 +5174,7 @@ Options to control what test suites or cases to run
|
|||||||
skip-rpl Skip the replication test cases.
|
skip-rpl Skip the replication test cases.
|
||||||
big-test Also run tests marked as "big"
|
big-test Also run tests marked as "big"
|
||||||
enable-disabled Run also tests marked as disabled
|
enable-disabled Run also tests marked as disabled
|
||||||
print_testcases Don't run the tests but print details about all the
|
print-testcases Don't run the tests but print details about all the
|
||||||
selected tests, in the order they would be run.
|
selected tests, in the order they would be run.
|
||||||
|
|
||||||
Options that specify ports
|
Options that specify ports
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
call mtr.add_suppression("The table 't1' is full");
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
set global myisam_data_pointer_size=2;
|
set global myisam_data_pointer_size=2;
|
||||||
CREATE TABLE t1 (a int auto_increment primary key not null, b longtext) ENGINE=MyISAM;
|
CREATE TABLE t1 (a int auto_increment primary key not null, b longtext) ENGINE=MyISAM;
|
||||||
|
@ -1268,4 +1268,66 @@ a b
|
|||||||
4 b
|
4 b
|
||||||
5 a
|
5 a
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#45567: Fast ALTER TABLE broken for enum and set
|
||||||
|
#
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1 (a ENUM('a1','a2'));
|
||||||
|
INSERT INTO t1 VALUES ('a1'),('a2');
|
||||||
|
# No copy: No modification
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2');
|
||||||
|
affected rows: 0
|
||||||
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
# No copy: Add new enumeration to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a3');
|
||||||
|
affected rows: 0
|
||||||
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
# Copy: Modify and add new to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','xx','a5');
|
||||||
|
affected rows: 2
|
||||||
|
info: Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
# Copy: Remove from the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','xx');
|
||||||
|
affected rows: 2
|
||||||
|
info: Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
# Copy: Add new enumeration
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a0','xx');
|
||||||
|
affected rows: 2
|
||||||
|
info: Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
# No copy: Add new enumerations to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a0','xx','a5','a6');
|
||||||
|
affected rows: 0
|
||||||
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a SET('a1','a2'));
|
||||||
|
INSERT INTO t1 VALUES ('a1'),('a2');
|
||||||
|
# No copy: No modification
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2');
|
||||||
|
affected rows: 0
|
||||||
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
# No copy: Add new to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a3');
|
||||||
|
affected rows: 0
|
||||||
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
# Copy: Modify and add new to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','xx','a5');
|
||||||
|
affected rows: 2
|
||||||
|
info: Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
# Copy: Remove from the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','xx');
|
||||||
|
affected rows: 2
|
||||||
|
info: Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
# Copy: Add new member
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx');
|
||||||
|
affected rows: 2
|
||||||
|
info: Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
# No copy: Add new to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx','a5','a6');
|
||||||
|
affected rows: 0
|
||||||
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
# Copy: Numerical incrase (pack lenght)
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx','a5','a6','a7','a8','a9','a10');
|
||||||
|
affected rows: 2
|
||||||
|
info: Records: 2 Duplicates: 0 Warnings: 0
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
# Bug #46080: group_concat(... order by) crashes server when
|
# Bug #46080: group_concat(... order by) crashes server when
|
||||||
# sort_buffer_size cannot allocate
|
# sort_buffer_size cannot allocate
|
||||||
#
|
#
|
||||||
|
call mtr.add_suppression("Out of memory at line .*, 'my_alloc.c'");
|
||||||
|
call mtr.add_suppression("needed .* byte .*k., memory in use: .* bytes .*k");
|
||||||
CREATE TABLE t1(a CHAR(255));
|
CREATE TABLE t1(a CHAR(255));
|
||||||
INSERT INTO t1 VALUES ('a');
|
INSERT INTO t1 VALUES ('a');
|
||||||
SET @@SESSION.sort_buffer_size=5*16*1000000;
|
SET @@SESSION.sort_buffer_size=5*16*1000000;
|
||||||
|
43
mysql-test/r/bug46760.result
Normal file
43
mysql-test/r/bug46760.result
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#
|
||||||
|
# Bug#46760: Fast ALTER TABLE no longer works for InnoDB
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
# By using --enable_info and verifying that number of affected
|
||||||
|
# rows is 0 we check that this ALTER TABLE is really carried
|
||||||
|
# out as "fast/online" operation, i.e. without full-blown data
|
||||||
|
# copying.
|
||||||
|
#
|
||||||
|
# I.e. info for the below statement should normally look like:
|
||||||
|
#
|
||||||
|
# affected rows: 0
|
||||||
|
# info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
ALTER TABLE t1 ALTER COLUMN a SET DEFAULT 10;
|
||||||
|
affected rows: 0
|
||||||
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT '10'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MySQL Bug#39200: optimize table does not recognize
|
||||||
|
# ROW_FORMAT=COMPRESSED
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT) ROW_FORMAT=compressed;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize status Table is already up to date
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED
|
||||||
|
DROP TABLE t1;
|
||||||
|
End of 5.1 tests
|
@ -279,3 +279,48 @@ ERROR 42000: Incorrect number of arguments for FUNCTION test.f1; expected 0, got
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP FUNCTION f1;
|
DROP FUNCTION f1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
#
|
||||||
|
# Bug#46958: Assertion in Diagnostics_area::set_ok_status, trigger,
|
||||||
|
# merge table
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 ( a INT );
|
||||||
|
CREATE TABLE t2 ( a INT );
|
||||||
|
CREATE TABLE t3 ( a INT );
|
||||||
|
INSERT INTO t1 VALUES (1), (2);
|
||||||
|
INSERT INTO t2 VALUES (1), (2);
|
||||||
|
INSERT INTO t3 VALUES (1), (2);
|
||||||
|
CREATE TRIGGER tr1 BEFORE DELETE ON t2
|
||||||
|
FOR EACH ROW INSERT INTO no_such_table VALUES (1);
|
||||||
|
DELETE t1, t2, t3 FROM t1, t2, t3;
|
||||||
|
ERROR 42S02: Table 'test.no_such_table' doesn't exist
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
SELECT * FROM t2;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SELECT * FROM t3;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
CREATE TABLE t1 ( a INT );
|
||||||
|
CREATE TABLE t2 ( a INT );
|
||||||
|
CREATE TABLE t3 ( a INT );
|
||||||
|
INSERT INTO t1 VALUES (1), (2);
|
||||||
|
INSERT INTO t2 VALUES (1), (2);
|
||||||
|
INSERT INTO t3 VALUES (1), (2);
|
||||||
|
CREATE TRIGGER tr1 AFTER DELETE ON t2
|
||||||
|
FOR EACH ROW INSERT INTO no_such_table VALUES (1);
|
||||||
|
DELETE t1, t2, t3 FROM t1, t2, t3;
|
||||||
|
ERROR 42S02: Table 'test.no_such_table' doesn't exist
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
SELECT * FROM t2;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
SELECT * FROM t3;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
@ -867,3 +867,25 @@ INSERT INTO t2 SELECT NULL FROM t1;
|
|||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
|
CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (null);
|
||||||
|
INSERT INTO t1 VALUES (null);
|
||||||
|
ALTER TABLE t1 CHANGE c1 d1 INT NOT NULL AUTO_INCREMENT;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
d1
|
||||||
|
1
|
||||||
|
3
|
||||||
|
SELECT * FROM t1;
|
||||||
|
d1
|
||||||
|
1
|
||||||
|
3
|
||||||
|
INSERT INTO t1 VALUES(null);
|
||||||
|
Got one of the listed errors
|
||||||
|
ALTER TABLE t1 AUTO_INCREMENT = 3;
|
||||||
|
INSERT INTO t1 VALUES(null);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
d1
|
||||||
|
1
|
||||||
|
3
|
||||||
|
4
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -841,6 +841,7 @@ SET max_heap_table_size = 16384;
|
|||||||
SET @old_myisam_data_pointer_size = @@myisam_data_pointer_size;
|
SET @old_myisam_data_pointer_size = @@myisam_data_pointer_size;
|
||||||
SET GLOBAL myisam_data_pointer_size = 2;
|
SET GLOBAL myisam_data_pointer_size = 2;
|
||||||
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
||||||
|
call mtr.add_suppression("mysqld: The table '.*#sql.*' is full");
|
||||||
INSERT IGNORE INTO t1 SELECT t1.a FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6,t1 t7;
|
INSERT IGNORE INTO t1 SELECT t1.a FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6,t1 t7;
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
SET GLOBAL myisam_data_pointer_size = @old_myisam_data_pointer_size;
|
SET GLOBAL myisam_data_pointer_size = @old_myisam_data_pointer_size;
|
||||||
|
@ -1064,3 +1064,13 @@ a b c d
|
|||||||
128 NULL 128 NULL
|
128 NULL 128 NULL
|
||||||
DROP TABLE IF EXISTS t1,t2;
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
CREATE TABLE t1 (f1 int);
|
||||||
|
CREATE TABLE t2 (f1 int);
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t2;
|
||||||
|
PREPARE stmt FROM 'UPDATE t2 AS A NATURAL JOIN v1 B SET B.f1 = 1';
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
call mtr.add_suppression("Cannot find or open table test/BUG29839 from .*");
|
call mtr.add_suppression("Cannot find or open table test/BUG29839 from");
|
||||||
DROP TABLE IF EXISTS t1,T1;
|
DROP TABLE IF EXISTS t1,T1;
|
||||||
CREATE TABLE t1 (a INT);
|
CREATE TABLE t1 (a INT);
|
||||||
SELECT * FROM T1;
|
SELECT * FROM T1;
|
||||||
|
@ -2252,4 +2252,23 @@ h+0 d + 0 e g + 0
|
|||||||
1 1 3 0
|
1 1 3 0
|
||||||
1 1 4 0
|
1 1 4 0
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Test of BUG#35570 CHECKSUM TABLE unreliable if LINESTRING field
|
||||||
|
# (same content / differen checksum)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (line LINESTRING NOT NULL) engine=myisam;
|
||||||
|
INSERT INTO t1 VALUES (GeomFromText("POINT(0 0)"));
|
||||||
|
checksum table t1;
|
||||||
|
Table Checksum
|
||||||
|
test.t1 326284887
|
||||||
|
CREATE TABLE t2 (line LINESTRING NOT NULL) engine=myisam;
|
||||||
|
INSERT INTO t2 VALUES (GeomFromText("POINT(0 0)"));
|
||||||
|
checksum table t2;
|
||||||
|
Table Checksum
|
||||||
|
test.t2 326284887
|
||||||
|
CREATE TABLE t3 select * from t1;
|
||||||
|
checksum table t3;
|
||||||
|
Table Checksum
|
||||||
|
test.t3 326284887
|
||||||
|
drop table t1,t2,t3;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -314,21 +314,10 @@ here is the sourced script
|
|||||||
1 = outer loop variable before dec
|
1 = outer loop variable before dec
|
||||||
|
|
||||||
0 = outer loop variable after dec
|
0 = outer loop variable after dec
|
||||||
|
outer=2 ifval=0
|
||||||
2 = outer loop variable after while
|
outer=1 ifval=1
|
||||||
here is the sourced script
|
here is the sourced script
|
||||||
|
|
||||||
2 = outer loop variable before dec
|
|
||||||
|
|
||||||
1 = outer loop variable after dec
|
|
||||||
|
|
||||||
1 = outer loop variable after while
|
|
||||||
here is the sourced script
|
|
||||||
|
|
||||||
1 = outer loop variable before dec
|
|
||||||
|
|
||||||
0 = outer loop variable after dec
|
|
||||||
|
|
||||||
In loop
|
In loop
|
||||||
here is the sourced script
|
here is the sourced script
|
||||||
|
|
||||||
@ -538,6 +527,10 @@ mysqltest: At line 1: Missing required argument 'filename' to command 'write_fil
|
|||||||
mysqltest: At line 1: End of file encountered before 'EOF' delimiter was found
|
mysqltest: At line 1: End of file encountered before 'EOF' delimiter was found
|
||||||
Content for test_file1
|
Content for test_file1
|
||||||
mysqltest: At line 1: File already exist: 'MYSQLTEST_VARDIR/tmp/test_file1.tmp'
|
mysqltest: At line 1: File already exist: 'MYSQLTEST_VARDIR/tmp/test_file1.tmp'
|
||||||
|
These lines should be repeated,
|
||||||
|
if things work as expected
|
||||||
|
These lines should be repeated,
|
||||||
|
if things work as expected
|
||||||
Some data
|
Some data
|
||||||
for cat_file command
|
for cat_file command
|
||||||
of mysqltest
|
of mysqltest
|
||||||
|
2
mysql-test/r/not_true.require
Normal file
2
mysql-test/r/not_true.require
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
TRUE
|
||||||
|
NULL
|
@ -1,3 +1,4 @@
|
|||||||
|
call mtr.add_suppression("Failed to write to mysql.general_log");
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 (a int)
|
create table t1 (a int)
|
||||||
engine = csv
|
engine = csv
|
||||||
|
39
mysql-test/r/partition_innodb_builtin.result
Normal file
39
mysql-test/r/partition_innodb_builtin.result
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
SET NAMES utf8;
|
||||||
|
CREATE TABLE `t``\""e` (a INT, PRIMARY KEY (a))
|
||||||
|
ENGINE=InnoDB
|
||||||
|
PARTITION BY RANGE (a)
|
||||||
|
SUBPARTITION BY HASH (a)
|
||||||
|
(PARTITION `p0``\""e` VALUES LESS THAN (100)
|
||||||
|
(SUBPARTITION `sp0``\""e`,
|
||||||
|
SUBPARTITION `sp1``\""e`),
|
||||||
|
PARTITION `p1``\""e` VALUES LESS THAN (MAXVALUE)
|
||||||
|
(SUBPARTITION `sp2``\""e`,
|
||||||
|
SUBPARTITION `sp3``\""e`));
|
||||||
|
INSERT INTO `t``\""e` VALUES (0), (2), (6), (10), (14), (18), (22);
|
||||||
|
START TRANSACTION;
|
||||||
|
# con1
|
||||||
|
SET NAMES utf8;
|
||||||
|
START TRANSACTION;
|
||||||
|
# default connection
|
||||||
|
UPDATE `t``\""e` SET a = 16 WHERE a = 0;
|
||||||
|
# con1
|
||||||
|
UPDATE `t``\""e` SET a = 8 WHERE a = 22;
|
||||||
|
UPDATE `t``\""e` SET a = 12 WHERE a = 0;
|
||||||
|
# default connection
|
||||||
|
UPDATE `t``\""e` SET a = 4 WHERE a = 22;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
# First table reported in 'SHOW ENGINE InnoDB STATUS'
|
||||||
|
SHOW ENGINE InnoDB STATUS;
|
||||||
|
Type Name Status
|
||||||
|
InnoDB index `PRIMARY` of table `test`.`t``\""e` /* Partition `p0``\""e`, Subpartition `sp0``\""e` */
|
||||||
|
set @old_sql_mode = @@sql_mode;
|
||||||
|
set sql_mode = 'ANSI_QUOTES';
|
||||||
|
SHOW ENGINE InnoDB STATUS;
|
||||||
|
Type Name Status
|
||||||
|
InnoDB index `PRIMARY` of table `test`.`t``\""e` /* Partition `p0``\""e`, Subpartition `sp0``\""e` */
|
||||||
|
set @@sql_mode = @old_sql_mode;
|
||||||
|
# con1
|
||||||
|
ROLLBACK;
|
||||||
|
# default connection
|
||||||
|
DROP TABLE `t``\""e`;
|
||||||
|
SET NAMES DEFAULT;
|
50
mysql-test/r/partition_innodb_plugin.result
Normal file
50
mysql-test/r/partition_innodb_plugin.result
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
SET NAMES utf8;
|
||||||
|
CREATE TABLE `t``\""e` (a INT, PRIMARY KEY (a))
|
||||||
|
ENGINE=InnoDB
|
||||||
|
PARTITION BY RANGE (a)
|
||||||
|
SUBPARTITION BY HASH (a)
|
||||||
|
(PARTITION `p0``\""e` VALUES LESS THAN (100)
|
||||||
|
(SUBPARTITION `sp0``\""e`,
|
||||||
|
SUBPARTITION `sp1``\""e`),
|
||||||
|
PARTITION `p1``\""e` VALUES LESS THAN (MAXVALUE)
|
||||||
|
(SUBPARTITION `sp2``\""e`,
|
||||||
|
SUBPARTITION `sp3``\""e`));
|
||||||
|
INSERT INTO `t``\""e` VALUES (0), (2), (6), (10), (14), (18), (22);
|
||||||
|
START TRANSACTION;
|
||||||
|
# con1
|
||||||
|
SET NAMES utf8;
|
||||||
|
START TRANSACTION;
|
||||||
|
# default connection
|
||||||
|
UPDATE `t``\""e` SET a = 16 WHERE a = 0;
|
||||||
|
# con1
|
||||||
|
UPDATE `t``\""e` SET a = 8 WHERE a = 22;
|
||||||
|
UPDATE `t``\""e` SET a = 12 WHERE a = 0;
|
||||||
|
# default connection
|
||||||
|
SELECT lock_table, COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS
|
||||||
|
GROUP BY lock_table;
|
||||||
|
lock_table COUNT(*)
|
||||||
|
`test`.`t``\""e` /* Partition `p0``\""e`, Subpartition `sp0``\""e` */ 2
|
||||||
|
set @old_sql_mode = @@sql_mode;
|
||||||
|
set sql_mode = 'ANSI_QUOTES';
|
||||||
|
SELECT lock_table, COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS
|
||||||
|
GROUP BY lock_table;
|
||||||
|
lock_table COUNT(*)
|
||||||
|
"test"."t`\""""e" /* Partition "p0`\""""e", Subpartition "sp0`\""""e" */ 2
|
||||||
|
set @@sql_mode = @old_sql_mode;
|
||||||
|
UPDATE `t``\""e` SET a = 4 WHERE a = 22;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
# First table reported in 'SHOW ENGINE InnoDB STATUS'
|
||||||
|
SHOW ENGINE InnoDB STATUS;
|
||||||
|
Type Name Status
|
||||||
|
InnoDB index `PRIMARY` of table `test`.`t``\""e` /* Partition `p0``\""e`, Subpartition `sp0``\""e` */
|
||||||
|
set @old_sql_mode = @@sql_mode;
|
||||||
|
set sql_mode = 'ANSI_QUOTES';
|
||||||
|
SHOW ENGINE InnoDB STATUS;
|
||||||
|
Type Name Status
|
||||||
|
InnoDB index `PRIMARY` of table `test`.`t``\""e` /* Partition `p0``\""e`, Subpartition `sp0``\""e` */
|
||||||
|
set @@sql_mode = @old_sql_mode;
|
||||||
|
# con1
|
||||||
|
ROLLBACK;
|
||||||
|
# default connection
|
||||||
|
DROP TABLE `t``\""e`;
|
||||||
|
SET NAMES DEFAULT;
|
@ -27,4 +27,35 @@ SELECT 1;
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
#
|
||||||
|
# Bug #47106: Crash / segfault on adding EXPLAIN to a non-crashing
|
||||||
|
# query
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a INT,
|
||||||
|
b INT,
|
||||||
|
PRIMARY KEY (a),
|
||||||
|
KEY b (b)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (1, 1), (2, 1);
|
||||||
|
CREATE TABLE t2 LIKE t1;
|
||||||
|
INSERT INTO t2 SELECT * FROM t1;
|
||||||
|
CREATE TABLE t3 LIKE t1;
|
||||||
|
INSERT INTO t3 SELECT * FROM t1;
|
||||||
|
# Should not crash.
|
||||||
|
# Should have 1 impossible where and 2 dependent subqs.
|
||||||
|
EXPLAIN
|
||||||
|
SELECT
|
||||||
|
(SELECT 1 FROM t1,t2 WHERE t2.b > t3.b)
|
||||||
|
FROM t3 WHERE 1 = 0 GROUP BY 1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||||
|
2 DEPENDENT SUBQUERY t1 index NULL PRIMARY 4 NULL 2 Using index
|
||||||
|
2 DEPENDENT SUBQUERY t2 index b b 5 NULL 2 Using where; Using index; Using join buffer
|
||||||
|
# should return 0 rows
|
||||||
|
SELECT
|
||||||
|
(SELECT 1 FROM t1,t2 WHERE t2.b > t3.b)
|
||||||
|
FROM t3 WHERE 1 = 0 GROUP BY 1;
|
||||||
|
(SELECT 1 FROM t1,t2 WHERE t2.b > t3.b)
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
@ -180,8 +180,6 @@ NULL mysqltest_db1 trg5 DELETE NULL mysqltest_db1 t1 0 NULL SET @a = 5 ROW BEFOR
|
|||||||
DROP USER mysqltest_dfn@localhost;
|
DROP USER mysqltest_dfn@localhost;
|
||||||
DROP USER mysqltest_inv@localhost;
|
DROP USER mysqltest_inv@localhost;
|
||||||
DROP DATABASE mysqltest_db1;
|
DROP DATABASE mysqltest_db1;
|
||||||
Warnings:
|
|
||||||
Warning 1454 No definer attribute for trigger 'mysqltest_db1'.'trg1'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.
|
|
||||||
DELETE FROM mysql.user WHERE User LIKE 'mysqltest_%';
|
DELETE FROM mysql.user WHERE User LIKE 'mysqltest_%';
|
||||||
DELETE FROM mysql.db WHERE User LIKE 'mysqltest_%';
|
DELETE FROM mysql.db WHERE User LIKE 'mysqltest_%';
|
||||||
DELETE FROM mysql.tables_priv WHERE User LIKE 'mysqltest_%';
|
DELETE FROM mysql.tables_priv WHERE User LIKE 'mysqltest_%';
|
||||||
|
@ -108,11 +108,7 @@ a-b-c
|
|||||||
show create view `a-b-c`.v1;
|
show create view `a-b-c`.v1;
|
||||||
View Create View character_set_client collation_connection
|
View Create View character_set_client collation_connection
|
||||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `a`.`f1` AS `f1` from (`a-b-c`.`t1` `a` join `information_schema`.`tables` `b`) where (convert(`a`.`f1` using utf8) = `b`.`TABLE_NAME`) utf8 utf8_general_ci
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `a`.`f1` AS `f1` from (`a-b-c`.`t1` `a` join `information_schema`.`tables` `b`) where (convert(`a`.`f1` using utf8) = `b`.`TABLE_NAME`) utf8 utf8_general_ci
|
||||||
Warnings:
|
|
||||||
Note 1600 Creation context of view `a-b-c`.`v1' is invalid
|
|
||||||
select * from `a-b-c`.v1;
|
select * from `a-b-c`.v1;
|
||||||
f1
|
f1
|
||||||
Warnings:
|
|
||||||
Note 1600 Creation context of view `a-b-c`.`v1' is invalid
|
|
||||||
drop database `a-b-c`;
|
drop database `a-b-c`;
|
||||||
use test;
|
use test;
|
||||||
|
@ -53,3 +53,10 @@ ERROR HY000: No paths allowed for shared library
|
|||||||
execute abc;
|
execute abc;
|
||||||
ERROR HY000: No paths allowed for shared library
|
ERROR HY000: No paths allowed for shared library
|
||||||
deallocate prepare abc;
|
deallocate prepare abc;
|
||||||
|
#
|
||||||
|
# Bug#45498: Socket variable not available on Windows
|
||||||
|
#
|
||||||
|
SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||||
|
WHERE VARIABLE_NAME = 'socket';
|
||||||
|
VARIABLE_NAME
|
||||||
|
SOCKET
|
||||||
|
@ -1,17 +1,31 @@
|
|||||||
drop database if exists `drop-temp+table-test`;
|
DROP DATABASE IF EXISTS `drop-temp+table-test`;
|
||||||
reset master;
|
RESET MASTER;
|
||||||
create database `drop-temp+table-test`;
|
CREATE DATABASE `drop-temp+table-test`;
|
||||||
use `drop-temp+table-test`;
|
USE `drop-temp+table-test`;
|
||||||
create temporary table shortn1 (a int);
|
CREATE TEMPORARY TABLE shortn1 (a INT);
|
||||||
create temporary table `table:name` (a int);
|
CREATE TEMPORARY TABLE `table:name` (a INT);
|
||||||
create temporary table shortn2 (a int);
|
CREATE TEMPORARY TABLE shortn2 (a INT);
|
||||||
select get_lock("a",10);
|
CREATE TEMPORARY TABLE tmp(c1 int);
|
||||||
get_lock("a",10)
|
CREATE TEMPORARY TABLE tmp1(c1 int);
|
||||||
|
CREATE TEMPORARY TABLE tmp2(c1 int);
|
||||||
|
CREATE TEMPORARY TABLE tmp3(c1 int);
|
||||||
|
CREATE TABLE t(c1 int);
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp, tmp1;
|
||||||
|
DROP TEMPORARY TABLE tmp3;
|
||||||
|
DROP TABLE IF EXISTS tmp2, t;
|
||||||
|
DROP TABLE IF EXISTS tmp2, t;
|
||||||
|
SELECT GET_LOCK("a",10);
|
||||||
|
GET_LOCK("a",10)
|
||||||
1
|
1
|
||||||
select get_lock("a",10);
|
SELECT GET_LOCK("a",10);
|
||||||
get_lock("a",10)
|
GET_LOCK("a",10)
|
||||||
1
|
1
|
||||||
show binlog events from <binlog_start>;
|
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 # Query # # create database `drop-temp+table-test`
|
master-bin.000001 # Query # # CREATE DATABASE `drop-temp+table-test`
|
||||||
drop database `drop-temp+table-test`;
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TABLE t(c1 int)
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `t` /* generated by server */
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2, t
|
||||||
|
DROP DATABASE `drop-temp+table-test`;
|
||||||
|
@ -1,21 +1,43 @@
|
|||||||
drop database if exists `drop-temp+table-test`;
|
DROP DATABASE IF EXISTS `drop-temp+table-test`;
|
||||||
reset master;
|
RESET MASTER;
|
||||||
create database `drop-temp+table-test`;
|
CREATE DATABASE `drop-temp+table-test`;
|
||||||
use `drop-temp+table-test`;
|
USE `drop-temp+table-test`;
|
||||||
create temporary table shortn1 (a int);
|
CREATE TEMPORARY TABLE shortn1 (a INT);
|
||||||
create temporary table `table:name` (a int);
|
CREATE TEMPORARY TABLE `table:name` (a INT);
|
||||||
create temporary table shortn2 (a int);
|
CREATE TEMPORARY TABLE shortn2 (a INT);
|
||||||
select get_lock("a",10);
|
CREATE TEMPORARY TABLE tmp(c1 int);
|
||||||
get_lock("a",10)
|
CREATE TEMPORARY TABLE tmp1(c1 int);
|
||||||
|
CREATE TEMPORARY TABLE tmp2(c1 int);
|
||||||
|
CREATE TEMPORARY TABLE tmp3(c1 int);
|
||||||
|
CREATE TABLE t(c1 int);
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp, tmp1;
|
||||||
|
DROP TEMPORARY TABLE tmp3;
|
||||||
|
DROP TABLE IF EXISTS tmp2, t;
|
||||||
|
DROP TABLE IF EXISTS tmp2, t;
|
||||||
|
SELECT GET_LOCK("a",10);
|
||||||
|
GET_LOCK("a",10)
|
||||||
1
|
1
|
||||||
select get_lock("a",10);
|
SELECT GET_LOCK("a",10);
|
||||||
get_lock("a",10)
|
GET_LOCK("a",10)
|
||||||
1
|
1
|
||||||
show binlog events from <binlog_start>;
|
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 # Query # # create database `drop-temp+table-test`
|
master-bin.000001 # Query # # CREATE DATABASE `drop-temp+table-test`
|
||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; create temporary table shortn1 (a int)
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE shortn1 (a INT)
|
||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; create temporary table `table:name` (a int)
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE `table:name` (a INT)
|
||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; create temporary table shortn2 (a int)
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE shortn2 (a INT)
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp(c1 int)
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp1(c1 int)
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp2(c1 int)
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp3(c1 int)
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; CREATE TABLE t(c1 int)
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS tmp
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS tmp
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS tmp, tmp1
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE tmp3
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2, t
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2, t
|
||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `shortn2`,`table:name`,`shortn1`
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `shortn2`,`table:name`,`shortn1`
|
||||||
drop database `drop-temp+table-test`;
|
DROP DATABASE `drop-temp+table-test`;
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
call mtr.add_suppression("InnoDB: invalid innodb_file_format_check value");
|
||||||
select @@innodb_file_format;
|
select @@innodb_file_format;
|
||||||
@@innodb_file_format
|
@@innodb_file_format
|
||||||
Antelope
|
Antelope
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
-- source suite/innodb/include/have_innodb_plugin.inc
|
-- source suite/innodb/include/have_innodb_plugin.inc
|
||||||
|
|
||||||
|
call mtr.add_suppression("InnoDB: invalid innodb_file_format_check value");
|
||||||
|
|
||||||
let $format=`select @@innodb_file_format`;
|
let $format=`select @@innodb_file_format`;
|
||||||
let $innodb_file_format_check_orig=`select @@innodb_file_format_check`;
|
let $innodb_file_format_check_orig=`select @@innodb_file_format_check`;
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
call mtr.add_suppression("./test/t1_will_crash");
|
||||||
|
call mtr.add_suppression("Got an error from unknown thread, ha_myisam.cc");
|
||||||
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
||||||
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
# test the auto-recover (--myisam-recover) of partitioned myisam tables
|
# test the auto-recover (--myisam-recover) of partitioned myisam tables
|
||||||
|
|
||||||
|
call mtr.add_suppression("./test/t1_will_crash");
|
||||||
|
call mtr.add_suppression("Got an error from unknown thread, ha_myisam.cc");
|
||||||
|
|
||||||
--source include/have_partition.inc
|
--source include/have_partition.inc
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
reset master;
|
reset master;
|
||||||
call mtr.add_suppression("Failed during slave thread initialization");
|
call mtr.add_suppression("Failed during slave I/O thread initialization");
|
||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
SET GLOBAL debug="d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
|
SET GLOBAL debug="d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
|
||||||
|
@ -166,4 +166,7 @@ DROP FUNCTION upgrade_del_func;
|
|||||||
DROP FUNCTION upgrade_alter_func;
|
DROP FUNCTION upgrade_alter_func;
|
||||||
DROP DATABASE bug42217_db;
|
DROP DATABASE bug42217_db;
|
||||||
DROP USER 'create_rout_db'@'localhost';
|
DROP USER 'create_rout_db'@'localhost';
|
||||||
|
call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396");
|
||||||
|
USE mtr;
|
||||||
|
call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396");
|
||||||
"End of test"
|
"End of test"
|
||||||
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
call mtr.add_suppression("Slave: Unknown table 't6' Error_code: 1051");
|
||||||
**** Diff Table Def Start ****
|
**** Diff Table Def Start ****
|
||||||
*** On Slave ***
|
*** On Slave ***
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
call mtr.add_suppression("Slave: Unknown table 't6' Error_code: 1051");
|
||||||
**** Diff Table Def Start ****
|
**** Diff Table Def Start ****
|
||||||
*** On Slave ***
|
*** On Slave ***
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
|
@ -4,6 +4,8 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
call mtr.add_suppression("Slave I/O: .* failed with error: Lost connection to MySQL server at 'reading initial communication packet'");
|
||||||
|
call mtr.add_suppression("Slave I/O: Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again");
|
||||||
SELECT IS_FREE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP");
|
SELECT IS_FREE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP");
|
||||||
IS_FREE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP")
|
IS_FREE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP")
|
||||||
1
|
1
|
||||||
@ -16,7 +18,8 @@ start slave;
|
|||||||
SELECT RELEASE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP");
|
SELECT RELEASE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP");
|
||||||
RELEASE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP")
|
RELEASE_LOCK("debug_lock.before_get_UNIX_TIMESTAMP")
|
||||||
1
|
1
|
||||||
Slave_IO_Errno= 2013
|
Check network error happened here
|
||||||
|
NETWORK ERROR
|
||||||
SELECT IS_FREE_LOCK("debug_lock.before_get_SERVER_ID");
|
SELECT IS_FREE_LOCK("debug_lock.before_get_SERVER_ID");
|
||||||
IS_FREE_LOCK("debug_lock.before_get_SERVER_ID")
|
IS_FREE_LOCK("debug_lock.before_get_SERVER_ID")
|
||||||
1
|
1
|
||||||
@ -29,7 +32,8 @@ start slave;
|
|||||||
SELECT RELEASE_LOCK("debug_lock.before_get_SERVER_ID");
|
SELECT RELEASE_LOCK("debug_lock.before_get_SERVER_ID");
|
||||||
RELEASE_LOCK("debug_lock.before_get_SERVER_ID")
|
RELEASE_LOCK("debug_lock.before_get_SERVER_ID")
|
||||||
1
|
1
|
||||||
Slave_IO_Errno= 2013
|
Check network error happened here
|
||||||
|
NETWORK ERROR
|
||||||
set global debug= '';
|
set global debug= '';
|
||||||
reset master;
|
reset master;
|
||||||
include/stop_slave.inc
|
include/stop_slave.inc
|
||||||
|
@ -4,7 +4,8 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
call mtr.add_suppression("Slave: Can\'t find record in \'t1\' Error_code: 1032");
|
call mtr.add_suppression("Slave: Can't find record in 't.' Error_code: 1032");
|
||||||
|
call mtr.add_suppression("Slave: Cannot delete or update a parent row: a foreign key constraint fails .* Error_code: 1451");
|
||||||
call mtr.add_suppression("Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452");
|
call mtr.add_suppression("Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452");
|
||||||
SET @old_slave_exec_mode= @@global.slave_exec_mode;
|
SET @old_slave_exec_mode= @@global.slave_exec_mode;
|
||||||
CREATE TABLE t1 (a INT PRIMARY KEY);
|
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||||
|
@ -9,6 +9,7 @@ reset slave;
|
|||||||
SET GLOBAL debug= "d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
|
SET GLOBAL debug= "d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
|
||||||
start slave;
|
start slave;
|
||||||
Reporting the following error: Failed during slave thread initialization
|
Reporting the following error: Failed during slave thread initialization
|
||||||
|
call mtr.add_suppression("Failed during slave I/O thread initialization");
|
||||||
SET GLOBAL debug= "";
|
SET GLOBAL debug= "";
|
||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
call mtr.add_suppression ("Slave I/O: Got fatal error 1236 from master when reading data from binary");
|
||||||
show master status;
|
show master status;
|
||||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||||
master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
|
master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
|
||||||
|
13
mysql-test/suite/rpl/r/rpl_mysql_upgrade.result
Normal file
13
mysql-test/suite/rpl/r/rpl_mysql_upgrade.result
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
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 DATABASE IF EXISTS `#mysql50#mysqltest-1`;
|
||||||
|
CREATE DATABASE `#mysql50#mysqltest-1`;
|
||||||
|
Master position is not changed
|
||||||
|
STOP SLAVE SQL_THREAD;
|
||||||
|
Master position has been changed
|
||||||
|
DROP DATABASE `mysqltest-1`;
|
||||||
|
DROP DATABASE `#mysql50#mysqltest-1`;
|
@ -4,6 +4,8 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
call mtr.add_suppression("Slave I/O: Got a packet bigger than 'max_allowed_packet' bytes, Error_code: 1153");
|
||||||
|
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log:");
|
||||||
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.max_allowed_packet=1024;
|
||||||
@ -32,6 +34,21 @@ include/start_slave.inc
|
|||||||
CREATE TABLE `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
CREATE TABLE `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
||||||
Slave_IO_Running = No (expect No)
|
Slave_IO_Running = No (expect No)
|
||||||
|
SELECT "Got a packet bigger than 'max_allowed_packet' bytes" AS Last_IO_Error;
|
||||||
|
Last_IO_Error
|
||||||
|
Got a packet bigger than 'max_allowed_packet' bytes
|
||||||
|
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;
|
||||||
|
CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
|
||||||
|
Slave_IO_Running = No (expect No)
|
||||||
|
SELECT "Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master'" AS Last_IO_Error;
|
||||||
|
Last_IO_Error
|
||||||
|
Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master'
|
||||||
==== clean up ====
|
==== clean up ====
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET @@global.max_allowed_packet= 1024;
|
SET @@global.max_allowed_packet= 1024;
|
||||||
|
26
mysql-test/suite/rpl/r/rpl_row_disabled_slave_key.result
Normal file
26
mysql-test/suite/rpl/r/rpl_row_disabled_slave_key.result
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
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;
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
CREATE TABLE t (a int, b int, c int, key(b));
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
CREATE TABLE t (a int, b int, c int);
|
||||||
|
INSERT INTO t VALUES (1,2,4);
|
||||||
|
INSERT INTO t VALUES (4,3,4);
|
||||||
|
DELETE FROM t;
|
||||||
|
DROP TABLE t;
|
||||||
|
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;
|
||||||
|
CREATE TABLE t (a int, b int, c int, key(b));
|
||||||
|
ALTER TABLE t DISABLE KEYS;
|
||||||
|
INSERT INTO t VALUES (1,2,4);
|
||||||
|
INSERT INTO t VALUES (4,3,4);
|
||||||
|
DELETE FROM t;
|
||||||
|
DROP TABLE t;
|
@ -51,3 +51,4 @@ Last_SQL_Errno 9
|
|||||||
Last_SQL_Error Error in Begin_load_query event: write to '../../tmp/SQL_LOAD.data' failed
|
Last_SQL_Error Error in Begin_load_query event: write to '../../tmp/SQL_LOAD.data' failed
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
call mtr.add_suppression("Slave: Error writing file 'UNKNOWN' .Errcode: 9. Error_code: 3");
|
||||||
|
@ -10,6 +10,3 @@
|
|||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
rpl_cross_version : Bug#42311 2009-03-27 joro rpl_cross_version fails on macosx
|
|
||||||
rpl_init_slave : Bug#44920 2009-07006 pcrews MTR2 is not processing master.opt input properly on Windows. *Must be done this way due to the nature of the bug*
|
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ reset master;
|
|||||||
connection slave;
|
connection slave;
|
||||||
|
|
||||||
# Add suppression for expected warnings in slaves error log
|
# Add suppression for expected warnings in slaves error log
|
||||||
call mtr.add_suppression("Failed during slave thread initialization");
|
call mtr.add_suppression("Failed during slave I/O thread initialization");
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
stop slave;
|
stop slave;
|
||||||
|
@ -211,4 +211,9 @@ DROP FUNCTION upgrade_alter_func;
|
|||||||
DROP DATABASE bug42217_db;
|
DROP DATABASE bug42217_db;
|
||||||
DROP USER 'create_rout_db'@'localhost';
|
DROP USER 'create_rout_db'@'localhost';
|
||||||
|
|
||||||
|
call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396");
|
||||||
|
connection slave;
|
||||||
|
USE mtr;
|
||||||
|
call mtr.add_suppression("Slave: Operation DROP USER failed for 'create_rout_db'@'localhost' Error_code: 1396");
|
||||||
|
|
||||||
--echo "End of test"
|
--echo "End of test"
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
source include/have_debug.inc;
|
source include/have_debug.inc;
|
||||||
|
call mtr.add_suppression("Slave I/O: .* failed with error: Lost connection to MySQL server at 'reading initial communication packet'");
|
||||||
|
call mtr.add_suppression("Slave I/O: Master command COM_REGISTER_SLAVE failed: failed registering on master, reconnecting to try again");
|
||||||
#Test case 1: Try to get the value of the UNIX_TIMESTAMP from master under network disconnection
|
#Test case 1: Try to get the value of the UNIX_TIMESTAMP from master under network disconnection
|
||||||
connection slave;
|
connection slave;
|
||||||
let $debug_saved= `select @@global.debug`;
|
let $debug_saved= `select @@global.debug`;
|
||||||
|
@ -8,7 +8,8 @@ connection slave;
|
|||||||
source include/have_innodb.inc;
|
source include/have_innodb.inc;
|
||||||
|
|
||||||
# Add suppression for expected warning(s) in slaves error log
|
# Add suppression for expected warning(s) in slaves error log
|
||||||
call mtr.add_suppression("Slave: Can\'t find record in \'t1\' Error_code: 1032");
|
call mtr.add_suppression("Slave: Can't find record in 't.' Error_code: 1032");
|
||||||
|
call mtr.add_suppression("Slave: Cannot delete or update a parent row: a foreign key constraint fails .* Error_code: 1451");
|
||||||
call mtr.add_suppression("Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452");
|
call mtr.add_suppression("Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452");
|
||||||
|
|
||||||
SET @old_slave_exec_mode= @@global.slave_exec_mode;
|
SET @old_slave_exec_mode= @@global.slave_exec_mode;
|
||||||
|
@ -57,6 +57,7 @@ source include/wait_for_slave_to_stop.inc;
|
|||||||
|
|
||||||
let $error= query_get_value(SHOW SLAVE STATUS, Last_Error, 1);
|
let $error= query_get_value(SHOW SLAVE STATUS, Last_Error, 1);
|
||||||
echo Reporting the following error: $error;
|
echo Reporting the following error: $error;
|
||||||
|
call mtr.add_suppression("Failed during slave I/O thread initialization");
|
||||||
|
|
||||||
SET GLOBAL debug= "";
|
SET GLOBAL debug= "";
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
# Passes with rbr no problem, removed statement include [jbm]
|
# Passes with rbr no problem, removed statement include [jbm]
|
||||||
|
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
|
call mtr.add_suppression ("Slave I/O: Got fatal error 1236 from master when reading data from binary");
|
||||||
source include/show_master_status.inc;
|
source include/show_master_status.inc;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
source include/stop_slave.inc;
|
source include/stop_slave.inc;
|
||||||
|
56
mysql-test/suite/rpl/t/rpl_mysql_upgrade.test
Normal file
56
mysql-test/suite/rpl/t/rpl_mysql_upgrade.test
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#############################################################################
|
||||||
|
# BUG#43579 mysql_upgrade tries to alter log tables on replicated database
|
||||||
|
# Master and slave should be upgraded separately. All statements executed by
|
||||||
|
# mysql_upgrade will not be binlogged. --write-binlog and --skip-write-binlog
|
||||||
|
# options are added into mysql_upgrade. These options control whether sql
|
||||||
|
# statements are binlogged or not.
|
||||||
|
#############################################################################
|
||||||
|
--source include/master-slave.inc
|
||||||
|
|
||||||
|
# Only run test if "mysql_upgrade" is found
|
||||||
|
--source include/have_mysql_upgrade.inc
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
--disable_warnings
|
||||||
|
DROP DATABASE IF EXISTS `#mysql50#mysqltest-1`;
|
||||||
|
CREATE DATABASE `#mysql50#mysqltest-1`;
|
||||||
|
--enable_warnings
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
let $before_position= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||||
|
|
||||||
|
#With '--force' option, mysql_upgrade always executes all sql statements for upgrading.
|
||||||
|
#--skip-write-binlog option disables binlog.
|
||||||
|
--exec $MYSQL_UPGRADE --skip-write-binlog --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade.log 2>&1
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
let $after_position= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||||
|
|
||||||
|
if (`SELECT '$before_position'='$after_position'`)
|
||||||
|
{
|
||||||
|
echo Master position is not changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
#Some log events of the mysql_upgrade's will cause errors on slave.
|
||||||
|
connection slave;
|
||||||
|
STOP SLAVE SQL_THREAD;
|
||||||
|
source include/wait_for_slave_sql_to_stop.inc;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
#With '--force' option, mysql_upgrade always executes all sql statements for upgrading.
|
||||||
|
--exec $MYSQL_UPGRADE --skip-verbose --force --user=root > $MYSQLTEST_VARDIR/log/mysql_upgrade.log 2>&1
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
let $after_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
||||||
|
let $after_position= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||||
|
|
||||||
|
if (!`SELECT '$before_position'='$after_position'`)
|
||||||
|
{
|
||||||
|
echo Master position has been changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
DROP DATABASE `mysqltest-1`;
|
||||||
|
connection slave;
|
||||||
|
DROP DATABASE `#mysql50#mysqltest-1`;
|
@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
# max-out size db name
|
# max-out size db name
|
||||||
source include/master-slave.inc;
|
source include/master-slave.inc;
|
||||||
|
source include/have_binlog_format_row.inc;
|
||||||
|
call mtr.add_suppression("Slave I/O: Got a packet bigger than 'max_allowed_packet' bytes, Error_code: 1153");
|
||||||
|
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log:");
|
||||||
|
|
||||||
let $db= DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
let $db= DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||||
disable_warnings;
|
disable_warnings;
|
||||||
@ -86,6 +89,35 @@ connection slave;
|
|||||||
--source include/wait_for_slave_io_to_stop.inc
|
--source include/wait_for_slave_io_to_stop.inc
|
||||||
let $slave_io_running= query_get_value(SHOW SLAVE STATUS, Slave_IO_Running, 1);
|
let $slave_io_running= query_get_value(SHOW SLAVE STATUS, Slave_IO_Running, 1);
|
||||||
--echo Slave_IO_Running = $slave_io_running (expect No)
|
--echo Slave_IO_Running = $slave_io_running (expect No)
|
||||||
|
#
|
||||||
|
# Bug#42914: The slave I/O thread must stop after trying to read the above
|
||||||
|
# event, However there is no Last_IO_Error report.
|
||||||
|
#
|
||||||
|
let $last_io_error= query_get_value(SHOW SLAVE STATUS, Last_IO_Error, 1);
|
||||||
|
eval SELECT "$last_io_error" AS Last_IO_Error;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#42914: On the master, if a binary log event is larger than
|
||||||
|
# max_allowed_packet, the error message ER_MASTER_FATAL_ERROR_READING_BINLOG
|
||||||
|
# is sent to a slave when it requests a dump from the master, thus leading the
|
||||||
|
# I/O thread to stop. However, there is no Last_IO_Error reported.
|
||||||
|
#
|
||||||
|
source include/master-slave-reset.inc;
|
||||||
|
connection master;
|
||||||
|
CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
# The slave I/O thread must stop after receiving
|
||||||
|
# ER_MASTER_FATAL_ERROR_READING_BINLOG error message from master.
|
||||||
|
--source include/wait_for_slave_io_to_stop.inc
|
||||||
|
let $slave_io_running= query_get_value(SHOW SLAVE STATUS, Slave_IO_Running, 1);
|
||||||
|
--echo Slave_IO_Running = $slave_io_running (expect No)
|
||||||
|
let $last_io_error= query_get_value(SHOW SLAVE STATUS, Last_IO_Error, 1);
|
||||||
|
eval SELECT "$last_io_error" AS Last_IO_Error;
|
||||||
|
|
||||||
--echo ==== clean up ====
|
--echo ==== clean up ====
|
||||||
connection master;
|
connection master;
|
||||||
|
73
mysql-test/suite/rpl/t/rpl_row_disabled_slave_key.test
Normal file
73
mysql-test/suite/rpl/t/rpl_row_disabled_slave_key.test
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# BUG#47312: RBR: Disabling key on slave breaks replication:
|
||||||
|
# HA_ERR_WRONG_INDEX
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# ===========
|
||||||
|
#
|
||||||
|
# This test case checks whether disabling a key on a slave breaks
|
||||||
|
# replication or not.
|
||||||
|
#
|
||||||
|
# Case #1, shows that while not using ALTER TABLE... DISABLE KEYS and
|
||||||
|
# the slave has no key defined while the master has one, replication
|
||||||
|
# won't break.
|
||||||
|
#
|
||||||
|
# Case #2, shows that before patch for BUG#47312, if defining key on
|
||||||
|
# slave table, and later disable it, replication would break. This
|
||||||
|
# has been fixed.
|
||||||
|
#
|
||||||
|
|
||||||
|
-- source include/master-slave.inc
|
||||||
|
-- source include/have_binlog_format_row.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Case #1: master has key, but slave has not.
|
||||||
|
# Replication does not break.
|
||||||
|
#
|
||||||
|
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
CREATE TABLE t (a int, b int, c int, key(b));
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
|
||||||
|
-- connection slave
|
||||||
|
|
||||||
|
CREATE TABLE t (a int, b int, c int);
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
INSERT INTO t VALUES (1,2,4);
|
||||||
|
INSERT INTO t VALUES (4,3,4);
|
||||||
|
DELETE FROM t;
|
||||||
|
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
#
|
||||||
|
# Case #2: master has key, slave also has one,
|
||||||
|
# but it gets disabled sometime.
|
||||||
|
# Replication does not break anymore.
|
||||||
|
#
|
||||||
|
-- source include/master-slave-reset.inc
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
CREATE TABLE t (a int, b int, c int, key(b));
|
||||||
|
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
ALTER TABLE t DISABLE KEYS;
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
INSERT INTO t VALUES (1,2,4);
|
||||||
|
INSERT INTO t VALUES (4,3,4);
|
||||||
|
DELETE FROM t;
|
||||||
|
|
||||||
|
-- sync_slave_with_master
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
-- sync_slave_with_master
|
@ -7,6 +7,7 @@
|
|||||||
# 1 - Creates a table and populates it through "LOAD DATA INFILE".
|
# 1 - Creates a table and populates it through "LOAD DATA INFILE".
|
||||||
# 2 - Catches error.
|
# 2 - Catches error.
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
--source include/have_binlog_format_mixed_or_statement.inc
|
--source include/have_binlog_format_mixed_or_statement.inc
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/have_debug.inc
|
--source include/have_debug.inc
|
||||||
@ -47,3 +48,5 @@ drop table t1;
|
|||||||
connection slave;
|
connection slave;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
call mtr.add_suppression("Slave: Error writing file 'UNKNOWN' .Errcode: 9. Error_code: 3");
|
||||||
|
@ -4,6 +4,7 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
call mtr.add_suppression("Slave: Unknown table 't6' Error_code: 1051");
|
||||||
**** Diff Table Def Start ****
|
**** Diff Table Def Start ****
|
||||||
*** On Slave ***
|
*** On Slave ***
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
# Some special cases with empty tables
|
# Some special cases with empty tables
|
||||||
#
|
#
|
||||||
|
|
||||||
|
call mtr.add_suppression("The table 't1' is full");
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
@ -1000,4 +1000,50 @@ ALTER TABLE t1 MODIFY b ENUM('a', 'z', 'b', 'c') NOT NULL;
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#45567: Fast ALTER TABLE broken for enum and set
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a ENUM('a1','a2'));
|
||||||
|
INSERT INTO t1 VALUES ('a1'),('a2');
|
||||||
|
--enable_info
|
||||||
|
--echo # No copy: No modification
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2');
|
||||||
|
--echo # No copy: Add new enumeration to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a3');
|
||||||
|
--echo # Copy: Modify and add new to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','xx','a5');
|
||||||
|
--echo # Copy: Remove from the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','xx');
|
||||||
|
--echo # Copy: Add new enumeration
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a0','xx');
|
||||||
|
--echo # No copy: Add new enumerations to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a ENUM('a1','a2','a0','xx','a5','a6');
|
||||||
|
--disable_info
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a SET('a1','a2'));
|
||||||
|
INSERT INTO t1 VALUES ('a1'),('a2');
|
||||||
|
--enable_info
|
||||||
|
--echo # No copy: No modification
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2');
|
||||||
|
--echo # No copy: Add new to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a3');
|
||||||
|
--echo # Copy: Modify and add new to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','xx','a5');
|
||||||
|
--echo # Copy: Remove from the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','xx');
|
||||||
|
--echo # Copy: Add new member
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx');
|
||||||
|
--echo # No copy: Add new to the end
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx','a5','a6');
|
||||||
|
--echo # Copy: Numerical incrase (pack lenght)
|
||||||
|
ALTER TABLE t1 MODIFY COLUMN a SET('a1','a2','a0','xx','a5','a6','a7','a8','a9','a10');
|
||||||
|
--disable_info
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
--echo # sort_buffer_size cannot allocate
|
--echo # sort_buffer_size cannot allocate
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
call mtr.add_suppression("Out of memory at line .*, 'my_alloc.c'");
|
||||||
|
call mtr.add_suppression("needed .* byte .*k., memory in use: .* bytes .*k");
|
||||||
|
|
||||||
CREATE TABLE t1(a CHAR(255));
|
CREATE TABLE t1(a CHAR(255));
|
||||||
INSERT INTO t1 VALUES ('a');
|
INSERT INTO t1 VALUES ('a');
|
||||||
|
|
||||||
|
2
mysql-test/t/bug46760-master.opt
Normal file
2
mysql-test/t/bug46760-master.opt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
--innodb-lock-wait-timeout=2
|
||||||
|
--innodb-file-per-table
|
38
mysql-test/t/bug46760.test
Normal file
38
mysql-test/t/bug46760.test
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
-- source include/have_innodb.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#46760: Fast ALTER TABLE no longer works for InnoDB
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
|
--echo # By using --enable_info and verifying that number of affected
|
||||||
|
--echo # rows is 0 we check that this ALTER TABLE is really carried
|
||||||
|
--echo # out as "fast/online" operation, i.e. without full-blown data
|
||||||
|
--echo # copying.
|
||||||
|
--echo #
|
||||||
|
--echo # I.e. info for the below statement should normally look like:
|
||||||
|
--echo #
|
||||||
|
--echo # affected rows: 0
|
||||||
|
--echo # info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
|
|
||||||
|
--enable_info
|
||||||
|
ALTER TABLE t1 ALTER COLUMN a SET DEFAULT 10;
|
||||||
|
--disable_info
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MySQL Bug#39200: optimize table does not recognize
|
||||||
|
--echo # ROW_FORMAT=COMPRESSED
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT) ROW_FORMAT=compressed;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo End of 5.1 tests
|
@ -292,3 +292,47 @@ DROP TABLE t1;
|
|||||||
DROP FUNCTION f1;
|
DROP FUNCTION f1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#46958: Assertion in Diagnostics_area::set_ok_status, trigger,
|
||||||
|
--echo # merge table
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 ( a INT );
|
||||||
|
CREATE TABLE t2 ( a INT );
|
||||||
|
CREATE TABLE t3 ( a INT );
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1), (2);
|
||||||
|
INSERT INTO t2 VALUES (1), (2);
|
||||||
|
INSERT INTO t3 VALUES (1), (2);
|
||||||
|
|
||||||
|
CREATE TRIGGER tr1 BEFORE DELETE ON t2
|
||||||
|
FOR EACH ROW INSERT INTO no_such_table VALUES (1);
|
||||||
|
|
||||||
|
--error ER_NO_SUCH_TABLE
|
||||||
|
DELETE t1, t2, t3 FROM t1, t2, t3;
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT * FROM t3;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( a INT );
|
||||||
|
CREATE TABLE t2 ( a INT );
|
||||||
|
CREATE TABLE t3 ( a INT );
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1), (2);
|
||||||
|
INSERT INTO t2 VALUES (1), (2);
|
||||||
|
INSERT INTO t3 VALUES (1), (2);
|
||||||
|
|
||||||
|
CREATE TRIGGER tr1 AFTER DELETE ON t2
|
||||||
|
FOR EACH ROW INSERT INTO no_such_table VALUES (1);
|
||||||
|
|
||||||
|
--error ER_NO_SUCH_TABLE
|
||||||
|
DELETE t1, t2, t3 FROM t1, t2, t3;
|
||||||
|
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
SELECT * FROM t3;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
@ -12,5 +12,5 @@
|
|||||||
kill : Bug#37780 2008-12-03 HHunger need some changes to be robust enough for pushbuild.
|
kill : Bug#37780 2008-12-03 HHunger need some changes to be robust enough for pushbuild.
|
||||||
innodb_bug39438 : Bug#42383 2009-01-28 lsoares "This fails in embedded and on windows. Note that this test is not run on windows and on embedded in PB for main trees currently"
|
innodb_bug39438 : Bug#42383 2009-01-28 lsoares "This fails in embedded and on windows. Note that this test is not run on windows and on embedded in PB for main trees currently"
|
||||||
query_cache_28249 : Bug#43861 2009-03-25 main.query_cache_28249 fails sporadically
|
query_cache_28249 : Bug#43861 2009-03-25 main.query_cache_28249 fails sporadically
|
||||||
init_connect : Bug#44920 2009-07-06 pcrews MTR not processing master.opt input properly on Windows. *Must be done this way due to the nature of the bug*
|
partition_innodb_builtin : Bug#32430 2009-09-25 mattiasj Waiting for push of Innodb changes
|
||||||
|
partition_innodb_plugin : Bug#32430 2009-09-25 mattiasj Waiting for push of Innodb changes
|
||||||
|
@ -1 +1 @@
|
|||||||
--log-slow-queries
|
--log-output=table,file --log-slow-queries
|
||||||
|
@ -478,3 +478,23 @@ INSERT INTO t2 SELECT c1 FROM t1;
|
|||||||
INSERT INTO t2 SELECT NULL FROM t1;
|
INSERT INTO t2 SELECT NULL FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
|
#
|
||||||
|
# 44030: Error: (1500) Couldn't read the MAX(ID) autoinc value from
|
||||||
|
# the index (PRIMARY)
|
||||||
|
# This test requires a restart of the server
|
||||||
|
CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (null);
|
||||||
|
INSERT INTO t1 VALUES (null);
|
||||||
|
ALTER TABLE t1 CHANGE c1 d1 INT NOT NULL AUTO_INCREMENT;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
# Restart the server
|
||||||
|
-- source include/restart_mysqld.inc
|
||||||
|
# The MySQL and InnoDB data dictionaries should now be out of sync.
|
||||||
|
# The select should print message to the error log
|
||||||
|
SELECT * FROM t1;
|
||||||
|
-- error ER_AUTOINC_READ_FAILED,1467
|
||||||
|
INSERT INTO t1 VALUES(null);
|
||||||
|
ALTER TABLE t1 AUTO_INCREMENT = 3;
|
||||||
|
INSERT INTO t1 VALUES(null);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -407,6 +407,7 @@ SET GLOBAL myisam_data_pointer_size = 2;
|
|||||||
|
|
||||||
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
||||||
|
|
||||||
|
call mtr.add_suppression("mysqld: The table '.*#sql.*' is full");
|
||||||
--error ER_RECORD_FILE_FULL,ER_RECORD_FILE_FULL
|
--error ER_RECORD_FILE_FULL,ER_RECORD_FILE_FULL
|
||||||
INSERT IGNORE INTO t1 SELECT t1.a FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6,t1 t7;
|
INSERT IGNORE INTO t1 SELECT t1.a FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6,t1 t7;
|
||||||
|
|
||||||
|
@ -729,4 +729,24 @@ SELECT * FROM t1 JOIN t2 ON b=c ORDER BY a;
|
|||||||
SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a;
|
SELECT * FROM t1 JOIN t2 ON a=c ORDER BY a;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS t1,t2;
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#47150 Assertion in Field_long::val_int() on MERGE + TRIGGER + multi-table UPDATE
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 int);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (f1 int);
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
CREATE VIEW v1 AS SELECT * FROM t2;
|
||||||
|
|
||||||
|
PREPARE stmt FROM 'UPDATE t2 AS A NATURAL JOIN v1 B SET B.f1 = 1';
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -1 +1 @@
|
|||||||
--log-slow-queries
|
--log-output=table,file --log-slow-queries
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
--source include/have_case_insensitive_file_system.inc
|
--source include/have_case_insensitive_file_system.inc
|
||||||
--source include/not_windows.inc
|
--source include/not_windows.inc
|
||||||
|
|
||||||
call mtr.add_suppression("Cannot find or open table test/BUG29839 from .*");
|
call mtr.add_suppression("Cannot find or open table test/BUG29839 from");
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1,T1;
|
DROP TABLE IF EXISTS t1,T1;
|
||||||
|
@ -12,11 +12,11 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
|||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 (a int) engine=myisam;
|
create table t1 (a int) engine=myisam;
|
||||||
--remove_file $MYSQLD_DATADIR/test/t1.MYI
|
--remove_file $MYSQLD_DATADIR/test/t1.MYI
|
||||||
--error 1051,6
|
--error ER_BAD_TABLE_ERROR,6
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a int) engine=myisam;
|
create table t1 (a int) engine=myisam;
|
||||||
--remove_file $MYSQLD_DATADIR/test/t1.MYD
|
--remove_file $MYSQLD_DATADIR/test/t1.MYD
|
||||||
--error 1105,6,29
|
--error ER_BAD_TABLE_ERROR,6,29
|
||||||
drop table t1;
|
drop table t1;
|
||||||
--error 1051
|
--error ER_BAD_TABLE_ERROR
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -1503,5 +1503,20 @@ SELECT h+0, d + 0, e, g + 0 FROM t1;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Test of BUG#35570 CHECKSUM TABLE unreliable if LINESTRING field
|
||||||
|
--echo # (same content / differen checksum)
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (line LINESTRING NOT NULL) engine=myisam;
|
||||||
|
INSERT INTO t1 VALUES (GeomFromText("POINT(0 0)"));
|
||||||
|
checksum table t1;
|
||||||
|
CREATE TABLE t2 (line LINESTRING NOT NULL) engine=myisam;
|
||||||
|
INSERT INTO t2 VALUES (GeomFromText("POINT(0 0)"));
|
||||||
|
checksum table t2;
|
||||||
|
CREATE TABLE t3 select * from t1;
|
||||||
|
checksum table t3;
|
||||||
|
drop table t1,t2,t3;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
|
@ -853,16 +853,18 @@ while ($outer)
|
|||||||
eval SELECT '$outer = outer loop variable after dec' AS "";
|
eval SELECT '$outer = outer loop variable after dec' AS "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Test source in an if in a while which is false on 1st iteration
|
||||||
let $outer= 2; # Number of outer loops
|
let $outer= 2; # Number of outer loops
|
||||||
|
let $ifval= 0; # false 1st time
|
||||||
while ($outer)
|
while ($outer)
|
||||||
{
|
{
|
||||||
eval SELECT '$outer = outer loop variable after while' AS "";
|
echo outer=$outer ifval=$ifval;
|
||||||
|
|
||||||
echo here is the sourced script;
|
if ($ifval) {
|
||||||
|
--source $MYSQLTEST_VARDIR/tmp/sourced.inc
|
||||||
eval SELECT '$outer = outer loop variable before dec' AS "";
|
}
|
||||||
dec $outer;
|
dec $outer;
|
||||||
eval SELECT '$outer = outer loop variable after dec' AS "";
|
inc $ifval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1663,6 +1665,20 @@ EOF
|
|||||||
|
|
||||||
remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
|
remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
|
||||||
|
|
||||||
|
# Test append_file within while
|
||||||
|
let $outer= 2; # Number of outer loops
|
||||||
|
while ($outer)
|
||||||
|
{
|
||||||
|
append_file $MYSQLTEST_VARDIR/tmp/app_while.tmp;
|
||||||
|
These lines should be repeated,
|
||||||
|
if things work as expected
|
||||||
|
EOF
|
||||||
|
dec $outer;
|
||||||
|
}
|
||||||
|
|
||||||
|
cat_file $MYSQLTEST_VARDIR/tmp/app_while.tmp;
|
||||||
|
remove_file $MYSQLTEST_VARDIR/tmp/app_while.tmp;
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# test for cat_file
|
# test for cat_file
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@ -1710,10 +1726,6 @@ EOF
|
|||||||
--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp
|
--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp
|
||||||
--diff_files $MYSQLTEST_VARDIR/tmp/diff2.tmp $MYSQLTEST_VARDIR/tmp/diff1.tmp
|
--diff_files $MYSQLTEST_VARDIR/tmp/diff2.tmp $MYSQLTEST_VARDIR/tmp/diff1.tmp
|
||||||
|
|
||||||
# Write the below commands to a intermediary file and execute them with
|
|
||||||
# mysqltest in --exec, since the output will vary depending on what "diff"
|
|
||||||
# is available it is sent to /dev/null
|
|
||||||
--write_file $MYSQLTEST_VARDIR/tmp/diff.test
|
|
||||||
# Compare files that differ in size
|
# Compare files that differ in size
|
||||||
--error 2
|
--error 2
|
||||||
--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff3.tmp
|
--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff3.tmp
|
||||||
@ -1725,13 +1737,6 @@ EOF
|
|||||||
--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff4.tmp
|
--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff4.tmp
|
||||||
--error 1
|
--error 1
|
||||||
--diff_files $MYSQLTEST_VARDIR/tmp/diff4.tmp $MYSQLTEST_VARDIR/tmp/diff1.tmp
|
--diff_files $MYSQLTEST_VARDIR/tmp/diff4.tmp $MYSQLTEST_VARDIR/tmp/diff1.tmp
|
||||||
exit;
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Execute the above diffs, and send their output to /dev/null - only
|
|
||||||
# interesting to see that it returns correct error codes
|
|
||||||
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/diff.test > /dev/null 2>&1
|
|
||||||
|
|
||||||
|
|
||||||
# Compare equal files, again...
|
# Compare equal files, again...
|
||||||
--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp
|
--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp
|
||||||
@ -1740,7 +1745,6 @@ EOF
|
|||||||
--remove_file $MYSQLTEST_VARDIR/tmp/diff2.tmp
|
--remove_file $MYSQLTEST_VARDIR/tmp/diff2.tmp
|
||||||
--remove_file $MYSQLTEST_VARDIR/tmp/diff3.tmp
|
--remove_file $MYSQLTEST_VARDIR/tmp/diff3.tmp
|
||||||
--remove_file $MYSQLTEST_VARDIR/tmp/diff4.tmp
|
--remove_file $MYSQLTEST_VARDIR/tmp/diff4.tmp
|
||||||
--remove_file $MYSQLTEST_VARDIR/tmp/diff.test
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
@ -15,7 +15,7 @@ let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
|||||||
# Bug#39893: Crash if select on a partitioned table,
|
# Bug#39893: Crash if select on a partitioned table,
|
||||||
# when partitioning is disabled
|
# when partitioning is disabled
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
--copy_file $MYSQLTEST_VARDIR/std_data_ln/parts/t1.frm $MYSQLD_DATADIR/test/t1.frm
|
--copy_file $MYSQLTEST_VARDIR/std_data/parts/t1.frm $MYSQLD_DATADIR/test/t1.frm
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
TRUNCATE TABLE t1;
|
TRUNCATE TABLE t1;
|
||||||
ANALYZE TABLE t1;
|
ANALYZE TABLE t1;
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
--source include/have_partition.inc
|
--source include/have_partition.inc
|
||||||
--source include/have_csv.inc
|
--source include/have_csv.inc
|
||||||
|
|
||||||
|
call mtr.add_suppression("Failed to write to mysql.general_log");
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#19307: Partitions: csv delete failure
|
# Bug#19307: Partitions: csv delete failure
|
||||||
# = CSV engine crashes
|
# = CSV engine crashes
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user