mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
new merge from trunk
This commit is contained in:
commit
9d9ee64637
177 changed files with 6918 additions and 939 deletions
|
@ -1,4 +1,4 @@
|
||||||
[MYSQL]
|
[MYSQL]
|
||||||
post_commit_to = "commits@lists.mysql.com"
|
post_commit_to = "commits@lists.mysql.com"
|
||||||
post_push_to = "commits@lists.mysql.com"
|
post_push_to = "commits@lists.mysql.com"
|
||||||
tree_name = "mysql-5.4-mtr"
|
tree_name = "mysql-trunk-mtr"
|
||||||
|
|
|
@ -73,6 +73,11 @@ check_cpu () {
|
||||||
Alpha*EV6*)
|
Alpha*EV6*)
|
||||||
cpu_arg="ev6";
|
cpu_arg="ev6";
|
||||||
;;
|
;;
|
||||||
|
#Core 2 Duo
|
||||||
|
*Intel*Core\(TM\)2*)
|
||||||
|
cpu_arg="nocona"
|
||||||
|
core2="yes"
|
||||||
|
;;
|
||||||
# Intel ia32
|
# Intel ia32
|
||||||
*Intel*Core*|*X[eE][oO][nN]*)
|
*Intel*Core*|*X[eE][oO][nN]*)
|
||||||
# a Xeon is just another pentium4 ...
|
# a Xeon is just another pentium4 ...
|
||||||
|
@ -137,10 +142,6 @@ check_cpu () {
|
||||||
*i386*)
|
*i386*)
|
||||||
cpu_arg="i386"
|
cpu_arg="i386"
|
||||||
;;
|
;;
|
||||||
#Core 2 Duo
|
|
||||||
*Intel*Core\(TM\)2*)
|
|
||||||
cpu_arg="nocona"
|
|
||||||
;;
|
|
||||||
# Intel ia64
|
# Intel ia64
|
||||||
*Itanium*)
|
*Itanium*)
|
||||||
cpu_arg="itanium"
|
cpu_arg="itanium"
|
||||||
|
|
|
@ -1873,7 +1873,7 @@ static int read_and_execute(bool interactive)
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
}
|
}
|
||||||
#else defined(__WIN__)
|
#else
|
||||||
if (!tmpbuf.is_alloced())
|
if (!tmpbuf.is_alloced())
|
||||||
tmpbuf.alloc(65535);
|
tmpbuf.alloc(65535);
|
||||||
tmpbuf.length(0);
|
tmpbuf.length(0);
|
||||||
|
@ -3819,7 +3819,8 @@ com_edit(String *buffer,char *line __attribute__((unused)))
|
||||||
!(editor = (char *)getenv("VISUAL")))
|
!(editor = (char *)getenv("VISUAL")))
|
||||||
editor = "vi";
|
editor = "vi";
|
||||||
strxmov(buff,editor," ",filename,NullS);
|
strxmov(buff,editor," ",filename,NullS);
|
||||||
(void) system(buff);
|
if(system(buff) == -1)
|
||||||
|
goto err;
|
||||||
|
|
||||||
MY_STAT stat_arg;
|
MY_STAT stat_arg;
|
||||||
if (!my_stat(filename,&stat_arg,MYF(MY_WME)))
|
if (!my_stat(filename,&stat_arg,MYF(MY_WME)))
|
||||||
|
|
|
@ -552,6 +552,7 @@ static int upgrade_already_done(void)
|
||||||
FILE *in;
|
FILE *in;
|
||||||
char upgrade_info_file[FN_REFLEN]= {0};
|
char upgrade_info_file[FN_REFLEN]= {0};
|
||||||
char buf[sizeof(MYSQL_SERVER_VERSION)+1];
|
char buf[sizeof(MYSQL_SERVER_VERSION)+1];
|
||||||
|
char *res;
|
||||||
|
|
||||||
if (get_upgrade_info_file_name(upgrade_info_file))
|
if (get_upgrade_info_file_name(upgrade_info_file))
|
||||||
return 0; /* Could not get filename => not sure */
|
return 0; /* Could not get filename => not sure */
|
||||||
|
@ -564,7 +565,7 @@ static int upgrade_already_done(void)
|
||||||
will be detected by the strncmp
|
will be detected by the strncmp
|
||||||
*/
|
*/
|
||||||
bzero(buf, sizeof(buf));
|
bzero(buf, sizeof(buf));
|
||||||
fgets(buf, sizeof(buf), in);
|
res= fgets(buf, sizeof(buf), in);
|
||||||
|
|
||||||
my_fclose(in, MYF(0));
|
my_fclose(in, MYF(0));
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#endif
|
#endif
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <mysql.h>
|
#include <mysql.h>
|
||||||
|
#include <sql_common.h>
|
||||||
|
|
||||||
#define ADMIN_VERSION "8.42"
|
#define ADMIN_VERSION "8.42"
|
||||||
#define MAX_MYSQL_VAR 512
|
#define MAX_MYSQL_VAR 512
|
||||||
|
@ -353,6 +354,11 @@ int main(int argc,char *argv[])
|
||||||
|
|
||||||
if (sql_connect(&mysql, option_wait))
|
if (sql_connect(&mysql, option_wait))
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
We couldn't get an initial connection and will definitely exit.
|
||||||
|
The following just determines the exit-code we'll give.
|
||||||
|
*/
|
||||||
|
|
||||||
unsigned int err= mysql_errno(&mysql);
|
unsigned int err= mysql_errno(&mysql);
|
||||||
if (err >= CR_MIN_ERROR && err <= CR_MAX_ERROR)
|
if (err >= CR_MIN_ERROR && err <= CR_MAX_ERROR)
|
||||||
error= 1;
|
error= 1;
|
||||||
|
@ -371,41 +377,79 @@ int main(int argc,char *argv[])
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (!interrupted)
|
/*
|
||||||
|
--count=0 aborts right here. Otherwise iff --sleep=t ("interval")
|
||||||
|
is given a t!=0, we get an endless loop, or n iterations if --count=n
|
||||||
|
was given an n!=0. If --sleep wasn't given, we get one iteration.
|
||||||
|
|
||||||
|
To wit, --wait loops the connection-attempts, while --sleep loops
|
||||||
|
the command execution (endlessly if no --count is given).
|
||||||
|
*/
|
||||||
|
|
||||||
|
while (!interrupted && (!opt_count_iterations || nr_iterations))
|
||||||
{
|
{
|
||||||
new_line = 0;
|
new_line = 0;
|
||||||
|
|
||||||
if ((error= execute_commands(&mysql,argc,commands)))
|
if ((error= execute_commands(&mysql,argc,commands)))
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Unknown/malformed command always aborts and can't be --forced.
|
||||||
|
If the user got confused about the syntax, proceeding would be
|
||||||
|
dangerous ...
|
||||||
|
*/
|
||||||
if (error > 0)
|
if (error > 0)
|
||||||
break; /* Wrong command error */
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Command was well-formed, but failed on the server. Might succeed
|
||||||
|
on retry (if conditions on server change etc.), but needs --force
|
||||||
|
to retry.
|
||||||
|
*/
|
||||||
if (!option_force)
|
if (!option_force)
|
||||||
|
break;
|
||||||
|
} /* if((error= ... */
|
||||||
|
|
||||||
|
if (interval) /* --sleep=interval given */
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
If connection was dropped (unintentionally, or due to SHUTDOWN),
|
||||||
|
re-establish it if --wait ("retry-connect") was given and user
|
||||||
|
didn't signal for us to die. Otherwise, signal failure.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (mysql.net.vio == 0)
|
||||||
{
|
{
|
||||||
if (option_wait && !interrupted)
|
if (option_wait && !interrupted)
|
||||||
{
|
{
|
||||||
mysql_close(&mysql);
|
sleep(1);
|
||||||
if (!sql_connect(&mysql, option_wait))
|
sql_connect(&mysql, option_wait);
|
||||||
|
/*
|
||||||
|
continue normally and decrease counters so that
|
||||||
|
"mysqladmin --count=1 --wait=1 shutdown"
|
||||||
|
cannot loop endlessly.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
sleep(1); /* Don't retry too rapidly */
|
/*
|
||||||
continue; /* Retry */
|
connexion broke, and we have no order to re-establish it. fail.
|
||||||
}
|
*/
|
||||||
}
|
if (!option_force)
|
||||||
error= 1;
|
error= 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
} /* lost connection */
|
||||||
if (interval)
|
|
||||||
{
|
|
||||||
if (opt_count_iterations && --nr_iterations == 0)
|
|
||||||
break;
|
|
||||||
sleep(interval);
|
sleep(interval);
|
||||||
if (new_line)
|
if (new_line)
|
||||||
puts("");
|
puts("");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break; /* no --sleep, done looping */
|
||||||
}
|
} /* command-loop */
|
||||||
|
} /* got connection */
|
||||||
|
|
||||||
mysql_close(&mysql);
|
mysql_close(&mysql);
|
||||||
}
|
|
||||||
my_free(opt_password,MYF(MY_ALLOW_ZERO_PTR));
|
my_free(opt_password,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
my_free(user,MYF(MY_ALLOW_ZERO_PTR));
|
my_free(user,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
#ifdef HAVE_SMEM
|
#ifdef HAVE_SMEM
|
||||||
|
@ -423,6 +467,17 @@ sig_handler endprog(int signal_number __attribute__((unused)))
|
||||||
interrupted=1;
|
interrupted=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief connect to server, optionally waiting for same to come up
|
||||||
|
|
||||||
|
@param mysql connection struct
|
||||||
|
@param wait wait for server to come up?
|
||||||
|
(0: no, ~0: forever, n: cycles)
|
||||||
|
|
||||||
|
@return Operation result
|
||||||
|
@retval 0 success
|
||||||
|
@retval 1 failure
|
||||||
|
*/
|
||||||
|
|
||||||
static my_bool sql_connect(MYSQL *mysql, uint wait)
|
static my_bool sql_connect(MYSQL *mysql, uint wait)
|
||||||
{
|
{
|
||||||
|
@ -431,7 +486,7 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (mysql_real_connect(mysql,host,user,opt_password,NullS,tcp_port,
|
if (mysql_real_connect(mysql,host,user,opt_password,NullS,tcp_port,
|
||||||
unix_port, 0))
|
unix_port, CLIENT_REMEMBER_OPTIONS))
|
||||||
{
|
{
|
||||||
mysql->reconnect= 1;
|
mysql->reconnect= 1;
|
||||||
if (info)
|
if (info)
|
||||||
|
@ -442,9 +497,9 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wait)
|
if (!wait) // was or reached 0, fail
|
||||||
{
|
{
|
||||||
if (!option_silent)
|
if (!option_silent) // print diagnostics
|
||||||
{
|
{
|
||||||
if (!host)
|
if (!host)
|
||||||
host= (char*) LOCAL_HOST;
|
host= (char*) LOCAL_HOST;
|
||||||
|
@ -468,11 +523,18 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wait != (uint) ~0)
|
if (wait != (uint) ~0)
|
||||||
wait--; /* One less retry */
|
wait--; /* count down, one less retry */
|
||||||
|
|
||||||
if ((mysql_errno(mysql) != CR_CONN_HOST_ERROR) &&
|
if ((mysql_errno(mysql) != CR_CONN_HOST_ERROR) &&
|
||||||
(mysql_errno(mysql) != CR_CONNECTION_ERROR))
|
(mysql_errno(mysql) != CR_CONNECTION_ERROR))
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
Error is worse than "server doesn't answer (yet?)";
|
||||||
|
fail even if we still have "wait-coins" unless --force
|
||||||
|
was also given.
|
||||||
|
*/
|
||||||
fprintf(stderr,"Got error: %s\n", mysql_error(mysql));
|
fprintf(stderr,"Got error: %s\n", mysql_error(mysql));
|
||||||
if (!option_force)
|
if (!option_force)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -496,11 +558,18 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Execute a command.
|
@brief Execute all commands
|
||||||
Return 0 on ok
|
|
||||||
-1 on retryable error
|
@details We try to execute all commands we were given, in the order
|
||||||
1 on fatal error
|
given, but return with non-zero as soon as we encounter trouble.
|
||||||
|
By that token, individual commands can be considered a conjunction
|
||||||
|
with boolean short-cut.
|
||||||
|
|
||||||
|
@return success?
|
||||||
|
@retval 0 Yes! ALL commands worked!
|
||||||
|
@retval 1 No, one failed and will never work (malformed): fatal error!
|
||||||
|
@retval -1 No, one failed on the server, may work next time!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||||
|
@ -570,7 +639,6 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||||
mysql_error(mysql));
|
mysql_error(mysql));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
mysql_close(mysql); /* Close connection to avoid error messages */
|
|
||||||
argc=1; /* force SHUTDOWN to be the last command */
|
argc=1; /* force SHUTDOWN to be the last command */
|
||||||
if (got_pidfile)
|
if (got_pidfile)
|
||||||
{
|
{
|
||||||
|
@ -1036,14 +1104,16 @@ static void usage(void)
|
||||||
static int drop_db(MYSQL *mysql, const char *db)
|
static int drop_db(MYSQL *mysql, const char *db)
|
||||||
{
|
{
|
||||||
char name_buff[FN_REFLEN+20], buf[10];
|
char name_buff[FN_REFLEN+20], buf[10];
|
||||||
|
char *input;
|
||||||
|
|
||||||
if (!option_force)
|
if (!option_force)
|
||||||
{
|
{
|
||||||
puts("Dropping the database is potentially a very bad thing to do.");
|
puts("Dropping the database is potentially a very bad thing to do.");
|
||||||
puts("Any data stored in the database will be destroyed.\n");
|
puts("Any data stored in the database will be destroyed.\n");
|
||||||
printf("Do you really want to drop the '%s' database [y/N] ",db);
|
printf("Do you really want to drop the '%s' database [y/N] ",db);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
VOID(fgets(buf,sizeof(buf)-1,stdin));
|
input= fgets(buf, sizeof(buf)-1, stdin);
|
||||||
if ((*buf != 'y') && (*buf != 'Y'))
|
if (!input || ((*input != 'y') && (*input != 'Y')))
|
||||||
{
|
{
|
||||||
puts("\nOK, aborting database drop!");
|
puts("\nOK, aborting database drop!");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -5008,7 +5008,7 @@ int main(int argc, char **argv)
|
||||||
exit_code= get_options(&argc, &argv);
|
exit_code= get_options(&argc, &argv);
|
||||||
if (exit_code)
|
if (exit_code)
|
||||||
{
|
{
|
||||||
free_resources(0);
|
free_resources();
|
||||||
exit(exit_code);
|
exit(exit_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5016,14 +5016,14 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if(!(stderror_file= freopen(log_error_file, "a+", stderr)))
|
if(!(stderror_file= freopen(log_error_file, "a+", stderr)))
|
||||||
{
|
{
|
||||||
free_resources(0);
|
free_resources();
|
||||||
exit(EX_MYSQLERR);
|
exit(EX_MYSQLERR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connect_to_db(current_host, current_user, opt_password))
|
if (connect_to_db(current_host, current_user, opt_password))
|
||||||
{
|
{
|
||||||
free_resources(0);
|
free_resources();
|
||||||
exit(EX_MYSQLERR);
|
exit(EX_MYSQLERR);
|
||||||
}
|
}
|
||||||
if (!path)
|
if (!path)
|
||||||
|
|
|
@ -432,10 +432,12 @@ DYNAMIC_STRING ds_res;
|
||||||
|
|
||||||
char builtin_echo[FN_REFLEN];
|
char builtin_echo[FN_REFLEN];
|
||||||
|
|
||||||
|
static void cleanup_and_exit(int exit_code) __attribute__((noreturn));
|
||||||
|
|
||||||
void die(const char *fmt, ...)
|
void die(const char *fmt, ...)
|
||||||
ATTRIBUTE_FORMAT(printf, 1, 2);
|
ATTRIBUTE_FORMAT(printf, 1, 2) __attribute__((noreturn));
|
||||||
void abort_not_supported_test(const char *fmt, ...)
|
void abort_not_supported_test(const char *fmt, ...)
|
||||||
ATTRIBUTE_FORMAT(printf, 1, 2);
|
ATTRIBUTE_FORMAT(printf, 1, 2) __attribute__((noreturn));
|
||||||
void verbose_msg(const char *fmt, ...)
|
void verbose_msg(const char *fmt, ...)
|
||||||
ATTRIBUTE_FORMAT(printf, 1, 2);
|
ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||||
void log_msg(const char *fmt, ...)
|
void log_msg(const char *fmt, ...)
|
||||||
|
@ -1166,6 +1168,7 @@ void free_used_memory()
|
||||||
mysql_server_end();
|
mysql_server_end();
|
||||||
|
|
||||||
/* Don't use DBUG after mysql_server_end() */
|
/* Don't use DBUG after mysql_server_end() */
|
||||||
|
DBUG_VIOLATION_HELPER_LEAVE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2488,7 +2491,7 @@ void do_source(struct st_command *command)
|
||||||
}
|
}
|
||||||
|
|
||||||
dynstr_free(&ds_filename);
|
dynstr_free(&ds_filename);
|
||||||
return;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3722,10 +3725,9 @@ void do_wait_for_slave_to_stop(struct st_command *c __attribute__((unused)))
|
||||||
MYSQL* mysql = &cur_con->mysql;
|
MYSQL* mysql = &cur_con->mysql;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
MYSQL_RES *res;
|
MYSQL_RES *UNINIT_VAR(res);
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
int done;
|
int done;
|
||||||
LINT_INIT(res);
|
|
||||||
|
|
||||||
if (mysql_query(mysql,"show status like 'Slave_running'") ||
|
if (mysql_query(mysql,"show status like 'Slave_running'") ||
|
||||||
!(res=mysql_store_result(mysql)))
|
!(res=mysql_store_result(mysql)))
|
||||||
|
@ -5257,13 +5259,12 @@ my_bool end_of_query(int c)
|
||||||
|
|
||||||
int read_line(char *buf, int size)
|
int read_line(char *buf, int size)
|
||||||
{
|
{
|
||||||
char c, last_quote;
|
char c, UNINIT_VAR(last_quote);
|
||||||
char *p= buf, *buf_end= buf + size - 1;
|
char *p= buf, *buf_end= buf + size - 1;
|
||||||
int skip_char= 0;
|
int skip_char= 0;
|
||||||
enum {R_NORMAL, R_Q, R_SLASH_IN_Q,
|
enum {R_NORMAL, R_Q, R_SLASH_IN_Q,
|
||||||
R_COMMENT, R_LINE_START} state= R_LINE_START;
|
R_COMMENT, R_LINE_START} state= R_LINE_START;
|
||||||
DBUG_ENTER("read_line");
|
DBUG_ENTER("read_line");
|
||||||
LINT_INIT(last_quote);
|
|
||||||
|
|
||||||
start_lineno= cur_file->lineno;
|
start_lineno= cur_file->lineno;
|
||||||
DBUG_PRINT("info", ("Starting to read at lineno: %d", start_lineno));
|
DBUG_PRINT("info", ("Starting to read at lineno: %d", start_lineno));
|
||||||
|
@ -6495,8 +6496,7 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
|
||||||
|
|
||||||
if (!disable_result_log)
|
if (!disable_result_log)
|
||||||
{
|
{
|
||||||
ulonglong affected_rows; /* Ok to be undef if 'disable_info' is set */
|
ulonglong UNINIT_VAR(affected_rows); /* Ok to be undef if 'disable_info' is set */
|
||||||
LINT_INIT(affected_rows);
|
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
|
@ -7526,6 +7526,8 @@ static void init_signal_handling(void)
|
||||||
#endif
|
#endif
|
||||||
sigaction(SIGILL, &sa, NULL);
|
sigaction(SIGILL, &sa, NULL);
|
||||||
sigaction(SIGFPE, &sa, NULL);
|
sigaction(SIGFPE, &sa, NULL);
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* !__WIN__ */
|
#endif /* !__WIN__ */
|
||||||
|
@ -8175,6 +8177,8 @@ void do_get_replace_column(struct st_command *command)
|
||||||
}
|
}
|
||||||
my_free(start, MYF(0));
|
my_free(start, MYF(0));
|
||||||
command->last_argument= command->end;
|
command->last_argument= command->end;
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -339,9 +339,7 @@ rl_generic_bind (type, keyseq, data, map)
|
||||||
char *keys;
|
char *keys;
|
||||||
int keys_len;
|
int keys_len;
|
||||||
register int i;
|
register int i;
|
||||||
KEYMAP_ENTRY k;
|
KEYMAP_ENTRY k= { 0, NULL };
|
||||||
|
|
||||||
k.function = 0;
|
|
||||||
|
|
||||||
/* If no keys to bind to, exit right away. */
|
/* If no keys to bind to, exit right away. */
|
||||||
if (keyseq == 0 || *keyseq == 0)
|
if (keyseq == 0 || *keyseq == 0)
|
||||||
|
|
|
@ -311,6 +311,7 @@ history_truncate_file (fname, lines)
|
||||||
int file, chars_read, rv;
|
int file, chars_read, rv;
|
||||||
struct stat finfo;
|
struct stat finfo;
|
||||||
size_t file_size;
|
size_t file_size;
|
||||||
|
size_t bytes_written;
|
||||||
|
|
||||||
buffer = (char *)NULL;
|
buffer = (char *)NULL;
|
||||||
filename = history_filename (fname);
|
filename = history_filename (fname);
|
||||||
|
@ -400,7 +401,7 @@ if ((sizeof(off_t) > sizeof(size_t) && finfo.st_size > (off_t)(size_t)~0) ||
|
||||||
truncate to. */
|
truncate to. */
|
||||||
if (bp > buffer && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
|
if (bp > buffer && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1))
|
||||||
{
|
{
|
||||||
write (file, bp, chars_read - (bp - buffer));
|
bytes_written= write (file, bp, chars_read - (bp - buffer));
|
||||||
|
|
||||||
#if defined (__BEOS__)
|
#if defined (__BEOS__)
|
||||||
/* BeOS ignores O_TRUNC. */
|
/* BeOS ignores O_TRUNC. */
|
||||||
|
|
|
@ -137,7 +137,8 @@ UNDO_LIST *
|
||||||
_rl_copy_undo_list (head)
|
_rl_copy_undo_list (head)
|
||||||
UNDO_LIST *head;
|
UNDO_LIST *head;
|
||||||
{
|
{
|
||||||
UNDO_LIST *list, *new, *roving, *c;
|
UNDO_LIST *list, *new, *c;
|
||||||
|
UNDO_LIST *roving= NULL;
|
||||||
|
|
||||||
list = head;
|
list = head;
|
||||||
new = 0;
|
new = 0;
|
||||||
|
|
|
@ -16,6 +16,29 @@
|
||||||
#ifndef _dbug_h
|
#ifndef _dbug_h
|
||||||
#define _dbug_h
|
#define _dbug_h
|
||||||
|
|
||||||
|
#if defined(__cplusplus) && !defined(DBUG_OFF)
|
||||||
|
class Dbug_violation_helper
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline Dbug_violation_helper() :
|
||||||
|
_entered(TRUE)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
inline ~Dbug_violation_helper()
|
||||||
|
{
|
||||||
|
assert(!_entered);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void leave()
|
||||||
|
{
|
||||||
|
_entered= FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool _entered;
|
||||||
|
};
|
||||||
|
#endif /* C++ */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -47,11 +70,31 @@ extern void _db_lock_file_(void);
|
||||||
extern void _db_unlock_file_(void);
|
extern void _db_unlock_file_(void);
|
||||||
extern FILE *_db_fp_(void);
|
extern FILE *_db_fp_(void);
|
||||||
|
|
||||||
#define DBUG_ENTER(a) const char *_db_func_, *_db_file_; uint _db_level_; \
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
#define DBUG_ENTER(a) \
|
||||||
|
const char *_db_func_, *_db_file_; \
|
||||||
|
uint _db_level_; \
|
||||||
char **_db_framep_; \
|
char **_db_framep_; \
|
||||||
_db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_, \
|
Dbug_violation_helper dbug_violation_helper; \
|
||||||
&_db_framep_)
|
_db_enter_ (a, __FILE__, __LINE__, &_db_func_, &_db_file_, \
|
||||||
|
&_db_level_, &_db_framep_)
|
||||||
|
#define DBUG_VIOLATION_HELPER_LEAVE dbug_violation_helper.leave()
|
||||||
|
|
||||||
|
#else /* C */
|
||||||
|
|
||||||
|
#define DBUG_ENTER(a) \
|
||||||
|
const char *_db_func_, *_db_file_; \
|
||||||
|
uint _db_level_; \
|
||||||
|
char **_db_framep_; \
|
||||||
|
_db_enter_ (a, __FILE__, __LINE__, &_db_func_, &_db_file_, \
|
||||||
|
&_db_level_, &_db_framep_)
|
||||||
|
#define DBUG_VIOLATION_HELPER_LEAVE do { } while(0)
|
||||||
|
|
||||||
|
#endif /* C++ */
|
||||||
|
|
||||||
#define DBUG_LEAVE \
|
#define DBUG_LEAVE \
|
||||||
|
DBUG_VIOLATION_HELPER_LEAVE; \
|
||||||
_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_)
|
_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_)
|
||||||
#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0)
|
#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0)
|
||||||
#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0)
|
#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0)
|
||||||
|
@ -85,6 +128,7 @@ extern FILE *_db_fp_(void);
|
||||||
|
|
||||||
#define DBUG_ENTER(a1)
|
#define DBUG_ENTER(a1)
|
||||||
#define DBUG_LEAVE
|
#define DBUG_LEAVE
|
||||||
|
#define DBUG_VIOLATION_HELPER_LEAVE
|
||||||
#define DBUG_RETURN(a1) do { return(a1); } while(0)
|
#define DBUG_RETURN(a1) do { return(a1); } while(0)
|
||||||
#define DBUG_VOID_RETURN do { return; } while(0)
|
#define DBUG_VOID_RETURN do { return; } while(0)
|
||||||
#define DBUG_EXECUTE(keyword,a1) do { } while(0)
|
#define DBUG_EXECUTE(keyword,a1) do { } while(0)
|
||||||
|
|
|
@ -564,6 +564,25 @@ int __void__;
|
||||||
#define PURIFY_OR_LINT_INIT(var)
|
#define PURIFY_OR_LINT_INIT(var)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
Suppress uninitialized variable warning without generating code.
|
||||||
|
|
||||||
|
The _cplusplus is a temporary workaround for C++ code pending a fix
|
||||||
|
for a g++ bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34772).
|
||||||
|
*/
|
||||||
|
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || defined(__cplusplus) || \
|
||||||
|
!defined(__GNUC__)
|
||||||
|
#define UNINIT_VAR(x) x= 0
|
||||||
|
#else
|
||||||
|
#define UNINIT_VAR(x) x= x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define some useful general macros */
|
||||||
|
#if !defined(max)
|
||||||
|
#define max(a, b) ((a) > (b) ? (a) : (b))
|
||||||
|
#define min(a, b) ((a) < (b) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(HAVE_UINT)
|
#if !defined(HAVE_UINT)
|
||||||
#undef HAVE_UINT
|
#undef HAVE_UINT
|
||||||
#define HAVE_UINT
|
#define HAVE_UINT
|
||||||
|
|
|
@ -67,6 +67,7 @@ extern int NEAR my_errno; /* Last error in mysys */
|
||||||
#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */
|
#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */
|
||||||
#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */
|
#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */
|
||||||
#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
|
#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
|
||||||
|
#define MY_SYNC 4096 /* my_copy(): sync dst file */
|
||||||
|
|
||||||
#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
|
#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
|
||||||
#define MY_GIVE_INFO 2 /* Give time info about process*/
|
#define MY_GIVE_INFO 2 /* Give time info about process*/
|
||||||
|
|
|
@ -1635,8 +1635,7 @@ myodbc_remove_escape(MYSQL *mysql,char *name)
|
||||||
char *to;
|
char *to;
|
||||||
#ifdef USE_MB
|
#ifdef USE_MB
|
||||||
my_bool use_mb_flag=use_mb(mysql->charset);
|
my_bool use_mb_flag=use_mb(mysql->charset);
|
||||||
char *end;
|
char *UNINIT_VAR(end);
|
||||||
LINT_INIT(end);
|
|
||||||
if (use_mb_flag)
|
if (use_mb_flag)
|
||||||
for (end=name; *end ; end++) ;
|
for (end=name; *end ; end++) ;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -163,5 +163,81 @@ show create table t1;
|
||||||
connection master;
|
connection master;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
# End cleanup
|
#
|
||||||
|
# BUG#45999 Row based replication fails when auto_increment field = 0.
|
||||||
|
# Store engine of Slaves auto-generates new sequence numbers for
|
||||||
|
# auto_increment fields if the values of them are 0. There is an inconsistency
|
||||||
|
# between slave and master. When MODE_NO_AUTO_VALUE_ON_ZERO are masters treat
|
||||||
|
#
|
||||||
|
source include/master-slave-reset.inc;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
eval CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=$engine_type;
|
||||||
|
eval CREATE TABLE t2 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=$engine_type2;
|
||||||
|
SET SQL_MODE='';
|
||||||
|
# Value of the id will be 1;
|
||||||
|
INSERT INTO t1 VALUES(NULL);
|
||||||
|
INSERT INTO t2 VALUES(NULL);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
# Value of the id will be 2;
|
||||||
|
INSERT INTO t1 VALUES();
|
||||||
|
INSERT INTO t2 VALUES();
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
# Value of the id will be 3. The master treats 0 as NULL or empty because
|
||||||
|
# NO_AUTO_VALUE_ON_ZERO is not assign to SQL_MODE.
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
INSERT INTO t2 VALUES(0);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
|
||||||
|
# Value of the id will be 0. The master does not treat 0 as NULL or empty
|
||||||
|
# because NO_AUTO_VALUE_ON_ZERO has assigned to SQL_MODE.
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
INSERT INTO t2 VALUES(0);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES(4);
|
||||||
|
INSERT INTO t2 VALUES(4);
|
||||||
|
FLUSH LOGS;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
let $diff_table_1= master:test.t1;
|
||||||
|
let $diff_table_2= slave:test.t1;
|
||||||
|
source include/diff_tables.inc;
|
||||||
|
|
||||||
|
let $diff_table_1= master:test.t2;
|
||||||
|
let $diff_table_2= slave:test.t2;
|
||||||
|
source include/diff_tables.inc;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
let $MYSQLD_DATADIR= `SELECT @@DATADIR`;
|
||||||
|
--exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 | $MYSQL test
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
let $diff_table_1= master:test.t1;
|
||||||
|
let $diff_table_2= slave:test.t1;
|
||||||
|
source include/diff_tables.inc;
|
||||||
|
|
||||||
|
let $diff_table_1= master:test.t2;
|
||||||
|
let $diff_table_2= slave:test.t2;
|
||||||
|
source include/diff_tables.inc;
|
||||||
|
|
||||||
|
# End cleanup
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
SET SQL_MODE='';
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
710
mysql-test/extra/rpl_tests/rpl_mixing_engines.test
Normal file
710
mysql-test/extra/rpl_tests/rpl_mixing_engines.test
Normal file
|
@ -0,0 +1,710 @@
|
||||||
|
###################################################################################
|
||||||
|
# This test checks if transactions that mixes transactional and non-transactional
|
||||||
|
# tables are correctly handled in statement mode. In an nutshell, we have what
|
||||||
|
# follows:
|
||||||
|
#
|
||||||
|
# 1) "B T T C" generates in binlog the "B T T C" entries.
|
||||||
|
#
|
||||||
|
# 2) "B T T R" generates in binlog an "empty" entry.
|
||||||
|
#
|
||||||
|
# 3) "B T N C" generates in binlog the "B T N C" entries.
|
||||||
|
#
|
||||||
|
# 4) "B T N R" generates in binlog the "B T N R" entries.
|
||||||
|
#
|
||||||
|
# 5) "T" generates in binlog the "B T C" entry.
|
||||||
|
#
|
||||||
|
# 6) "N" generates in binlog the "N" entry.
|
||||||
|
#
|
||||||
|
# 7) "M" generates in binglog the "B M C" entries.
|
||||||
|
#
|
||||||
|
# 8) "B N N T C" generates in binglog the "N N B T C" entries.
|
||||||
|
#
|
||||||
|
# 9) "B N N T R" generates in binlog the "N N B T R" entries.
|
||||||
|
#
|
||||||
|
# 10) "B N N C" generates in binglog the "N N" entries.
|
||||||
|
#
|
||||||
|
# 11) "B N N R" generates in binlog the "N N" entries.
|
||||||
|
#
|
||||||
|
# 12) "B M T C" generates in the binlog the "B M T C" entries.
|
||||||
|
#
|
||||||
|
# 13) "B M T R" generates in the binlog the "B M T R" entries.
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
--echo ###################################################################################
|
||||||
|
--echo # CONFIGURATION
|
||||||
|
--echo ###################################################################################
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
CREATE TABLE nt_1 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_2 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_3 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_4 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE tt_1 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_2 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_3 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_4 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
CREATE TABLE nt_1 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_2 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_3 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_4 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE tt_1 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_2 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_3 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_4 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
DELIMITER |;
|
||||||
|
|
||||||
|
CREATE FUNCTION f1 () RETURNS VARCHAR(64)
|
||||||
|
BEGIN
|
||||||
|
RETURN "Testing...";
|
||||||
|
END|
|
||||||
|
|
||||||
|
CREATE FUNCTION f2 () RETURNS VARCHAR(64)
|
||||||
|
BEGIN
|
||||||
|
RETURN f1();
|
||||||
|
END|
|
||||||
|
|
||||||
|
CREATE PROCEDURE pc_i_tt_3 (IN x INT, IN y VARCHAR(64))
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO tt_3 VALUES (y,x,x);
|
||||||
|
END|
|
||||||
|
|
||||||
|
CREATE TRIGGER tr_i_tt_3_to_nt_3 BEFORE INSERT ON tt_3 FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO nt_3 VALUES (NEW.a, NEW.b, NEW.c);
|
||||||
|
END|
|
||||||
|
|
||||||
|
CREATE TRIGGER tr_i_nt_4_to_tt_4 BEFORE INSERT ON nt_4 FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO tt_4 VALUES (NEW.a, NEW.b, NEW.c);
|
||||||
|
END|
|
||||||
|
|
||||||
|
DELIMITER ;|
|
||||||
|
|
||||||
|
--echo ###################################################################################
|
||||||
|
--echo # MIXING TRANSACTIONAL and NON-TRANSACTIONAL TABLES
|
||||||
|
--echo ###################################################################################
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #1) "B T T C" generates in binlog the "B T T C" entries.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 4", 4, "new text 4");
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 4", 4, "new text 4");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #1.e) "B T T C" with error in T generates in binlog the "B T T C" entries.
|
||||||
|
--echo #
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -2", -2, "new text -2");
|
||||||
|
BEGIN;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -1", -1, "new text -1"), ("new text -2", -2, "new text -2");
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -3", -3, "new text -3");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -5", -5, "new text -5");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -4", -4, "new text -4"), ("new text -5", -5, "new text -5");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #2) "B T T R" generates in binlog an "empty" entry.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 5", 5, "new text 5");
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 5", 5, "new text 5");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #2.e) "B T T R" with error in T generates in binlog an "empty" entry.
|
||||||
|
--echo #
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -7", -7, "new text -7");
|
||||||
|
BEGIN;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -6", -6, "new text -6"), ("new text -7", -7, "new text -7");
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -8", -8, "new text -8");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -10", -10, "new text -10");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -9", -9, "new text -9"), ("new text -10", -10, "new text -10");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #3) "B T N C" generates in binlog the "B T N C" entries.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 6", 6, "new text 6");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 6", 6, "new text 6");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #3.e) "B T N C" with error in either T or N generates in binlog the "B T N C" entries.
|
||||||
|
--echo #
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -12", -12, "new text -12");
|
||||||
|
BEGIN;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -11", -11, "new text -11"), ("new text -12", -12, "new text -12");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -13", -13, "new text -13");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -14", -14, "new text -14");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -16", -16, "new text -16");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -15", -15, "new text -15"), ("new text -16", -16, "new text -16");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #4) "B T N R" generates in binlog the "B T N R" entries.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 7", 7, "new text 7");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 7", 7, "new text 7");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #4.e) "B T N R" with error in either T or N generates in binlog the "B T N R" entries.
|
||||||
|
--echo #
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -17", -17, "new text -17");
|
||||||
|
BEGIN;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -16", -16, "new text -16"), ("new text -17", -17, "new text -17");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -18", -18, "new text -18");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -19", -19, "new text -19");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -21", -21, "new text -21");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -20", -20, "new text -20"), ("new text -21", -21, "new text -21");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #5) "T" generates in binlog the "B T C" entry.
|
||||||
|
--echo #
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 8", 8, "new text 8");
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #5.e) "T" with error in T generates in binlog an "empty" entry.
|
||||||
|
--echo #
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -1", -1, "new text -1");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -1", -1, "new text -1"), ("new text -22", -22, "new text -22");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -23", -23, "new text -23"), ("new text -1", -1, "new text -1");
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #6) "N" generates in binlog the "N" entry.
|
||||||
|
--echo #
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 9", 9, "new text 9");
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #6.e) "N" with error in N generates in binlog an empty entry if the error
|
||||||
|
--echo # happens in the first tuple. Otherwise, generates the "N" entry and
|
||||||
|
--echo # the error is appended.
|
||||||
|
--echo #
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -1", -1, "new text -1");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -1", -1, "new text -1");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -24", -24, "new text -24"), ("new text -1", -1, "new text -1");
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #7) "M" generates in binglog the "B M C" entries.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
DELETE FROM nt_1;
|
||||||
|
|
||||||
|
INSERT INTO nt_1 SELECT * FROM tt_1;
|
||||||
|
|
||||||
|
DELETE FROM tt_1;
|
||||||
|
|
||||||
|
INSERT INTO tt_1 SELECT * FROM nt_1;
|
||||||
|
|
||||||
|
INSERT INTO tt_3 VALUES ("new text 000", 000, '');
|
||||||
|
|
||||||
|
INSERT INTO tt_3 VALUES("new text 100", 100, f1());
|
||||||
|
|
||||||
|
INSERT INTO nt_4 VALUES("new text 100", 100, f1());
|
||||||
|
|
||||||
|
INSERT INTO tt_3 VALUES("new text 200", 200, f2());
|
||||||
|
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 300", 300, '');
|
||||||
|
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 400", 400, f1());
|
||||||
|
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 500", 500, f2());
|
||||||
|
|
||||||
|
CALL pc_i_tt_3(600, "Testing...");
|
||||||
|
|
||||||
|
UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 1", nt_4.a= "new text 1", tt_3.a= "new text 1", tt_4.a= "new text 1" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
|
||||||
|
UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 2", tt_4.a= "new text 2", nt_3.a= "new text 2", nt_4.a = "new text 2" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 3", nt_3.a= "new text 3", nt_4.a= "new text 3", tt_4.a = "new text 3" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 4", nt_3.a= "new text 4", nt_4.a= "new text 4", tt_4.a = "new text 4" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #7.e) "M" with error in M generates in binglog the "B M R" entries.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
INSERT INTO nt_3 VALUES ("new text -26", -26, '');
|
||||||
|
SELECT * FROM tt_3;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_3 VALUES ("new text -25", -25, ''), ("new text -26", -26, '');
|
||||||
|
SELECT * FROM tt_3;
|
||||||
|
|
||||||
|
INSERT INTO tt_4 VALUES ("new text -26", -26, '');
|
||||||
|
SELECT * FROM nt_4;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO nt_4 VALUES ("new text -25", -25, ''), ("new text -26", -26, '');
|
||||||
|
SELECT * FROM nt_4;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #8) "B N N T C" generates in binglog the "N N B T C" entries.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 10", 10, "new text 10");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text 10", 10, "new text 10");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 10", 10, "new text 10");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo #
|
||||||
|
--echo #8.e) "B N N T R" See 6.e and 9.e.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #9) "B N N T R" generates in binlog the "N N B T R" entries.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 11", 11, "new text 11");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text 11", 11, "new text 11");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 11", 11, "new text 11");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #9.e) "B N N T R" with error in N generates in binlog the "N N B T R" entries.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -25", -25, "new text -25");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text -25", -25, "new text -25");
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO nt_2 VALUES ("new text -26", -26, "new text -26"), ("new text -25", -25, "new text -25");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -27", -27, "new text -27");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #10) "B N N C" generates in binglog the "N N" entries.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 12", 12, "new text 12");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text 12", 12, "new text 12");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo #
|
||||||
|
--echo #10.e) "B N N C" See 6.e and 9.e.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #11) "B N N R" generates in binlog the "N N" entries.
|
||||||
|
--echo #
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 13", 13, "new text 13");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text 13", 13, "new text 13");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo #
|
||||||
|
--echo #11.e) "B N N R" See 6.e and 9.e.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #12) "B M T C" generates in the binlog the "B M T C" entries.
|
||||||
|
--echo #
|
||||||
|
DELETE FROM nt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 SELECT * FROM tt_1;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 14", 14, "new text 14");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
DELETE FROM tt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 SELECT * FROM nt_1;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 15", 15, "new text 15");
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES ("new text 700", 700, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 800", 800, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES("new text 900", 900, f1());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1000", 1000, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES(1100, 1100, f2());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1200", 1200, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 1300", 1300, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1400", 1400, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES("new text 1500", 1500, f1());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1600", 1600, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES("new text 1700", 1700, f2());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1800", 1800, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
CALL pc_i_tt_3(1900, "Testing...");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2000", 2000, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 5", nt_4.a= "new text 5", tt_3.a= "new text 5", tt_4.a= "new text 5" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2100", 2100, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 6", tt_4.a= "new text 6", nt_3.a= "new text 6", nt_4.a = "new text 6" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2200", 2200, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 7", nt_3.a= "new text 7", nt_4.a= "new text 7", tt_4.a = "new text 7" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2300", 2300, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 8", nt_3.a= "new text 8", nt_4.a= "new text 8", tt_4.a = "new text 8" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2400", 2400, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #12.e) "B M T C" with error in M generates in the binlog the "B M T C" entries.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo # There is a bug in the slave that needs to be fixed before enabling
|
||||||
|
--echo # this part of the test. A bug report will be filed referencing this
|
||||||
|
--echo # test case.
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_3 VALUES ("new text -28", -28, '');
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_3 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -27", -27, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_4 VALUES ("new text -28", -28, '');
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO nt_4 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -28", -28, '');
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #13) "B M T R" generates in the binlog the "B M T R" entries
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
DELETE FROM nt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 SELECT * FROM tt_1;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 17", 17, "new text 17");
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
DELETE FROM tt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 SELECT * FROM nt_1;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 18", 18, "new text 18");
|
||||||
|
ROLLBACK;
|
||||||
|
INSERT INTO tt_1 SELECT * FROM nt_1;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES ("new text 2500", 2500, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2600", 2600, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES("new text 2700", 2700, f1());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2800", 2800, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES(2900, 2900, f2());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3000", 3000, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 3100", 3100, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3200", 3200, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES("new text 3300", 3300, f1());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3400", 3400, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES("new text 3500", 3500, f2());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3600", 3600, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
CALL pc_i_tt_3(3700, "Testing...");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3700", 3700, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 9", nt_4.a= "new text 9", tt_3.a= "new text 9", tt_4.a= "new text 9" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3800", 3800, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 10", tt_4.a= "new text 10", nt_3.a= "new text 10", nt_4.a = "new text 10" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3900", 3900, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 11", nt_3.a= "new text 11", nt_4.a= "new text 11", tt_4.a = "new text 11" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 4000", 4000, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 12", nt_3.a= "new text 12", nt_4.a= "new text 12", tt_4.a = "new text 12" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 4100", 4100, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1);
|
||||||
|
--echo #
|
||||||
|
--echo #13.e) "B M T R" with error in M generates in the binlog the "B M T R" entries.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_3 VALUES ("new text -30", -30, '');
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO tt_3 VALUES ("new text -29", -29, ''), ("new text -30", -30, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -30", -30, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_4 VALUES ("new text -30", -30, '');
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO nt_4 VALUES ("new text -29", -29, ''), ("new text -30", -30, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -31", -31, '');
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-master.sql
|
||||||
|
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-slave.sql
|
||||||
|
--diff_files $MYSQLTEST_VARDIR/tmp/test-master.sql $MYSQLTEST_VARDIR/tmp/test-slave.sql
|
||||||
|
|
||||||
|
--echo ###################################################################################
|
||||||
|
--echo # CLEAN
|
||||||
|
--echo ###################################################################################
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
DROP TABLE tt_1;
|
||||||
|
DROP TABLE tt_2;
|
||||||
|
DROP TABLE tt_3;
|
||||||
|
DROP TABLE tt_4;
|
||||||
|
DROP TABLE nt_1;
|
||||||
|
DROP TABLE nt_2;
|
||||||
|
DROP TABLE nt_3;
|
||||||
|
DROP TABLE nt_4;
|
||||||
|
DROP PROCEDURE pc_i_tt_3;
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
DROP FUNCTION f2;
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
|
@ -9,29 +9,27 @@
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
# Begin clean up test section
|
# Begin clean up test section
|
||||||
connection master;
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
create database if not exists mysqltest1;
|
DROP TABLE IF EXISTS t1;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p1;
|
DROP TABLE IF EXISTS t2;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p2;
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t2;
|
DROP PROCEDURE IF EXISTS p2;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t1;
|
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
# End of cleanup
|
# End of cleanup
|
||||||
|
|
||||||
# Begin test section 1
|
# Begin test section 1
|
||||||
eval CREATE TABLE IF NOT EXISTS mysqltest1.t1(name CHAR(16), birth DATE,PRIMARY KEY(name))ENGINE=$engine_type;
|
eval CREATE TABLE IF NOT EXISTS t1(name CHAR(16), birth DATE,PRIMARY KEY(name))ENGINE=$engine_type;
|
||||||
eval CREATE TABLE IF NOT EXISTS mysqltest1.t2(name CHAR(16), age INT ,PRIMARY KEY(name))ENGINE=$engine_type;
|
eval CREATE TABLE IF NOT EXISTS t2(name CHAR(16), age INT ,PRIMARY KEY(name))ENGINE=$engine_type;
|
||||||
|
|
||||||
delimiter |;
|
delimiter |;
|
||||||
CREATE PROCEDURE mysqltest1.p1()
|
CREATE PROCEDURE p1()
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE done INT DEFAULT 0;
|
DECLARE done INT DEFAULT 0;
|
||||||
DECLARE spa CHAR(16);
|
DECLARE spa CHAR(16);
|
||||||
DECLARE spb INT;
|
DECLARE spb INT;
|
||||||
DECLARE cur1 CURSOR FOR SELECT name,
|
DECLARE cur1 CURSOR FOR SELECT name,
|
||||||
(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(),5)<RIGHT(birth,5))
|
(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(),5)<RIGHT(birth,5))
|
||||||
FROM mysqltest1.t1;
|
FROM t1;
|
||||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
|
||||||
|
|
||||||
OPEN cur1;
|
OPEN cur1;
|
||||||
|
@ -41,7 +39,7 @@ BEGIN
|
||||||
FETCH cur1 INTO spa, spb;
|
FETCH cur1 INTO spa, spb;
|
||||||
IF NOT done THEN
|
IF NOT done THEN
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO mysqltest1.t2 VALUES (spa,spb);
|
INSERT INTO t2 VALUES (spa,spb);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
END IF;
|
END IF;
|
||||||
UNTIL done END REPEAT;
|
UNTIL done END REPEAT;
|
||||||
|
@ -49,30 +47,29 @@ BEGIN
|
||||||
SET AUTOCOMMIT=1;
|
SET AUTOCOMMIT=1;
|
||||||
CLOSE cur1;
|
CLOSE cur1;
|
||||||
END|
|
END|
|
||||||
CREATE PROCEDURE mysqltest1.p2()
|
CREATE PROCEDURE p2()
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO mysqltest1.t1 VALUES ('MySQL','1993-02-04'),('ROCKS', '1990-08-27'),('Texas', '1999-03-30'),('kyle','2005-1-1');
|
INSERT INTO t1 VALUES ('MySQL','1993-02-04'),('ROCKS', '1990-08-27'),('Texas', '1999-03-30'),('kyle','2005-1-1');
|
||||||
END|
|
END|
|
||||||
delimiter ;|
|
delimiter ;|
|
||||||
|
|
||||||
CALL mysqltest1.p2();
|
CALL p2();
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
CALL mysqltest1.p1();
|
CALL p1();
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
|
||||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info mysqltest1 > $MYSQLTEST_VARDIR/tmp/sp006_master.sql
|
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/sp006_master.sql
|
||||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info mysqltest1 > $MYSQLTEST_VARDIR/tmp/sp006_slave.sql
|
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/sp006_slave.sql
|
||||||
|
|
||||||
|
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p1;
|
DROP TABLE t1;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p2;
|
DROP TABLE t2;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t1;
|
DROP PROCEDURE p1;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t2;
|
DROP PROCEDURE p2;
|
||||||
DROP DATABASE mysqltest1;
|
|
||||||
|
|
||||||
# Lets compare. Note: If they match test will pass, if they do not match
|
# Lets compare. Note: If they match test will pass, if they do not match
|
||||||
# the test will show that the diff statement failed and not reject file
|
# the test will show that the diff statement failed and not reject file
|
||||||
|
|
|
@ -725,9 +725,9 @@ call p_verify_status_increment(4, 4, 4, 4);
|
||||||
alter table t3 add column (b int);
|
alter table t3 add column (b int);
|
||||||
call p_verify_status_increment(2, 0, 2, 0);
|
call p_verify_status_increment(2, 0, 2, 0);
|
||||||
alter table t3 rename t4;
|
alter table t3 rename t4;
|
||||||
call p_verify_status_increment(1, 0, 1, 0);
|
call p_verify_status_increment(2, 2, 2, 2);
|
||||||
rename table t4 to t3;
|
rename table t4 to t3;
|
||||||
call p_verify_status_increment(1, 0, 1, 0);
|
call p_verify_status_increment(2, 2, 2, 2);
|
||||||
truncate table t3;
|
truncate table t3;
|
||||||
call p_verify_status_increment(4, 4, 4, 4);
|
call p_verify_status_increment(4, 4, 4, 4);
|
||||||
create view v1 as select * from t2;
|
create view v1 as select * from t2;
|
||||||
|
|
7
mysql-test/include/have_dynamic_loading.inc
Normal file
7
mysql-test/include/have_dynamic_loading.inc
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#
|
||||||
|
# Whether server supports dynamic loading.
|
||||||
|
#
|
||||||
|
--require r/have_dynamic_loading.require
|
||||||
|
disable_query_log;
|
||||||
|
show variables like 'have_dynamic_loading';
|
||||||
|
enable_query_log;
|
|
@ -2,10 +2,7 @@
|
||||||
# Check if server has support for loading udf's
|
# Check if server has support for loading udf's
|
||||||
# i.e it will support dlopen
|
# i.e it will support dlopen
|
||||||
#
|
#
|
||||||
--require r/have_dynamic_loading.require
|
--source include/have_dynamic_loading.inc
|
||||||
disable_query_log;
|
|
||||||
show variables like 'have_dynamic_loading';
|
|
||||||
enable_query_log;
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Check if the variable EXAMPLE_PLUGIN is set
|
# Check if the variable EXAMPLE_PLUGIN is set
|
||||||
|
|
|
@ -2,10 +2,7 @@
|
||||||
# Check if server has support for loading udf's
|
# Check if server has support for loading udf's
|
||||||
# i.e it will support dlopen
|
# i.e it will support dlopen
|
||||||
#
|
#
|
||||||
--require r/have_dynamic_loading.require
|
--source include/have_dynamic_loading.inc
|
||||||
disable_query_log;
|
|
||||||
show variables like 'have_dynamic_loading';
|
|
||||||
enable_query_log;
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Check if the variable SIMPLE_PARSER is set
|
# Check if the variable SIMPLE_PARSER is set
|
||||||
|
|
|
@ -2,10 +2,7 @@
|
||||||
# Check if server has support for loading udf's
|
# Check if server has support for loading udf's
|
||||||
# i.e it will support dlopen
|
# i.e it will support dlopen
|
||||||
#
|
#
|
||||||
--require r/have_dynamic_loading.require
|
--source include/have_dynamic_loading.inc
|
||||||
disable_query_log;
|
|
||||||
show variables like 'have_dynamic_loading';
|
|
||||||
enable_query_log;
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Check if the variable UDF_EXAMPLE_LIB is set
|
# Check if the variable UDF_EXAMPLE_LIB is set
|
||||||
|
|
|
@ -174,6 +174,17 @@ INSERT INTO global_suppressions VALUES
|
||||||
*/
|
*/
|
||||||
("Can't find file: '.\\\\test\\\\\\?{8}.frm'"),
|
("Can't find file: '.\\\\test\\\\\\?{8}.frm'"),
|
||||||
|
|
||||||
|
/* Added 2009-08-XX after fixing Bug #42408 */
|
||||||
|
|
||||||
|
("Although a path was specified for the .* option, log tables are used"),
|
||||||
|
("Backup: Operation aborted"),
|
||||||
|
("Restore: Operation aborted"),
|
||||||
|
("Restore: The grant .* was skipped because the user does not exist"),
|
||||||
|
("The path specified for the variable .* is not a directory or cannot be written:"),
|
||||||
|
("Master server does not support or not configured semi-sync replication, fallback to asynchronous"),
|
||||||
|
(": The MySQL server is running with the --secure-backup-file-priv option so it cannot execute this statement"),
|
||||||
|
("Slave: Unknown table 't1' Error_code: 1051"),
|
||||||
|
|
||||||
("THE_LAST_SUPPRESSION")||
|
("THE_LAST_SUPPRESSION")||
|
||||||
|
|
||||||
|
|
||||||
|
|
69
mysql-test/include/partition_date_range.inc
Normal file
69
mysql-test/include/partition_date_range.inc
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
# Created for verifying bug#20577.
|
||||||
|
# expects TABLE t1 (... , a DATE, ...)
|
||||||
|
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a < '1001-01-01';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a > '1001-01-01';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a = '1001-01-01';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a < '1001-00-00';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a <= '1001-00-00';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a >= '1001-00-00';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a > '1001-00-00';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a = '1001-00-00';
|
||||||
|
--echo # Disabling warnings for the invalid date
|
||||||
|
--disable_warnings
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a > '1999-02-31';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a = '1999-02-31';
|
||||||
|
--enable_warnings
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||||
|
--sorted_result
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0001-01-01' AND '1001-01-01';
|
||||||
|
if ($explain_partitions)
|
||||||
|
{
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-01-01';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-01-01';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1001-01-01';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-00-00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-00-00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-00-00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-00-00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1001-00-00';
|
||||||
|
--echo # Disabling warnings for the invalid date
|
||||||
|
--disable_warnings
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1999-02-31';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1999-02-31';
|
||||||
|
--enable_warnings
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-01' AND '1001-01-01';
|
||||||
|
}
|
|
@ -1814,6 +1814,14 @@ sub environment_setup {
|
||||||
$ENV{'HA_EXAMPLE_SO'}="'".$plugin_filename."'";
|
$ENV{'HA_EXAMPLE_SO'}="'".$plugin_filename."'";
|
||||||
$ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=;EXAMPLE=".$plugin_filename.";";
|
$ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=;EXAMPLE=".$plugin_filename.";";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# Some ".opt" files use some of these variables, so they must be defined
|
||||||
|
$ENV{'EXAMPLE_PLUGIN'}= "";
|
||||||
|
$ENV{'EXAMPLE_PLUGIN_OPT'}= "";
|
||||||
|
$ENV{'HA_EXAMPLE_SO'}= "";
|
||||||
|
$ENV{'EXAMPLE_PLUGIN_LOAD'}= "";
|
||||||
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
# Add the path where mysqld will find mypluglib.so
|
# Add the path where mysqld will find mypluglib.so
|
||||||
|
|
|
@ -28,9 +28,7 @@ test.t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL
|
||||||
test.t1.d 2002-03-03 2002-03-05 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL
|
test.t1.d 2002-03-03 2002-03-05 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
EXPLAIN SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE();
|
EXPLAIN SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE();
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
|
|
||||||
2 DERIVED NULL NULL NULL NULL NULL NULL NULL No tables used
|
|
||||||
create table t1 (a int not null);
|
create table t1 (a int not null);
|
||||||
create table t2 select * from t1 where 0=1 procedure analyse();
|
create table t2 select * from t1 where 0=1 procedure analyse();
|
||||||
show create table t2;
|
show create table t2;
|
||||||
|
@ -153,4 +151,9 @@ select f3 from t1 procedure analyse(1, 1);
|
||||||
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
|
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
|
||||||
test.t1.f3 5.99999 9.55555 7 7 0 0 7.77777 1.77778 FLOAT(6,5) NOT NULL
|
test.t1.f3 5.99999 9.55555 7 7 0 0 7.77777 1.77778 FLOAT(6,5) NOT NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1(a INT,b INT,c INT,d INT,e INT,f INT,g INT,h INT,i INT,j INT,k INT);
|
||||||
|
INSERT INTO t1 VALUES ();
|
||||||
|
SELECT * FROM (SELECT * FROM t1) d PROCEDURE ANALYSE();
|
||||||
|
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||||
|
DROP TABLE t1;
|
||||||
End of 4.1 tests
|
End of 4.1 tests
|
||||||
|
|
|
@ -12695,3 +12695,25 @@ a b
|
||||||
1 NULL
|
1 NULL
|
||||||
2 NULL
|
2 NULL
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a INT, b BLOB) ENGINE=archive;
|
||||||
|
SELECT DATA_LENGTH, AVG_ROW_LENGTH FROM
|
||||||
|
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||||
|
DATA_LENGTH AVG_ROW_LENGTH
|
||||||
|
8666 15
|
||||||
|
INSERT INTO t1 VALUES(1, 'sampleblob1'),(2, 'sampleblob2');
|
||||||
|
SELECT DATA_LENGTH, AVG_ROW_LENGTH FROM
|
||||||
|
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||||
|
DATA_LENGTH AVG_ROW_LENGTH
|
||||||
|
8700 4350
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @save_join_buffer_size= @@join_buffer_size;
|
||||||
|
SET @@join_buffer_size= 8228;
|
||||||
|
CREATE TABLE t1(a CHAR(255)) ENGINE=archive;
|
||||||
|
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),
|
||||||
|
('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),
|
||||||
|
('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||||
|
SELECT COUNT(t1.a) FROM t1, t1 a, t1 b, t1 c, t1 d, t1 e;
|
||||||
|
COUNT(t1.a)
|
||||||
|
729
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @@join_buffer_size= @save_join_buffer_size;
|
||||||
|
|
|
@ -841,17 +841,17 @@ call p_verify_status_increment(2, 0, 2, 0);
|
||||||
SUCCESS
|
SUCCESS
|
||||||
|
|
||||||
alter table t3 rename t4;
|
alter table t3 rename t4;
|
||||||
call p_verify_status_increment(1, 0, 1, 0);
|
call p_verify_status_increment(2, 2, 2, 2);
|
||||||
SUCCESS
|
SUCCESS
|
||||||
|
|
||||||
rename table t4 to t3;
|
rename table t4 to t3;
|
||||||
call p_verify_status_increment(1, 0, 1, 0);
|
call p_verify_status_increment(2, 2, 2, 2);
|
||||||
SUCCESS
|
SUCCESS
|
||||||
|
|
||||||
truncate table t3;
|
truncate table t3;
|
||||||
call p_verify_status_increment(4, 4, 4, 4);
|
call p_verify_status_increment(4, 4, 4, 4);
|
||||||
ERROR
|
SUCCESS
|
||||||
Expected commit increment: 4 actual: 2
|
|
||||||
create view v1 as select * from t2;
|
create view v1 as select * from t2;
|
||||||
call p_verify_status_increment(1, 0, 1, 0);
|
call p_verify_status_increment(1, 0, 1, 0);
|
||||||
SUCCESS
|
SUCCESS
|
||||||
|
|
|
@ -1572,6 +1572,19 @@ CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
||||||
SELECT a FROM t1;
|
SELECT a FROM t1;
|
||||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# BUG#46384 - mysqld segfault when trying to create table with same
|
||||||
|
# name as existing view
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
CREATE TABLE t2 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
INSERT INTO t2 VALUES (1),(2),(3);
|
||||||
|
CREATE VIEW v1 AS SELECT t1.a FROM t1, t2;
|
||||||
|
CREATE TABLE v1 AS SELECT * FROM t1;
|
||||||
|
ERROR 42S01: Table 'v1' already exists
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
CREATE TABLE t1 (a int, b int);
|
CREATE TABLE t1 (a int, b int);
|
||||||
insert into t1 values (1,1),(1,2);
|
insert into t1 values (1,1),(1,2);
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
RESET MASTER;
|
||||||
SET NAMES gbk;
|
SET NAMES gbk;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
f1 BLOB
|
f1 BLOB
|
||||||
|
|
|
@ -763,4 +763,34 @@ a b d c
|
||||||
1 2 0 2
|
1 2 0 2
|
||||||
1 2 0 3
|
1 2 0 3
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug #46159: simple query that never returns
|
||||||
|
#
|
||||||
|
SET @old_max_heap_table_size = @@max_heap_table_size;
|
||||||
|
SET @@max_heap_table_size = 16384;
|
||||||
|
SET @old_sort_buffer_size = @@sort_buffer_size;
|
||||||
|
SET @@sort_buffer_size = 32804;
|
||||||
|
CREATE TABLE t1(c1 int, c2 VARCHAR(20));
|
||||||
|
INSERT INTO t1 VALUES (1, '1'), (1, '1'), (2, '2'), (3, '1'), (3, '1'), (4, '4');
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
SELECT c1, c2, COUNT(*) FROM t1 GROUP BY c1 LIMIT 4;
|
||||||
|
c1 c2 COUNT(*)
|
||||||
|
1 1 2
|
||||||
|
2 2 1
|
||||||
|
3 1 2
|
||||||
|
4 4 1
|
||||||
|
SELECT DISTINCT c2 FROM t1 GROUP BY c1 HAVING COUNT(*) > 1;
|
||||||
|
c2
|
||||||
|
1
|
||||||
|
5
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @@sort_buffer_size = @old_sort_buffer_size;
|
||||||
|
SET @@max_heap_table_size = @old_max_heap_table_size;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
|
|
@ -159,6 +159,14 @@ CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||||
EXPLAIN EXTENDED SELECT COUNT(a) FROM t1 USE KEY(a);
|
EXPLAIN EXTENDED SELECT COUNT(a) FROM t1 USE KEY(a);
|
||||||
ERROR 42000: Key 'a' doesn't exist in table 't1'
|
ERROR 42000: Key 'a' doesn't exist in table 't1'
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a LONGTEXT);
|
||||||
|
INSERT INTO t1 VALUES (repeat('a',@@global.max_allowed_packet));
|
||||||
|
INSERT INTO t1 VALUES (repeat('b',@@global.max_allowed_packet));
|
||||||
|
EXPLAIN SELECT DISTINCT 1 FROM t1,
|
||||||
|
(SELECT DISTINCTROW a AS away FROM t1 GROUP BY a WITH ROLLUP) as d1
|
||||||
|
WHERE t1.a = d1.a;
|
||||||
|
ERROR 42S22: Unknown column 'd1.a' in 'where clause'
|
||||||
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# Bug#37870: Usage of uninitialized value caused failed assertion.
|
# Bug#37870: Usage of uninitialized value caused failed assertion.
|
||||||
#
|
#
|
||||||
|
|
|
@ -2534,6 +2534,15 @@ SELECT LOAD_FILE(a) FROM t1;
|
||||||
LOAD_FILE(a)
|
LOAD_FILE(a)
|
||||||
NULL
|
NULL
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (f2 VARCHAR(20));
|
||||||
|
CREATE TABLE t2 (f2 VARCHAR(20));
|
||||||
|
INSERT INTO t1 VALUES ('MIN'),('MAX');
|
||||||
|
INSERT INTO t2 VALUES ('LOAD');
|
||||||
|
SELECT CONCAT_WS('_', (SELECT t2.f2 FROM t2), t1.f2) AS concat_name FROM t1;
|
||||||
|
concat_name
|
||||||
|
LOAD_MIN
|
||||||
|
LOAD_MAX
|
||||||
|
DROP TABLE t1, t2;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1(f1 tinyint default null)engine=myisam;
|
create table t1(f1 tinyint default null)engine=myisam;
|
||||||
|
|
|
@ -2502,3 +2502,15 @@ a MAX(b)
|
||||||
2 1
|
2 1
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
#
|
||||||
|
# Bug #46607: Assertion failed: (cond_type == Item::FUNC_ITEM) results in
|
||||||
|
# server crash
|
||||||
|
#
|
||||||
|
CREATE TABLE t (a INT, b INT, INDEX (a,b));
|
||||||
|
INSERT INTO t VALUES (2,0), (2,0), (2,1), (2,1);
|
||||||
|
INSERT INTO t SELECT * FROM t;
|
||||||
|
SELECT a, MAX(b) FROM t WHERE b GROUP BY a;
|
||||||
|
a MAX(b)
|
||||||
|
2 1
|
||||||
|
DROP TABLE t;
|
||||||
|
End of 5.1 tests
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
SET @odl_sync_frm = @@global.sync_frm;
|
||||||
|
SET @@global.sync_frm = OFF;
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
CREATE TABLE t1( a INT, b INT );
|
CREATE TABLE t1( a INT, b INT );
|
||||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
|
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
|
||||||
|
@ -17,3 +19,4 @@ ALTER TABLE t1 ADD COLUMN a INT;
|
||||||
# 2.2.1. normal mode
|
# 2.2.1. normal mode
|
||||||
# 2.2.2. PS mode
|
# 2.2.2. PS mode
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
SET @@global.sync_frm = @odl_sync_frm;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
SET @odl_sync_frm = @@global.sync_frm;
|
||||||
|
SET @@global.sync_frm = OFF;
|
||||||
DROP TABLE IF EXISTS t1,t2,t3;
|
DROP TABLE IF EXISTS t1,t2,t3;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a int(11) unsigned default NULL,
|
a int(11) unsigned default NULL,
|
||||||
|
@ -15,3 +17,4 @@ CREATE TABLE t3 SELECT * FROM t1;
|
||||||
# normal mode
|
# normal mode
|
||||||
# PS mode
|
# PS mode
|
||||||
DROP TABLE t1, t2, t3;
|
DROP TABLE t1, t2, t3;
|
||||||
|
SET @@global.sync_frm = @odl_sync_frm;
|
||||||
|
|
6
mysql-test/r/lowercase_mixed_tmpdir_innodb.result
Executable file
6
mysql-test/r/lowercase_mixed_tmpdir_innodb.result
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
drop table if exists t1;
|
||||||
|
create table t1 (id int) engine=InnoDB;
|
||||||
|
insert into t1 values (1);
|
||||||
|
create temporary table t2 engine=InnoDB select * from t1;
|
||||||
|
drop temporary table t2;
|
||||||
|
drop table t1;
|
|
@ -1,4 +1,4 @@
|
||||||
flush logs;
|
RESET MASTER;
|
||||||
create table t3 (f text character set utf8);
|
create table t3 (f text character set utf8);
|
||||||
create table t4 (f text character set cp932);
|
create table t4 (f text character set cp932);
|
||||||
flush logs;
|
flush logs;
|
||||||
|
|
|
@ -215,7 +215,7 @@ COMMIT/*!*/;
|
||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
TRUNCATE TABLE t1
|
BEGIN
|
||||||
/*!*/;
|
/*!*/;
|
||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
@ -223,6 +223,22 @@ SET TIMESTAMP=1000000000/*!*/;
|
||||||
TRUNCATE TABLE t1
|
TRUNCATE TABLE t1
|
||||||
/*!*/;
|
/*!*/;
|
||||||
# at #
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # Xid = #
|
||||||
|
COMMIT/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
TRUNCATE TABLE t1
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # Xid = #
|
||||||
|
COMMIT/*!*/;
|
||||||
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -331,9 +347,17 @@ COMMIT/*!*/;
|
||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
TRUNCATE TABLE t1
|
TRUNCATE TABLE t1
|
||||||
/*!*/;
|
/*!*/;
|
||||||
# at #
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # Xid = #
|
||||||
|
COMMIT/*!*/;
|
||||||
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
TRUNCATE TABLE t2
|
TRUNCATE TABLE t2
|
||||||
|
@ -449,9 +473,17 @@ ROLLBACK
|
||||||
# at #
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
|
BEGIN
|
||||||
|
/*!*/;
|
||||||
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
TRUNCATE TABLE t1
|
TRUNCATE TABLE t1
|
||||||
/*!*/;
|
/*!*/;
|
||||||
# at #
|
# at #
|
||||||
|
#010909 4:46:40 server id 1 end_log_pos # Xid = #
|
||||||
|
COMMIT/*!*/;
|
||||||
|
# at #
|
||||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||||
SET TIMESTAMP=1000000000/*!*/;
|
SET TIMESTAMP=1000000000/*!*/;
|
||||||
TRUNCATE TABLE t2
|
TRUNCATE TABLE t2
|
||||||
|
|
|
@ -1,4 +1,18 @@
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
create table t1 (a int not null,
|
||||||
|
b datetime not null,
|
||||||
|
primary key (a,b))
|
||||||
|
engine=innodb
|
||||||
|
partition by range (to_days(b))
|
||||||
|
subpartition by hash (a)
|
||||||
|
subpartitions 2
|
||||||
|
( partition p0 values less than (to_days('2009-01-01')),
|
||||||
|
partition p1 values less than (to_days('2009-02-01')),
|
||||||
|
partition p2 values less than (to_days('2009-03-01')),
|
||||||
|
partition p3 values less than maxvalue);
|
||||||
|
alter table t1 reorganize partition p1,p2 into
|
||||||
|
( partition p2 values less than (to_days('2009-03-01')));
|
||||||
|
drop table t1;
|
||||||
CREATE TABLE t1 (id INT PRIMARY KEY, data INT) ENGINE = InnoDB
|
CREATE TABLE t1 (id INT PRIMARY KEY, data INT) ENGINE = InnoDB
|
||||||
PARTITION BY RANGE(id) (
|
PARTITION BY RANGE(id) (
|
||||||
PARTITION p0 VALUES LESS THAN (5),
|
PARTITION p0 VALUES LESS THAN (5),
|
||||||
|
@ -250,3 +264,7 @@ SUBPARTITION BY KEY (char_column)
|
||||||
SUBPARTITIONS 2
|
SUBPARTITIONS 2
|
||||||
(PARTITION p1 VALUES LESS THAN (5) ENGINE = MyISAM) */
|
(PARTITION p1 VALUES LESS THAN (5) ENGINE = MyISAM) */
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB
|
||||||
|
PARTITION BY list(a) (PARTITION p1 VALUES IN (1));
|
||||||
|
CREATE INDEX i1 ON t1 (a);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -745,7 +745,7 @@ a
|
||||||
EXPLAIN PARTITIONS SELECT * FROM t1
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
WHERE a >= '2004-07-01' AND a <= '2004-09-30';
|
WHERE a >= '2004-07-01' AND a <= '2004-09-30';
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 p407,p408,p409 ALL NULL NULL NULL NULL 9 Using where
|
1 SIMPLE t1 p3xx,p407,p408,p409 ALL NULL NULL NULL NULL 18 Using where
|
||||||
SELECT * from t1
|
SELECT * from t1
|
||||||
WHERE (a >= '2004-07-01' AND a <= '2004-09-30') OR
|
WHERE (a >= '2004-07-01' AND a <= '2004-09-30') OR
|
||||||
(a >= '2005-07-01' AND a <= '2005-09-30');
|
(a >= '2005-07-01' AND a <= '2005-09-30');
|
||||||
|
@ -772,7 +772,7 @@ EXPLAIN PARTITIONS SELECT * from t1
|
||||||
WHERE (a >= '2004-07-01' AND a <= '2004-09-30') OR
|
WHERE (a >= '2004-07-01' AND a <= '2004-09-30') OR
|
||||||
(a >= '2005-07-01' AND a <= '2005-09-30');
|
(a >= '2005-07-01' AND a <= '2005-09-30');
|
||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 p407,p408,p409,p507,p508,p509 ALL NULL NULL NULL NULL 18 Using where
|
1 SIMPLE t1 p3xx,p407,p408,p409,p507,p508,p509 ALL NULL NULL NULL NULL 27 Using where
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||||
|
|
|
@ -6963,6 +6963,22 @@ CALL p1();
|
||||||
CALL p1();
|
CALL p1();
|
||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug #46629: Item_in_subselect::val_int(): Assertion `0'
|
||||||
|
# on subquery inside a SP
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
CREATE TABLE t2(a INT, b INT PRIMARY KEY);
|
||||||
|
CREATE PROCEDURE p1 ()
|
||||||
|
BEGIN
|
||||||
|
SELECT a FROM t1 A WHERE A.b IN (SELECT b FROM t2 AS B);
|
||||||
|
END|
|
||||||
|
CALL p1;
|
||||||
|
ERROR 42S22: Unknown column 'A.b' in 'IN/ALL/ANY subquery'
|
||||||
|
CALL p1;
|
||||||
|
ERROR 42S22: Unknown column 'A.b' in 'IN/ALL/ANY subquery'
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# -- End of 5.1 tests
|
# -- End of 5.1 tests
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
|
|
|
@ -75,7 +75,7 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||||
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||||
ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
|
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||||
|
@ -4383,6 +4383,34 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 PRIMARY C ALL NULL NULL NULL NULL 20 100.00 Using where
|
1 PRIMARY C ALL NULL NULL NULL NULL 20 100.00 Using where
|
||||||
DROP TABLE C;
|
DROP TABLE C;
|
||||||
# End of test for bug#45061.
|
# End of test for bug#45061.
|
||||||
|
#
|
||||||
|
# Bug #46749: Segfault in add_key_fields() with outer subquery level
|
||||||
|
# field references
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
UNIQUE (a), KEY (b)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,1);
|
||||||
|
CREATE TABLE st1 like t1;
|
||||||
|
INSERT INTO st1 VALUES (1,1), (2,1);
|
||||||
|
CREATE TABLE st2 like t1;
|
||||||
|
INSERT INTO st2 VALUES (1,1), (2,1);
|
||||||
|
EXPLAIN
|
||||||
|
SELECT MAX(b), (SELECT COUNT(*) FROM st1,st2 WHERE st2.b <= t1.b)
|
||||||
|
FROM t1
|
||||||
|
WHERE a = 230;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||||
|
2 DEPENDENT SUBQUERY st1 index NULL a 5 NULL 2 Using index
|
||||||
|
2 DEPENDENT SUBQUERY st2 index b b 5 NULL 2 Using where; Using index; Using join buffer
|
||||||
|
SELECT MAX(b), (SELECT COUNT(*) FROM st1,st2 WHERE st2.b <= t1.b)
|
||||||
|
FROM t1
|
||||||
|
WHERE a = 230;
|
||||||
|
MAX(b) (SELECT COUNT(*) FROM st1,st2 WHERE st2.b <= t1.b)
|
||||||
|
NULL 0
|
||||||
|
DROP TABLE t1, st1, st2;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
CREATE TABLE t1 (a INT, b INT);
|
CREATE TABLE t1 (a INT, b INT);
|
||||||
INSERT INTO t1 VALUES (2,22),(1,11),(2,22);
|
INSERT INTO t1 VALUES (2,22),(1,11),(2,22);
|
||||||
|
|
30
mysql-test/r/subselect4.result
Normal file
30
mysql-test/r/subselect4.result
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#
|
||||||
|
# Bug #46791: Assertion failed:(table->key_read==0),function unknown
|
||||||
|
# function,file sql_base.cc
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT, b INT, KEY(a));
|
||||||
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
||||||
|
CREATE TABLE t2 LIKE t1;
|
||||||
|
INSERT INTO t2 VALUES (1,1),(2,2);
|
||||||
|
CREATE TABLE t3 LIKE t1;
|
||||||
|
# should have 1 impossible where and 2 dependent subqueries
|
||||||
|
EXPLAIN
|
||||||
|
SELECT 1 FROM t1
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE 1 = (SELECT MIN(t2.b) FROM t3))
|
||||||
|
ORDER BY count(*);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 index NULL a 5 NULL 2 Using index; Using temporary
|
||||||
|
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||||||
|
# should not crash the next statement
|
||||||
|
SELECT 1 FROM t1
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE 1 = (SELECT MIN(t2.b) FROM t3))
|
||||||
|
ORDER BY count(*);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
# should not crash: the crash is caused by the previous statement
|
||||||
|
SELECT 1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
End of 5.0 tests.
|
|
@ -392,4 +392,20 @@ a
|
||||||
4
|
4
|
||||||
DROP FUNCTION sequence;
|
DROP FUNCTION sequence;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# Bug#46259: 5.0.83 -> 5.1.36, query doesn't work
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 ( a INT );
|
||||||
|
INSERT INTO t1 VALUES (1), (2), (3);
|
||||||
|
SELECT IF( a = 1, a, a ) AS `b` FROM t1 ORDER BY field( `b` + 1, 1 );
|
||||||
|
b
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT IF( a = 1, a, a ) AS `b` FROM t1 ORDER BY field( `b`, 1 );
|
||||||
|
b
|
||||||
|
2
|
||||||
|
3
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
|
|
@ -313,4 +313,9 @@ ERROR 22001: Data too long for column 'c_tinytext' at row 1
|
||||||
insert into t2 values(@q);
|
insert into t2 values(@q);
|
||||||
ERROR 22001: Data too long for column 'c_tinyblob' at row 1
|
ERROR 22001: Data too long for column 'c_tinyblob' at row 1
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
ERROR 42S02: Unknown table 't1'
|
||||||
|
SHOW ERRORS;
|
||||||
|
Level Code Message
|
||||||
|
Error 1051 Unknown table 't1'
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
RESET MASTER;
|
||||||
CREATE TABLE t1 (a INT);
|
CREATE TABLE t1 (a INT);
|
||||||
INSERT INTO t1 VALUES (1),(2),(3);
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
|
|
|
@ -379,7 +379,9 @@ master-bin.000001 # Query # # BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query # # COMMIT
|
master-bin.000001 # Query # # COMMIT
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
|
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 # Query # # BEGIN
|
master-bin.000001 # Query # # BEGIN
|
||||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
@ -838,8 +840,10 @@ UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
|
||||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
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 # # BEGIN
|
||||||
master-bin.000001 # Intvar # # INSERT_ID=6
|
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||||
master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
|
master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
select count(*) from t1 /* must be 4 */;
|
select count(*) from t1 /* must be 4 */;
|
||||||
count(*)
|
count(*)
|
||||||
4
|
4
|
||||||
|
|
|
@ -17,5 +17,5 @@ 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`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `drop-temp+table-test`.`shortn2`,`drop-temp+table-test`.`table:name`,`drop-temp+table-test`.`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`;
|
||||||
|
|
|
@ -258,7 +258,7 @@ master-bin.000001 # Query # # use `test`; create table t0 (n int)
|
||||||
master-bin.000001 # Query # # use `test`; insert t0 select * from t1
|
master-bin.000001 # Query # # use `test`; insert t0 select * from t1
|
||||||
master-bin.000001 # Query # # use `test`; insert into t0 select GET_LOCK("lock1",null)
|
master-bin.000001 # Query # # use `test`; insert into t0 select GET_LOCK("lock1",null)
|
||||||
master-bin.000001 # Query # # use `test`; create table t2 (n int) engine=innodb
|
master-bin.000001 # Query # # use `test`; create table t2 (n int) engine=innodb
|
||||||
master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
|
master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t1`,`ti`
|
||||||
do release_lock("lock1");
|
do release_lock("lock1");
|
||||||
drop table t0,t2;
|
drop table t0,t2;
|
||||||
set autocommit=0;
|
set autocommit=0;
|
||||||
|
@ -346,7 +346,9 @@ master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (3,3)
|
||||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t2
|
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t2
|
||||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb
|
master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb
|
||||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4,4)
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (4,4)
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
|
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5,5)
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (5,5)
|
||||||
master-bin.000001 # Query # # use `test`; DROP TABLE t2
|
master-bin.000001 # Query # # use `test`; DROP TABLE t2
|
||||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (6,6)
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (6,6)
|
||||||
|
@ -545,8 +547,10 @@ UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
|
||||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
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 # # BEGIN
|
||||||
master-bin.000001 # Intvar # # INSERT_ID=6
|
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||||
master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
|
master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
/* the output must denote there is the query */;
|
/* the output must denote there is the query */;
|
||||||
select count(*) from t1 /* must be 4 */;
|
select count(*) from t1 /* must be 4 */;
|
||||||
count(*)
|
count(*)
|
||||||
|
@ -782,8 +786,10 @@ UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
|
||||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||||
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 # # BEGIN
|
||||||
master-bin.000001 # Intvar # # INSERT_ID=6
|
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||||
master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
|
master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
select count(*) from t1 /* must be 4 */;
|
select count(*) from t1 /* must be 4 */;
|
||||||
count(*)
|
count(*)
|
||||||
4
|
4
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
RESET MASTER;
|
||||||
create table foo (a int);
|
create table foo (a int);
|
||||||
flush logs;
|
flush logs;
|
||||||
create temporary table tmp1_foo like foo;
|
create temporary table tmp1_foo like foo;
|
||||||
|
|
|
@ -6,6 +6,7 @@ source include/have_log_bin.inc;
|
||||||
source include/have_debug.inc;
|
source include/have_debug.inc;
|
||||||
|
|
||||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||||
|
RESET MASTER;
|
||||||
|
|
||||||
CREATE TABLE t1 (a INT);
|
CREATE TABLE t1 (a INT);
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ source include/have_binlog_format_mixed_or_statement.inc;
|
||||||
|
|
||||||
connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||||
connect (master1,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
connect (master1,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||||
|
RESET MASTER;
|
||||||
|
|
||||||
create table foo (a int);
|
create table foo (a int);
|
||||||
|
|
||||||
|
|
|
@ -623,3 +623,195 @@ SHOW CREATE TABLE t1;
|
||||||
SELECT * FROM t1 ORDER BY c1;
|
SELECT * FROM t1 ORDER BY c1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
if (!$skip_negative_auto_inc)
|
||||||
|
{
|
||||||
|
--echo #############################################################################
|
||||||
|
--echo # Bug #45823 - Assertion failure in file row/row0mysql.c line 1386
|
||||||
|
--echo # Bug #43988 - AUTO_INCREMENT errors with partitioned InnoDB tables in 5.1.31
|
||||||
|
--echo ##############################################################################
|
||||||
|
|
||||||
|
--echo # Inserting negative autoincrement values into a partition table (partitions >= 4)
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo # Reading from a partition table (partitions >= 2 ) after inserting a negative
|
||||||
|
--echo # value into the auto increment column
|
||||||
|
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
|
||||||
|
INSERT INTO t VALUES (-2,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo # Inserting negative auto increment value into a partition table (partitions >= 2)
|
||||||
|
--echo # auto increment value > 2.
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
|
||||||
|
INSERT INTO t VALUES (-4,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo # Inserting -1 into autoincrement column of a partition table (partition >= 4)
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo # Deleting from an auto increment table after inserting negative values
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t VALUES (-3,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
if (!$skip_delete)
|
||||||
|
{
|
||||||
|
DELETE FROM t WHERE c1 > 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo # Inserting a positive value that exceeds maximum allowed value for an
|
||||||
|
--echo # Auto Increment column (positive maximum)
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t VALUES (128,50);
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t VALUES (129,60);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo # Inserting a negative value that goes below minimum allowed value for an
|
||||||
|
--echo # Auto Increment column (negative minimum)
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-127,30);
|
||||||
|
INSERT INTO t VALUES (-128,40);
|
||||||
|
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t VALUES (-129,50);
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
INSERT INTO t VALUES (-130,60);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo # Updating the partition table with a negative Auto Increment value
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
if (!$skip_update)
|
||||||
|
{
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
INSERT INTO t(c2) VALUES (50);
|
||||||
|
|
||||||
|
if (!$skip_update)
|
||||||
|
{
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo # Updating the partition table with a value that crosses the upper limits
|
||||||
|
--echo # on both the positive and the negative side.
|
||||||
|
|
||||||
|
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
if (!$skip_update)
|
||||||
|
{
|
||||||
|
UPDATE t SET c1 = 130 where c1 = 127;
|
||||||
|
}
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
if (!$skip_update)
|
||||||
|
{
|
||||||
|
UPDATE t SET c1 = -140 where c1 = 126;
|
||||||
|
}
|
||||||
|
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo ##############################################################################
|
||||||
|
}
|
||||||
|
|
|
@ -825,3 +825,194 @@ c1
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#############################################################################
|
||||||
|
# Bug #45823 - Assertion failure in file row/row0mysql.c line 1386
|
||||||
|
# Bug #43988 - AUTO_INCREMENT errors with partitioned InnoDB tables in 5.1.31
|
||||||
|
##############################################################################
|
||||||
|
# Inserting negative autoincrement values into a partition table (partitions >= 4)
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Reading from a partition table (partitions >= 2 ) after inserting a negative
|
||||||
|
# value into the auto increment column
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
INSERT INTO t VALUES (-2,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-2 -20
|
||||||
|
1 30
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting negative auto increment value into a partition table (partitions >= 2)
|
||||||
|
# auto increment value > 2.
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
INSERT INTO t VALUES (-4,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-4 -20
|
||||||
|
1 30
|
||||||
|
2 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting -1 into autoincrement column of a partition table (partition >= 4)
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
DROP TABLE t;
|
||||||
|
# Deleting from an auto increment table after inserting negative values
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t VALUES (-3,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-3 -20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
DELETE FROM t WHERE c1 > 1;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-3 -20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting a positive value that exceeds maximum allowed value for an
|
||||||
|
# Auto Increment column (positive maximum)
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
INSERT INTO t VALUES (128,50);
|
||||||
|
ERROR 23000: Duplicate entry '127' for key 'PRIMARY'
|
||||||
|
INSERT INTO t VALUES (129,60);
|
||||||
|
ERROR 23000: Duplicate entry '127' for key 'PRIMARY'
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting a negative value that goes below minimum allowed value for an
|
||||||
|
# Auto Increment column (negative minimum)
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-127,30);
|
||||||
|
INSERT INTO t VALUES (-128,40);
|
||||||
|
INSERT INTO t VALUES (-129,50);
|
||||||
|
ERROR 23000: Duplicate entry '-128' for key 'PRIMARY'
|
||||||
|
INSERT INTO t VALUES (-130,60);
|
||||||
|
ERROR 23000: Duplicate entry '-128' for key 'PRIMARY'
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-128 40
|
||||||
|
-127 30
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
DROP TABLE t;
|
||||||
|
# Updating the partition table with a negative Auto Increment value
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-6 20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
INSERT INTO t(c2) VALUES (50);
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-6 20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
5 50
|
||||||
|
DROP TABLE t;
|
||||||
|
# Updating the partition table with a value that crosses the upper limits
|
||||||
|
# on both the positive and the negative side.
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='InnoDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
UPDATE t SET c1 = 130 where c1 = 127;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'c1' at row 1
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
UPDATE t SET c1 = -140 where c1 = 126;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'c1' at row 1
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-128 30
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
127 40
|
||||||
|
DROP TABLE t;
|
||||||
|
##############################################################################
|
||||||
|
|
|
@ -851,3 +851,194 @@ c1
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#############################################################################
|
||||||
|
# Bug #45823 - Assertion failure in file row/row0mysql.c line 1386
|
||||||
|
# Bug #43988 - AUTO_INCREMENT errors with partitioned InnoDB tables in 5.1.31
|
||||||
|
##############################################################################
|
||||||
|
# Inserting negative autoincrement values into a partition table (partitions >= 4)
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Reading from a partition table (partitions >= 2 ) after inserting a negative
|
||||||
|
# value into the auto increment column
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
INSERT INTO t VALUES (-2,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-2 -20
|
||||||
|
1 30
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting negative auto increment value into a partition table (partitions >= 2)
|
||||||
|
# auto increment value > 2.
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
INSERT INTO t VALUES (-4,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-4 -20
|
||||||
|
1 30
|
||||||
|
2 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting -1 into autoincrement column of a partition table (partition >= 4)
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
DROP TABLE t;
|
||||||
|
# Deleting from an auto increment table after inserting negative values
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t VALUES (-3,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-3 -20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
DELETE FROM t WHERE c1 > 1;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-3 -20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting a positive value that exceeds maximum allowed value for an
|
||||||
|
# Auto Increment column (positive maximum)
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
INSERT INTO t VALUES (128,50);
|
||||||
|
ERROR 23000: Duplicate entry '127' for key 'PRIMARY'
|
||||||
|
INSERT INTO t VALUES (129,60);
|
||||||
|
ERROR 23000: Duplicate entry '127' for key 'PRIMARY'
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting a negative value that goes below minimum allowed value for an
|
||||||
|
# Auto Increment column (negative minimum)
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-127,30);
|
||||||
|
INSERT INTO t VALUES (-128,40);
|
||||||
|
INSERT INTO t VALUES (-129,50);
|
||||||
|
ERROR 23000: Duplicate entry '-128' for key 'PRIMARY'
|
||||||
|
INSERT INTO t VALUES (-130,60);
|
||||||
|
ERROR 23000: Duplicate entry '-128' for key 'PRIMARY'
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-128 40
|
||||||
|
-127 30
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
DROP TABLE t;
|
||||||
|
# Updating the partition table with a negative Auto Increment value
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-6 20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
INSERT INTO t(c2) VALUES (50);
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-6 20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
5 50
|
||||||
|
DROP TABLE t;
|
||||||
|
# Updating the partition table with a value that crosses the upper limits
|
||||||
|
# on both the positive and the negative side.
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='Memory' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
UPDATE t SET c1 = 130 where c1 = 127;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'c1' at row 1
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
UPDATE t SET c1 = -140 where c1 = 126;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'c1' at row 1
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-128 30
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
127 40
|
||||||
|
DROP TABLE t;
|
||||||
|
##############################################################################
|
||||||
|
|
|
@ -870,3 +870,194 @@ c1
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#############################################################################
|
||||||
|
# Bug #45823 - Assertion failure in file row/row0mysql.c line 1386
|
||||||
|
# Bug #43988 - AUTO_INCREMENT errors with partitioned InnoDB tables in 5.1.31
|
||||||
|
##############################################################################
|
||||||
|
# Inserting negative autoincrement values into a partition table (partitions >= 4)
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Reading from a partition table (partitions >= 2 ) after inserting a negative
|
||||||
|
# value into the auto increment column
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
INSERT INTO t VALUES (-2,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-2 -20
|
||||||
|
1 30
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting negative auto increment value into a partition table (partitions >= 2)
|
||||||
|
# auto increment value > 2.
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
INSERT INTO t VALUES (-4,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-4 -20
|
||||||
|
1 30
|
||||||
|
2 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting -1 into autoincrement column of a partition table (partition >= 4)
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
DROP TABLE t;
|
||||||
|
# Deleting from an auto increment table after inserting negative values
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t VALUES (-3,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-3 -20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
DELETE FROM t WHERE c1 > 1;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-3 -20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting a positive value that exceeds maximum allowed value for an
|
||||||
|
# Auto Increment column (positive maximum)
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
INSERT INTO t VALUES (128,50);
|
||||||
|
ERROR 23000: Duplicate entry '127' for key 'PRIMARY'
|
||||||
|
INSERT INTO t VALUES (129,60);
|
||||||
|
ERROR 23000: Duplicate entry '127' for key 'PRIMARY'
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting a negative value that goes below minimum allowed value for an
|
||||||
|
# Auto Increment column (negative minimum)
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-127,30);
|
||||||
|
INSERT INTO t VALUES (-128,40);
|
||||||
|
INSERT INTO t VALUES (-129,50);
|
||||||
|
ERROR 23000: Duplicate entry '-128' for key 'PRIMARY'
|
||||||
|
INSERT INTO t VALUES (-130,60);
|
||||||
|
ERROR 23000: Duplicate entry '-128' for key 'PRIMARY'
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-128 40
|
||||||
|
-127 30
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
DROP TABLE t;
|
||||||
|
# Updating the partition table with a negative Auto Increment value
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-6 20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
INSERT INTO t(c2) VALUES (50);
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-6 20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
5 50
|
||||||
|
DROP TABLE t;
|
||||||
|
# Updating the partition table with a value that crosses the upper limits
|
||||||
|
# on both the positive and the negative side.
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='MyISAM' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
UPDATE t SET c1 = 130 where c1 = 127;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'c1' at row 1
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
UPDATE t SET c1 = -140 where c1 = 126;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'c1' at row 1
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-128 30
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
127 40
|
||||||
|
DROP TABLE t;
|
||||||
|
##############################################################################
|
||||||
|
|
|
@ -846,3 +846,194 @@ c1
|
||||||
4
|
4
|
||||||
5
|
5
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#############################################################################
|
||||||
|
# Bug #45823 - Assertion failure in file row/row0mysql.c line 1386
|
||||||
|
# Bug #43988 - AUTO_INCREMENT errors with partitioned InnoDB tables in 5.1.31
|
||||||
|
##############################################################################
|
||||||
|
# Inserting negative autoincrement values into a partition table (partitions >= 4)
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Reading from a partition table (partitions >= 2 ) after inserting a negative
|
||||||
|
# value into the auto increment column
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
INSERT INTO t VALUES (-2,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-2 -20
|
||||||
|
1 30
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting negative auto increment value into a partition table (partitions >= 2)
|
||||||
|
# auto increment value > 2.
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 2;
|
||||||
|
INSERT INTO t VALUES (-4,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-4 -20
|
||||||
|
1 30
|
||||||
|
2 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting -1 into autoincrement column of a partition table (partition >= 4)
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
DROP TABLE t;
|
||||||
|
# Deleting from an auto increment table after inserting negative values
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
INSERT INTO t VALUES (-3,-20);
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-3 -20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
DELETE FROM t WHERE c1 > 1;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-3 -20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting a positive value that exceeds maximum allowed value for an
|
||||||
|
# Auto Increment column (positive maximum)
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
INSERT INTO t VALUES (128,50);
|
||||||
|
ERROR 23000: Duplicate entry '127' for key 'PRIMARY'
|
||||||
|
INSERT INTO t VALUES (129,60);
|
||||||
|
ERROR 23000: Duplicate entry '127' for key 'PRIMARY'
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
DROP TABLE t;
|
||||||
|
# Inserting a negative value that goes below minimum allowed value for an
|
||||||
|
# Auto Increment column (negative minimum)
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-127,30);
|
||||||
|
INSERT INTO t VALUES (-128,40);
|
||||||
|
INSERT INTO t VALUES (-129,50);
|
||||||
|
ERROR 23000: Duplicate entry '-128' for key 'PRIMARY'
|
||||||
|
INSERT INTO t VALUES (-130,60);
|
||||||
|
ERROR 23000: Duplicate entry '-128' for key 'PRIMARY'
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-128 40
|
||||||
|
-127 30
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
DROP TABLE t;
|
||||||
|
# Updating the partition table with a negative Auto Increment value
|
||||||
|
CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (-1,-10);
|
||||||
|
INSERT INTO t(c2) VALUES (30);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
3 30
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-6 20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
INSERT INTO t(c2) VALUES (40);
|
||||||
|
INSERT INTO t(c2) VALUES (50);
|
||||||
|
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-6 20
|
||||||
|
-1 -10
|
||||||
|
1 10
|
||||||
|
3 30
|
||||||
|
4 40
|
||||||
|
5 50
|
||||||
|
DROP TABLE t;
|
||||||
|
# Updating the partition table with a value that crosses the upper limits
|
||||||
|
# on both the positive and the negative side.
|
||||||
|
CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||||
|
c2 INT) ENGINE='NDB' PARTITION BY HASH(c1) PARTITIONS 4;
|
||||||
|
INSERT INTO t(c2) VALUES (10);
|
||||||
|
INSERT INTO t(c2) VALUES (20);
|
||||||
|
INSERT INTO t VALUES (126,30);
|
||||||
|
INSERT INTO t VALUES (127,40);
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
UPDATE t SET c1 = 130 where c1 = 127;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'c1' at row 1
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
126 30
|
||||||
|
127 40
|
||||||
|
UPDATE t SET c1 = -140 where c1 = 126;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'c1' at row 1
|
||||||
|
SELECT * FROM t ORDER BY c1 ASC;
|
||||||
|
c1 c2
|
||||||
|
-128 30
|
||||||
|
1 10
|
||||||
|
2 20
|
||||||
|
127 40
|
||||||
|
DROP TABLE t;
|
||||||
|
##############################################################################
|
||||||
|
|
|
@ -30,6 +30,9 @@ let $skip_delete= 1;
|
||||||
let $skip_truncate= 1;
|
let $skip_truncate= 1;
|
||||||
let $skip_update= 1;
|
let $skip_update= 1;
|
||||||
let $only_ai_pk= 1;
|
let $only_ai_pk= 1;
|
||||||
|
# Bug#45823 Assertion failure in file row/row0mysql.c line 1386
|
||||||
|
# Archive does not handle negative autoincrement values correctly
|
||||||
|
let $skip_negative_auto_inc= 1;
|
||||||
|
|
||||||
##### Storage engine to be tested
|
##### Storage engine to be tested
|
||||||
let $engine= 'Archive';
|
let $engine= 'Archive';
|
||||||
|
|
|
@ -25,6 +25,9 @@
|
||||||
#------------------------------------------------------------------------------#
|
#------------------------------------------------------------------------------#
|
||||||
# Engine specific settings and requirements
|
# Engine specific settings and requirements
|
||||||
--source include/have_blackhole.inc
|
--source include/have_blackhole.inc
|
||||||
|
# Bug#45823 Assertion failure in file row/row0mysql.c line 1386
|
||||||
|
# Blackhole does not handle negative autoincrement values correctly
|
||||||
|
let $skip_negative_auto_inc= 1;
|
||||||
|
|
||||||
##### Storage engine to be tested
|
##### Storage engine to be tested
|
||||||
let $engine= 'Blackhole';
|
let $engine= 'Blackhole';
|
||||||
|
|
|
@ -244,3 +244,71 @@ t1 CREATE TABLE `t1` (
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=innodb;
|
||||||
|
CREATE TABLE t2 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
|
||||||
|
SET SQL_MODE='';
|
||||||
|
INSERT INTO t1 VALUES(NULL);
|
||||||
|
INSERT INTO t2 VALUES(NULL);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
SELECT * FROM t2;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
INSERT INTO t1 VALUES();
|
||||||
|
INSERT INTO t2 VALUES();
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SELECT * FROM t2;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
2
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
INSERT INTO t2 VALUES(0);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t2;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SET SQL_MODE=NO_AUTO_VALUE_ON_ZERO;
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
INSERT INTO t2 VALUES(0);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT * FROM t2;
|
||||||
|
id
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
INSERT INTO t1 VALUES(4);
|
||||||
|
INSERT INTO t2 VALUES(4);
|
||||||
|
FLUSH LOGS;
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
Comparing tables master:test.t2 and slave:test.t2
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
Comparing tables master:test.t1 and slave:test.t1
|
||||||
|
Comparing tables master:test.t2 and slave:test.t2
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
SET SQL_MODE='';
|
||||||
|
|
|
@ -29,5 +29,5 @@ t1
|
||||||
t2
|
t2
|
||||||
SHOW EVENTS in mysqltest;
|
SHOW EVENTS in mysqltest;
|
||||||
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
|
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
|
||||||
mysqltest e @ SYSTEM ONE TIME # NULL NULL NULL NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
|
mysqltest e root@localhost SYSTEM ONE TIME # NULL NULL NULL NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
DROP DATABASE IF EXISTS mysqltest;
|
DROP DATABASE IF EXISTS mysqltest;
|
||||||
|
|
|
@ -43,7 +43,7 @@ master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS db_bug_13684.t
|
||||||
master-bin.000001 # Query # # DROP DATABASE IF EXISTS db_bug_13684
|
master-bin.000001 # Query # # DROP DATABASE IF EXISTS db_bug_13684
|
||||||
master-bin.000001 # Query # # CREATE DATABASE db_bug_13684
|
master-bin.000001 # Query # # CREATE DATABASE db_bug_13684
|
||||||
master-bin.000001 # Query # # use `test`; CREATE TABLE db_bug_13684.t (a int)
|
master-bin.000001 # Query # # use `test`; CREATE TABLE db_bug_13684.t (a int)
|
||||||
master-bin.000001 # Query # # use `test`; CREATE EVENT db_bug_13684.e
|
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` EVENT db_bug_13684.e
|
||||||
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
|
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
|
||||||
DO
|
DO
|
||||||
UPDATE db_bug_13684.t SET a = a + 1
|
UPDATE db_bug_13684.t SET a = a + 1
|
||||||
|
@ -75,7 +75,7 @@ master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS db_bug_13684.t
|
||||||
master-bin.000001 # Query # # DROP DATABASE IF EXISTS db_bug_13684
|
master-bin.000001 # Query # # DROP DATABASE IF EXISTS db_bug_13684
|
||||||
master-bin.000001 # Query # # CREATE DATABASE db_bug_13684
|
master-bin.000001 # Query # # CREATE DATABASE db_bug_13684
|
||||||
master-bin.000001 # Query # # use `test`; CREATE TABLE db_bug_13684.t (a int)
|
master-bin.000001 # Query # # use `test`; CREATE TABLE db_bug_13684.t (a int)
|
||||||
master-bin.000001 # Query # # use `test`; CREATE EVENT db_bug_13684.e
|
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` EVENT db_bug_13684.e
|
||||||
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
|
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
|
||||||
DO
|
DO
|
||||||
UPDATE db_bug_13684.t SET a = a + 1
|
UPDATE db_bug_13684.t SET a = a + 1
|
||||||
|
|
|
@ -5,6 +5,7 @@ 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;
|
||||||
create database if not exists mysqltest;
|
create database if not exists mysqltest;
|
||||||
|
use mysqltest;
|
||||||
create temporary table mysqltest.t1 (n int)ENGINE=MyISAM;
|
create temporary table mysqltest.t1 (n int)ENGINE=MyISAM;
|
||||||
create temporary table mysqltest.t2 (n int)ENGINE=MyISAM;
|
create temporary table mysqltest.t2 (n int)ENGINE=MyISAM;
|
||||||
show status like 'Slave_open_temp_tables';
|
show status like 'Slave_open_temp_tables';
|
||||||
|
|
|
@ -191,5 +191,63 @@ select * from t28953;
|
||||||
END;|
|
END;|
|
||||||
ALTER EVENT event1 RENAME TO event2;
|
ALTER EVENT event1 RENAME TO event2;
|
||||||
DROP EVENT event2;
|
DROP EVENT event2;
|
||||||
|
CREATE TABLE test.t1(details CHAR(30));
|
||||||
|
CREATE EVENT /*!50000 event44331_1 */
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
||||||
|
ON COMPLETION PRESERVE DISABLE
|
||||||
|
DO INSERT INTO test.t1 VALUES('event event44331_1 fired - no definer');
|
||||||
|
CREATE DEFINER=CURRENT_USER /*!50000 EVENT event44331_2 */
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
||||||
|
ON COMPLETION PRESERVE DISABLE
|
||||||
|
DO INSERT INTO test.t1 VALUES('event event44331_2 fired - DEFINER=CURRENT_USER');
|
||||||
|
CREATE DEFINER=CURRENT_USER() EVENT event44331_3
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
||||||
|
ON COMPLETION PRESERVE DISABLE
|
||||||
|
DO INSERT INTO test.t1 VALUES('event event44331_3 fired - DEFINER=CURRENT_USER() function');
|
||||||
|
CREATE /*!50000 DEFINER='user44331' */ EVENT event44331_4
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
||||||
|
ON COMPLETION PRESERVE DISABLE
|
||||||
|
DO INSERT INTO test.t1 VALUES('event event44331_4 fired - DEFINER=user1');
|
||||||
|
Warnings:
|
||||||
|
Note 1449 The user specified as a definer ('user44331'@'%') does not exist
|
||||||
|
#on master
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_1';
|
||||||
|
EVENT_SCHEMA EVENT_NAME DEFINER
|
||||||
|
test event44331_1 root@localhost
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_2';
|
||||||
|
EVENT_SCHEMA EVENT_NAME DEFINER
|
||||||
|
test event44331_2 root@localhost
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_3';
|
||||||
|
EVENT_SCHEMA EVENT_NAME DEFINER
|
||||||
|
test event44331_3 root@localhost
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_4';
|
||||||
|
EVENT_SCHEMA EVENT_NAME DEFINER
|
||||||
|
test event44331_4 user44331@%
|
||||||
|
#on slave
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_1';
|
||||||
|
EVENT_SCHEMA EVENT_NAME DEFINER
|
||||||
|
test event44331_1 root@localhost
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_2';
|
||||||
|
EVENT_SCHEMA EVENT_NAME DEFINER
|
||||||
|
test event44331_2 root@localhost
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_3';
|
||||||
|
EVENT_SCHEMA EVENT_NAME DEFINER
|
||||||
|
test event44331_3 root@localhost
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_4';
|
||||||
|
EVENT_SCHEMA EVENT_NAME DEFINER
|
||||||
|
test event44331_4 user44331@%
|
||||||
SET @@global.event_scheduler= @old_event_scheduler;
|
SET @@global.event_scheduler= @old_event_scheduler;
|
||||||
DROP TABLE t28953;
|
DROP TABLE t28953;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP EVENT event44331_1;
|
||||||
|
DROP EVENT event44331_2;
|
||||||
|
DROP EVENT event44331_3;
|
||||||
|
DROP EVENT event44331_4;
|
||||||
|
|
|
@ -690,7 +690,7 @@ test_rpl e1 root@localhost SYSTEM RECURRING NULL 1 # # NULL ENABLED 1 latin1 lat
|
||||||
USE test_rpl;
|
USE test_rpl;
|
||||||
SHOW EVENTS;
|
SHOW EVENTS;
|
||||||
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
|
Db Name Definer Time zone Type Execute at Interval value Interval field Starts Ends Status Originator character_set_client collation_connection Database Collation
|
||||||
test_rpl e1 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
|
test_rpl e1 root@localhost SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
==========MASTER==========
|
==========MASTER==========
|
||||||
SELECT COUNT(*) FROM t1;
|
SELECT COUNT(*) FROM t1;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
|
@ -963,7 +963,9 @@ master-bin.000001 # Xid 1 # #
|
||||||
master-bin.000001 # Query 1 # BEGIN
|
master-bin.000001 # Query 1 # BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
|
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 't1, text 1')
|
||||||
master-bin.000001 # Xid 1 # #
|
master-bin.000001 # Xid 1 # #
|
||||||
|
master-bin.000001 # Query 1 # BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; TRUNCATE t1
|
master-bin.000001 # Query 1 # use `test_rpl`; TRUNCATE t1
|
||||||
|
master-bin.000001 # Xid 1 # #
|
||||||
master-bin.000001 # Query 1 # BEGIN
|
master-bin.000001 # Query 1 # BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
|
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
|
||||||
master-bin.000001 # Xid 1 # #
|
master-bin.000001 # Xid 1 # #
|
||||||
|
@ -1076,7 +1078,7 @@ master-bin.000001 # Query 1 # use `test_rpl`; GRANT EVENT ON *.* TO 'root'@'loca
|
||||||
master-bin.000001 # Query 1 # BEGIN
|
master-bin.000001 # Query 1 # BEGIN
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 'test1')
|
master-bin.000001 # Query 1 # use `test_rpl`; INSERT INTO t1 VALUES(1, 'test1')
|
||||||
master-bin.000001 # Xid 1 # #
|
master-bin.000001 # Xid 1 # #
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; CREATE EVENT e1 ON SCHEDULE EVERY '1' SECOND COMMENT 'e_second_comment' DO DELETE FROM t1
|
master-bin.000001 # Query 1 # use `test_rpl`; CREATE DEFINER=`root`@`localhost` EVENT e1 ON SCHEDULE EVERY '1' SECOND COMMENT 'e_second_comment' DO DELETE FROM t1
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; ALTER EVENT e1 RENAME TO e2
|
master-bin.000001 # Query 1 # use `test_rpl`; ALTER EVENT e1 RENAME TO e2
|
||||||
master-bin.000001 # Query 1 # use `test_rpl`; DROP EVENT e2
|
master-bin.000001 # Query 1 # use `test_rpl`; DROP EVENT e2
|
||||||
master-bin.000001 # Query 1 # BEGIN
|
master-bin.000001 # Query 1 # BEGIN
|
||||||
|
|
|
@ -90,5 +90,132 @@ a b
|
||||||
2 row 2
|
2 row 2
|
||||||
3 row 3
|
3 row 3
|
||||||
0
|
0
|
||||||
|
set sql_log_bin= 0;
|
||||||
drop database rewrite;
|
drop database rewrite;
|
||||||
|
set sql_log_bin= 1;
|
||||||
|
set sql_log_bin= 0;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set sql_log_bin= 1;
|
||||||
|
|
||||||
|
****
|
||||||
|
**** Bug #46861 Auto-closing of temporary tables broken by replicate-rewrite-db
|
||||||
|
****
|
||||||
|
|
||||||
|
****
|
||||||
|
**** Preparing the environment
|
||||||
|
****
|
||||||
|
SET sql_log_bin= 0;
|
||||||
|
CREATE DATABASE database_master_temp_01;
|
||||||
|
CREATE DATABASE database_master_temp_02;
|
||||||
|
CREATE DATABASE database_master_temp_03;
|
||||||
|
SET sql_log_bin= 1;
|
||||||
|
SET sql_log_bin= 0;
|
||||||
|
CREATE DATABASE database_slave_temp_01;
|
||||||
|
CREATE DATABASE database_slave_temp_02;
|
||||||
|
CREATE DATABASE database_slave_temp_03;
|
||||||
|
SET sql_log_bin= 1;
|
||||||
|
|
||||||
|
****
|
||||||
|
**** Creating temporary tables on different databases with different connections
|
||||||
|
****
|
||||||
|
**** con_temp_01 --> creates
|
||||||
|
**** t_01_01_temp on database_master_temp_01
|
||||||
|
****
|
||||||
|
**** con_temp_02 --> creates
|
||||||
|
**** t_01_01_temp on database_master_temp_01
|
||||||
|
**** t_02_01_temp, t_02_02_temp on database_master_temp_02
|
||||||
|
****
|
||||||
|
**** con_temp_02 --> creates
|
||||||
|
**** t_01_01_temp on database_master_temp_01
|
||||||
|
**** t_02_01_temp, t_02_02_temp on database_master_temp_02
|
||||||
|
**** t_03_01_temp, t_03_02_temp, t_03_03_temp on database_master_temp_03
|
||||||
|
****
|
||||||
|
|
||||||
|
con_temp_01
|
||||||
|
|
||||||
|
USE database_master_temp_01;
|
||||||
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
||||||
|
INSERT INTO t_01_01_temp VALUES(1);
|
||||||
|
|
||||||
|
con_temp_02
|
||||||
|
|
||||||
|
USE database_master_temp_01;
|
||||||
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
||||||
|
INSERT INTO t_01_01_temp VALUES(1);
|
||||||
|
USE database_master_temp_02;
|
||||||
|
CREATE TEMPORARY TABLE t_02_01_temp(a int);
|
||||||
|
INSERT INTO t_02_01_temp VALUES(1);
|
||||||
|
CREATE TEMPORARY TABLE t_02_02_temp(a int);
|
||||||
|
INSERT INTO t_02_02_temp VALUES(1);
|
||||||
|
|
||||||
|
con_temp_03
|
||||||
|
|
||||||
|
USE database_master_temp_01;
|
||||||
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
||||||
|
INSERT INTO t_01_01_temp VALUES(1);
|
||||||
|
USE database_master_temp_02;
|
||||||
|
CREATE TEMPORARY TABLE t_02_01_temp(a int);
|
||||||
|
INSERT INTO t_02_01_temp VALUES(1);
|
||||||
|
CREATE TEMPORARY TABLE t_02_02_temp(a int);
|
||||||
|
INSERT INTO t_02_02_temp VALUES(1);
|
||||||
|
USE database_master_temp_03;
|
||||||
|
CREATE TEMPORARY TABLE t_03_01_temp(a int);
|
||||||
|
INSERT INTO t_03_01_temp VALUES(1);
|
||||||
|
CREATE TEMPORARY TABLE t_03_02_temp(a int);
|
||||||
|
INSERT INTO t_03_02_temp VALUES(1);
|
||||||
|
CREATE TEMPORARY TABLE t_03_03_temp(a int);
|
||||||
|
INSERT INTO t_03_03_temp VALUES(1);
|
||||||
|
|
||||||
|
**** Dropping the connections
|
||||||
|
**** 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.a To be
|
||||||
|
**** sure that logging has been done, we use a user lock.
|
||||||
|
|
||||||
|
show status like 'Slave_open_temp_tables';
|
||||||
|
Variable_name Value
|
||||||
|
Slave_open_temp_tables 10
|
||||||
|
select get_lock("con_01",10);
|
||||||
|
get_lock("con_01",10)
|
||||||
|
1
|
||||||
|
select get_lock("con_01",10);
|
||||||
|
get_lock("con_01",10)
|
||||||
|
1
|
||||||
|
select get_lock("con_02",10);
|
||||||
|
get_lock("con_02",10)
|
||||||
|
1
|
||||||
|
select get_lock("con_02",10);
|
||||||
|
get_lock("con_02",10)
|
||||||
|
1
|
||||||
|
select get_lock("con_03",10);
|
||||||
|
get_lock("con_03",10)
|
||||||
|
1
|
||||||
|
select get_lock("con_03",10);
|
||||||
|
get_lock("con_03",10)
|
||||||
|
1
|
||||||
|
|
||||||
|
**** Checking the binary log and temporary tables
|
||||||
|
|
||||||
|
show status like 'Slave_open_temp_tables';
|
||||||
|
Variable_name Value
|
||||||
|
Slave_open_temp_tables 0
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `database_master_temp_01`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t_01_01_temp`
|
||||||
|
master-bin.000001 # Query # # use `database_master_temp_02`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t_02_02_temp`,`t_02_01_temp`
|
||||||
|
master-bin.000001 # Query # # use `database_master_temp_01`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t_01_01_temp`
|
||||||
|
master-bin.000001 # Query # # use `database_master_temp_03`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t_03_03_temp`,`t_03_02_temp`,`t_03_01_temp`
|
||||||
|
master-bin.000001 # Query # # use `database_master_temp_02`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t_02_02_temp`,`t_02_01_temp`
|
||||||
|
master-bin.000001 # Query # # use `database_master_temp_01`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t_01_01_temp`
|
||||||
|
****
|
||||||
|
**** Cleaning up the test case
|
||||||
|
****
|
||||||
|
SET sql_log_bin= 0;
|
||||||
|
DROP DATABASE database_master_temp_01;
|
||||||
|
DROP DATABASE database_master_temp_02;
|
||||||
|
DROP DATABASE database_master_temp_03;
|
||||||
|
SET sql_log_bin= 1;
|
||||||
|
SET sql_log_bin= 0;
|
||||||
|
DROP DATABASE database_slave_temp_01;
|
||||||
|
DROP DATABASE database_slave_temp_02;
|
||||||
|
DROP DATABASE database_slave_temp_03;
|
||||||
|
SET sql_log_bin= 1;
|
||||||
|
|
|
@ -4,21 +4,20 @@ 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;
|
||||||
create database if not exists mysqltest1;
|
DROP TABLE IF EXISTS t1;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p1;
|
DROP TABLE IF EXISTS t2;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p2;
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t2;
|
DROP PROCEDURE IF EXISTS p2;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t1;
|
CREATE TABLE IF NOT EXISTS t1(name CHAR(16), birth DATE,PRIMARY KEY(name))ENGINE=InnoDB;
|
||||||
CREATE TABLE IF NOT EXISTS mysqltest1.t1(name CHAR(16), birth DATE,PRIMARY KEY(name))ENGINE=InnoDB;
|
CREATE TABLE IF NOT EXISTS t2(name CHAR(16), age INT ,PRIMARY KEY(name))ENGINE=InnoDB;
|
||||||
CREATE TABLE IF NOT EXISTS mysqltest1.t2(name CHAR(16), age INT ,PRIMARY KEY(name))ENGINE=InnoDB;
|
CREATE PROCEDURE p1()
|
||||||
CREATE PROCEDURE mysqltest1.p1()
|
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE done INT DEFAULT 0;
|
DECLARE done INT DEFAULT 0;
|
||||||
DECLARE spa CHAR(16);
|
DECLARE spa CHAR(16);
|
||||||
DECLARE spb INT;
|
DECLARE spb INT;
|
||||||
DECLARE cur1 CURSOR FOR SELECT name,
|
DECLARE cur1 CURSOR FOR SELECT name,
|
||||||
(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(),5)<RIGHT(birth,5))
|
(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(),5)<RIGHT(birth,5))
|
||||||
FROM mysqltest1.t1;
|
FROM t1;
|
||||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
|
||||||
OPEN cur1;
|
OPEN cur1;
|
||||||
SET AUTOCOMMIT=0;
|
SET AUTOCOMMIT=0;
|
||||||
|
@ -26,21 +25,20 @@ REPEAT
|
||||||
FETCH cur1 INTO spa, spb;
|
FETCH cur1 INTO spa, spb;
|
||||||
IF NOT done THEN
|
IF NOT done THEN
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO mysqltest1.t2 VALUES (spa,spb);
|
INSERT INTO t2 VALUES (spa,spb);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
END IF;
|
END IF;
|
||||||
UNTIL done END REPEAT;
|
UNTIL done END REPEAT;
|
||||||
SET AUTOCOMMIT=1;
|
SET AUTOCOMMIT=1;
|
||||||
CLOSE cur1;
|
CLOSE cur1;
|
||||||
END|
|
END|
|
||||||
CREATE PROCEDURE mysqltest1.p2()
|
CREATE PROCEDURE p2()
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO mysqltest1.t1 VALUES ('MySQL','1993-02-04'),('ROCKS', '1990-08-27'),('Texas', '1999-03-30'),('kyle','2005-1-1');
|
INSERT INTO t1 VALUES ('MySQL','1993-02-04'),('ROCKS', '1990-08-27'),('Texas', '1999-03-30'),('kyle','2005-1-1');
|
||||||
END|
|
END|
|
||||||
CALL mysqltest1.p2();
|
CALL p2();
|
||||||
CALL mysqltest1.p1();
|
CALL p1();
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p1;
|
DROP TABLE t1;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p2;
|
DROP TABLE t2;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t1;
|
DROP PROCEDURE p1;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t2;
|
DROP PROCEDURE p2;
|
||||||
DROP DATABASE mysqltest1;
|
|
||||||
|
|
870
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
Normal file
870
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
Normal file
|
@ -0,0 +1,870 @@
|
||||||
|
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;
|
||||||
|
###################################################################################
|
||||||
|
# CONFIGURATION
|
||||||
|
###################################################################################
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
CREATE TABLE nt_1 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_2 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_3 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_4 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE tt_1 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_2 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_3 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_4 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
SET SQL_LOG_BIN=0;
|
||||||
|
CREATE TABLE nt_1 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_2 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_3 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE nt_4 (a text, b int PRIMARY KEY, c text) ENGINE = MyISAM;
|
||||||
|
CREATE TABLE tt_1 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_2 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_3 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
CREATE TABLE tt_4 (a text, b int PRIMARY KEY, c text) ENGINE = Innodb;
|
||||||
|
SET SQL_LOG_BIN=1;
|
||||||
|
CREATE FUNCTION f1 () RETURNS VARCHAR(64)
|
||||||
|
BEGIN
|
||||||
|
RETURN "Testing...";
|
||||||
|
END|
|
||||||
|
CREATE FUNCTION f2 () RETURNS VARCHAR(64)
|
||||||
|
BEGIN
|
||||||
|
RETURN f1();
|
||||||
|
END|
|
||||||
|
CREATE PROCEDURE pc_i_tt_3 (IN x INT, IN y VARCHAR(64))
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO tt_3 VALUES (y,x,x);
|
||||||
|
END|
|
||||||
|
CREATE TRIGGER tr_i_tt_3_to_nt_3 BEFORE INSERT ON tt_3 FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO nt_3 VALUES (NEW.a, NEW.b, NEW.c);
|
||||||
|
END|
|
||||||
|
CREATE TRIGGER tr_i_nt_4_to_tt_4 BEFORE INSERT ON nt_4 FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO tt_4 VALUES (NEW.a, NEW.b, NEW.c);
|
||||||
|
END|
|
||||||
|
###################################################################################
|
||||||
|
# MIXING TRANSACTIONAL and NON-TRANSACTIONAL TABLES
|
||||||
|
###################################################################################
|
||||||
|
#
|
||||||
|
#1) "B T T C" generates in binlog the "B T T C" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 4", 4, "new text 4");
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 4", 4, "new text 4");
|
||||||
|
COMMIT;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 4", 4, "new text 4")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 4", 4, "new text 4")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#1.e) "B T T C" with error in T generates in binlog the "B T T C" entries.
|
||||||
|
#
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -2", -2, "new text -2");
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -1", -1, "new text -1"), ("new text -2", -2, "new text -2");
|
||||||
|
ERROR 23000: Duplicate entry '-2' for key 'PRIMARY'
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -3", -3, "new text -3");
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -5", -5, "new text -5");
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -4", -4, "new text -4"), ("new text -5", -5, "new text -5");
|
||||||
|
ERROR 23000: Duplicate entry '-5' for key 'PRIMARY'
|
||||||
|
COMMIT;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -2", -2, "new text -2")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text -3", -3, "new text -3")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text -5", -5, "new text -5")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#2) "B T T R" generates in binlog an "empty" entry.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 5", 5, "new text 5");
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 5", 5, "new text 5");
|
||||||
|
ROLLBACK;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#2.e) "B T T R" with error in T generates in binlog an "empty" entry.
|
||||||
|
#
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -7", -7, "new text -7");
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -6", -6, "new text -6"), ("new text -7", -7, "new text -7");
|
||||||
|
ERROR 23000: Duplicate entry '-7' for key 'PRIMARY'
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -8", -8, "new text -8");
|
||||||
|
ROLLBACK;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -10", -10, "new text -10");
|
||||||
|
INSERT INTO tt_2 VALUES ("new text -9", -9, "new text -9"), ("new text -10", -10, "new text -10");
|
||||||
|
ERROR 23000: Duplicate entry '-10' for key 'PRIMARY'
|
||||||
|
ROLLBACK;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -7", -7, "new text -7")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#3) "B T N C" generates in binlog the "B T N C" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 6", 6, "new text 6");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 6", 6, "new text 6");
|
||||||
|
COMMIT;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 6", 6, "new text 6")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 6", 6, "new text 6")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#3.e) "B T N C" with error in either T or N generates in binlog the "B T N C" entries.
|
||||||
|
#
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -12", -12, "new text -12");
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -11", -11, "new text -11"), ("new text -12", -12, "new text -12");
|
||||||
|
ERROR 23000: Duplicate entry '-12' for key 'PRIMARY'
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -13", -13, "new text -13");
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -14", -14, "new text -14");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -16", -16, "new text -16");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -15", -15, "new text -15"), ("new text -16", -16, "new text -16");
|
||||||
|
ERROR 23000: Duplicate entry '-16' for key 'PRIMARY'
|
||||||
|
COMMIT;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -12", -12, "new text -12")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -13", -13, "new text -13")
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -14", -14, "new text -14")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -16", -16, "new text -16")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -15", -15, "new text -15"), ("new text -16", -16, "new text -16")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#4) "B T N R" generates in binlog the "B T N R" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 7", 7, "new text 7");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 7", 7, "new text 7");
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 7", 7, "new text 7")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 7", 7, "new text 7")
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#4.e) "B T N R" with error in either T or N generates in binlog the "B T N R" entries.
|
||||||
|
#
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -17", -17, "new text -17");
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -16", -16, "new text -16"), ("new text -17", -17, "new text -17");
|
||||||
|
ERROR 23000: Duplicate entry '-17' for key 'PRIMARY'
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -18", -18, "new text -18");
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -19", -19, "new text -19");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -21", -21, "new text -21");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -20", -20, "new text -20"), ("new text -21", -21, "new text -21");
|
||||||
|
ERROR 23000: Duplicate entry '-21' for key 'PRIMARY'
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -17", -17, "new text -17")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -18", -18, "new text -18")
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -19", -19, "new text -19")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -21", -21, "new text -21")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -20", -20, "new text -20"), ("new text -21", -21, "new text -21")
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#5) "T" generates in binlog the "B T C" entry.
|
||||||
|
#
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 8", 8, "new text 8");
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 8", 8, "new text 8")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#5.e) "T" with error in T generates in binlog an "empty" entry.
|
||||||
|
#
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -1", -1, "new text -1");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -1", -1, "new text -1"), ("new text -22", -22, "new text -22");
|
||||||
|
ERROR 23000: Duplicate entry '-1' for key 'PRIMARY'
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -23", -23, "new text -23"), ("new text -1", -1, "new text -1");
|
||||||
|
ERROR 23000: Duplicate entry '-1' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -1", -1, "new text -1")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#6) "N" generates in binlog the "N" entry.
|
||||||
|
#
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 9", 9, "new text 9");
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 9", 9, "new text 9")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#6.e) "N" with error in N generates in binlog an empty entry if the error
|
||||||
|
# happens in the first tuple. Otherwise, generates the "N" entry and
|
||||||
|
# the error is appended.
|
||||||
|
#
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -1", -1, "new text -1");
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -1", -1, "new text -1");
|
||||||
|
ERROR 23000: Duplicate entry '-1' for key 'PRIMARY'
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -24", -24, "new text -24"), ("new text -1", -1, "new text -1");
|
||||||
|
ERROR 23000: Duplicate entry '-1' for key 'PRIMARY'
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -1", -1, "new text -1")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -24", -24, "new text -24"), ("new text -1", -1, "new text -1")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#7) "M" generates in binglog the "B M C" entries.
|
||||||
|
#
|
||||||
|
DELETE FROM nt_1;
|
||||||
|
INSERT INTO nt_1 SELECT * FROM tt_1;
|
||||||
|
DELETE FROM tt_1;
|
||||||
|
INSERT INTO tt_1 SELECT * FROM nt_1;
|
||||||
|
INSERT INTO tt_3 VALUES ("new text 000", 000, '');
|
||||||
|
INSERT INTO tt_3 VALUES("new text 100", 100, f1());
|
||||||
|
INSERT INTO nt_4 VALUES("new text 100", 100, f1());
|
||||||
|
INSERT INTO tt_3 VALUES("new text 200", 200, f2());
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 300", 300, '');
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 400", 400, f1());
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 500", 500, f2());
|
||||||
|
CALL pc_i_tt_3(600, "Testing...");
|
||||||
|
UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 1", nt_4.a= "new text 1", tt_3.a= "new text 1", tt_4.a= "new text 1" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 2", tt_4.a= "new text 2", nt_3.a= "new text 2", nt_4.a = "new text 2" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 3", nt_3.a= "new text 3", nt_4.a= "new text 3", tt_4.a = "new text 3" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 4", nt_3.a= "new text 4", nt_4.a= "new text 4", tt_4.a = "new text 4" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM nt_1
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 SELECT * FROM tt_1
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM tt_1
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 SELECT * FROM nt_1
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ("new text 000", 000, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES("new text 100", 100, f1())
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES("new text 100", 100, f1())
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES("new text 200", 200, f2())
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES ("new text 300", 300, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES ("new text 400", 400, f1())
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES ("new text 500", 500, f2())
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ( NAME_CONST('y',_latin1'Testing...' COLLATE 'latin1_swedish_ci'), NAME_CONST('x',600), NAME_CONST('x',600))
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 1", nt_4.a= "new text 1", tt_3.a= "new text 1", tt_4.a= "new text 1" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 2", tt_4.a= "new text 2", nt_3.a= "new text 2", nt_4.a = "new text 2" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 3", nt_3.a= "new text 3", nt_4.a= "new text 3", tt_4.a = "new text 3" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 4", nt_3.a= "new text 4", nt_4.a= "new text 4", tt_4.a = "new text 4" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#7.e) "M" with error in M generates in binglog the "B M R" entries.
|
||||||
|
#
|
||||||
|
INSERT INTO nt_3 VALUES ("new text -26", -26, '');
|
||||||
|
SELECT * FROM tt_3;
|
||||||
|
a b c
|
||||||
|
new text 000 0
|
||||||
|
new text 4 100 Testing...
|
||||||
|
new text 200 200 Testing...
|
||||||
|
Testing... 600 600
|
||||||
|
INSERT INTO tt_3 VALUES ("new text -25", -25, ''), ("new text -26", -26, '');
|
||||||
|
ERROR 23000: Duplicate entry '-26' for key 'PRIMARY'
|
||||||
|
SELECT * FROM tt_3;
|
||||||
|
a b c
|
||||||
|
new text 000 0
|
||||||
|
new text 4 100 Testing...
|
||||||
|
new text 200 200 Testing...
|
||||||
|
Testing... 600 600
|
||||||
|
INSERT INTO tt_4 VALUES ("new text -26", -26, '');
|
||||||
|
SELECT * FROM nt_4;
|
||||||
|
a b c
|
||||||
|
new text 4 100 Testing...
|
||||||
|
new text 300 300
|
||||||
|
new text 400 400 Testing...
|
||||||
|
new text 500 500 Testing...
|
||||||
|
INSERT INTO nt_4 VALUES ("new text -25", -25, ''), ("new text -26", -26, '');
|
||||||
|
ERROR 23000: Duplicate entry '-26' for key 'PRIMARY'
|
||||||
|
SELECT * FROM nt_4;
|
||||||
|
a b c
|
||||||
|
new text 4 100 Testing...
|
||||||
|
new text 300 300
|
||||||
|
new text 400 400 Testing...
|
||||||
|
new text 500 500 Testing...
|
||||||
|
new text -25 -25
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_3 VALUES ("new text -26", -26, '')
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ("new text -25", -25, ''), ("new text -26", -26, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_4 VALUES ("new text -26", -26, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES ("new text -25", -25, ''), ("new text -26", -26, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#8) "B N N T C" generates in binglog the "N N B T C" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 10", 10, "new text 10");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text 10", 10, "new text 10");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 10", 10, "new text 10");
|
||||||
|
COMMIT;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 10", 10, "new text 10")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_2 VALUES ("new text 10", 10, "new text 10")
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 10", 10, "new text 10")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#8.e) "B N N T R" See 6.e and 9.e.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#9) "B N N T R" generates in binlog the "N N B T R" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 11", 11, "new text 11");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text 11", 11, "new text 11");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 11", 11, "new text 11");
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 11", 11, "new text 11")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_2 VALUES ("new text 11", 11, "new text 11")
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 11", 11, "new text 11")
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#9.e) "B N N T R" with error in N generates in binlog the "N N B T R" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text -25", -25, "new text -25");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text -25", -25, "new text -25");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text -26", -26, "new text -26"), ("new text -25", -25, "new text -25");
|
||||||
|
ERROR 23000: Duplicate entry '-25' for key 'PRIMARY'
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -27", -27, "new text -27");
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text -25", -25, "new text -25")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_2 VALUES ("new text -25", -25, "new text -25")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_2 VALUES ("new text -26", -26, "new text -26"), ("new text -25", -25, "new text -25")
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -27", -27, "new text -27")
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#10) "B N N C" generates in binglog the "N N" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 12", 12, "new text 12");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text 12", 12, "new text 12");
|
||||||
|
COMMIT;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 12", 12, "new text 12")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_2 VALUES ("new text 12", 12, "new text 12")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#10.e) "B N N C" See 6.e and 9.e.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#11) "B N N R" generates in binlog the "N N" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 VALUES ("new text 13", 13, "new text 13");
|
||||||
|
INSERT INTO nt_2 VALUES ("new text 13", 13, "new text 13");
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 VALUES ("new text 13", 13, "new text 13")
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_2 VALUES ("new text 13", 13, "new text 13")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#11.e) "B N N R" See 6.e and 9.e.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#12) "B M T C" generates in the binlog the "B M T C" entries.
|
||||||
|
#
|
||||||
|
DELETE FROM nt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 SELECT * FROM tt_1;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 14", 14, "new text 14");
|
||||||
|
COMMIT;
|
||||||
|
DELETE FROM tt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 SELECT * FROM nt_1;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 15", 15, "new text 15");
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES ("new text 700", 700, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 800", 800, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES("new text 900", 900, f1());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1000", 1000, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES(1100, 1100, f2());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1200", 1200, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 1300", 1300, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1400", 1400, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES("new text 1500", 1500, f1());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1600", 1600, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES("new text 1700", 1700, f2());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 1800", 1800, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
CALL pc_i_tt_3(1900, "Testing...");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2000", 2000, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 5", nt_4.a= "new text 5", tt_3.a= "new text 5", tt_4.a= "new text 5" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2100", 2100, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 6", tt_4.a= "new text 6", nt_3.a= "new text 6", nt_4.a = "new text 6" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2200", 2200, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 7", nt_3.a= "new text 7", nt_4.a= "new text 7", tt_4.a = "new text 7" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2300", 2300, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 8", nt_3.a= "new text 8", nt_4.a= "new text 8", tt_4.a = "new text 8" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2400", 2400, '');
|
||||||
|
COMMIT;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM nt_1
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 SELECT * FROM tt_1
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 14", 14, "new text 14")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM tt_1
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 SELECT * FROM nt_1
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 15", 15, "new text 15")
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ("new text 700", 700, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 800", 800, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES("new text 900", 900, f1())
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 1000", 1000, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES(1100, 1100, f2())
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 1200", 1200, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES ("new text 1300", 1300, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 1400", 1400, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES("new text 1500", 1500, f1())
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 1600", 1600, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES("new text 1700", 1700, f2())
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 1800", 1800, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ( NAME_CONST('y',_latin1'Testing...' COLLATE 'latin1_swedish_ci'), NAME_CONST('x',1900), NAME_CONST('x',1900))
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 2000", 2000, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 5", nt_4.a= "new text 5", tt_3.a= "new text 5", tt_4.a= "new text 5" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 2100", 2100, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 6", tt_4.a= "new text 6", nt_3.a= "new text 6", nt_4.a = "new text 6" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 2200", 2200, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 7", nt_3.a= "new text 7", nt_4.a= "new text 7", tt_4.a = "new text 7" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 2300", 2300, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 8", nt_3.a= "new text 8", nt_4.a= "new text 8", tt_4.a = "new text 8" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 2400", 2400, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#12.e) "B M T C" with error in M generates in the binlog the "B M T C" entries.
|
||||||
|
#
|
||||||
|
# There is a bug in the slave that needs to be fixed before enabling
|
||||||
|
# this part of the test. A bug report will be filed referencing this
|
||||||
|
# test case.
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_3 VALUES ("new text -28", -28, '');
|
||||||
|
INSERT INTO tt_3 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
|
||||||
|
ERROR 23000: Duplicate entry '-28' for key 'PRIMARY'
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -27", -27, '');
|
||||||
|
COMMIT;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_4 VALUES ("new text -28", -28, '');
|
||||||
|
INSERT INTO nt_4 VALUES ("new text -27", -27, ''), ("new text -28", -28, '');
|
||||||
|
ERROR 23000: Duplicate entry '-28' for key 'PRIMARY'
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -28", -28, '');
|
||||||
|
COMMIT;
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_3 VALUES ("new text -28", -28, '')
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ("new text -27", -27, ''), ("new text -28", -28, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -27", -27, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_4 VALUES ("new text -28", -28, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES ("new text -27", -27, ''), ("new text -28", -28, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -28", -28, '')
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#13) "B M T R" generates in the binlog the "B M T R" entries
|
||||||
|
#
|
||||||
|
DELETE FROM nt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_1 SELECT * FROM tt_1;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 17", 17, "new text 17");
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
DELETE FROM tt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_1 SELECT * FROM nt_1;
|
||||||
|
INSERT INTO tt_2 VALUES ("new text 18", 18, "new text 18");
|
||||||
|
ROLLBACK;
|
||||||
|
INSERT INTO tt_1 SELECT * FROM nt_1;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES ("new text 2500", 2500, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2600", 2600, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES("new text 2700", 2700, f1());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 2800", 2800, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_3 VALUES(2900, 2900, f2());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3000", 3000, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES ("new text 3100", 3100, '');
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3200", 3200, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES("new text 3300", 3300, f1());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3400", 3400, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_4 VALUES("new text 3500", 3500, f2());
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3600", 3600, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
CALL pc_i_tt_3(3700, "Testing...");
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3700", 3700, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 9", nt_4.a= "new text 9", tt_3.a= "new text 9", tt_4.a= "new text 9" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3800", 3800, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 10", tt_4.a= "new text 10", nt_3.a= "new text 10", nt_4.a = "new text 10" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 3900", 3900, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 11", nt_3.a= "new text 11", nt_4.a= "new text 11", tt_4.a = "new text 11" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 4000", 4000, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 12", nt_3.a= "new text 12", nt_4.a= "new text 12", tt_4.a = "new text 12" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100;
|
||||||
|
INSERT INTO tt_1 VALUES ("new text 4100", 4100, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM nt_1
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_1 SELECT * FROM tt_1
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_2 VALUES ("new text 17", 17, "new text 17")
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; DELETE FROM tt_1
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 SELECT * FROM nt_1
|
||||||
|
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ("new text 2500", 2500, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 2600", 2600, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES("new text 2700", 2700, f1())
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 2800", 2800, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES(2900, 2900, f2())
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 3000", 3000, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES ("new text 3100", 3100, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 3200", 3200, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES("new text 3300", 3300, f1())
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 3400", 3400, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES("new text 3500", 3500, f2())
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 3600", 3600, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ( NAME_CONST('y',_latin1'Testing...' COLLATE 'latin1_swedish_ci'), NAME_CONST('x',3700), NAME_CONST('x',3700))
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 3700", 3700, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE nt_3, nt_4, tt_3, tt_4 SET nt_3.a= "new text 9", nt_4.a= "new text 9", tt_3.a= "new text 9", tt_4.a= "new text 9" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 3800", 3800, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, tt_4, nt_3, nt_4 SET tt_3.a= "new text 10", tt_4.a= "new text 10", nt_3.a= "new text 10", nt_4.a = "new text 10" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 3900", 3900, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 11", nt_3.a= "new text 11", nt_4.a= "new text 11", tt_4.a = "new text 11" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 4000", 4000, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; UPDATE tt_3, nt_3, nt_4, tt_4 SET tt_3.a= "new text 12", nt_3.a= "new text 12", nt_4.a= "new text 12", tt_4.a = "new text 12" where nt_3.b = nt_4.b and nt_4.b = tt_3.b and tt_3.b = tt_4.b and tt_4.b = 100
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text 4100", 4100, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#13.e) "B M T R" with error in M generates in the binlog the "B M T R" entries.
|
||||||
|
#
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO nt_3 VALUES ("new text -30", -30, '');
|
||||||
|
INSERT INTO tt_3 VALUES ("new text -29", -29, ''), ("new text -30", -30, '');
|
||||||
|
ERROR 23000: Duplicate entry '-30' for key 'PRIMARY'
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -30", -30, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO tt_4 VALUES ("new text -30", -30, '');
|
||||||
|
INSERT INTO nt_4 VALUES ("new text -29", -29, ''), ("new text -30", -30, '');
|
||||||
|
ERROR 23000: Duplicate entry '-30' for key 'PRIMARY'
|
||||||
|
INSERT INTO tt_1 VALUES ("new text -31", -31, '');
|
||||||
|
ROLLBACK;
|
||||||
|
Warnings:
|
||||||
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_3 VALUES ("new text -30", -30, '')
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_3 VALUES ("new text -29", -29, ''), ("new text -30", -30, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -30", -30, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_4 VALUES ("new text -30", -30, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO nt_4 VALUES ("new text -29", -29, ''), ("new text -30", -30, '')
|
||||||
|
master-bin.000001 # Query # # use `test`; INSERT INTO tt_1 VALUES ("new text -31", -31, '')
|
||||||
|
master-bin.000001 # Query # # ROLLBACK
|
||||||
|
###################################################################################
|
||||||
|
# CLEAN
|
||||||
|
###################################################################################
|
||||||
|
DROP TABLE tt_1;
|
||||||
|
DROP TABLE tt_2;
|
||||||
|
DROP TABLE tt_3;
|
||||||
|
DROP TABLE tt_4;
|
||||||
|
DROP TABLE nt_1;
|
||||||
|
DROP TABLE nt_2;
|
||||||
|
DROP TABLE nt_3;
|
||||||
|
DROP TABLE nt_4;
|
||||||
|
DROP PROCEDURE pc_i_tt_3;
|
||||||
|
DROP FUNCTION f1;
|
||||||
|
DROP FUNCTION f2;
|
|
@ -129,6 +129,9 @@ CREATE DATABASE bug42217_db;
|
||||||
GRANT CREATE ROUTINE ON bug42217_db.* TO 'create_rout_db'@'localhost'
|
GRANT CREATE ROUTINE ON bug42217_db.* TO 'create_rout_db'@'localhost'
|
||||||
IDENTIFIED BY 'create_rout_db' WITH GRANT OPTION;
|
IDENTIFIED BY 'create_rout_db' WITH GRANT OPTION;
|
||||||
|
|
||||||
|
-- sync_slave_with_master
|
||||||
|
-- connection master
|
||||||
|
|
||||||
connect (create_rout_db_master, localhost, create_rout_db, create_rout_db, bug42217_db,$MASTER_MYPORT,);
|
connect (create_rout_db_master, localhost, create_rout_db, create_rout_db, bug42217_db,$MASTER_MYPORT,);
|
||||||
connect (create_rout_db_slave, localhost, create_rout_db, create_rout_db, bug42217_db, $SLAVE_MYPORT,);
|
connect (create_rout_db_slave, localhost, create_rout_db, create_rout_db, bug42217_db, $SLAVE_MYPORT,);
|
||||||
|
|
||||||
|
|
|
@ -12,21 +12,25 @@ source include/have_binlog_format_mixed_or_statement.inc;
|
||||||
create database if not exists mysqltest;
|
create database if not exists mysqltest;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
connect (con_temp,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||||
|
|
||||||
|
connection con_temp;
|
||||||
|
use mysqltest;
|
||||||
create temporary table mysqltest.t1 (n int)ENGINE=MyISAM;
|
create temporary table mysqltest.t1 (n int)ENGINE=MyISAM;
|
||||||
create temporary table mysqltest.t2 (n int)ENGINE=MyISAM;
|
create temporary table mysqltest.t2 (n int)ENGINE=MyISAM;
|
||||||
|
|
||||||
|
disconnect con_temp;
|
||||||
|
--source include/wait_until_disconnected.inc
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
disconnect master;
|
-- let $wait_binlog_event= DROP
|
||||||
|
-- source include/wait_for_binlog_event.inc
|
||||||
connection master1;
|
|
||||||
# Wait until drop of temp tables appears in binlog
|
|
||||||
let $wait_binlog_event= DROP;
|
|
||||||
source include/wait_for_binlog_event.inc;
|
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
show status like 'Slave_open_temp_tables';
|
show status like 'Slave_open_temp_tables';
|
||||||
# Cleanup
|
# Cleanup
|
||||||
connection default;
|
connection master;
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
|
|
@ -46,12 +46,62 @@ connection master;
|
||||||
|
|
||||||
DROP EVENT event2;
|
DROP EVENT event2;
|
||||||
|
|
||||||
sync_slave_with_master;
|
#
|
||||||
|
# BUG#44331
|
||||||
|
# This test verifies if the definer is consistent between master and slave,
|
||||||
|
# when the event is created without the DEFINER clause set explicitly or the
|
||||||
|
# DEFINER is set to CURRENT_USER
|
||||||
|
#
|
||||||
|
CREATE TABLE test.t1(details CHAR(30));
|
||||||
|
|
||||||
# Doing cleanup of the table referred to in the event to guarantee
|
CREATE EVENT /*!50000 event44331_1 */
|
||||||
# that there is no bad timing cauing it to try to access the table.
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
||||||
|
ON COMPLETION PRESERVE DISABLE
|
||||||
|
DO INSERT INTO test.t1 VALUES('event event44331_1 fired - no definer');
|
||||||
|
|
||||||
|
CREATE DEFINER=CURRENT_USER /*!50000 EVENT event44331_2 */
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
||||||
|
ON COMPLETION PRESERVE DISABLE
|
||||||
|
DO INSERT INTO test.t1 VALUES('event event44331_2 fired - DEFINER=CURRENT_USER');
|
||||||
|
|
||||||
|
CREATE DEFINER=CURRENT_USER() EVENT event44331_3
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
||||||
|
ON COMPLETION PRESERVE DISABLE
|
||||||
|
DO INSERT INTO test.t1 VALUES('event event44331_3 fired - DEFINER=CURRENT_USER() function');
|
||||||
|
|
||||||
|
CREATE /*!50000 DEFINER='user44331' */ EVENT event44331_4
|
||||||
|
ON SCHEDULE AT CURRENT_TIMESTAMP
|
||||||
|
ON COMPLETION PRESERVE DISABLE
|
||||||
|
DO INSERT INTO test.t1 VALUES('event event44331_4 fired - DEFINER=user1');
|
||||||
|
|
||||||
|
--echo #on master
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_1';
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_2';
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_3';
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_4';
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
connection slave;
|
||||||
|
--echo #on slave
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_1';
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_2';
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_3';
|
||||||
|
select EVENT_SCHEMA, EVENT_NAME, DEFINER from information_schema.events
|
||||||
|
where EVENT_NAME='event44331_4';
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
SET @@global.event_scheduler= @old_event_scheduler;
|
SET @@global.event_scheduler= @old_event_scheduler;
|
||||||
DROP TABLE t28953;
|
DROP TABLE t28953;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP EVENT event44331_1;
|
||||||
|
DROP EVENT event44331_2;
|
||||||
|
DROP EVENT event44331_3;
|
||||||
|
DROP EVENT event44331_4;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
"--replicate-rewrite-db=test->rewrite" "--replicate-rewrite-db=mysqltest1->test"
|
"--replicate-rewrite-db=test->rewrite" "--replicate-rewrite-db=mysqltest1->test" "--replicate-rewrite-db=database_master_temp_01->database_slave_temp_01" "--replicate-rewrite-db=database_master_temp_02->database_slave_temp_02" "--replicate-rewrite-db=database_master_temp_03->database_slave_temp_03"
|
||||||
|
|
|
@ -76,9 +76,164 @@ connection slave;
|
||||||
# The empty line last comes from the end line field in the file
|
# The empty line last comes from the end line field in the file
|
||||||
select * from rewrite.t1;
|
select * from rewrite.t1;
|
||||||
|
|
||||||
|
set sql_log_bin= 0;
|
||||||
drop database rewrite;
|
drop database rewrite;
|
||||||
|
set sql_log_bin= 1;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
set sql_log_bin= 0;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set sql_log_bin= 1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo ****
|
||||||
|
--echo **** Bug #46861 Auto-closing of temporary tables broken by replicate-rewrite-db
|
||||||
|
--echo ****
|
||||||
|
--echo
|
||||||
|
|
||||||
|
--echo ****
|
||||||
|
--echo **** Preparing the environment
|
||||||
|
--echo ****
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
connect (con_temp_03,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||||
|
connect (con_temp_02,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||||
|
connect (con_temp_01,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
SET sql_log_bin= 0;
|
||||||
|
CREATE DATABASE database_master_temp_01;
|
||||||
|
CREATE DATABASE database_master_temp_02;
|
||||||
|
CREATE DATABASE database_master_temp_03;
|
||||||
|
SET sql_log_bin= 1;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
SET sql_log_bin= 0;
|
||||||
|
CREATE DATABASE database_slave_temp_01;
|
||||||
|
CREATE DATABASE database_slave_temp_02;
|
||||||
|
CREATE DATABASE database_slave_temp_03;
|
||||||
|
SET sql_log_bin= 1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo ****
|
||||||
|
--echo **** Creating temporary tables on different databases with different connections
|
||||||
|
--echo ****
|
||||||
|
--echo **** con_temp_01 --> creates
|
||||||
|
--echo **** t_01_01_temp on database_master_temp_01
|
||||||
|
--echo ****
|
||||||
|
--echo **** con_temp_02 --> creates
|
||||||
|
--echo **** t_01_01_temp on database_master_temp_01
|
||||||
|
--echo **** t_02_01_temp, t_02_02_temp on database_master_temp_02
|
||||||
|
--echo ****
|
||||||
|
--echo **** con_temp_02 --> creates
|
||||||
|
--echo **** t_01_01_temp on database_master_temp_01
|
||||||
|
--echo **** t_02_01_temp, t_02_02_temp on database_master_temp_02
|
||||||
|
--echo **** t_03_01_temp, t_03_02_temp, t_03_03_temp on database_master_temp_03
|
||||||
|
--echo ****
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo con_temp_01
|
||||||
|
--echo
|
||||||
|
connection con_temp_01;
|
||||||
|
USE database_master_temp_01;
|
||||||
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
||||||
|
INSERT INTO t_01_01_temp VALUES(1);
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo con_temp_02
|
||||||
|
--echo
|
||||||
|
connection con_temp_02;
|
||||||
|
USE database_master_temp_01;
|
||||||
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
||||||
|
INSERT INTO t_01_01_temp VALUES(1);
|
||||||
|
USE database_master_temp_02;
|
||||||
|
CREATE TEMPORARY TABLE t_02_01_temp(a int);
|
||||||
|
INSERT INTO t_02_01_temp VALUES(1);
|
||||||
|
CREATE TEMPORARY TABLE t_02_02_temp(a int);
|
||||||
|
INSERT INTO t_02_02_temp VALUES(1);
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo con_temp_03
|
||||||
|
--echo
|
||||||
|
connection con_temp_03;
|
||||||
|
USE database_master_temp_01;
|
||||||
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
||||||
|
INSERT INTO t_01_01_temp VALUES(1);
|
||||||
|
USE database_master_temp_02;
|
||||||
|
CREATE TEMPORARY TABLE t_02_01_temp(a int);
|
||||||
|
INSERT INTO t_02_01_temp VALUES(1);
|
||||||
|
CREATE TEMPORARY TABLE t_02_02_temp(a int);
|
||||||
|
INSERT INTO t_02_02_temp VALUES(1);
|
||||||
|
USE database_master_temp_03;
|
||||||
|
CREATE TEMPORARY TABLE t_03_01_temp(a int);
|
||||||
|
INSERT INTO t_03_01_temp VALUES(1);
|
||||||
|
CREATE TEMPORARY TABLE t_03_02_temp(a int);
|
||||||
|
INSERT INTO t_03_02_temp VALUES(1);
|
||||||
|
CREATE TEMPORARY TABLE t_03_03_temp(a int);
|
||||||
|
INSERT INTO t_03_03_temp VALUES(1);
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo **** Dropping the connections
|
||||||
|
--echo **** We want to SHOW BINLOG EVENTS, to know what was logged. But there is no
|
||||||
|
--echo **** guarantee that logging of the terminated con1 has been done yet.a To be
|
||||||
|
--echo **** sure that logging has been done, we use a user lock.
|
||||||
|
--echo
|
||||||
|
connection master;
|
||||||
|
sync_slave_with_master;
|
||||||
|
connection slave;
|
||||||
|
show status like 'Slave_open_temp_tables';
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||||
|
connection con_temp_01;
|
||||||
|
select get_lock("con_01",10);
|
||||||
|
connection master;
|
||||||
|
disconnect con_temp_01;
|
||||||
|
select get_lock("con_01",10);
|
||||||
|
|
||||||
|
connection con_temp_02;
|
||||||
|
select get_lock("con_02",10);
|
||||||
|
connection master;
|
||||||
|
disconnect con_temp_02;
|
||||||
|
select get_lock("con_02",10);
|
||||||
|
|
||||||
|
connection con_temp_03;
|
||||||
|
select get_lock("con_03",10);
|
||||||
|
connection master;
|
||||||
|
disconnect con_temp_03;
|
||||||
|
select get_lock("con_03",10);
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo **** Checking the binary log and temporary tables
|
||||||
|
--echo
|
||||||
|
connection master;
|
||||||
|
sync_slave_with_master;
|
||||||
|
connection slave;
|
||||||
|
show status like 'Slave_open_temp_tables';
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
|
||||||
|
--echo ****
|
||||||
|
--echo **** Cleaning up the test case
|
||||||
|
--echo ****
|
||||||
|
connection master;
|
||||||
|
SET sql_log_bin= 0;
|
||||||
|
DROP DATABASE database_master_temp_01;
|
||||||
|
DROP DATABASE database_master_temp_02;
|
||||||
|
DROP DATABASE database_master_temp_03;
|
||||||
|
SET sql_log_bin= 1;
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
SET sql_log_bin= 0;
|
||||||
|
DROP DATABASE database_slave_temp_01;
|
||||||
|
DROP DATABASE database_slave_temp_02;
|
||||||
|
DROP DATABASE database_slave_temp_03;
|
||||||
|
SET sql_log_bin= 1;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
# end of 5.0 tests
|
||||||
|
|
5
mysql-test/suite/rpl/t/rpl_stm_mixing_engines.test
Normal file
5
mysql-test/suite/rpl/t/rpl_stm_mixing_engines.test
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
--source include/have_binlog_format_statement.inc
|
||||||
|
--source include/master-slave.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
--source extra/rpl_tests/rpl_mixing_engines.test
|
|
@ -4,21 +4,20 @@ 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;
|
||||||
create database if not exists mysqltest1;
|
DROP TABLE IF EXISTS t1;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p1;
|
DROP TABLE IF EXISTS t2;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p2;
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t2;
|
DROP PROCEDURE IF EXISTS p2;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t1;
|
CREATE TABLE IF NOT EXISTS t1(name CHAR(16), birth DATE,PRIMARY KEY(name))ENGINE=NDBCLUSTER;
|
||||||
CREATE TABLE IF NOT EXISTS mysqltest1.t1(name CHAR(16), birth DATE,PRIMARY KEY(name))ENGINE=NDBCLUSTER;
|
CREATE TABLE IF NOT EXISTS t2(name CHAR(16), age INT ,PRIMARY KEY(name))ENGINE=NDBCLUSTER;
|
||||||
CREATE TABLE IF NOT EXISTS mysqltest1.t2(name CHAR(16), age INT ,PRIMARY KEY(name))ENGINE=NDBCLUSTER;
|
CREATE PROCEDURE p1()
|
||||||
CREATE PROCEDURE mysqltest1.p1()
|
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE done INT DEFAULT 0;
|
DECLARE done INT DEFAULT 0;
|
||||||
DECLARE spa CHAR(16);
|
DECLARE spa CHAR(16);
|
||||||
DECLARE spb INT;
|
DECLARE spb INT;
|
||||||
DECLARE cur1 CURSOR FOR SELECT name,
|
DECLARE cur1 CURSOR FOR SELECT name,
|
||||||
(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(),5)<RIGHT(birth,5))
|
(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(),5)<RIGHT(birth,5))
|
||||||
FROM mysqltest1.t1;
|
FROM t1;
|
||||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
|
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
|
||||||
OPEN cur1;
|
OPEN cur1;
|
||||||
SET AUTOCOMMIT=0;
|
SET AUTOCOMMIT=0;
|
||||||
|
@ -26,21 +25,20 @@ REPEAT
|
||||||
FETCH cur1 INTO spa, spb;
|
FETCH cur1 INTO spa, spb;
|
||||||
IF NOT done THEN
|
IF NOT done THEN
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO mysqltest1.t2 VALUES (spa,spb);
|
INSERT INTO t2 VALUES (spa,spb);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
END IF;
|
END IF;
|
||||||
UNTIL done END REPEAT;
|
UNTIL done END REPEAT;
|
||||||
SET AUTOCOMMIT=1;
|
SET AUTOCOMMIT=1;
|
||||||
CLOSE cur1;
|
CLOSE cur1;
|
||||||
END|
|
END|
|
||||||
CREATE PROCEDURE mysqltest1.p2()
|
CREATE PROCEDURE p2()
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO mysqltest1.t1 VALUES ('MySQL','1993-02-04'),('ROCKS', '1990-08-27'),('Texas', '1999-03-30'),('kyle','2005-1-1');
|
INSERT INTO t1 VALUES ('MySQL','1993-02-04'),('ROCKS', '1990-08-27'),('Texas', '1999-03-30'),('kyle','2005-1-1');
|
||||||
END|
|
END|
|
||||||
CALL mysqltest1.p2();
|
CALL p2();
|
||||||
CALL mysqltest1.p1();
|
CALL p1();
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p1;
|
DROP TABLE t1;
|
||||||
DROP PROCEDURE IF EXISTS mysqltest1.p2;
|
DROP TABLE t2;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t1;
|
DROP PROCEDURE p1;
|
||||||
DROP TABLE IF EXISTS mysqltest1.t2;
|
DROP PROCEDURE p2;
|
||||||
DROP DATABASE mysqltest1;
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ create table t2 select * from t1 procedure analyse();
|
||||||
select * from t2;
|
select * from t2;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
EXPLAIN SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE();
|
EXPLAIN SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE();
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -102,4 +103,13 @@ select f2 from t1 procedure analyse(1, 1);
|
||||||
select f3 from t1 procedure analyse(1, 1);
|
select f3 from t1 procedure analyse(1, 1);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#46184 Crash, SELECT ... FROM derived table procedure analyze
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT,b INT,c INT,d INT,e INT,f INT,g INT,h INT,i INT,j INT,k INT);
|
||||||
|
INSERT INTO t1 VALUES ();
|
||||||
|
--error ER_WRONG_USAGE
|
||||||
|
SELECT * FROM (SELECT * FROM t1) d PROCEDURE ANALYSE();
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 4.1 tests
|
--echo End of 4.1 tests
|
||||||
|
|
|
@ -1599,3 +1599,27 @@ INSERT INTO t1 VALUES (NULL, NULL),(NULL, NULL);
|
||||||
FLUSH TABLE t1;
|
FLUSH TABLE t1;
|
||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#29203 - archive tables have weird values in show table status
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT, b BLOB) ENGINE=archive;
|
||||||
|
SELECT DATA_LENGTH, AVG_ROW_LENGTH FROM
|
||||||
|
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||||
|
INSERT INTO t1 VALUES(1, 'sampleblob1'),(2, 'sampleblob2');
|
||||||
|
SELECT DATA_LENGTH, AVG_ROW_LENGTH FROM
|
||||||
|
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#46961 - archive engine loses rows during self joining select!
|
||||||
|
#
|
||||||
|
SET @save_join_buffer_size= @@join_buffer_size;
|
||||||
|
SET @@join_buffer_size= 8228;
|
||||||
|
CREATE TABLE t1(a CHAR(255)) ENGINE=archive;
|
||||||
|
INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),
|
||||||
|
('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),
|
||||||
|
('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||||
|
SELECT COUNT(t1.a) FROM t1, t1 a, t1 b, t1 c, t1 d, t1 e;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @@join_buffer_size= @save_join_buffer_size;
|
||||||
|
|
|
@ -1198,6 +1198,23 @@ CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
||||||
|
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#46384 - mysqld segfault when trying to create table with same
|
||||||
|
--echo # name as existing view
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
CREATE TABLE t2 (a INT);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
INSERT INTO t2 VALUES (1),(2),(3);
|
||||||
|
|
||||||
|
CREATE VIEW v1 AS SELECT t1.a FROM t1, t2;
|
||||||
|
--error ER_TABLE_EXISTS_ERROR
|
||||||
|
CREATE TABLE v1 AS SELECT * FROM t1;
|
||||||
|
|
||||||
|
DROP VIEW v1;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
-- source include/have_binlog_format_mixed_or_statement.inc
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||||
-- source include/have_gbk.inc
|
-- source include/have_gbk.inc
|
||||||
|
|
||||||
|
RESET MASTER;
|
||||||
SET NAMES gbk;
|
SET NAMES gbk;
|
||||||
--character_set gbk
|
--character_set gbk
|
||||||
|
|
||||||
|
|
|
@ -573,4 +573,44 @@ SELECT DISTINCT a, b, d, c FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #46159: simple query that never returns
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# Set max_heap_table_size to the minimum value so that GROUP BY table in the
|
||||||
|
# SELECT query below gets converted to MyISAM
|
||||||
|
SET @old_max_heap_table_size = @@max_heap_table_size;
|
||||||
|
SET @@max_heap_table_size = 16384;
|
||||||
|
|
||||||
|
# Set sort_buffer_size to the mininum value so that remove_duplicates() calls
|
||||||
|
# remove_dup_with_compare()
|
||||||
|
SET @old_sort_buffer_size = @@sort_buffer_size;
|
||||||
|
SET @@sort_buffer_size = 32804;
|
||||||
|
|
||||||
|
CREATE TABLE t1(c1 int, c2 VARCHAR(20));
|
||||||
|
INSERT INTO t1 VALUES (1, '1'), (1, '1'), (2, '2'), (3, '1'), (3, '1'), (4, '4');
|
||||||
|
# Now we just need to pad the table with random data so we have enough unique
|
||||||
|
# values to force conversion of the GROUP BY table to MyISAM
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
INSERT INTO t1 SELECT 5 + 10000 * RAND(), '5' FROM t1;
|
||||||
|
|
||||||
|
# First rows of the GROUP BY table that will be processed by
|
||||||
|
# remove_dup_with_compare()
|
||||||
|
SELECT c1, c2, COUNT(*) FROM t1 GROUP BY c1 LIMIT 4;
|
||||||
|
|
||||||
|
# The actual test case
|
||||||
|
SELECT DISTINCT c2 FROM t1 GROUP BY c1 HAVING COUNT(*) > 1;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @@sort_buffer_size = @old_sort_buffer_size;
|
||||||
|
SET @@max_heap_table_size = @old_max_heap_table_size;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
|
@ -135,6 +135,17 @@ EXPLAIN EXTENDED SELECT COUNT(a) FROM t1 USE KEY(a);
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#45989 memory leak after explain encounters an error in the query
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a LONGTEXT);
|
||||||
|
INSERT INTO t1 VALUES (repeat('a',@@global.max_allowed_packet));
|
||||||
|
INSERT INTO t1 VALUES (repeat('b',@@global.max_allowed_packet));
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
EXPLAIN SELECT DISTINCT 1 FROM t1,
|
||||||
|
(SELECT DISTINCTROW a AS away FROM t1 GROUP BY a WITH ROLLUP) as d1
|
||||||
|
WHERE t1.a = d1.a;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 5.0 tests.
|
# End of 5.0 tests.
|
||||||
|
|
||||||
|
|
|
@ -1291,6 +1291,19 @@ INSERT INTO t1 VALUES ('aaaaaaaa');
|
||||||
SELECT LOAD_FILE(a) FROM t1;
|
SELECT LOAD_FILE(a) FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#46815 CONCAT_WS returning wrong data
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f2 VARCHAR(20));
|
||||||
|
CREATE TABLE t2 (f2 VARCHAR(20));
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('MIN'),('MAX');
|
||||||
|
INSERT INTO t2 VALUES ('LOAD');
|
||||||
|
|
||||||
|
SELECT CONCAT_WS('_', (SELECT t2.f2 FROM t2), t1.f2) AS concat_name FROM t1;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
|
|
@ -1018,3 +1018,18 @@ DROP TABLE t;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #46607: Assertion failed: (cond_type == Item::FUNC_ITEM) results in
|
||||||
|
--echo # server crash
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t (a INT, b INT, INDEX (a,b));
|
||||||
|
INSERT INTO t VALUES (2,0), (2,0), (2,1), (2,1);
|
||||||
|
INSERT INTO t SELECT * FROM t;
|
||||||
|
|
||||||
|
SELECT a, MAX(b) FROM t WHERE b GROUP BY a;
|
||||||
|
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo End of 5.1 tests
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
# Save the initial number of concurrent sessions
|
# Save the initial number of concurrent sessions
|
||||||
--source include/count_sessions.inc
|
--source include/count_sessions.inc
|
||||||
|
|
||||||
|
SET @odl_sync_frm = @@global.sync_frm;
|
||||||
|
SET @@global.sync_frm = OFF;
|
||||||
|
|
||||||
connect (locker,localhost,root,,);
|
connect (locker,localhost,root,,);
|
||||||
connect (writer,localhost,root,,);
|
connect (writer,localhost,root,,);
|
||||||
|
|
||||||
|
@ -214,6 +217,8 @@ DROP TABLE t1;
|
||||||
--disconnect locker
|
--disconnect locker
|
||||||
--disconnect writer
|
--disconnect writer
|
||||||
|
|
||||||
|
SET @@global.sync_frm = @odl_sync_frm;
|
||||||
|
|
||||||
# End of 5.0 tests
|
# End of 5.0 tests
|
||||||
|
|
||||||
# Wait till all disconnects are completed
|
# Wait till all disconnects are completed
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
# Save the initial number of concurrent sessions
|
# Save the initial number of concurrent sessions
|
||||||
--source include/count_sessions.inc
|
--source include/count_sessions.inc
|
||||||
|
|
||||||
|
SET @odl_sync_frm = @@global.sync_frm;
|
||||||
|
SET @@global.sync_frm = OFF;
|
||||||
|
|
||||||
# Test to see if select will get the lock ahead of low priority update
|
# Test to see if select will get the lock ahead of low priority update
|
||||||
|
|
||||||
connect (locker,localhost,root,,);
|
connect (locker,localhost,root,,);
|
||||||
|
@ -136,6 +139,8 @@ DROP TABLE t1, t2, t3;
|
||||||
--disconnect locker
|
--disconnect locker
|
||||||
--disconnect writer
|
--disconnect writer
|
||||||
|
|
||||||
|
SET @@global.sync_frm = @odl_sync_frm;
|
||||||
|
|
||||||
# Wait till all disconnects are completed
|
# Wait till all disconnects are completed
|
||||||
--source include/wait_until_count_sessions.inc
|
--source include/wait_until_count_sessions.inc
|
||||||
|
|
||||||
|
|
2
mysql-test/t/lowercase_mixed_tmpdir_innodb-master.opt
Normal file
2
mysql-test/t/lowercase_mixed_tmpdir_innodb-master.opt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
--lower-case-table-names=2
|
||||||
|
--tmpdir=$MYSQLTEST_VARDIR/tmp/MixedCase
|
6
mysql-test/t/lowercase_mixed_tmpdir_innodb-master.sh
Normal file
6
mysql-test/t/lowercase_mixed_tmpdir_innodb-master.sh
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# This test requires a non-lowercase tmpdir directory on a case-sensitive
|
||||||
|
# filesystem.
|
||||||
|
|
||||||
|
d="$MYSQLTEST_VARDIR/tmp/MixedCase"
|
||||||
|
test -d "$d" || mkdir "$d"
|
||||||
|
rm -f "$d"/*
|
12
mysql-test/t/lowercase_mixed_tmpdir_innodb.test
Normal file
12
mysql-test/t/lowercase_mixed_tmpdir_innodb.test
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
--source include/have_lowercase2.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
create table t1 (id int) engine=InnoDB;
|
||||||
|
insert into t1 values (1);
|
||||||
|
create temporary table t2 engine=InnoDB select * from t1;
|
||||||
|
drop temporary table t2;
|
||||||
|
drop table t1;
|
|
@ -5,8 +5,9 @@
|
||||||
-- source include/have_cp932.inc
|
-- source include/have_cp932.inc
|
||||||
-- source include/have_log_bin.inc
|
-- source include/have_log_bin.inc
|
||||||
|
|
||||||
|
RESET MASTER;
|
||||||
|
|
||||||
# Bug#16217 (mysql client did not know how not switch its internal charset)
|
# Bug#16217 (mysql client did not know how not switch its internal charset)
|
||||||
flush logs;
|
|
||||||
create table t3 (f text character set utf8);
|
create table t3 (f text character set utf8);
|
||||||
create table t4 (f text character set cp932);
|
create table t4 (f text character set cp932);
|
||||||
--exec $MYSQL --default-character-set=utf8 test -e "insert into t3 values(_utf8'ソ')"
|
--exec $MYSQL --default-character-set=utf8 test -e "insert into t3 values(_utf8'ソ')"
|
||||||
|
@ -14,7 +15,7 @@ create table t4 (f text character set cp932);
|
||||||
flush logs;
|
flush logs;
|
||||||
rename table t3 to t03, t4 to t04;
|
rename table t3 to t03, t4 to t04;
|
||||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||||
--exec $MYSQL_BINLOG --short-form $MYSQLD_DATADIR/master-bin.000002 | $MYSQL --default-character-set=utf8
|
--exec $MYSQL_BINLOG --short-form $MYSQLD_DATADIR/master-bin.000001 | $MYSQL --default-character-set=utf8
|
||||||
# original and recovered data must be equal
|
# original and recovered data must be equal
|
||||||
select HEX(f) from t03;
|
select HEX(f) from t03;
|
||||||
select HEX(f) from t3;
|
select HEX(f) from t3;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -5,6 +5,23 @@
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#47029: Crash when reorganize partition with subpartition
|
||||||
|
#
|
||||||
|
create table t1 (a int not null,
|
||||||
|
b datetime not null,
|
||||||
|
primary key (a,b))
|
||||||
|
engine=innodb
|
||||||
|
partition by range (to_days(b))
|
||||||
|
subpartition by hash (a)
|
||||||
|
subpartitions 2
|
||||||
|
( partition p0 values less than (to_days('2009-01-01')),
|
||||||
|
partition p1 values less than (to_days('2009-02-01')),
|
||||||
|
partition p2 values less than (to_days('2009-03-01')),
|
||||||
|
partition p3 values less than maxvalue);
|
||||||
|
alter table t1 reorganize partition p1,p2 into
|
||||||
|
( partition p2 values less than (to_days('2009-03-01')));
|
||||||
|
drop table t1;
|
||||||
#
|
#
|
||||||
# Bug#40595: Non-matching rows not released with READ-COMMITTED on tables
|
# Bug#40595: Non-matching rows not released with READ-COMMITTED on tables
|
||||||
# with partitions
|
# with partitions
|
||||||
|
@ -274,3 +291,15 @@ PARTITION BY RANGE (int_column)
|
||||||
(PARTITION p1 VALUES LESS THAN (5));
|
(PARTITION p1 VALUES LESS THAN (5));
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#46483 - drop table of partitioned table may leave extraneous file
|
||||||
|
# Note: was only repeatable with InnoDB plugin
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB
|
||||||
|
PARTITION BY list(a) (PARTITION p1 VALUES IN (1));
|
||||||
|
CREATE INDEX i1 ON t1 (a);
|
||||||
|
DROP TABLE t1;
|
||||||
|
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||||
|
# Before the fix it should show extra file like #sql-2405_2.par
|
||||||
|
--list_files $MYSQLD_DATADIR/test/ *
|
||||||
|
|
|
@ -8,6 +8,357 @@
|
||||||
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;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#20577: Partitions: use of to_days() function leads to selection failures
|
||||||
|
#
|
||||||
|
--let $explain_partitions= 1;
|
||||||
|
--let $verify_without_partitions= 0;
|
||||||
|
--echo # test of RANGE and index
|
||||||
|
CREATE TABLE t1 (a DATE, KEY(a))
|
||||||
|
PARTITION BY RANGE (TO_DAYS(a))
|
||||||
|
(PARTITION `pNULL` VALUES LESS THAN (0),
|
||||||
|
PARTITION `p0001-01-01` VALUES LESS THAN (366 + 1),
|
||||||
|
PARTITION `p1001-01-01` VALUES LESS THAN (TO_DAYS('1001-01-01') + 1),
|
||||||
|
PARTITION `p2001-01-01` VALUES LESS THAN (TO_DAYS('2001-01-01') + 1));
|
||||||
|
if ($verify_without_partitions)
|
||||||
|
{
|
||||||
|
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||||
|
}
|
||||||
|
INSERT INTO t1 VALUES ('0000-00-00'), ('0000-01-02'), ('0001-01-01'),
|
||||||
|
('1001-00-00'), ('1001-01-01'), ('1002-00-00'), ('2001-01-01');
|
||||||
|
--source include/partition_date_range.inc
|
||||||
|
--echo # test without index
|
||||||
|
ALTER TABLE t1 DROP KEY a;
|
||||||
|
--source include/partition_date_range.inc
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # test of LIST and index
|
||||||
|
CREATE TABLE t1 (a DATE, KEY(a))
|
||||||
|
PARTITION BY LIST (TO_DAYS(a))
|
||||||
|
(PARTITION `p0001-01-01` VALUES IN (TO_DAYS('0001-01-01')),
|
||||||
|
PARTITION `p2001-01-01` VALUES IN (TO_DAYS('2001-01-01')),
|
||||||
|
PARTITION `pNULL` VALUES IN (NULL),
|
||||||
|
PARTITION `p0000-01-02` VALUES IN (TO_DAYS('0000-01-02')),
|
||||||
|
PARTITION `p1001-01-01` VALUES IN (TO_DAYS('1001-01-01')));
|
||||||
|
if ($verify_without_partitions)
|
||||||
|
{
|
||||||
|
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||||
|
}
|
||||||
|
INSERT INTO t1 VALUES ('0000-00-00'), ('0000-01-02'), ('0001-01-01'),
|
||||||
|
('1001-00-00'), ('1001-01-01'), ('1002-00-00'), ('2001-01-01');
|
||||||
|
--source include/partition_date_range.inc
|
||||||
|
--echo # test without index
|
||||||
|
ALTER TABLE t1 DROP KEY a;
|
||||||
|
--source include/partition_date_range.inc
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
|
||||||
|
# There is a problem when comparing DATE with DATETIME.
|
||||||
|
# In pruning it is converted into the field type
|
||||||
|
# and in row evaluation it is converted to longlong
|
||||||
|
# (like a DATETIME).
|
||||||
|
--echo # Test with DATETIME column NOT NULL
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int(10) unsigned NOT NULL,
|
||||||
|
b DATETIME NOT NULL,
|
||||||
|
PRIMARY KEY (a, b)
|
||||||
|
) PARTITION BY RANGE (TO_DAYS(b))
|
||||||
|
(PARTITION p20090401 VALUES LESS THAN (TO_DAYS('2009-04-02')),
|
||||||
|
PARTITION p20090402 VALUES LESS THAN (TO_DAYS('2009-04-03')),
|
||||||
|
PARTITION p20090403 VALUES LESS THAN (TO_DAYS('2009-04-04')),
|
||||||
|
PARTITION p20090404 VALUES LESS THAN (TO_DAYS('2009-04-05')),
|
||||||
|
PARTITION p20090405 VALUES LESS THAN MAXVALUE);
|
||||||
|
INSERT INTO t1 VALUES (1, '2009-01-01'), (1, '2009-04-01'), (2, '2009-04-01'),
|
||||||
|
(1, '2009-04-02'), (2, '2009-04-02'), (1, '2009-04-02 23:59:59'),
|
||||||
|
(1, '2009-04-03'), (2, '2009-04-03'), (1, '2009-04-04'), (2, '2009-04-04'),
|
||||||
|
(1, '2009-04-05'), (1, '2009-04-06'), (1, '2009-04-07');
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Test with DATE column NOT NULL
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int(10) unsigned NOT NULL,
|
||||||
|
b DATE NOT NULL,
|
||||||
|
PRIMARY KEY (a, b)
|
||||||
|
) PARTITION BY RANGE (TO_DAYS(b))
|
||||||
|
(PARTITION p20090401 VALUES LESS THAN (TO_DAYS('2009-04-02')),
|
||||||
|
PARTITION p20090402 VALUES LESS THAN (TO_DAYS('2009-04-03')),
|
||||||
|
PARTITION p20090403 VALUES LESS THAN (TO_DAYS('2009-04-04')),
|
||||||
|
PARTITION p20090404 VALUES LESS THAN (TO_DAYS('2009-04-05')),
|
||||||
|
PARTITION p20090405 VALUES LESS THAN MAXVALUE);
|
||||||
|
INSERT INTO t1 VALUES (1, '2009-01-01'), (1, '2009-04-01'), (2, '2009-04-01'),
|
||||||
|
(1, '2009-04-02'), (2, '2009-04-02'), (1, '2009-04-03'), (2, '2009-04-03'),
|
||||||
|
(1, '2009-04-04'), (2, '2009-04-04'), (1, '2009-04-05'), (1, '2009-04-06'),
|
||||||
|
(1, '2009-04-07');
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Test with DATETIME column NULL
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int(10) unsigned NOT NULL,
|
||||||
|
b DATETIME NULL
|
||||||
|
) PARTITION BY RANGE (TO_DAYS(b))
|
||||||
|
(PARTITION p20090401 VALUES LESS THAN (TO_DAYS('2009-04-02')),
|
||||||
|
PARTITION p20090402 VALUES LESS THAN (TO_DAYS('2009-04-03')),
|
||||||
|
PARTITION p20090403 VALUES LESS THAN (TO_DAYS('2009-04-04')),
|
||||||
|
PARTITION p20090404 VALUES LESS THAN (TO_DAYS('2009-04-05')),
|
||||||
|
PARTITION p20090405 VALUES LESS THAN MAXVALUE);
|
||||||
|
INSERT INTO t1 VALUES (1, '2009-01-01'), (1, '2009-04-01'), (2, '2009-04-01'),
|
||||||
|
(1, '2009-04-02'), (2, '2009-04-02'), (1, '2009-04-02 23:59:59'),
|
||||||
|
(1, '2009-04-03'), (2, '2009-04-03'), (1, '2009-04-04'), (2, '2009-04-04'),
|
||||||
|
(1, '2009-04-05'), (1, '2009-04-06'), (1, '2009-04-07');
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Test with DATE column NULL
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int(10) unsigned NOT NULL,
|
||||||
|
b DATE NULL
|
||||||
|
) PARTITION BY RANGE (TO_DAYS(b))
|
||||||
|
(PARTITION p20090401 VALUES LESS THAN (TO_DAYS('2009-04-02')),
|
||||||
|
PARTITION p20090402 VALUES LESS THAN (TO_DAYS('2009-04-03')),
|
||||||
|
PARTITION p20090403 VALUES LESS THAN (TO_DAYS('2009-04-04')),
|
||||||
|
PARTITION p20090404 VALUES LESS THAN (TO_DAYS('2009-04-05')),
|
||||||
|
PARTITION p20090405 VALUES LESS THAN MAXVALUE);
|
||||||
|
INSERT INTO t1 VALUES (1, '2009-01-01'), (1, '2009-04-01'), (2, '2009-04-01'),
|
||||||
|
(1, '2009-04-02'), (2, '2009-04-02'), (1, '2009-04-03'), (2, '2009-04-03'),
|
||||||
|
(1, '2009-04-04'), (2, '2009-04-04'), (1, '2009-04-05'), (1, '2009-04-06'),
|
||||||
|
(1, '2009-04-07');
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > CAST('2009-04-03' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-02 23:59:59' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > CAST('2009-04-03' AS DATE);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-03 00:00:00';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-02 23:59:59';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b <= '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b = '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b >= '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b > '2009-04-03';
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-03 00:00:01' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b < CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b <= CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b = CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b >= CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1
|
||||||
|
WHERE b > CAST('2009-04-02 23:59:58' AS DATETIME);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # For better code coverage of the patch
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int(10) unsigned NOT NULL,
|
||||||
|
b DATE
|
||||||
|
) PARTITION BY RANGE ( TO_DAYS(b) )
|
||||||
|
(PARTITION p20090401 VALUES LESS THAN (TO_DAYS('2009-04-02')),
|
||||||
|
PARTITION p20090402 VALUES LESS THAN (TO_DAYS('2009-04-03')),
|
||||||
|
PARTITION p20090403 VALUES LESS THAN (TO_DAYS('2009-04-04')),
|
||||||
|
PARTITION p20090404 VALUES LESS THAN (TO_DAYS('2009-04-05')),
|
||||||
|
PARTITION p20090405 VALUES LESS THAN MAXVALUE);
|
||||||
|
INSERT INTO t1 VALUES (1, '2009-01-01'), (2, NULL);
|
||||||
|
--echo # test with an invalid date, which lead to item->null_value is set.
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE b < CAST('2009-04-99' AS DATETIME);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#40972: some sql execution lead the whole database crashing
|
# Bug#40972: some sql execution lead the whole database crashing
|
||||||
#
|
#
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
# Non-windows specific ps tests.
|
# Non-windows specific ps tests.
|
||||||
--source include/not_windows.inc
|
--source include/not_windows.inc
|
||||||
|
# requires dynamic loading
|
||||||
|
--source include/have_dynamic_loading.inc
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #20665: All commands supported in Stored Procedures should work in
|
# Bug #20665: All commands supported in Stored Procedures should work in
|
||||||
|
|
|
@ -8242,6 +8242,28 @@ while ($tab_count)
|
||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #46629: Item_in_subselect::val_int(): Assertion `0'
|
||||||
|
--echo # on subquery inside a SP
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
CREATE TABLE t2(a INT, b INT PRIMARY KEY);
|
||||||
|
|
||||||
|
DELIMITER |;
|
||||||
|
CREATE PROCEDURE p1 ()
|
||||||
|
BEGIN
|
||||||
|
SELECT a FROM t1 A WHERE A.b IN (SELECT b FROM t2 AS B);
|
||||||
|
END|
|
||||||
|
DELIMITER ;|
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
CALL p1;
|
||||||
|
--error ER_BAD_FIELD_ERROR
|
||||||
|
CALL p1;
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
|
||||||
--echo # ------------------------------------------------------------------
|
--echo # ------------------------------------------------------------------
|
||||||
--echo # -- End of 5.1 tests
|
--echo # -- End of 5.1 tests
|
||||||
--echo # ------------------------------------------------------------------
|
--echo # ------------------------------------------------------------------
|
||||||
|
|
|
@ -30,7 +30,7 @@ SELECT 1 IN (SELECT 1);
|
||||||
SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||||
-- error ER_WRONG_USAGE
|
-- error ER_WRONG_USAGE
|
||||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||||
-- error ER_WRONG_PARAMETERS_TO_PROCEDURE
|
-- error ER_WRONG_USAGE
|
||||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||||
-- error ER_BAD_FIELD_ERROR
|
-- error ER_BAD_FIELD_ERROR
|
||||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||||
|
@ -3336,6 +3336,38 @@ EXPLAIN EXTENDED SELECT * FROM C WHERE `int_key` IN (SELECT `int_nokey`);
|
||||||
DROP TABLE C;
|
DROP TABLE C;
|
||||||
--echo # End of test for bug#45061.
|
--echo # End of test for bug#45061.
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #46749: Segfault in add_key_fields() with outer subquery level
|
||||||
|
--echo # field references
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
UNIQUE (a), KEY (b)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,1);
|
||||||
|
|
||||||
|
CREATE TABLE st1 like t1;
|
||||||
|
INSERT INTO st1 VALUES (1,1), (2,1);
|
||||||
|
|
||||||
|
CREATE TABLE st2 like t1;
|
||||||
|
INSERT INTO st2 VALUES (1,1), (2,1);
|
||||||
|
|
||||||
|
# should have "impossible where"
|
||||||
|
EXPLAIN
|
||||||
|
SELECT MAX(b), (SELECT COUNT(*) FROM st1,st2 WHERE st2.b <= t1.b)
|
||||||
|
FROM t1
|
||||||
|
WHERE a = 230;
|
||||||
|
|
||||||
|
# should not crash
|
||||||
|
SELECT MAX(b), (SELECT COUNT(*) FROM st1,st2 WHERE st2.b <= t1.b)
|
||||||
|
FROM t1
|
||||||
|
WHERE a = 230;
|
||||||
|
|
||||||
|
DROP TABLE t1, st1, st2;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
32
mysql-test/t/subselect4.test
Normal file
32
mysql-test/t/subselect4.test
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# General purpose bug fix tests go here : subselect.test too large
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #46791: Assertion failed:(table->key_read==0),function unknown
|
||||||
|
--echo # function,file sql_base.cc
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT, b INT, KEY(a));
|
||||||
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
||||||
|
CREATE TABLE t2 LIKE t1;
|
||||||
|
INSERT INTO t2 VALUES (1,1),(2,2);
|
||||||
|
CREATE TABLE t3 LIKE t1;
|
||||||
|
|
||||||
|
--echo # should have 1 impossible where and 2 dependent subqueries
|
||||||
|
EXPLAIN
|
||||||
|
SELECT 1 FROM t1
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE 1 = (SELECT MIN(t2.b) FROM t3))
|
||||||
|
ORDER BY count(*);
|
||||||
|
|
||||||
|
--echo # should not crash the next statement
|
||||||
|
SELECT 1 FROM t1
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE 1 = (SELECT MIN(t2.b) FROM t3))
|
||||||
|
ORDER BY count(*);
|
||||||
|
|
||||||
|
--echo # should not crash: the crash is caused by the previous statement
|
||||||
|
SELECT 1;
|
||||||
|
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
|
|
||||||
|
--echo End of 5.0 tests.
|
|
@ -436,4 +436,16 @@ SELECT * FROM t2 WHERE a = sequence();
|
||||||
DROP FUNCTION sequence;
|
DROP FUNCTION sequence;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#46259: 5.0.83 -> 5.1.36, query doesn't work
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 ( a INT );
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1), (2), (3);
|
||||||
|
|
||||||
|
SELECT IF( a = 1, a, a ) AS `b` FROM t1 ORDER BY field( `b` + 1, 1 );
|
||||||
|
SELECT IF( a = 1, a, a ) AS `b` FROM t1 ORDER BY field( `b`, 1 );
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
|
@ -225,4 +225,11 @@ insert into t2 values(@q);
|
||||||
|
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#42364 SHOW ERRORS returns empty resultset after dropping non existent table
|
||||||
|
#
|
||||||
|
--error ER_BAD_TABLE_ERROR
|
||||||
|
DROP TABLE t1;
|
||||||
|
SHOW ERRORS;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue