merge
This commit is contained in:
commit
e3f89e5dba
2
README
2
README
@ -5,7 +5,7 @@ For the avoidance of doubt, this particular copy of the software
|
||||
is released under the version 2 of the GNU General Public License.
|
||||
MySQL is brought to you by the MySQL team at Oracle.
|
||||
|
||||
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
License information can be found in the COPYING file.
|
||||
|
||||
|
@ -28,11 +28,13 @@ typedef struct st_line_buffer
|
||||
uint eof;
|
||||
ulong max_size;
|
||||
ulong read_length; /* Length of last read string */
|
||||
int error;
|
||||
bool truncated;
|
||||
} LINE_BUFFER;
|
||||
|
||||
extern LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file);
|
||||
extern LINE_BUFFER *batch_readline_command(LINE_BUFFER *buffer, char * str);
|
||||
extern char *batch_readline(LINE_BUFFER *buffer, bool *truncated);
|
||||
extern char *batch_readline(LINE_BUFFER *buffer);
|
||||
extern void batch_readline_end(LINE_BUFFER *buffer);
|
||||
|
||||
#endif /* CLIENT_MY_READLINE_INCLUDED */
|
||||
|
@ -1127,6 +1127,8 @@ int main(int argc,char *argv[])
|
||||
if (status.batch && !status.line_buff &&
|
||||
!(status.line_buff= batch_readline_init(MAX_BATCH_BUFFER_SIZE, stdin)))
|
||||
{
|
||||
put_info("Can't initialize batch_readline - may be the input source is "
|
||||
"a directory or a block device.", INFO_ERROR, 0);
|
||||
free_defaults(defaults_argv);
|
||||
my_end(0);
|
||||
exit(1);
|
||||
@ -1839,14 +1841,13 @@ static int read_and_execute(bool interactive)
|
||||
ulong line_number=0;
|
||||
bool ml_comment= 0;
|
||||
COMMANDS *com;
|
||||
bool truncated= 0;
|
||||
status.exit_status=1;
|
||||
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (!interactive)
|
||||
{
|
||||
line=batch_readline(status.line_buff, &truncated);
|
||||
line=batch_readline(status.line_buff);
|
||||
/*
|
||||
Skip UTF8 Byte Order Marker (BOM) 0xEFBBBF.
|
||||
Editors like "notepad" put this marker in
|
||||
@ -1909,9 +1910,13 @@ static int read_and_execute(bool interactive)
|
||||
if (opt_outfile && line)
|
||||
fprintf(OUTFILE, "%s\n", line);
|
||||
}
|
||||
if (!line) // End of file
|
||||
// End of file or system error
|
||||
if (!line)
|
||||
{
|
||||
status.exit_status=0;
|
||||
if (status.line_buff && status.line_buff->error)
|
||||
status.exit_status= 1;
|
||||
else
|
||||
status.exit_status= 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1932,7 +1937,8 @@ static int read_and_execute(bool interactive)
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
if (add_line(glob_buffer,line,&in_string,&ml_comment, truncated))
|
||||
if (add_line(glob_buffer, line, &in_string, &ml_comment,
|
||||
status.line_buff ? status.line_buff->truncated : 0))
|
||||
break;
|
||||
}
|
||||
/* if in batch mode, send last query even if it doesn't end with \g or go */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
|
||||
|
||||
/*
|
||||
mysqltest
|
||||
@ -7555,8 +7555,12 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command,
|
||||
|
||||
mysql_free_result(res); /* Free normal result set with meta data */
|
||||
|
||||
/* Clear prepare warnings */
|
||||
dynstr_set(&ds_prepare_warnings, NULL);
|
||||
/*
|
||||
Clear prepare warnings if there are execute warnings,
|
||||
since they are probably duplicated.
|
||||
*/
|
||||
if (ds_execute_warnings.length || mysql->warning_count)
|
||||
dynstr_set(&ds_prepare_warnings, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -18,18 +18,28 @@
|
||||
#include <my_global.h>
|
||||
#include <my_sys.h>
|
||||
#include <m_string.h>
|
||||
#include <my_dir.h>
|
||||
#include "my_readline.h"
|
||||
|
||||
static bool init_line_buffer(LINE_BUFFER *buffer,File file,ulong size,
|
||||
ulong max_size);
|
||||
static bool init_line_buffer_from_string(LINE_BUFFER *buffer,char * str);
|
||||
static size_t fill_buffer(LINE_BUFFER *buffer);
|
||||
static char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated);
|
||||
static char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length);
|
||||
|
||||
|
||||
LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
|
||||
{
|
||||
LINE_BUFFER *line_buff;
|
||||
MY_STAT input_file_stat;
|
||||
|
||||
#ifndef __WIN__
|
||||
if (my_fstat(fileno(file), &input_file_stat, MYF(MY_WME)) ||
|
||||
MY_S_ISDIR(input_file_stat.st_mode) ||
|
||||
MY_S_ISBLK(input_file_stat.st_mode))
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
if (!(line_buff=(LINE_BUFFER*)
|
||||
my_malloc(sizeof(*line_buff),MYF(MY_WME | MY_ZEROFILL))))
|
||||
return 0;
|
||||
@ -42,13 +52,12 @@ LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
|
||||
}
|
||||
|
||||
|
||||
char *batch_readline(LINE_BUFFER *line_buff, bool *truncated)
|
||||
char *batch_readline(LINE_BUFFER *line_buff)
|
||||
{
|
||||
char *pos;
|
||||
ulong out_length;
|
||||
DBUG_ASSERT(truncated != NULL);
|
||||
|
||||
if (!(pos=intern_read_line(line_buff,&out_length, truncated)))
|
||||
if (!(pos=intern_read_line(line_buff, &out_length)))
|
||||
return 0;
|
||||
if (out_length && pos[out_length-1] == '\n')
|
||||
if (--out_length && pos[out_length-1] == '\r') /* Remove '\n' */
|
||||
@ -162,7 +171,10 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
|
||||
if (!(buffer->buffer = (char*) my_realloc(buffer->buffer,
|
||||
buffer->bufread+1,
|
||||
MYF(MY_WME | MY_FAE))))
|
||||
return (uint) -1;
|
||||
{
|
||||
buffer->error= my_errno;
|
||||
return (size_t) -1;
|
||||
}
|
||||
buffer->start_of_line=buffer->buffer+start_offset;
|
||||
buffer->end=buffer->buffer+bufbytes;
|
||||
}
|
||||
@ -177,7 +189,10 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
|
||||
/* Read in new stuff. */
|
||||
if ((read_count= my_read(buffer->file, (uchar*) buffer->end, read_count,
|
||||
MYF(MY_WME))) == MY_FILE_ERROR)
|
||||
{
|
||||
buffer->error= my_errno;
|
||||
return (size_t) -1;
|
||||
}
|
||||
|
||||
DBUG_PRINT("fill_buff", ("Got %lu bytes", (ulong) read_count));
|
||||
|
||||
@ -198,8 +213,7 @@ static size_t fill_buffer(LINE_BUFFER *buffer)
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated)
|
||||
char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length)
|
||||
{
|
||||
char *pos;
|
||||
size_t length;
|
||||
@ -214,22 +228,25 @@ char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated)
|
||||
if (pos == buffer->end)
|
||||
{
|
||||
/*
|
||||
fill_buffer() can return 0 either on EOF in which case we abort
|
||||
or when the internal buffer has hit the size limit. In the latter case
|
||||
return what we have read so far and signal string truncation.
|
||||
fill_buffer() can return NULL on EOF (in which case we abort),
|
||||
on error, or when the internal buffer has hit the size limit.
|
||||
In the latter case return what we have read so far and signal
|
||||
string truncation.
|
||||
*/
|
||||
if (!(length=fill_buffer(buffer)) || length == (uint) -1)
|
||||
if (!(length= fill_buffer(buffer)))
|
||||
{
|
||||
if (buffer->eof)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
else if (length == (size_t) -1)
|
||||
DBUG_RETURN(NULL);
|
||||
else
|
||||
continue;
|
||||
pos--; /* break line here */
|
||||
*truncated= 1;
|
||||
buffer->truncated= 1;
|
||||
}
|
||||
else
|
||||
*truncated= 0;
|
||||
buffer->truncated= 0;
|
||||
buffer->end_of_line=pos+1;
|
||||
*out_length=(ulong) (pos + 1 - buffer->eof - buffer->start_of_line);
|
||||
DBUG_RETURN(buffer->start_of_line);
|
||||
|
@ -614,4 +614,9 @@
|
||||
#define PROTOCOL_VERSION 10
|
||||
|
||||
|
||||
/* time_t related defines */
|
||||
|
||||
#cmakedefine SIZEOF_TIME_T @SIZEOF_TIME_T@
|
||||
#cmakedefine TIME_T_UNSIGNED @TIME_T_UNSIGNED@
|
||||
|
||||
#endif
|
||||
|
@ -574,6 +574,7 @@ MY_CHECK_TYPE_SIZE(uint32 UINT32)
|
||||
MY_CHECK_TYPE_SIZE(u_int32_t U_INT32_T)
|
||||
MY_CHECK_TYPE_SIZE(int64 INT64)
|
||||
MY_CHECK_TYPE_SIZE(uint64 UINT64)
|
||||
MY_CHECK_TYPE_SIZE(time_t TIME_T)
|
||||
SET (CMAKE_EXTRA_INCLUDE_FILES sys/types.h)
|
||||
MY_CHECK_TYPE_SIZE(bool BOOL)
|
||||
SET(CMAKE_EXTRA_INCLUDE_FILES)
|
||||
@ -593,6 +594,16 @@ ENDIF()
|
||||
# Code tests
|
||||
#
|
||||
|
||||
# check whether time_t is unsigned
|
||||
CHECK_C_SOURCE_COMPILES("
|
||||
int main()
|
||||
{
|
||||
int array[(((time_t)-1) > 0) ? 1 : -1];
|
||||
return 0;
|
||||
}"
|
||||
TIME_T_UNSIGNED)
|
||||
|
||||
|
||||
CHECK_C_SOURCE_COMPILES("
|
||||
#ifdef _WIN32
|
||||
#include <winsock2.h>
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
|
||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -104,7 +104,7 @@ typedef struct my_aio_result {
|
||||
#define ME_HOLDTANG 8 /* Don't delete last keys */
|
||||
#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */
|
||||
#define ME_WAITTANG 32 /* Wait for a user action */
|
||||
#define ME_NOREFRESH 64 /* Dont refresh screen */
|
||||
#define ME_NOREFRESH 64 /* Write the error message to error log */
|
||||
#define ME_NOINPUT 128 /* Dont use the input libary */
|
||||
#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */
|
||||
#define ME_COLOUR2 ((2 << ME_HIGHBYTE))
|
||||
|
@ -50,6 +50,19 @@ typedef long my_time_t;
|
||||
/* two-digit years < this are 20..; >= this are 19.. */
|
||||
#define YY_PART_YEAR 70
|
||||
|
||||
/*
|
||||
check for valid times only if the range of time_t is greater than
|
||||
the range of my_time_t
|
||||
*/
|
||||
#if SIZEOF_TIME_T > 4 || defined(TIME_T_UNSIGNED)
|
||||
# define IS_TIME_T_VALID_FOR_TIMESTAMP(x) \
|
||||
((x) <= TIMESTAMP_MAX_VALUE && \
|
||||
(x) >= TIMESTAMP_MIN_VALUE)
|
||||
#else
|
||||
# define IS_TIME_T_VALID_FOR_TIMESTAMP(x) \
|
||||
((x) >= TIMESTAMP_MIN_VALUE)
|
||||
#endif
|
||||
|
||||
/* Flags to str_to_datetime */
|
||||
#define TIME_FUZZY_DATE 1
|
||||
#define TIME_DATETIME_ONLY 2
|
||||
|
@ -1,5 +1,15 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=ps_row --vardir=var-ps_row --ps-protocol --mysqld=--binlog-format=row
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=embedded --vardir=var-emebbed --embedded
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=rpl_binlog_row --vardir=var-rpl_binlog_row --mysqld=--binlog-format=row --suite=rpl,binlog --skip-ndb
|
||||
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=normal --vardir=var-normal --report-features
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=row --vardir=var-row --mysqld=--binlog-format=row
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=ps_row --vardir=var-ps_row --mysqld=--binlog-format=row --ps-protocol
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=embedded --vardir=var-embedded --embedded
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=ps --vardir=var-ps --ps-protocol
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=ps_funcs1 --vardir=var-ps_funcs_1 --suite=funcs_1 --ps-protocol
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=funcs2 --vardir=var-funcs2 --suite=funcs_2
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=partitions --vardir=var-parts --suite=parts
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=stress --vardir=var-stress --suite=stress
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=jp --vardir=var-jp --suite=jp
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=nist --vardir=var-nist --suite=nist
|
||||
perl mysql-test-run.pl --force --timer --debug-server --parallel=auto --experimental=collections/default.experimental --comment=nist+ps --vardir=var-ps_nist --suite=nist --ps-protocol
|
||||
|
@ -8,7 +8,6 @@ funcs_1.charset_collation_1 # depends on compile-time decisions
|
||||
innodb.innodb_information_schema # Bug#48883 2010-05-11 alik Test "innodb_information_schema" takes fewer locks than expected
|
||||
|
||||
main.func_math @freebsd # Bug#43020 2010-05-04 alik main.func_math fails on FreeBSD in PB2
|
||||
main.gis # Bug#52208 2010-11-24 alik gis fails on some platforms (Solaris, HP-UX, Linux)
|
||||
main.gis-rtree @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
||||
main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_multi_bug38499 times out sporadically
|
||||
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
|
||||
@ -25,6 +24,11 @@ sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Severa
|
||||
sys_vars.plugin_dir_basic # Bug#52223 2010-11-24 alik Test "plugin_dir_basic" does not support RPM build (test) directory structure
|
||||
sys_vars.slow_query_log_func @solaris # Bug#54819 2010-06-26 alik sys_vars.slow_query_log_func fails sporadically on Solaris 10
|
||||
sys_vars.wait_timeout_func # Bug#41255 2010-04-26 alik wait_timeout_func fails
|
||||
sys_vars.sys_vars # Bug #59148 2011-01-10 joro 'INSTALL PLUGIN rpl_semi_sync_master' fails in release build with debug binaries
|
||||
sys_vars.rpl_semi_sync_master_enabled_basic # Bug #59148 2011-01-10 joro 'INSTALL PLUGIN rpl_semi_sync_master' fails in release build with debug binaries
|
||||
sys_vars.rpl_semi_sync_master_timeout_basic # Bug #59148 2011-01-10 joro 'INSTALL PLUGIN rpl_semi_sync_master' fails in release build with debug binaries
|
||||
sys_vars.rpl_semi_sync_master_trace_level_basic # Bug #59148 2011-01-10 joro 'INSTALL PLUGIN rpl_semi_sync_master' fails in release build with debug binaries
|
||||
sys_vars.rpl_semi_sync_master_wait_no_slave_basic # Bug #59148 2011-01-10 joro 'INSTALL PLUGIN rpl_semi_sync_master' fails in release build with debug binaries
|
||||
|
||||
# BUG #59055 : All ndb tests should be removed from the repository
|
||||
# Leaving the sys_vars tests for now. sys_vars.all_vars.test fails on removing ndb tests
|
||||
|
11
mysql-test/collections/default.release
Normal file
11
mysql-test/collections/default.release
Normal file
@ -0,0 +1,11 @@
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=debug --vardir=var-debug --skip-ndbcluster --skip-rpl --report-features --debug-server
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=normal --vardir=var-normal --skip-ndbcluster --report-features
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=ps --vardir=var-ps --skip-ndbcluster --ps-protocol
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=funcs1+ps --vardir=var-funcs_1_ps --suite=funcs_1 --ps-protocol
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=funcs2 --vardir=var-funcs2 --suite=funcs_2
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=partitions --vardir=var-parts --suite=parts
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=stress --vardir=var-stress --suite=stress
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=jp --vardir=var-jp --suite=jp
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=embedded --vardir=var-embedded --embedded-server --skip-rpl --skip-ndbcluster
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=nist --vardir=var-nist --suite=nist
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --experimental=collections/default.experimental --comment=nist+ps --vardir=var-nist_ps --suite=nist --ps-protocol
|
@ -1,8 +1,7 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=1st --experimental=collections/default.experimental 1st
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=big-tests --experimental=collections/default.experimental --vardir=var-big-tests --big-test --testcase-timeout=60 --suite-timeout=600 main.alter_table-big main.archive-big main.count_distinct3 main.create-big main.events_stress main.events_time_zone main.information_schema-big main.log_tables-big main.merge-big main.mysqlbinlog_row_big main.read_many_rows_innodb main.ssl-big main.sum_distinct-big main.type_newdecimal-big main.variables-big parts.part_supported_sql_func_innodb parts.partition_alter1_1_2_innodb parts.partition_alter1_2_innodb parts.partition_alter2_1_1_innodb parts.partition_alter2_1_2_innodb parts.partition_alter2_2_2_innodb parts.partition_alter4_innodb funcs_1.myisam_views-big
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=eits-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=eits-rpl-binlog-row-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=row
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=eits-rpl-binlog-mixed-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=mixed
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=eits-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=eits-rpl-binlog-row-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=row
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=eits-rpl-binlog-mixed-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=mixed
|
||||
perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=big-tests --experimental=collections/default.experimental --vardir=var-big-tests --big-test --testcase-timeout=60 --suite-timeout=600 main.alter_table-big main.archive-big main.count_distinct3 main.create-big main.events_stress main.events_time_zone main.information_schema-big main.log_tables-big main.merge-big main.mysqlbinlog_row_big main.read_many_rows_innodb main.ssl-big main.sum_distinct-big main.type_newdecimal-big main.variables-big parts.part_supported_sql_func_innodb parts.partition_alter1_1_2_innodb parts.partition_alter1_2_innodb parts.partition_alter2_1_1_innodb parts.partition_alter2_1_2_innodb parts.partition_alter2_2_2_innodb parts.partition_alter4_innodb funcs_1.myisam_views-big
|
||||
perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam
|
||||
perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=row
|
||||
perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-myisam-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-myisam-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=myisam --do-test=rpl --mysqld=--binlog-format=mixed
|
||||
perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-stmt-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb
|
||||
perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-row-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-row-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=row
|
||||
perl mysql-test-run.pl --timer --force --debug-server --parallel=auto --comment=eits-rpl-binlog-mixed-tests-innodb-engine --experimental=collections/default.experimental --vardir=var-binlog-mixed-eits-tests-innodb-engine --suite=engines/iuds,engines/funcs --suite-timeout=500 --max-test-fail=0 --retry-failure=0 --mysqld=--default-storage-engine=innodb --mysqld=--innodb --do-test=rpl --mysqld=--binlog-format=mixed
|
||||
|
@ -1,5 +0,0 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=ps_row --vardir=var-ps_row --ps-protocol --mysqld=--binlog-format=row --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=embedded --vardir=var-emebbed --embedded --experimental=collections/default.experimental --skip-ndb
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=rpl_binlog_row --vardir=var-rpl_binlog_row --suite=rpl,binlog --mysqld=--binlog-format=row --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1 --experimental=collections/default.experimental --skip-ndb
|
@ -1,5 +0,0 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=ps_row --vardir=var-ps_row --ps-protocol --mysqld=--binlog-format=row
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=embedded --vardir=var-emebbed --embedded
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=rpl_binlog_row --vardir=var-rpl_binlog_row --mysqld=--binlog-format=row --suite=rpl,binlog --skip-ndb
|
@ -1,4 +0,0 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=main_ps_row --vardir=var-main-ps_row --suite=main --ps-protocol --mysqld=--binlog-format=row --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=main_embedded --vardir=var-main_emebbed --suite=main --embedded --experimental=collections/default.experimental --skip-ndb
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1 --experimental=collections/default.experimental --skip-ndb
|
@ -1,5 +0,0 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=ps_row --vardir=var-ps_row --ps-protocol --mysqld=--binlog-format=row --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=embedded --vardir=var-emebbed --embedded --experimental=collections/default.experimental --skip-ndb
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=rpl_binlog_row --vardir=var-rpl_binlog_row --suite=rpl,binlog --mysqld=--binlog-format=row --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1 --experimental=collections/default.experimental --skip-ndb
|
@ -1,5 +0,0 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=ps_row --vardir=var-ps_row --ps-protocol --mysqld=--binlog-format=row --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=embedded --vardir=var-emebbed --embedded --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=rpl_binlog_row --vardir=var-rpl_binlog_row --mysqld=--binlog-format=row --suite=rpl,binlog --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1
|
@ -1,5 +0,0 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed --suite=main,binlog,innodb,rpl,sys_vars,perfschema --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=ps_row --vardir=var-ps_row --ps-protocol --mysqld=--binlog-format=row --suite=main,binlog,innodb,rpl,sys_vars,perfschema --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=embedded --vardir=var-emebbed --embedded --suite=main,binlog,innodb,rpl,sys_vars,perfschema
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=rpl_binlog_row --vardir=var-rpl_binlog_row --mysqld=--binlog-format=row --suite=rpl,binlog --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1
|
@ -1,5 +0,0 @@
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=n_mix --vardir=var-n_mix --mysqld=--binlog-format=mixed --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=ps_row --vardir=var-ps_row --ps-protocol --mysqld=--binlog-format=row --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=embedded --vardir=var-emebbed --embedded --suite=main,binlog,innodb,federated,rpl,sys_vars,perfschema
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=rpl_binlog_row --vardir=var-rpl_binlog_row --mysqld=--binlog-format=row --suite=rpl,binlog --skip-test-list=collections/disabled-per-push.list
|
||||
perl mysql-test-run.pl --timer --force --parallel=auto --experimental=collections/default.experimental --comment=funcs_1 --vardir=var-funcs_1 --suite=funcs_1
|
@ -1,10 +0,0 @@
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=normal --skip-ndbcluster --report-features --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=ps --skip-ndbcluster --ps-protocol --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=funcs1+ps --suite=funcs_1 --ps-protocol --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=funcs2 --suite=funcs_2 --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=partitions --suite=parts --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=stress --suite=stress --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=jp --suite=jp --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=embedded --embedded-server --skip-rpl --skip-ndbcluster --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=nist --suite=nist --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=nist+ps --suite=nist --ps-protocol --experimental=collections/default.experimental
|
@ -1 +0,0 @@
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=debug --skip-ndbcluster --skip-rpl --report-features --experimental=collections/default.experimental
|
@ -1,2 +0,0 @@
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=ps --skip-ndbcluster --ps-protocol --report-features --experimental=collections/default.experimental
|
||||
perl mysql-test-run.pl --force --timer --parallel=auto --comment=stress --suite=stress --experimental=collections/default.experimental
|
59
mysql-test/extra/rpl_tests/rpl_insert_duplicate.test
Normal file
59
mysql-test/extra/rpl_tests/rpl_insert_duplicate.test
Normal file
@ -0,0 +1,59 @@
|
||||
# BUG#59338 Inconsistency in binlog for statements that don't change any rows STATEMENT SBR
|
||||
# In SBR, if a statement does not fail, it is always written to the binary log,
|
||||
# regardless if rows are changed or not. If there is a failure, a statement is
|
||||
# only written to the binary log if a non-transactional (.e.g. MyIsam) engine
|
||||
# is updated. INSERT ON DUPLICATE KEY UPDATE was not following the rule above
|
||||
# and was not written to the binary log, if then engine was Innodb.
|
||||
#
|
||||
# In this test case, we check if INSERT ON DUPLICATE KEY UPDATE that does not
|
||||
# change anything is still written to the binary log.
|
||||
|
||||
# Prepare environment
|
||||
--connection master
|
||||
|
||||
eval CREATE TABLE t1 (
|
||||
a INT UNSIGNED NOT NULL PRIMARY KEY
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
eval CREATE TABLE t2 (
|
||||
a INT UNSIGNED
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
||||
# An insert duplicate that does not update anything must be written to the binary
|
||||
# log in SBR and MIXED modes. We check this property by summing a before and after
|
||||
# the update and comparing the binlog positions. The sum should be the same at both
|
||||
# points and the statement should be in the binary log.
|
||||
--let $binlog_file= query_get_value("SHOW MASTER STATUS", File, 1)
|
||||
--let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1)
|
||||
--let $statement_file=INSERT INTO t1 SELECT t2.a FROM t2 ORDER BY t2.a ON DUPLICATE KEY UPDATE t1.a= t1.a
|
||||
--eval $statement_file
|
||||
|
||||
--let $assert_cond= SUM(a) = 1 FROM t1
|
||||
--let $assert_text= Sum of elements in t1 should be 1.
|
||||
--source include/assert.inc
|
||||
|
||||
if (`SELECT @@BINLOG_FORMAT = 'ROW'`)
|
||||
{
|
||||
--let $binlog_position_cmp= =
|
||||
--let $assert_cond= [SHOW MASTER STATUS, Position, 1] $binlog_position_cmp $binlog_start
|
||||
--let $assert_text= In SBR or MIXED modes, the event in the binlog should be the same that was executed. In RBR mode, binlog position should stay unchanged.
|
||||
}
|
||||
if (`SELECT @@BINLOG_FORMAT != 'ROW'`)
|
||||
{
|
||||
--let $assert_cond= \'[\'SHOW BINLOG EVENTS IN "$binlog_file" FROM $binlog_start LIMIT 1, 1\', Info, 1]\' LIKE \'%$statement_file\'
|
||||
--let $assert_text= In SBR or MIXED modes, the event in the binlog should be the same that was executed. In RBR mode, binlog position should stay unchanged.
|
||||
}
|
||||
--source include/assert.inc
|
||||
|
||||
# Compare master and slave
|
||||
--sync_slave_with_master
|
||||
--let $diff_tables= master:test.t1 , slave:test.t1
|
||||
--source include/diff_tables.inc
|
||||
|
||||
# Clean up
|
||||
--connection master
|
||||
drop table t1, t2;
|
||||
--sync_slave_with_master
|
@ -5,6 +5,7 @@
|
||||
# Slave needs to be started with --innodb to store table in InnoDB.
|
||||
# Same test for MyISAM (which had no bug).
|
||||
|
||||
--connection master
|
||||
eval CREATE TABLE t1 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned,
|
||||
@ -32,40 +33,44 @@ INSERT INTO t2 VALUES (5, 4);
|
||||
INSERT INTO t2 VALUES (6, 6);
|
||||
|
||||
INSERT IGNORE INTO t1 SELECT NULL, t2.b FROM t2 ORDER BY t2.a;
|
||||
--let $assert_cond= COUNT(*) = 6 FROM t1
|
||||
--let $assert_text= Count of elements in t1 should be 6.
|
||||
--source include/assert.inc
|
||||
|
||||
# Compare results
|
||||
# Compare master and slave
|
||||
--sync_slave_with_master
|
||||
--let $diff_tables= master:test.t1 , slave:test.t1
|
||||
--source include/diff_tables.inc
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
# BUG#59338 Inconsistency in binlog for statements that don't change any rows STATEMENT SBR
|
||||
# An insert ignore that does not update anything must be written to the binary log in SBR
|
||||
# and MIXED modes. We check this property by counting occurrences in t1 before and after
|
||||
# the insert and comparing the binlog positions. The count should be the same in both points
|
||||
# and the statement should be in the binary log.
|
||||
--connection master
|
||||
--let $binlog_file= query_get_value("SHOW MASTER STATUS", File, 1)
|
||||
--let $binlog_start= query_get_value("SHOW MASTER STATUS", Position, 1)
|
||||
--let $statement_file=INSERT IGNORE INTO t1 SELECT NULL, t2.b FROM t2 ORDER BY t2.a
|
||||
--eval $statement_file
|
||||
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
--let $assert_cond= COUNT(*) = 6 FROM t1
|
||||
--let $assert_text= Count of elements in t1 should be 6.
|
||||
--source include/assert.inc
|
||||
|
||||
# Now do the same for MyISAM
|
||||
if (`SELECT @@BINLOG_FORMAT = 'ROW'`)
|
||||
{
|
||||
--let $binlog_position_cmp= =
|
||||
--let $assert_cond= [SHOW MASTER STATUS, Position, 1] $binlog_position_cmp $binlog_start
|
||||
--let $assert_text= In SBR or MIXED modes, the event in the binlog should be the same that was executed. In RBR mode, binlog position should stay unchanged.
|
||||
}
|
||||
if (`SELECT @@BINLOG_FORMAT != 'ROW'`)
|
||||
{
|
||||
--let $assert_cond= \'[\'SHOW BINLOG EVENTS IN "$binlog_file" FROM $binlog_start LIMIT 2, 1\', Info, 1]\' LIKE \'%$statement_file\'
|
||||
--let $assert_text= In SBR or MIXED modes, the event in the binlog should be the same that was executed. In RBR mode, binlog position should stay unchanged.
|
||||
}
|
||||
--source include/assert.inc
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
eval CREATE TABLE t1 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned,
|
||||
unique (b)
|
||||
) ENGINE=$engine_type2;
|
||||
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
INSERT INTO t1 VALUES (3, 3);
|
||||
INSERT INTO t1 VALUES (4, 4);
|
||||
|
||||
--disable_warnings
|
||||
INSERT IGNORE INTO t1 SELECT NULL, t2.b FROM t2 ORDER BY t2.a;
|
||||
--enable_warnings
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
connection master;
|
||||
# Clean up
|
||||
--connection master
|
||||
drop table t1, t2;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
--sync_slave_with_master
|
||||
|
@ -502,16 +502,16 @@ call p_verify_status_increment(2, 2, 2, 2);
|
||||
--echo # 12. Read-write statement: IODKU, change 0 rows.
|
||||
--echo #
|
||||
insert t1 set a=2 on duplicate key update a=2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
|
||||
--echo # 13. Read-write statement: INSERT IGNORE, change 0 rows.
|
||||
--echo #
|
||||
insert ignore t1 set a=2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
|
||||
--echo # 14. Read-write statement: INSERT IGNORE, change 1 row.
|
||||
--echo #
|
||||
|
@ -1737,6 +1737,35 @@ EXPLAIN SELECT * FROM t1 WHERE date_column BETWEEN '2010-09-01' AND '2010-10-01'
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug #31384 DATE_ADD() and DATE_SUB() return binary data
|
||||
--echo #
|
||||
SELECT @@collation_connection, @@character_set_results;
|
||||
CREATE TABLE t1 AS
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
--enable_metadata
|
||||
# PS protocol gives different "Max length" value for DATETIME.
|
||||
--disable_ps_protocol
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
--disable_metadata
|
||||
--enable_ps_protocol
|
||||
SELECT
|
||||
HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1,
|
||||
HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2,
|
||||
HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date,
|
||||
HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
--echo #
|
||||
|
@ -44,3 +44,19 @@ SELECT COUNT(*) FROM t2 IGNORE INDEX(p) WHERE p=POINTFROMTEXT('POINT(1 2)');
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test for bug #58650 "Failing assertion: primary_key_no == -1 ||
|
||||
--echo # primary_key_no == 0".
|
||||
--echo #
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
--echo # The minimal test case.
|
||||
create table t1 (a int not null, b linestring not null, unique key b (b(12)), unique key a (a));
|
||||
drop table t1;
|
||||
--echo # The original test case.
|
||||
create table t1 (a int not null, b linestring not null, unique key b (b(12)));
|
||||
create unique index a on t1(a);
|
||||
drop table t1;
|
||||
|
78
mysql-test/include/have_dbi_dbd-mysql.inc
Normal file
78
mysql-test/include/have_dbi_dbd-mysql.inc
Normal file
@ -0,0 +1,78 @@
|
||||
#
|
||||
# Originally created by John Embretsen, 2011-01-26.
|
||||
#
|
||||
# Checks for the existence of Perl modules DBI and DBD::mysql as seen from the
|
||||
# perl installation used by "external" executable perl scripts, i.e. scripts
|
||||
# that are executed as standalone scripts interpreted by the perl installation
|
||||
# specified by the "shebang" line in the top of these scripts.
|
||||
#
|
||||
# If either module is not found, the test will be skipped.
|
||||
#
|
||||
# For use in tests that call perl scripts that require these modules.
|
||||
#
|
||||
# This file is intended to work on Unix. Windows may need different treatment.
|
||||
# Reasoning:
|
||||
# - "shebangs" are not relevant on Windows, but need to be handled here.
|
||||
# - Perl scripts cannot be made executable on Windows, interpreter must be
|
||||
# specified.
|
||||
#
|
||||
# Note that if there are multiple perl installations and not all have the
|
||||
# required modules, this check may fail even if the perl in path does have
|
||||
# the modules available. This may happen if the perl specified by the script's
|
||||
# shebang (e.g. #!/usr/bin/perl) does not have these modules, and script is
|
||||
# called without specifying the perl interpreter. However, this will be
|
||||
# a correct result in cases where a test calls a script with a similar shebang.
|
||||
#
|
||||
################################################################################
|
||||
|
||||
--source include/not_windows.inc
|
||||
|
||||
# We jump through some hoops since there is no direct way to check if an
|
||||
# external command went OK or not from a mysql-test file:
|
||||
#
|
||||
# - In theory, we could do as simple as "exec perl -MDBI -MDBD::mysql -e 1",
|
||||
# however we cannot check the result (exit code) from within a test script.
|
||||
# Also, this may not yield the same result as other uses of perl due to the
|
||||
# shebang issue mentioned above.
|
||||
# - Instead we use a separate helper perl script that checks for the modules.
|
||||
# - If the modules are found, the perl script leaves a file which sets a
|
||||
# variable that can be read by this file.
|
||||
# If the modules are not found, the perl script does not set this variable,
|
||||
# but leaves an empty file instead.
|
||||
#
|
||||
# This is done because there is apparently no direct way to transfer
|
||||
# information from perl to the test script itself.
|
||||
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--disable_warnings
|
||||
|
||||
# We do not use embedded perl in this script because that would not have yielded
|
||||
# correct results for a situation where an external Perl script is called like
|
||||
# "scriptname" instead of "perl scriptname" and the shebang in the script points
|
||||
# to a specific perl that may be different than the perl in PATH.
|
||||
#
|
||||
# Instead, we call a separate helper script which checks for the modules in its
|
||||
# own environment. We call it without "perl" in front.
|
||||
|
||||
--let $perlChecker= $MYSQLTEST_VARDIR/std_data/checkDBI_DBD-mysql.pl
|
||||
--let $resultFile= $MYSQL_TMP_DIR/dbidbd-mysql.txt
|
||||
|
||||
# Make the script executable and execute it.
|
||||
--chmod 0755 $perlChecker
|
||||
--exec $perlChecker
|
||||
|
||||
# Source the resulting temporary file and look for a variable being set.
|
||||
--source $resultFile
|
||||
|
||||
if (!$dbidbd) {
|
||||
--skip Test needs Perl modules DBI and DBD::mysql
|
||||
}
|
||||
|
||||
# Clean up
|
||||
--remove_file $resultFile
|
||||
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
--enable_warnings
|
||||
|
@ -183,9 +183,6 @@ INSERT INTO global_suppressions VALUES
|
||||
("The slave I.O thread stops because a fatal error is encountered when it try to get the value of SERVER_ID variable from master."),
|
||||
(".SELECT UNIX_TIMESTAMP... failed on master, do not trust column Seconds_Behind_Master of SHOW SLAVE STATUS"),
|
||||
|
||||
/* Test case for Bug#31590 in order_by.test produces the following error */
|
||||
("Out of sort memory; increase server sort buffer size"),
|
||||
|
||||
/* Special case for Bug #26402 in show_check.test
|
||||
- Question marks are not valid file name parts on Windows. Ignore
|
||||
this error message.
|
||||
|
@ -4,12 +4,26 @@
|
||||
|
||||
--source include/not_windows.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_dbi_dbd-mysql.inc
|
||||
|
||||
if (!$MYSQLHOTCOPY)
|
||||
{
|
||||
# Fail the test if the mysqlhotcopy script is missing.
|
||||
# If the tool's location changes, mysql-test-run.pl must be updated to
|
||||
# reflect this (look for "MYSQLHOTCOPY").
|
||||
die due to missing mysqlhotcopy tool;
|
||||
}
|
||||
|
||||
# NOTE (johnemb, 2011-01-26):
|
||||
# In this test mysqlhotcopy (a perl script) is executed as a standalone
|
||||
# executable, i.e. not necessarily using the perl interpreter in PATH,
|
||||
# because that is how the documentation demonstrates it.
|
||||
#
|
||||
# We include have_dbi_dbd-mysql.inc above so that the test will
|
||||
# be skipped if Perl modules required by the mysqlhotcopy tool are not
|
||||
# found when the script is run this way.
|
||||
|
||||
|
||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS hotcopy_test;
|
||||
@ -93,7 +107,7 @@ DROP DATABASE hotcopy_save;
|
||||
--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
|
||||
--list_files $MYSQLD_DATADIR/hotcopy_save
|
||||
--replace_result $MASTER_MYSOCK MASTER_MYSOCK
|
||||
--error 9,2304
|
||||
--error 9,11,2304
|
||||
--exec $MYSQLHOTCOPY --quiet -S $MASTER_MYSOCK -u root hotcopy_test hotcopy_save
|
||||
--replace_result $MASTER_MYSOCK MASTER_MYSOCK
|
||||
--exec $MYSQLHOTCOPY --quiet --allowold -S $MASTER_MYSOCK -u root hotcopy_test hotcopy_save
|
||||
|
@ -27,7 +27,7 @@
|
||||
# with name1, name2 etc from the comma separated list of plugin names
|
||||
# in the optional 4th argument.
|
||||
|
||||
auth_test_plugin plugin/auth PLUGIN_AUTH test_plugin_server
|
||||
auth_test_plugin plugin/auth PLUGIN_AUTH test_plugin_server,cleartext_plugin_server
|
||||
qa_auth_interface plugin/auth PLUGIN_AUTH_INTERFACE qa_auth_interface
|
||||
qa_auth_server plugin/auth PLUGIN_AUTH_SERVER qa_auth_server
|
||||
qa_auth_client plugin/auth PLUGIN_AUTH_CLIENT qa_auth_client
|
||||
|
@ -45,15 +45,7 @@ if ($rpl_server_parameters)
|
||||
--source include/rpl_connection.inc
|
||||
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--let WRITE_TO_FILE= $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
--let WRITE_TO_VAR= $_rpl_start_server_command
|
||||
perl;
|
||||
my $file= $ENV{'WRITE_TO_FILE'};
|
||||
my $var= $ENV{'WRITE_TO_VAR'};
|
||||
open WRITE_FILE, ">> $file" or die "Error opening $file: $!";
|
||||
print WRITE_FILE $var, "\n" or die "Error appending to $file: $!";
|
||||
close WRITE_FILE or die "Error closing $file: $!";
|
||||
EOF
|
||||
--exec echo "$_rpl_start_server_command" > $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
|
||||
--source include/rpl_reconnect.inc
|
||||
|
||||
|
@ -44,9 +44,7 @@ if ($rpl_debug)
|
||||
|
||||
# Write file to make mysql-test-run.pl expect the "crash", but don't start
|
||||
# it until it's told to
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
wait
|
||||
EOF
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
|
||||
# Send shutdown to the connected server and give
|
||||
# it 10 seconds to die before zapping it
|
||||
|
@ -88,7 +88,7 @@ while ($_rpl_i) {
|
||||
{
|
||||
--echo Sync IO: $_rpl_slave_io_running; Sync SQL: $_rpl_slave_sql_running
|
||||
}
|
||||
--let $_rpl_slave_io_running= `SELECT IF('$_rpl_slave_io_running' = 'Yes', 1, '')`
|
||||
--let $_rpl_slave_io_running= `SELECT IF('$_rpl_slave_io_running' != 'No', 1, '')`
|
||||
--let $_rpl_slave_sql_running= `SELECT IF('$_rpl_slave_sql_running' = 'Yes', 1, '')`
|
||||
if ($_rpl_slave_io_running)
|
||||
{
|
||||
|
@ -1,4 +1,20 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public
|
||||
# License as published by the Free Software Foundation; version 2
|
||||
# of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
package My::ConfigFactory;
|
||||
|
||||
use strict;
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,4 +1,19 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
package My::File::Path;
|
||||
use strict;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (C) 2008 MySQL AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (C) 2008 MySQL AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,14 +1,15 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public
|
||||
# License as published by the Free Software Foundation; version 2
|
||||
# of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
@ -138,6 +139,7 @@ sub new {
|
||||
my $host = delete($opts{'host'});
|
||||
my $shutdown = delete($opts{'shutdown'});
|
||||
my $user_data= delete($opts{'user_data'});
|
||||
my $envs = delete($opts{'envs'});
|
||||
|
||||
# if (defined $host) {
|
||||
# $safe_script= "lib/My/SafeProcess/safe_process_cpcd.pl";
|
||||
@ -160,6 +162,13 @@ sub new {
|
||||
# Point the safe_process at the right parent if running on cygwin
|
||||
push(@safe_args, "--parent-pid=".Cygwin::pid_to_winpid($$)) if IS_CYGWIN;
|
||||
|
||||
foreach my $env_var (@$envs) {
|
||||
croak("Missing = in env string") unless $env_var =~ /=/;
|
||||
croak("Env string $env_var seen, probably missing value for --mysqld-env")
|
||||
if $env_var =~ /^--/;
|
||||
push @safe_args, "--env $env_var";
|
||||
}
|
||||
|
||||
push(@safe_args, "--");
|
||||
push(@safe_args, $path); # The program safe_process should execute
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2004 MySQL AB
|
||||
/* Copyright (C) 2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2008 MySQL AB
|
||||
/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -175,7 +175,7 @@ int main(int argc, char* const argv[] )
|
||||
} else {
|
||||
if ( strcmp(arg, "--verbose") == 0 )
|
||||
verbose++;
|
||||
else if ( strncmp(arg, "--parent-pid", 10) == 0 )
|
||||
else if ( strncmp(arg, "--parent-pid", 12) == 0 )
|
||||
{
|
||||
/* Override parent_pid with a value provided by user */
|
||||
const char* start;
|
||||
@ -184,10 +184,15 @@ int main(int argc, char* const argv[] )
|
||||
start++; /* Step past = */
|
||||
if ((parent_pid= atoi(start)) == 0)
|
||||
die("Invalid value '%s' passed to --parent-id", start);
|
||||
} else if ( strcmp(arg, "--nocore") == 0 )
|
||||
}
|
||||
else if ( strcmp(arg, "--nocore") == 0 )
|
||||
{
|
||||
nocore = true; // Don't allow the process to dump core
|
||||
}
|
||||
else if ( strncmp (arg, "--env ", 6) == 0 )
|
||||
{
|
||||
putenv(strdup(arg+6));
|
||||
}
|
||||
else
|
||||
die("Unknown option: %s", arg);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2004 MySQL AB
|
||||
/* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -220,6 +220,10 @@ int main(int argc, const char** argv )
|
||||
{
|
||||
nocore= TRUE;
|
||||
}
|
||||
else if ( strncmp (arg, "--env ", 6) == 0 )
|
||||
{
|
||||
putenv(strdup(arg+6));
|
||||
}
|
||||
else
|
||||
die("Unknown option: %s", arg);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (C) 2008 MySQL AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,4 +1,18 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2008 MySQL AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
#
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004, 2006 MySQL AB
|
||||
# Copyright (C) 2004, 2006 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004 MySQL AB
|
||||
# Copyright (C) 2004 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (C) 2004-2007 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
# Copyright (C) 2004-2008 MySQL AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,15 +1,16 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2004-2006 MySQL AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public
|
||||
# License as published by the Free Software Foundation; version 2
|
||||
# of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright 2004-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2006 MySQL AB
|
||||
# Copyright (C) 2004-2007 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- cperl -*-
|
||||
# Copyright (C) 2006 MySQL AB
|
||||
# Copyright (C) 2006-2008 MySQL AB, 2009 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Copyright (C) 2005, 2006 MySQL AB
|
||||
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public
|
||||
@ -12,10 +12,9 @@
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with this library; if not, write to the Free
|
||||
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
# MA 02111-1307, USA
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
# ======================================================================
|
||||
# MySQL server stress test system
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/perl
|
||||
# -*- cperl -*-
|
||||
|
||||
# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -14,7 +14,7 @@
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
#
|
||||
##############################################################################
|
||||
@ -108,6 +108,7 @@ require "lib/mtr_misc.pl";
|
||||
$SIG{INT}= sub { mtr_error("Got ^C signal"); };
|
||||
|
||||
our $mysql_version_id;
|
||||
my $mysql_version_extra;
|
||||
our $glob_mysql_test_dir;
|
||||
our $basedir;
|
||||
our $bindir;
|
||||
@ -175,6 +176,7 @@ our $opt_big_test= 0;
|
||||
our @opt_combinations;
|
||||
|
||||
our @opt_extra_mysqld_opt;
|
||||
our @opt_mysqld_envs;
|
||||
|
||||
my $opt_compress;
|
||||
my $opt_ssl;
|
||||
@ -189,6 +191,7 @@ my $opt_view_protocol;
|
||||
our $opt_debug;
|
||||
my $debug_d= "d";
|
||||
my $opt_debug_common;
|
||||
our $opt_debug_server;
|
||||
our @opt_cases; # The test cases names in argv
|
||||
our $opt_embedded_server;
|
||||
|
||||
@ -291,8 +294,10 @@ our $opt_include_ndbcluster= 0;
|
||||
our $opt_skip_ndbcluster= 1;
|
||||
|
||||
my $exe_ndbd;
|
||||
my $exe_ndbmtd;
|
||||
my $exe_ndb_mgmd;
|
||||
my $exe_ndb_waiter;
|
||||
my $exe_ndb_mgm;
|
||||
|
||||
our $debug_compiled_binaries;
|
||||
|
||||
@ -413,6 +418,14 @@ sub main {
|
||||
my $server_port = $server->sockport();
|
||||
mtr_report("Using server port $server_port");
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Read definitions from include/plugin.defs
|
||||
#
|
||||
read_plugin_defs("include/plugin.defs");
|
||||
|
||||
# Simplify reference to semisync plugins
|
||||
$ENV{'SEMISYNC_PLUGIN_OPT'}= $ENV{'SEMISYNC_MASTER_PLUGIN_OPT'};
|
||||
|
||||
# Create child processes
|
||||
my %children;
|
||||
for my $child_num (1..$opt_parallel){
|
||||
@ -505,8 +518,8 @@ sub run_test_server ($$$) {
|
||||
my $num_failed_test= 0; # Number of tests failed so far
|
||||
|
||||
# Scheduler variables
|
||||
my $max_ndb= $childs / 2;
|
||||
$max_ndb = 4 if $max_ndb > 4;
|
||||
my $max_ndb= $ENV{MTR_MAX_NDB} || $childs / 2;
|
||||
$max_ndb = $childs if $max_ndb > $childs;
|
||||
$max_ndb = 1 if $max_ndb < 1;
|
||||
my $num_ndb_tests= 0;
|
||||
|
||||
@ -959,6 +972,7 @@ sub command_line_setup {
|
||||
|
||||
# Extra options used when starting mysqld
|
||||
'mysqld=s' => \@opt_extra_mysqld_opt,
|
||||
'mysqld-env=s' => \@opt_mysqld_envs,
|
||||
|
||||
# Run test on running server
|
||||
'extern=s' => \%opts_extern, # Append to hash
|
||||
@ -966,6 +980,7 @@ sub command_line_setup {
|
||||
# Debugging
|
||||
'debug' => \$opt_debug,
|
||||
'debug-common' => \$opt_debug_common,
|
||||
'debug-server' => \$opt_debug_server,
|
||||
'gdb' => \$opt_gdb,
|
||||
'client-gdb' => \$opt_client_gdb,
|
||||
'manual-gdb' => \$opt_manual_gdb,
|
||||
@ -1122,6 +1137,9 @@ sub command_line_setup {
|
||||
|
||||
($auth_plugin)= find_plugin("auth_test_plugin", "plugin/auth");
|
||||
|
||||
# --debug[-common] implies we run debug server
|
||||
$opt_debug_server= 1 if $opt_debug || $opt_debug_common;
|
||||
|
||||
if (using_extern())
|
||||
{
|
||||
# Connect to the running mysqld and find out what it supports
|
||||
@ -1665,12 +1683,13 @@ sub collect_mysqld_features {
|
||||
# Look for version
|
||||
my $exe_name= basename($exe_mysqld);
|
||||
mtr_verbose("exe_name: $exe_name");
|
||||
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
|
||||
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)([^\s]*)/ )
|
||||
{
|
||||
#print "Major: $1 Minor: $2 Build: $3\n";
|
||||
$mysql_version_id= $1*10000 + $2*100 + $3;
|
||||
#print "mysql_version_id: $mysql_version_id\n";
|
||||
mtr_report("MySQL Version $1.$2.$3");
|
||||
$mysql_version_extra= $4;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1755,12 +1774,13 @@ sub collect_mysqld_features_from_running_server ()
|
||||
|
||||
# Parse version
|
||||
my $version_str= $mysqld_variables{'version'};
|
||||
if ( $version_str =~ /^([0-9]*)\.([0-9]*)\.([0-9]*)/ )
|
||||
if ( $version_str =~ /^([0-9]*)\.([0-9]*)\.([0-9]*)([^\s]*)/ )
|
||||
{
|
||||
#print "Major: $1 Minor: $2 Build: $3\n";
|
||||
$mysql_version_id= $1*10000 + $2*100 + $3;
|
||||
#print "mysql_version_id: $mysql_version_id\n";
|
||||
mtr_report("MySQL Version $1.$2.$3");
|
||||
$mysql_version_extra= $4;
|
||||
}
|
||||
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
|
||||
}
|
||||
@ -1772,7 +1792,7 @@ sub find_mysqld {
|
||||
my @mysqld_names= ("mysqld", "mysqld-max-nt", "mysqld-max",
|
||||
"mysqld-nt");
|
||||
|
||||
if ( $opt_debug ){
|
||||
if ( $opt_debug_server ){
|
||||
# Put mysqld-debug first in the list of binaries to look for
|
||||
mtr_verbose("Adding mysqld-debug first in list of binaries to look for");
|
||||
unshift(@mysqld_names, "mysqld-debug");
|
||||
@ -1807,16 +1827,42 @@ sub executable_setup () {
|
||||
|
||||
if ( ! $opt_skip_ndbcluster )
|
||||
{
|
||||
# Look for single threaded NDB
|
||||
$exe_ndbd=
|
||||
my_find_bin($bindir,
|
||||
["storage/ndb/src/kernel", "libexec", "sbin", "bin"],
|
||||
"ndbd");
|
||||
|
||||
# Look for multi threaded NDB
|
||||
$exe_ndbmtd=
|
||||
my_find_bin($bindir,
|
||||
["storage/ndb/src/kernel", "libexec", "sbin", "bin"],
|
||||
"ndbmtd", NOT_REQUIRED);
|
||||
if ($exe_ndbmtd)
|
||||
{
|
||||
my $mtr_ndbmtd = $ENV{MTR_NDBMTD};
|
||||
if ($mtr_ndbmtd)
|
||||
{
|
||||
mtr_report(" - multi threaded ndbd found, will be used always");
|
||||
$exe_ndbd = $exe_ndbmtd;
|
||||
}
|
||||
else
|
||||
{
|
||||
mtr_report(" - multi threaded ndbd found, will be ".
|
||||
"used \"round robin\"");
|
||||
}
|
||||
}
|
||||
|
||||
$exe_ndb_mgmd=
|
||||
my_find_bin($bindir,
|
||||
["storage/ndb/src/mgmsrv", "libexec", "sbin", "bin"],
|
||||
"ndb_mgmd");
|
||||
|
||||
$exe_ndb_mgm=
|
||||
my_find_bin($bindir,
|
||||
["storage/ndb/src/mgmclient", "bin"],
|
||||
"ndb_mgm");
|
||||
|
||||
$exe_ndb_waiter=
|
||||
my_find_bin($bindir,
|
||||
["storage/ndb/tools/", "bin"],
|
||||
@ -1843,9 +1889,12 @@ sub executable_setup () {
|
||||
sub client_debug_arg($$) {
|
||||
my ($args, $client_name)= @_;
|
||||
|
||||
# Workaround for Bug #50627: drop any debug opt
|
||||
return if $client_name =~ /^mysqlbinlog/;
|
||||
|
||||
if ( $opt_debug ) {
|
||||
mtr_add_arg($args,
|
||||
"--debug=$debug_d:t:A,%s/log/%s.trace",
|
||||
"--loose-debug=$debug_d:t:A,%s/log/%s.trace",
|
||||
$path_vardir_trace, $client_name)
|
||||
}
|
||||
}
|
||||
@ -1940,7 +1989,7 @@ sub find_plugin($$)
|
||||
{
|
||||
my ($plugin, $location) = @_;
|
||||
my $plugin_filename;
|
||||
|
||||
|
||||
if (IS_WINDOWS)
|
||||
{
|
||||
$plugin_filename = $plugin.".dll";
|
||||
@ -1950,13 +1999,13 @@ sub find_plugin($$)
|
||||
$plugin_filename = $plugin.".so";
|
||||
}
|
||||
|
||||
my $lib_example_plugin=
|
||||
my $lib_plugin=
|
||||
mtr_file_exists(vs_config_dirs($location,$plugin_filename),
|
||||
"$basedir/lib/plugin/".$plugin_filename,
|
||||
"$basedir/$location/.libs/".$plugin_filename,
|
||||
"$basedir/lib/mysql/plugin/".$plugin_filename,
|
||||
);
|
||||
return $lib_example_plugin;
|
||||
return $lib_plugin;
|
||||
}
|
||||
|
||||
#
|
||||
@ -1966,10 +2015,16 @@ sub find_plugin($$)
|
||||
sub read_plugin_defs($)
|
||||
{
|
||||
my ($defs_file)= @_;
|
||||
my $running_debug= 0;
|
||||
|
||||
open(PLUGDEF, '<', $defs_file)
|
||||
or mtr_error("Can't read plugin defintions file $defs_file");
|
||||
|
||||
# Need to check if we will be running mysqld-debug
|
||||
if ($opt_debug_server) {
|
||||
$running_debug= 1 if find_mysqld($basedir) =~ /mysqld-debug/;
|
||||
}
|
||||
|
||||
while (<PLUGDEF>) {
|
||||
next if /^#/;
|
||||
my ($plug_file, $plug_loc, $plug_var, $plug_names)= split;
|
||||
@ -1977,6 +2032,9 @@ sub read_plugin_defs($)
|
||||
next unless $plug_file;
|
||||
mtr_error("Lines in $defs_file must have 3 or 4 items") unless $plug_var;
|
||||
|
||||
# If running debug server, plugins will be in 'debug' subdirectory
|
||||
$plug_file= "debug/$plug_file" if $running_debug;
|
||||
|
||||
my ($plugin)= find_plugin($plug_file, $plug_loc);
|
||||
|
||||
# Set env. variables that tests may use, set to empty if plugin
|
||||
@ -2041,18 +2099,9 @@ sub environment_setup {
|
||||
push(@ld_library_paths, "$basedir/storage/ndb/src/.libs");
|
||||
}
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Read definitions from include/plugin.defs
|
||||
#
|
||||
# Plugin settings should no longer be added here, instead
|
||||
# place definitions in include/plugin.defs.
|
||||
# See comment in that file for details.
|
||||
# --------------------------------------------------------------------------
|
||||
read_plugin_defs("include/plugin.defs");
|
||||
|
||||
# Simplify reference to semisync plugins
|
||||
$ENV{'SEMISYNC_PLUGIN_OPT'}= $ENV{'SEMISYNC_MASTER_PLUGIN_OPT'};
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Valgrind need to be run with debug libraries otherwise it's almost
|
||||
# impossible to add correct supressions, that means if "/usr/lib/debug"
|
||||
@ -2119,6 +2168,16 @@ sub environment_setup {
|
||||
$ENV{'MYSQL_LIBDIR'}= "$basedir/lib";
|
||||
$ENV{'MYSQL_SHAREDIR'}= $path_language;
|
||||
$ENV{'MYSQL_CHARSETSDIR'}= $path_charsetsdir;
|
||||
|
||||
if (IS_WINDOWS)
|
||||
{
|
||||
$ENV{'SECURE_LOAD_PATH'}= $glob_mysql_test_dir."\\std_data";
|
||||
}
|
||||
else
|
||||
{
|
||||
$ENV{'SECURE_LOAD_PATH'}= $glob_mysql_test_dir."/std_data";
|
||||
}
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Setup env for NDB
|
||||
@ -2472,9 +2531,9 @@ sub check_debug_support ($) {
|
||||
#mtr_report(" - binaries are not debug compiled");
|
||||
$debug_compiled_binaries= 0;
|
||||
|
||||
if ( $opt_debug )
|
||||
if ( $opt_debug_server )
|
||||
{
|
||||
mtr_error("Can't use --debug, binaries does not support it");
|
||||
mtr_error("Can't use --debug[-server], binary does not support it");
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -2510,6 +2569,17 @@ sub vs_config_dirs ($$) {
|
||||
sub check_ndbcluster_support ($) {
|
||||
my $mysqld_variables= shift;
|
||||
|
||||
# Check if this is MySQL Cluster, ie. mysql version string ends
|
||||
# with -ndb-Y.Y.Y[-status]
|
||||
if ( defined $mysql_version_extra &&
|
||||
$mysql_version_extra =~ /^-ndb-/ )
|
||||
{
|
||||
mtr_report(" - MySQL Cluster");
|
||||
# Enable ndb engine and add more test suites
|
||||
$opt_include_ndbcluster = 1;
|
||||
$DEFAULT_SUITES.=",ndb";
|
||||
}
|
||||
|
||||
if ($opt_include_ndbcluster)
|
||||
{
|
||||
$opt_skip_ndbcluster= 0;
|
||||
@ -2622,6 +2692,27 @@ sub ndb_mgmd_wait_started($) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub ndb_mgmd_stop{
|
||||
my $ndb_mgmd= shift or die "usage: ndb_mgmd_stop(<ndb_mgmd>)";
|
||||
|
||||
my $host=$ndb_mgmd->value('HostName');
|
||||
my $port=$ndb_mgmd->value('PortNumber');
|
||||
mtr_verbose("Stopping cluster '$host:$port'");
|
||||
|
||||
my $args;
|
||||
mtr_init_args(\$args);
|
||||
mtr_add_arg($args, "--ndb-connectstring=%s:%s", $host,$port);
|
||||
mtr_add_arg($args, "-e");
|
||||
mtr_add_arg($args, "shutdown");
|
||||
|
||||
My::SafeProcess->run
|
||||
(
|
||||
name => "ndb_mgm shutdown $host:$port",
|
||||
path => $exe_ndb_mgm,
|
||||
args => \$args,
|
||||
output => "/dev/null",
|
||||
);
|
||||
}
|
||||
|
||||
sub ndb_mgmd_start ($$) {
|
||||
my ($cluster, $ndb_mgmd)= @_;
|
||||
@ -2649,6 +2740,7 @@ sub ndb_mgmd_start ($$) {
|
||||
error => $path_ndb_mgmd_log,
|
||||
append => 1,
|
||||
verbose => $opt_verbose,
|
||||
shutdown => sub { ndb_mgmd_stop($ndb_mgmd) },
|
||||
);
|
||||
mtr_verbose("Started $ndb_mgmd->{proc}");
|
||||
|
||||
@ -2664,6 +2756,12 @@ sub ndb_mgmd_start ($$) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub ndbd_stop {
|
||||
# Intentionally left empty, ndbd nodes will be shutdown
|
||||
# by sending "shutdown" to ndb_mgmd
|
||||
}
|
||||
|
||||
my $exe_ndbmtd_counter= 0;
|
||||
|
||||
sub ndbd_start {
|
||||
my ($cluster, $ndbd)= @_;
|
||||
@ -2681,17 +2779,24 @@ sub ndbd_start {
|
||||
|
||||
# > 5.0 { 'character-sets-dir' => \&fix_charset_dir },
|
||||
|
||||
my $exe= $exe_ndbd;
|
||||
if ($exe_ndbmtd and ($exe_ndbmtd_counter++ % 2) == 0)
|
||||
{
|
||||
# Use ndbmtd every other time
|
||||
$exe= $exe_ndbmtd;
|
||||
}
|
||||
|
||||
my $path_ndbd_log= "$dir/ndbd.log";
|
||||
my $proc= My::SafeProcess->new
|
||||
(
|
||||
name => $ndbd->after('cluster_config.'),
|
||||
path => $exe_ndbd,
|
||||
path => $exe,
|
||||
args => \$args,
|
||||
output => $path_ndbd_log,
|
||||
error => $path_ndbd_log,
|
||||
append => 1,
|
||||
verbose => $opt_verbose,
|
||||
shutdown => sub { ndbd_stop($ndbd) },
|
||||
);
|
||||
mtr_verbose("Started $proc");
|
||||
|
||||
@ -4157,8 +4262,10 @@ sub check_expected_crash_and_restart {
|
||||
{
|
||||
mtr_verbose("Crash was expected, file '$expect_file' exists");
|
||||
|
||||
for (my $waits = 0; $waits < 50; $waits++)
|
||||
for (my $waits = 0; $waits < 50; mtr_milli_sleep(100), $waits++)
|
||||
{
|
||||
# Race condition seen on Windows: try again until file not empty
|
||||
next if -z $expect_file;
|
||||
# If last line in expect file starts with "wait"
|
||||
# sleep a little and try again, thus allowing the
|
||||
# test script to control when the server should start
|
||||
@ -4167,10 +4274,11 @@ sub check_expected_crash_and_restart {
|
||||
if ($last_line =~ /^wait/ )
|
||||
{
|
||||
mtr_verbose("Test says wait before restart") if $waits == 0;
|
||||
mtr_milli_sleep(100);
|
||||
next;
|
||||
}
|
||||
|
||||
# Ignore any partial or unknown command
|
||||
next unless $last_line =~ /^restart/;
|
||||
# If last line begins "restart:", the rest of the line is read as
|
||||
# extra command line options to add to the restarted mysqld.
|
||||
# Anything other than 'wait' or 'restart:' (with a colon) will
|
||||
@ -4554,6 +4662,8 @@ sub mysqld_start ($$) {
|
||||
my @all_opts= @$extra_opts;
|
||||
if (exists $mysqld->{'restart_opts'}) {
|
||||
push (@all_opts, @{$mysqld->{'restart_opts'}});
|
||||
mtr_verbose(My::Options::toStr("mysqld_start restart",
|
||||
@{$mysqld->{'restart_opts'}}));
|
||||
}
|
||||
mysqld_arguments($args,$mysqld,\@all_opts);
|
||||
|
||||
@ -4628,6 +4738,7 @@ sub mysqld_start ($$) {
|
||||
nocore => $opt_skip_core,
|
||||
host => undef,
|
||||
shutdown => sub { mysqld_stop($mysqld) },
|
||||
envs => \@opt_mysqld_envs,
|
||||
);
|
||||
mtr_verbose("Started $mysqld->{proc}");
|
||||
}
|
||||
@ -5642,9 +5753,10 @@ Options for test case authoring
|
||||
check-testcases Check testcases for sideeffects
|
||||
mark-progress Log line number and elapsed time to <testname>.progress
|
||||
|
||||
Options that pass on options
|
||||
Options that pass on options (these may be repeated)
|
||||
|
||||
mysqld=ARGS Specify additional arguments to "mysqld"
|
||||
mysqld-env=VAR=VAL Specify additional environment settings for "mysqld"
|
||||
|
||||
Options to run test on running server
|
||||
|
||||
@ -5663,6 +5775,8 @@ Options for debugging the product
|
||||
debug Dump trace output for all servers and client programs
|
||||
debug-common Same as debug, but sets 'd' debug flags to
|
||||
"query,info,error,enter,exit"
|
||||
debug-server Use debug version of server, but without turning on
|
||||
tracing
|
||||
debugger=NAME Start mysqld in the selected debugger
|
||||
gdb Start the mysqld(s) in gdb
|
||||
manual-debug Let user manually start mysqld in debugger, before
|
||||
|
@ -519,21 +519,21 @@ SUCCESS
|
||||
# 12. Read-write statement: IODKU, change 0 rows.
|
||||
#
|
||||
insert t1 set a=2 on duplicate key update a=2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 13. Read-write statement: INSERT IGNORE, change 0 rows.
|
||||
#
|
||||
insert ignore t1 set a=2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 14. Read-write statement: INSERT IGNORE, change 1 row.
|
||||
|
@ -19,13 +19,16 @@ INSERT INTO t1 VALUES();
|
||||
SELECT * FROM t1;
|
||||
a b c d e f
|
||||
0 foo 0000-00-00
|
||||
INSERT INTO t1 VALUES(default,default,default,default,default,default);
|
||||
SELECT * FROM t1;
|
||||
a b c d e f
|
||||
0 foo 0000-00-00
|
||||
0 foo 0000-00-00
|
||||
INSERT INTO t1 VALUES(0,'abc','def','ghi','bar','1999-12-31');
|
||||
SELECT * FROM t1;
|
||||
a b c d e f
|
||||
0 foo 0000-00-00
|
||||
0 foo 0000-00-00
|
||||
0 abc def ghi bar 1999-12-31
|
||||
# === insert failures ===
|
||||
INSERT INTO t1 VALUES(NULL,'ab','a','b','foo','2007-01-01');
|
||||
|
@ -2767,6 +2767,46 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range date_column date_column 9 NULL 1 Using where
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #31384 DATE_ADD() and DATE_SUB() return binary data
|
||||
#
|
||||
SELECT @@collation_connection, @@character_set_results;
|
||||
@@collation_connection @@character_set_results
|
||||
binary binary
|
||||
CREATE TABLE t1 AS
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`field_str1` varbinary(29) DEFAULT NULL,
|
||||
`field1_str2` varbinary(29) DEFAULT NULL,
|
||||
`field_date` date DEFAULT NULL,
|
||||
`field_datetime` datetime DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def field_str1 254 29 10 Y 128 31 63
|
||||
def field1_str2 254 29 19 Y 128 31 63
|
||||
def field_date 10 29 10 Y 128 31 63
|
||||
def field_datetime 12 29 19 Y 128 31 63
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00
|
||||
SELECT
|
||||
HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1,
|
||||
HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2,
|
||||
HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date,
|
||||
HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime;
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
323030372D30382D30322032333A35393A3030 323030372D30382D30332031373A33323A3030 323030372D30382D3032 323030372D30382D30332031373A33323A3030
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
@ -3157,6 +3157,46 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range date_column date_column 9 NULL 1 Using where
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #31384 DATE_ADD() and DATE_SUB() return binary data
|
||||
#
|
||||
SELECT @@collation_connection, @@character_set_results;
|
||||
@@collation_connection @@character_set_results
|
||||
cp1251_general_ci cp1251
|
||||
CREATE TABLE t1 AS
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`field_str1` varchar(29) CHARACTER SET cp1251 DEFAULT NULL,
|
||||
`field1_str2` varchar(29) CHARACTER SET cp1251 DEFAULT NULL,
|
||||
`field_date` date DEFAULT NULL,
|
||||
`field_datetime` datetime DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def field_str1 254 29 10 Y 0 31 51
|
||||
def field1_str2 254 29 19 Y 0 31 51
|
||||
def field_date 10 29 10 Y 128 31 63
|
||||
def field_datetime 12 29 19 Y 128 31 63
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00
|
||||
SELECT
|
||||
HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1,
|
||||
HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2,
|
||||
HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date,
|
||||
HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime;
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
323030372D30382D30322032333A35393A3030 323030372D30382D30332031373A33323A3030 323030372D30382D3032 323030372D30382D30332031373A33323A3030
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
@ -3186,6 +3186,46 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range date_column date_column 9 NULL 1 Using where
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #31384 DATE_ADD() and DATE_SUB() return binary data
|
||||
#
|
||||
SELECT @@collation_connection, @@character_set_results;
|
||||
@@collation_connection @@character_set_results
|
||||
latin1_swedish_ci latin1
|
||||
CREATE TABLE t1 AS
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`field_str1` varchar(29) DEFAULT NULL,
|
||||
`field1_str2` varchar(29) DEFAULT NULL,
|
||||
`field_date` date DEFAULT NULL,
|
||||
`field_datetime` datetime DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def field_str1 254 29 10 Y 0 31 8
|
||||
def field1_str2 254 29 19 Y 0 31 8
|
||||
def field_date 10 29 10 Y 128 31 63
|
||||
def field_datetime 12 29 19 Y 128 31 63
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00
|
||||
SELECT
|
||||
HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1,
|
||||
HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2,
|
||||
HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date,
|
||||
HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime;
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
323030372D30382D30322032333A35393A3030 323030372D30382D30332031373A33323A3030 323030372D30382D3032 323030372D30382D30332031373A33323A3030
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
@ -4009,6 +4009,46 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #31384 DATE_ADD() and DATE_SUB() return binary data
|
||||
#
|
||||
SELECT @@collation_connection, @@character_set_results;
|
||||
@@collation_connection @@character_set_results
|
||||
ucs2_general_ci latin1
|
||||
CREATE TABLE t1 AS
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`field_str1` varchar(29) CHARACTER SET ucs2 DEFAULT NULL,
|
||||
`field1_str2` varchar(29) CHARACTER SET ucs2 DEFAULT NULL,
|
||||
`field_date` date DEFAULT NULL,
|
||||
`field_datetime` datetime DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def field_str1 254 29 10 Y 0 31 8
|
||||
def field1_str2 254 29 19 Y 0 31 8
|
||||
def field_date 10 29 10 Y 128 31 63
|
||||
def field_datetime 12 29 19 Y 128 31 63
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00
|
||||
SELECT
|
||||
HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1,
|
||||
HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2,
|
||||
HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date,
|
||||
HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime;
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
0032003000300037002D00300038002D00300032002000320033003A00350039003A00300030 0032003000300037002D00300038002D00300033002000310037003A00330032003A00300030 323030372D30382D3032 323030372D30382D30332031373A33323A3030
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
@ -4898,6 +4898,46 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range date_column date_column 9 NULL 1 Using where
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #31384 DATE_ADD() and DATE_SUB() return binary data
|
||||
#
|
||||
SELECT @@collation_connection, @@character_set_results;
|
||||
@@collation_connection @@character_set_results
|
||||
utf8_general_ci utf8
|
||||
CREATE TABLE t1 AS
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 MINUTE) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`field_str1` varchar(29) CHARACTER SET utf8 DEFAULT NULL,
|
||||
`field1_str2` varchar(29) CHARACTER SET utf8 DEFAULT NULL,
|
||||
`field_date` date DEFAULT NULL,
|
||||
`field_datetime` datetime DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
SELECT
|
||||
DATE_SUB('2007-08-03', INTERVAL 1 DAY) AS field_str1,
|
||||
DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE) AS field1_str2,
|
||||
DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY) AS field_date,
|
||||
DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE) AS field_datetime;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def field_str1 254 87 10 Y 0 31 33
|
||||
def field1_str2 254 87 19 Y 0 31 33
|
||||
def field_date 10 29 10 Y 128 31 63
|
||||
def field_datetime 12 29 19 Y 128 31 63
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
2007-08-02 2007-08-03 17:32:00 2007-08-02 2007-08-03 17:32:00
|
||||
SELECT
|
||||
HEX(DATE_SUB('2007-08-03', INTERVAL 1 MINUTE)) AS field_str1,
|
||||
HEX(DATE_SUB('2007-08-03 17:33:00', INTERVAL 1 MINUTE)) AS field1_str2,
|
||||
HEX(DATE_SUB(DATE('2007-08-03'), INTERVAL 1 DAY)) AS field_date,
|
||||
HEX(DATE_SUB(CAST('2007-08-03 17:33:00' AS DATETIME), INTERVAL 1 MINUTE)) AS field_datetime;
|
||||
field_str1 field1_str2 field_date field_datetime
|
||||
323030372D30382D30322032333A35393A3030 323030372D30382D30332031373A33323A3030 323030372D30382D3032 323030372D30382D30332031373A33323A3030
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
16
mysql-test/r/filesort_debug.result
Normal file
16
mysql-test/r/filesort_debug.result
Normal file
@ -0,0 +1,16 @@
|
||||
SET @old_debug= @@session.debug;
|
||||
#
|
||||
# Bug#36022 please log more information about "Sort aborted" queries
|
||||
#
|
||||
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
||||
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
||||
SET session debug= '+d,make_char_array_fail';
|
||||
CALL mtr.add_suppression("Out of sort memory");
|
||||
SELECT * FROM t1 ORDER BY f1 ASC, f0;
|
||||
ERROR HY001: Out of sort memory, consider increasing server sort buffer size
|
||||
SET session debug= @old_debug;
|
||||
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
||||
DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
|
||||
ERROR 42000: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1
|
||||
DROP TABLE t1;
|
||||
DROP FUNCTION f1;
|
@ -1739,6 +1739,16 @@ SELECT RELEASE_LOCK('aaaaaaaaaaaaaaaaa');
|
||||
#
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug#52123 Assertion failed: aggregator == aggr->Aggrtype(),
|
||||
# file .\item_sum.cc, line 587
|
||||
#
|
||||
CREATE TABLE t1(a int, KEY(a));
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
SELECT 1 FROM t1 ORDER BY AVG(DISTINCT a);
|
||||
1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#55648: Server crash on MIN/MAX on maximum time value
|
||||
#
|
||||
CREATE TABLE t1(c1 TIME NOT NULL);
|
||||
|
@ -1273,6 +1273,24 @@ date_add('1000-01-01 00:00:00', interval '1.03:02:01.05' day_microsecond)
|
||||
select date_add('1000-01-01 00:00:00', interval '1.02' day_microsecond);
|
||||
date_add('1000-01-01 00:00:00', interval '1.02' day_microsecond)
|
||||
1000-01-01 00:00:01.020000
|
||||
#
|
||||
# Bug #52315 part 2 : utc_date() crashes when system time > year 2037
|
||||
#
|
||||
SET TIMESTAMP=-147490000;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SET TIMESTAMP=2147483648;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SET TIMESTAMP=2147483646;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SET TIMESTAMP=2147483647;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SET TIMESTAMP=0;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SET TIMESTAMP=-1;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SET TIMESTAMP=1;
|
||||
SELECT UTC_TIMESTAMP();
|
||||
SET TIMESTAMP=0;
|
||||
End of 5.0 tests
|
||||
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
|
||||
date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND)
|
||||
|
@ -960,6 +960,18 @@ COUNT(*)
|
||||
2
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# Test for bug #58650 "Failing assertion: primary_key_no == -1 ||
|
||||
# primary_key_no == 0".
|
||||
#
|
||||
drop table if exists t1;
|
||||
# The minimal test case.
|
||||
create table t1 (a int not null, b linestring not null, unique key b (b(12)), unique key a (a));
|
||||
drop table t1;
|
||||
# The original test case.
|
||||
create table t1 (a int not null, b linestring not null, unique key b (b(12)));
|
||||
create unique index a on t1(a);
|
||||
drop table t1;
|
||||
create table `t1` (`col002` point)engine=myisam;
|
||||
insert into t1 values (),(),();
|
||||
select min(`col002`) from t1 union select `col002` from t1;
|
||||
|
@ -594,6 +594,7 @@ Index Tables To create or drop indexes
|
||||
Insert Tables To insert data into tables
|
||||
Lock tables Databases To use LOCK TABLES (together with SELECT privilege)
|
||||
Process Server Admin To view the plain text of currently executing queries
|
||||
Proxy Server Admin To make proxy user possible
|
||||
References Databases,Tables To have references on tables
|
||||
Reload Server Admin To reload or refresh tables, logs and privileges
|
||||
Replication client Server Admin To ask where the slave or master servers are
|
||||
@ -1377,6 +1378,80 @@ CURRENT_USER()
|
||||
root@localhost
|
||||
SET PASSWORD FOR CURRENT_USER() = PASSWORD("admin");
|
||||
SET PASSWORD FOR CURRENT_USER() = PASSWORD("");
|
||||
|
||||
# Bug#57952
|
||||
|
||||
DROP DATABASE IF EXISTS mysqltest1;
|
||||
DROP DATABASE IF EXISTS mysqltest2;
|
||||
CREATE DATABASE mysqltest1;
|
||||
CREATE DATABASE mysqltest2;
|
||||
use mysqltest1;
|
||||
CREATE TABLE t1(a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
CREATE TABLE t2(a INT);
|
||||
INSERT INTO t2 VALUES (2);
|
||||
CREATE TABLE mysqltest2.t3(a INT);
|
||||
INSERT INTO mysqltest2.t3 VALUES (4);
|
||||
CREATE USER testuser@localhost;
|
||||
GRANT CREATE ROUTINE, EXECUTE ON mysqltest1.* TO testuser@localhost;
|
||||
GRANT SELECT(b) ON t1 TO testuser@localhost;
|
||||
GRANT SELECT ON t2 TO testuser@localhost;
|
||||
GRANT SELECT ON mysqltest2.* TO testuser@localhost;
|
||||
|
||||
# Connection: bug57952_con1 (testuser@localhost, db: mysqltest1)
|
||||
PREPARE s1 FROM 'SELECT b FROM t1';
|
||||
PREPARE s2 FROM 'SELECT a FROM t2';
|
||||
PREPARE s3 FROM 'SHOW TABLES FROM mysqltest2';
|
||||
CREATE PROCEDURE p1() SELECT b FROM t1;
|
||||
CREATE PROCEDURE p2() SELECT a FROM t2;
|
||||
CREATE PROCEDURE p3() SHOW TABLES FROM mysqltest2;
|
||||
CALL p1;
|
||||
b
|
||||
1
|
||||
CALL p2;
|
||||
a
|
||||
2
|
||||
CALL p3;
|
||||
Tables_in_mysqltest2
|
||||
t3
|
||||
|
||||
# Connection: default
|
||||
REVOKE SELECT ON t1 FROM testuser@localhost;
|
||||
GRANT SELECT(a) ON t1 TO testuser@localhost;
|
||||
REVOKE SELECT ON t2 FROM testuser@localhost;
|
||||
REVOKE SELECT ON mysqltest2.* FROM testuser@localhost;
|
||||
|
||||
# Connection: bug57952_con1 (testuser@localhost, db: mysqltest1)
|
||||
# - Check column-level privileges...
|
||||
EXECUTE s1;
|
||||
ERROR 42000: SELECT command denied to user 'testuser'@'localhost' for column 'b' in table 't1'
|
||||
SELECT b FROM t1;
|
||||
ERROR 42000: SELECT command denied to user 'testuser'@'localhost' for column 'b' in table 't1'
|
||||
EXECUTE s1;
|
||||
ERROR 42000: SELECT command denied to user 'testuser'@'localhost' for column 'b' in table 't1'
|
||||
CALL p1;
|
||||
ERROR 42000: SELECT command denied to user 'testuser'@'localhost' for column 'b' in table 't1'
|
||||
# - Check table-level privileges...
|
||||
SELECT a FROM t2;
|
||||
ERROR 42000: SELECT command denied to user 'testuser'@'localhost' for table 't2'
|
||||
EXECUTE s2;
|
||||
ERROR 42000: SELECT command denied to user 'testuser'@'localhost' for table 't2'
|
||||
CALL p2;
|
||||
ERROR 42000: SELECT command denied to user 'testuser'@'localhost' for table 't2'
|
||||
# - Check database-level privileges...
|
||||
SHOW TABLES FROM mysqltest2;
|
||||
ERROR 42000: Access denied for user 'testuser'@'localhost' to database 'mysqltest2'
|
||||
EXECUTE s3;
|
||||
ERROR 42000: Access denied for user 'testuser'@'localhost' to database 'mysqltest2'
|
||||
CALL p3;
|
||||
ERROR 42000: Access denied for user 'testuser'@'localhost' to database 'mysqltest2'
|
||||
|
||||
# Connection: default
|
||||
DROP DATABASE mysqltest1;
|
||||
DROP DATABASE mysqltest2;
|
||||
DROP USER testuser@localhost;
|
||||
use test;
|
||||
|
||||
End of 5.0 tests
|
||||
set names utf8;
|
||||
grant select on test.* to юзер_юзер@localhost;
|
||||
|
@ -90,3 +90,68 @@ test.t1 optimize status Operation failed
|
||||
# Connection default
|
||||
DROP TABLE t1;
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
#
|
||||
# Bug#42230 during add index, cannot do queries on storage engines
|
||||
# that implement add_index
|
||||
#
|
||||
DROP DATABASE IF EXISTS db1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
# Test 1: Secondary index, should not block reads (original test case).
|
||||
# Connection default
|
||||
CREATE DATABASE db1;
|
||||
CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb;
|
||||
INSERT INTO db1.t1(value) VALUES (1), (2);
|
||||
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
|
||||
# Sending:
|
||||
ALTER TABLE db1.t1 ADD INDEX(value);
|
||||
# Connection con1
|
||||
SET DEBUG_SYNC= "now WAIT_FOR manage";
|
||||
USE db1;
|
||||
SELECT * FROM t1;
|
||||
id value
|
||||
1 1
|
||||
2 2
|
||||
SET DEBUG_SYNC= "now SIGNAL query";
|
||||
# Connection default
|
||||
# Reaping: ALTER TABLE db1.t1 ADD INDEX(value)
|
||||
DROP DATABASE db1;
|
||||
# Test 2: Primary index (implicit), should block reads.
|
||||
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
|
||||
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
|
||||
# Sending:
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX(a);
|
||||
# Connection con1
|
||||
SET DEBUG_SYNC= "now WAIT_FOR manage";
|
||||
USE test;
|
||||
# Sending:
|
||||
SELECT * FROM t1;
|
||||
# Connection con2
|
||||
# Waiting for SELECT to be blocked by the metadata lock on t1
|
||||
SET DEBUG_SYNC= "now SIGNAL query";
|
||||
# Connection default
|
||||
# Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a)
|
||||
# Connection con1
|
||||
# Reaping: SELECT * FROM t1
|
||||
a b
|
||||
# Test 3: Primary index (explicit), should block reads.
|
||||
# Connection default
|
||||
ALTER TABLE t1 DROP INDEX a;
|
||||
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
|
||||
# Sending:
|
||||
ALTER TABLE t1 ADD PRIMARY KEY (a);
|
||||
# Connection con1
|
||||
SET DEBUG_SYNC= "now WAIT_FOR manage";
|
||||
# Sending:
|
||||
SELECT * FROM t1;
|
||||
# Connection con2
|
||||
# Waiting for SELECT to be blocked by the metadata lock on t1
|
||||
SET DEBUG_SYNC= "now SIGNAL query";
|
||||
# Connection default
|
||||
# Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a)
|
||||
# Connection con1
|
||||
# Reaping: SELECT * FROM t1
|
||||
a b
|
||||
# Test 4: Secondary unique index, should not block reads.
|
||||
# Connection default
|
||||
SET DEBUG_SYNC= "RESET";
|
||||
DROP TABLE t1;
|
||||
|
@ -1502,4 +1502,146 @@ WHERE 7;
|
||||
col_datetime_key
|
||||
NULL
|
||||
DROP TABLE BB;
|
||||
#
|
||||
# Bug#58490: Incorrect result in multi level OUTER JOIN
|
||||
# in combination with IS NULL
|
||||
#
|
||||
CREATE TABLE t1 (i INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (0), (2),(3),(4);
|
||||
CREATE TABLE t2 (i INT NOT NULL);
|
||||
INSERT INTO t2 VALUES (0),(1), (3),(4);
|
||||
CREATE TABLE t3 (i INT NOT NULL);
|
||||
INSERT INTO t3 VALUES (0),(1),(2), (4);
|
||||
CREATE TABLE t4 (i INT NOT NULL);
|
||||
INSERT INTO t4 VALUES (0),(1),(2),(3) ;
|
||||
SELECT * FROM
|
||||
t1 LEFT JOIN
|
||||
( t2 LEFT JOIN
|
||||
( t3 LEFT JOIN
|
||||
t4
|
||||
ON t4.i = t3.i
|
||||
)
|
||||
ON t3.i = t2.i
|
||||
)
|
||||
ON t2.i = t1.i
|
||||
;
|
||||
i i i i
|
||||
0 0 0 0
|
||||
2 NULL NULL NULL
|
||||
3 3 NULL NULL
|
||||
4 4 4 NULL
|
||||
SELECT * FROM
|
||||
t1 LEFT JOIN
|
||||
( t2 LEFT JOIN
|
||||
( t3 LEFT JOIN
|
||||
t4
|
||||
ON t4.i = t3.i
|
||||
)
|
||||
ON t3.i = t2.i
|
||||
)
|
||||
ON t2.i = t1.i
|
||||
WHERE t4.i IS NULL;
|
||||
i i i i
|
||||
2 NULL NULL NULL
|
||||
3 3 NULL NULL
|
||||
4 4 4 NULL
|
||||
SELECT * FROM
|
||||
t1 LEFT JOIN
|
||||
( ( t2 LEFT JOIN
|
||||
t3
|
||||
ON t3.i = t2.i
|
||||
)
|
||||
)
|
||||
ON t2.i = t1.i
|
||||
WHERE t3.i IS NULL;
|
||||
i i i
|
||||
2 NULL NULL
|
||||
3 3 NULL
|
||||
SELECT * FROM
|
||||
t1 LEFT JOIN
|
||||
( ( t2 LEFT JOIN
|
||||
t3
|
||||
ON t3.i = t2.i
|
||||
)
|
||||
JOIN t4
|
||||
ON t4.i=t2.i
|
||||
)
|
||||
ON t2.i = t1.i
|
||||
WHERE t3.i IS NULL;
|
||||
i i i i
|
||||
2 NULL NULL NULL
|
||||
3 3 NULL 3
|
||||
4 NULL NULL NULL
|
||||
SELECT * FROM
|
||||
t1 LEFT JOIN
|
||||
( ( t2 LEFT JOIN
|
||||
t3
|
||||
ON t3.i = t2.i
|
||||
)
|
||||
JOIN (t4 AS t4a JOIN t4 AS t4b ON t4a.i=t4b.i)
|
||||
ON t4a.i=t2.i
|
||||
)
|
||||
ON t2.i = t1.i
|
||||
WHERE t3.i IS NULL;
|
||||
i i i i i
|
||||
2 NULL NULL NULL NULL
|
||||
3 3 NULL 3 3
|
||||
4 NULL NULL NULL NULL
|
||||
SELECT * FROM
|
||||
t1 LEFT JOIN
|
||||
( ( t2 LEFT JOIN
|
||||
t3
|
||||
ON t3.i = t2.i
|
||||
)
|
||||
JOIN (t4 AS t4a, t4 AS t4b)
|
||||
ON t4a.i=t2.i
|
||||
)
|
||||
ON t2.i = t1.i
|
||||
WHERE t3.i IS NULL;
|
||||
i i i i i
|
||||
2 NULL NULL NULL NULL
|
||||
3 3 NULL 3 0
|
||||
3 3 NULL 3 1
|
||||
3 3 NULL 3 2
|
||||
3 3 NULL 3 3
|
||||
4 NULL NULL NULL NULL
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
#
|
||||
# Bug#49322(Duplicate): Server is adding extra NULL row
|
||||
# on processing a WHERE clause
|
||||
#
|
||||
CREATE TABLE h (pk INT NOT NULL, col_int_key INT);
|
||||
INSERT INTO h VALUES (1,NULL),(4,2),(5,2),(3,4),(2,8);
|
||||
CREATE TABLE m (pk INT NOT NULL, col_int_key INT);
|
||||
INSERT INTO m VALUES (1,2),(2,7),(3,5),(4,7),(5,5),(6,NULL),(7,NULL),(8,9);
|
||||
CREATE TABLE k (pk INT NOT NULL, col_int_key INT);
|
||||
INSERT INTO k VALUES (1,9),(2,2),(3,5),(4,2),(5,7),(6,0),(7,5);
|
||||
SELECT TABLE1.pk FROM k TABLE1
|
||||
RIGHT JOIN h TABLE2 ON TABLE1.col_int_key=TABLE2.col_int_key
|
||||
RIGHT JOIN m TABLE4 ON TABLE2.col_int_key=TABLE4.col_int_key;
|
||||
pk
|
||||
2
|
||||
4
|
||||
2
|
||||
4
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
SELECT TABLE1.pk FROM k TABLE1
|
||||
RIGHT JOIN h TABLE2 ON TABLE1.col_int_key=TABLE2.col_int_key
|
||||
RIGHT JOIN m TABLE4 ON TABLE2.col_int_key=TABLE4.col_int_key
|
||||
WHERE TABLE1.pk IS NULL;
|
||||
pk
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
DROP TABLE h,m,k;
|
||||
End of 5.1 tests
|
||||
|
12
mysql-test/r/mysqld--defaults-file.result
Normal file
12
mysql-test/r/mysqld--defaults-file.result
Normal file
@ -0,0 +1,12 @@
|
||||
Could not open required defaults file: /path/with/no/extension
|
||||
Fatal error in defaults handling. Program aborted
|
||||
Could not open required defaults file: /path/with.ext
|
||||
Fatal error in defaults handling. Program aborted
|
||||
Could not open required defaults file: MYSQL_TEST_DIR/relative/path/with.ext
|
||||
Fatal error in defaults handling. Program aborted
|
||||
Could not open required defaults file: MYSQL_TEST_DIR/relative/path/without/extension
|
||||
Fatal error in defaults handling. Program aborted
|
||||
Could not open required defaults file: MYSQL_TEST_DIR/with.ext
|
||||
Fatal error in defaults handling. Program aborted
|
||||
Could not open required defaults file: MYSQL_TEST_DIR/no_extension
|
||||
Fatal error in defaults handling. Program aborted
|
@ -3,6 +3,10 @@ SHOW VARIABLES like 'slave_skip_errors';
|
||||
Variable_name Value
|
||||
slave_skip_errors OFF
|
||||
#
|
||||
# Bug#58026: massive recursion and crash in regular expression handling
|
||||
#
|
||||
SELECT '1' RLIKE RPAD('1', 10000, '(');
|
||||
#
|
||||
# WL#4284: Transactional DDL locking
|
||||
#
|
||||
# FLUSH PRIVILEGES should not implicitly unlock locked tables.
|
||||
|
@ -1425,8 +1425,9 @@ set session sort_buffer_size= 30000;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect sort_buffer_size value: '30000'
|
||||
set session max_sort_length= 2180;
|
||||
CALL mtr.add_suppression("Out of sort memory");
|
||||
select * from t1 order by b;
|
||||
ERROR HY001: Out of sort memory; increase server sort buffer size
|
||||
ERROR HY001: Out of sort memory, consider increasing server sort buffer size
|
||||
drop table t1;
|
||||
#
|
||||
# Bug #39844: Query Crash Mysql Server 5.0.67
|
||||
@ -1638,6 +1639,31 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL a 8 NULL 10 Using index; Using temporary; Using filesort
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 Using where
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Bug #59110: Memory leak of QUICK_SELECT_I allocated memory
|
||||
# and
|
||||
# Bug #59308: Incorrect result for
|
||||
SELECT DISTINCT <col>... ORDER BY <col> DESC
|
||||
|
||||
# Use Valgrind to detect #59110!
|
||||
#
|
||||
CREATE TABLE t1 (a INT,KEY (a));
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
||||
EXPLAIN SELECT DISTINCT a,1 FROM t1 WHERE a <> 1 ORDER BY a DESC;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index a a 5 NULL 10 Using where; Using index; Using filesort
|
||||
SELECT DISTINCT a,1 FROM t1 WHERE a <> 1 ORDER BY a DESC;
|
||||
a 1
|
||||
10 1
|
||||
9 1
|
||||
8 1
|
||||
7 1
|
||||
6 1
|
||||
5 1
|
||||
4 1
|
||||
3 1
|
||||
2 1
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug #38745: MySQL 5.1 optimizer uses filesort for ORDER BY
|
||||
|
@ -1,5 +1,18 @@
|
||||
drop table if exists t1, t2;
|
||||
#
|
||||
# Bug#57924: crash when creating partitioned table with
|
||||
# multiple columns in the partition key
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
|
||||
PARTITION BY KEY(a, b, a);
|
||||
ERROR HY000: Duplicate partition field name 'a'
|
||||
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
|
||||
PARTITION BY KEY(A, b);
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b))
|
||||
PARTITION BY KEY(a, b, A);
|
||||
ERROR HY000: Duplicate partition field name 'a'
|
||||
#
|
||||
# Bug#54483: valgrind errors when making warnings for multiline inserts
|
||||
# into partition
|
||||
#
|
||||
|
@ -330,4 +330,16 @@ mysqld is alive
|
||||
# Executing 'mysqldump'
|
||||
# Executing 'mysql_upgrade'
|
||||
The --upgrade-system-tables option was used, databases won't be touched.
|
||||
#
|
||||
# Bug #59657: Move the client authentication_pam plugin into the
|
||||
# server repository
|
||||
#
|
||||
CREATE USER uplain@localhost IDENTIFIED WITH 'cleartext_plugin_server'
|
||||
AS 'cleartext_test';
|
||||
## test plugin auth
|
||||
ERROR 28000: Access denied for user 'uplain'@'localhost' (using password: YES)
|
||||
select USER(),CURRENT_USER();
|
||||
USER() CURRENT_USER()
|
||||
uplain@localhost uplain@localhost
|
||||
DROP USER uplain@localhost;
|
||||
End of 5.5 tests
|
||||
|
@ -1666,4 +1666,105 @@ c_key c_notkey
|
||||
1 1
|
||||
3 3
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #57030: 'BETWEEN' evaluation is incorrect
|
||||
#
|
||||
CREATE TABLE t1(pk INT PRIMARY KEY, i4 INT);
|
||||
CREATE UNIQUE INDEX i4_uq ON t1(i4);
|
||||
INSERT INTO t1 VALUES (1,10), (2,20), (3,30);
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const i4_uq i4_uq 5 const 1
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 10;
|
||||
pk i4
|
||||
1 10
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN i4 AND i4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const i4_uq i4_uq 5 const 1
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN i4 AND i4;
|
||||
pk i4
|
||||
1 10
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN 10 AND i4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range i4_uq i4_uq 5 NULL 3 Using where
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN 10 AND i4;
|
||||
pk i4
|
||||
1 10
|
||||
2 20
|
||||
3 30
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN i4 AND 10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range i4_uq i4_uq 5 NULL 1 Using where
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN i4 AND 10;
|
||||
pk i4
|
||||
1 10
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN 10 AND 10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN 10 AND 10;
|
||||
pk i4
|
||||
1 10
|
||||
2 20
|
||||
3 30
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN 11 AND 11;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN 11 AND 11;
|
||||
pk i4
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN 100 AND 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
SELECT * FROM t1 WHERE 10 BETWEEN 100 AND 0;
|
||||
pk i4
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 100 AND 0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 100 AND 0;
|
||||
pk i4
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 99999999999999999;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range i4_uq i4_uq 5 NULL 2 Using where
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 99999999999999999;
|
||||
pk i4
|
||||
1 10
|
||||
2 20
|
||||
3 30
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 999999999999999 AND 30;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 999999999999999 AND 30;
|
||||
pk i4
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 10 AND '20';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range i4_uq i4_uq 5 NULL 1 Using where
|
||||
SELECT * FROM t1 WHERE i4 BETWEEN 10 AND '20';
|
||||
pk i4
|
||||
1 10
|
||||
2 20
|
||||
EXPLAIN
|
||||
SELECT * FROM t1, t1 as t2 WHERE t2.pk BETWEEN t1.i4 AND t1.i4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL i4_uq NULL NULL NULL 3
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.i4 1 Using where
|
||||
SELECT * FROM t1, t1 as t2 WHERE t2.pk BETWEEN t1.i4 AND t1.i4;
|
||||
pk i4 pk i4
|
||||
EXPLAIN
|
||||
SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL i4_uq NULL NULL NULL 3
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.i4 1 Using where
|
||||
SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk;
|
||||
pk i4 pk i4
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
8
mysql-test/r/ssl_and_innodb.result
Normal file
8
mysql-test/r/ssl_and_innodb.result
Normal file
@ -0,0 +1,8 @@
|
||||
CREATE TABLE t1(a int) engine=innodb;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SELECT DISTINCT
|
||||
convert((SELECT des_decrypt(2,1) AS a FROM t1 WHERE @a:=1), signed) as d
|
||||
FROM t1 ;
|
||||
d
|
||||
2
|
||||
DROP TABLE t1;
|
@ -22,7 +22,8 @@ insert into t1 (b) select b from t2;
|
||||
insert into t2 (b) select b from t1;
|
||||
insert into t1 (b) select b from t2;
|
||||
drop table t2;
|
||||
create table t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam data directory="MYSQLTEST_VARDIR/tmp" index directory="MYSQLTEST_VARDIR/run";
|
||||
create table t9 (a int not null auto_increment, b char(16) not null, primary key (a))
|
||||
engine=myisam data directory="MYSQLTEST_VARDIR/tmp" index directory="MYSQLTEST_VARDIR/run";
|
||||
insert into t9 select * from t1;
|
||||
check table t9;
|
||||
Table Op Msg_type Msg_text
|
||||
@ -56,11 +57,17 @@ t9 CREATE TABLE `t9` (
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=16725 DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/run/'
|
||||
create database mysqltest;
|
||||
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="/this-dir-does-not-exist";
|
||||
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a))
|
||||
engine=myisam index directory="/this-dir-does-not-exist";
|
||||
Got one of the listed errors
|
||||
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="MYSQLTEST_VARDIR/run";
|
||||
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a))
|
||||
engine=myisam index directory="not-hard-path";
|
||||
ERROR 42000: Incorrect table name 'not-hard-path'
|
||||
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a))
|
||||
engine=myisam index directory="MYSQLTEST_VARDIR/run";
|
||||
Got one of the listed errors
|
||||
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam data directory="MYSQLTEST_VARDIR/tmp";
|
||||
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a))
|
||||
engine=myisam data directory="MYSQLTEST_VARDIR/tmp";
|
||||
Got one of the listed errors
|
||||
alter table t9 rename mysqltest.t9;
|
||||
select count(*) from mysqltest.t9;
|
||||
|
@ -637,6 +637,17 @@ CAST(CAST('2008-07-29T10:42:51.1234567' AS DateTime) AS DECIMAL(30,7))
|
||||
20080729104251.1234560
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect datetime value: '2008-07-29T10:42:51.1234567'
|
||||
#
|
||||
# Bug#59173: Failure to handle DATE(TIME) values where Year, Month or
|
||||
# Day is ZERO
|
||||
#
|
||||
CREATE TABLE t1 (dt1 DATETIME);
|
||||
INSERT INTO t1 (dt1) VALUES ('0000-00-01 00:00:01');
|
||||
DELETE FROM t1 WHERE dt1 = '0000-00-01 00:00:01';
|
||||
# Should be empty
|
||||
SELECT * FROM t1;
|
||||
dt1
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Start of 5.5 tests
|
||||
|
@ -341,4 +341,18 @@ ta_y s tb_y s
|
||||
2001 2001 2001 2001
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #59211: Select Returns Different Value for min(year) Function
|
||||
#
|
||||
CREATE TABLE t1(c1 YEAR(4));
|
||||
INSERT INTO t1 VALUES (1901),(2155),(0000);
|
||||
SELECT * FROM t1;
|
||||
c1
|
||||
1901
|
||||
2155
|
||||
0000
|
||||
SELECT COUNT(*) AS total_rows, MIN(c1) AS min_value, MAX(c1) FROM t1;
|
||||
total_rows min_value MAX(c1)
|
||||
3 0 2155
|
||||
DROP TABLE t1;
|
||||
#
|
||||
End of 5.1 tests
|
||||
|
@ -448,6 +448,12 @@ DROP TABLE t1;
|
||||
select @v:=@v:=sum(1) from dual;
|
||||
@v:=@v:=sum(1)
|
||||
1
|
||||
CREATE TABLE t1(a DECIMAL(31,21));
|
||||
INSERT INTO t1 VALUES (0);
|
||||
SELECT (@v:=a) <> (@v:=1) FROM t1;
|
||||
(@v:=a) <> (@v:=1)
|
||||
1
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1(f1 INT AUTO_INCREMENT, PRIMARY KEY(f1));
|
||||
|
@ -1732,3 +1732,25 @@ set @@session.autocommit=t1_min(), @@session.autocommit=t1_max(),
|
||||
drop table t1;
|
||||
drop function t1_min;
|
||||
drop function t1_max;
|
||||
#
|
||||
# Bug #59884: setting charset to 2048 crashes
|
||||
#
|
||||
set session character_set_results = 2048;
|
||||
ERROR 42000: Unknown character set: '2048'
|
||||
set session character_set_client=2048;
|
||||
ERROR 42000: Unknown character set: '2048'
|
||||
set session character_set_connection=2048;
|
||||
ERROR 42000: Unknown character set: '2048'
|
||||
set session character_set_server=2048;
|
||||
ERROR 42000: Unknown character set: '2048'
|
||||
set session collation_server=2048;
|
||||
ERROR HY000: Unknown collation: '2048'
|
||||
set session character_set_filesystem=2048;
|
||||
ERROR 42000: Unknown character set: '2048'
|
||||
set session character_set_database=2048;
|
||||
ERROR 42000: Unknown character set: '2048'
|
||||
set session collation_connection=2048;
|
||||
ERROR HY000: Unknown collation: '2048'
|
||||
set session collation_database=2048;
|
||||
ERROR HY000: Unknown collation: '2048'
|
||||
End of 5.5 tests
|
||||
|
97
mysql-test/std_data/checkDBI_DBD-mysql.pl
Normal file
97
mysql-test/std_data/checkDBI_DBD-mysql.pl
Normal file
@ -0,0 +1,97 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public
|
||||
# License as published by the Free Software Foundation; version 2
|
||||
# of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# This perl script checks for availability of the Perl modules DBI and
|
||||
# DBD::mysql using the "current" perl interpreter.
|
||||
#
|
||||
# Useful for test environment checking before testing executable perl scripts
|
||||
# in the MySQL Server distribution.
|
||||
#
|
||||
# NOTE: The "shebang" on the first line of this script should always point to
|
||||
# /usr/bin/perl, so that we can use this script to check whether or not we
|
||||
# support running perl scripts with such a shebang without specifying the
|
||||
# perl interpreter on the command line. Such a script is mysqlhotcopy.
|
||||
#
|
||||
# When run as "checkDBI_DBD-mysql.pl" the shebang line will be evaluated
|
||||
# and used. When run as "perl checkDBI_DBD-mysql.pl" the shebang line is
|
||||
# not used.
|
||||
#
|
||||
# NOTE: This script will create a temporary file in MTR's tmp dir.
|
||||
# If modules are found, a mysql-test statement which sets a special
|
||||
# variable is written to this file. If one of the modules is not found
|
||||
# (or cannot be loaded), the file will remain empty.
|
||||
# A test (or include file) which sources that file can then easily do
|
||||
# an if-check on the special variable to determine success or failure.
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# --let $perlChecker= $MYSQLTEST_VARDIR/std_data/checkDBI_DBD-mysql.pl
|
||||
# --let $resultFile= $MYSQL_TMP_DIR/dbidbd-mysql.txt
|
||||
# --chmod 0755 $perlChecker
|
||||
# --exec $perlChecker
|
||||
# --source $resultFile
|
||||
# if (!$dbidbd) {
|
||||
# --skip Test needs Perl modules DBI and DBD::mysql
|
||||
# }
|
||||
#
|
||||
# The calling script is also responsible for cleaning up after use:
|
||||
#
|
||||
# --remove_file $resultFile
|
||||
#
|
||||
# Windows notes:
|
||||
# - shebangs may work differently - call this script with "perl " in front.
|
||||
#
|
||||
# See mysql-test/include/have_dbi_dbd-mysql.inc for example use of this script.
|
||||
# This script should be executable for the user running MTR.
|
||||
#
|
||||
################################################################################
|
||||
|
||||
BEGIN {
|
||||
# By using eval inside BEGIN we can suppress warnings and continue after.
|
||||
# We need to catch "Can't locate" as well as "Can't load" errors.
|
||||
eval{
|
||||
$FOUND_DBI=0;
|
||||
$FOUND_DBD_MYSQL=0;
|
||||
|
||||
# Check for DBI module:
|
||||
$FOUND_DBI=1 if require DBI;
|
||||
|
||||
# Check for DBD::mysql module
|
||||
$FOUND_DBD_MYSQL=1 if require DBD::mysql;
|
||||
};
|
||||
};
|
||||
|
||||
# Open a file to be used for transfer of result back to mysql-test.
|
||||
# The file must be created whether we write to it or not, otherwise mysql-test
|
||||
# will complain if trying to source it.
|
||||
# An empty file indicates failure to load modules.
|
||||
open(FILE, ">", $ENV{'MYSQL_TMP_DIR'}.'/dbidbd-mysql.txt');
|
||||
|
||||
if ($FOUND_DBI && $FOUND_DBD_MYSQL) {
|
||||
# write a mysql-test command setting a variable to indicate success
|
||||
print(FILE 'let $dbidbd= FOUND_DBI_DBD-MYSQL;'."\n");
|
||||
}
|
||||
|
||||
# close the file.
|
||||
close(FILE);
|
||||
|
||||
1;
|
||||
|
@ -2418,7 +2418,7 @@ INSERT INTO t1 SELECT * FROM t2 LIMIT 1;
|
||||
DROP TABLE t1,t2;
|
||||
"Should NOT have any warning message issued in the following func7() and trig"
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a CHAR(40));
|
||||
CREATE TABLE t2 (a TEXT);
|
||||
CREATE TABLE trigger_table (a CHAR(7));
|
||||
CREATE FUNCTION func7()
|
||||
RETURNS INT
|
||||
|
@ -481,7 +481,7 @@ DROP TABLE t1,t2;
|
||||
|
||||
--echo "Should NOT have any warning message issued in the following func7() and trig"
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a CHAR(40));
|
||||
CREATE TABLE t2 (a TEXT);
|
||||
CREATE TABLE trigger_table (a CHAR(7));
|
||||
DELIMITER |;
|
||||
CREATE FUNCTION func7()
|
||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
CREATE TABLE t1(c1 CHAR(100) NOT NULL);
|
||||
PREPARE stmt1 FROM 'INSERT INTO t1 (c1) VALUES(?)';
|
||||
|
30
mysql-test/suite/innodb/r/innodb-autoinc-56228.result
Normal file
30
mysql-test/suite/innodb/r/innodb-autoinc-56228.result
Normal file
@ -0,0 +1,30 @@
|
||||
DROP TABLE IF EXISTS t1_56228;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1_56228'
|
||||
DROP TABLE IF EXISTS t2_56228;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't2_56228'
|
||||
DROP FUNCTION IF EXISTS bug56228;
|
||||
Warnings:
|
||||
Note 1305 FUNCTION test.bug56228 does not exist
|
||||
CREATE TEMPORARY TABLE t1_56228(
|
||||
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TEMPORARY TABLE t2_56228(
|
||||
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE FUNCTION bug56228() RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
DROP TEMPORARY TABLE t1_56228;
|
||||
RETURN 42;
|
||||
END //
|
||||
SELECT bug56228();
|
||||
bug56228()
|
||||
42
|
||||
DROP FUNCTION bug56228;
|
||||
DROP TEMPORARY TABLE t2_56228;
|
||||
DROP TEMPORARY TABLE IF EXISTS t1_56228;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1_56228'
|
95
mysql-test/suite/innodb/r/innodb_bug30423.result
Normal file
95
mysql-test/suite/innodb/r/innodb_bug30423.result
Normal file
@ -0,0 +1,95 @@
|
||||
set global innodb_stats_method = default;
|
||||
select @@innodb_stats_method;
|
||||
@@innodb_stats_method
|
||||
nulls_equal
|
||||
select count(*) from bug30243_3 where org_id is not NULL;
|
||||
count(*)
|
||||
20
|
||||
select count(*) from bug30243_3 where org_id is NULL;
|
||||
count(*)
|
||||
16384
|
||||
select count(*) from bug30243_2 where org_id is not NULL;
|
||||
count(*)
|
||||
224
|
||||
select count(*) from bug30243_2 where org_id is NULL;
|
||||
count(*)
|
||||
65536
|
||||
select @@innodb_stats_method;
|
||||
@@innodb_stats_method
|
||||
nulls_equal
|
||||
analyze table bug30243_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_1 analyze status OK
|
||||
analyze table bug30243_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_2 analyze status OK
|
||||
analyze table bug30243_3;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_3 analyze status OK
|
||||
set global innodb_stats_method = "NULL";
|
||||
ERROR 42000: Variable 'innodb_stats_method' can't be set to the value of 'NULL'
|
||||
set global innodb_stats_method = "nulls_ignored";
|
||||
select @@innodb_stats_method;
|
||||
@@innodb_stats_method
|
||||
nulls_ignored
|
||||
analyze table bug30243_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_1 analyze status OK
|
||||
analyze table bug30243_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_2 analyze status OK
|
||||
analyze table bug30243_3;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_3 analyze status OK
|
||||
explain SELECT COUNT(*), 0
|
||||
FROM bug30243_1 orgs
|
||||
LEFT JOIN bug30243_3 sa_opportunities
|
||||
ON orgs.org_id=sa_opportunities.org_id
|
||||
LEFT JOIN bug30243_2 contacts
|
||||
ON orgs.org_id=contacts.org_id ;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE orgs index NULL org_id 4 NULL 128 Using index
|
||||
1 SIMPLE sa_opportunities ref org_id org_id 5 test.orgs.org_id 1 Using index
|
||||
1 SIMPLE contacts ref contacts$org_id contacts$org_id 5 test.orgs.org_id 1 Using index
|
||||
select @@innodb_stats_method;
|
||||
@@innodb_stats_method
|
||||
nulls_ignored
|
||||
set global innodb_stats_method = "nulls_unequal";
|
||||
select @@innodb_stats_method;
|
||||
@@innodb_stats_method
|
||||
nulls_unequal
|
||||
analyze table bug30243_1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_1 analyze status OK
|
||||
analyze table bug30243_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_2 analyze status OK
|
||||
analyze table bug30243_3;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug30243_3 analyze status OK
|
||||
explain SELECT COUNT(*), 0
|
||||
FROM bug30243_1 orgs
|
||||
LEFT JOIN bug30243_3 sa_opportunities
|
||||
ON orgs.org_id=sa_opportunities.org_id
|
||||
LEFT JOIN bug30243_2 contacts
|
||||
ON orgs.org_id=contacts.org_id;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE orgs index NULL org_id 4 NULL 128 Using index
|
||||
1 SIMPLE sa_opportunities ref org_id org_id 5 test.orgs.org_id 1 Using index
|
||||
1 SIMPLE contacts ref contacts$org_id contacts$org_id 5 test.orgs.org_id 1 Using index
|
||||
SELECT COUNT(*) FROM table_bug30423 WHERE org_id IS NULL;
|
||||
COUNT(*)
|
||||
1024
|
||||
set global innodb_stats_method = "nulls_unequal";
|
||||
analyze table table_bug30423;
|
||||
Table Op Msg_type Msg_text
|
||||
test.table_bug30423 analyze status OK
|
||||
set global innodb_stats_method = "nulls_ignored";
|
||||
analyze table table_bug30423;
|
||||
Table Op Msg_type Msg_text
|
||||
test.table_bug30423 analyze status OK
|
||||
set global innodb_stats_method = nulls_equal;
|
||||
drop table bug30243_2;
|
||||
drop table bug30243_1;
|
||||
drop table bug30243_3;
|
||||
drop table table_bug30423;
|
@ -585,5 +585,17 @@ COUNT(*)
|
||||
2
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# Test for bug #58650 "Failing assertion: primary_key_no == -1 ||
|
||||
# primary_key_no == 0".
|
||||
#
|
||||
drop table if exists t1;
|
||||
# The minimal test case.
|
||||
create table t1 (a int not null, b linestring not null, unique key b (b(12)), unique key a (a));
|
||||
drop table t1;
|
||||
# The original test case.
|
||||
create table t1 (a int not null, b linestring not null, unique key b (b(12)));
|
||||
create unique index a on t1(a);
|
||||
drop table t1;
|
||||
create table t1 (g geometry not null, spatial gk(g)) engine=innodb;
|
||||
ERROR HY000: The used table type doesn't support SPATIAL indexes
|
||||
|
@ -0,0 +1 @@
|
||||
--innodb_autoinc_lock_mode=0
|
33
mysql-test/suite/innodb/t/innodb-autoinc-56228.test
Normal file
33
mysql-test/suite/innodb/t/innodb-autoinc-56228.test
Normal file
@ -0,0 +1,33 @@
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
##
|
||||
# Bug #56228: dropping tables from within an active statement crashes server
|
||||
#
|
||||
DROP TABLE IF EXISTS t1_56228;
|
||||
DROP TABLE IF EXISTS t2_56228;
|
||||
DROP FUNCTION IF EXISTS bug56228;
|
||||
|
||||
CREATE TEMPORARY TABLE t1_56228(
|
||||
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
CREATE TEMPORARY TABLE t2_56228(
|
||||
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
||||
DELIMITER //;
|
||||
|
||||
CREATE FUNCTION bug56228() RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
INSERT INTO t1_56228 VALUES(NULL);
|
||||
INSERT INTO t2_56228 VALUES(NULL);
|
||||
DROP TEMPORARY TABLE t1_56228;
|
||||
RETURN 42;
|
||||
END //
|
||||
|
||||
DELIMITER ;//
|
||||
|
||||
SELECT bug56228();
|
||||
|
||||
DROP FUNCTION bug56228;
|
||||
DROP TEMPORARY TABLE t2_56228;
|
||||
DROP TEMPORARY TABLE IF EXISTS t1_56228;
|
211
mysql-test/suite/innodb/t/innodb_bug30423.test
Normal file
211
mysql-test/suite/innodb/t/innodb_bug30423.test
Normal file
@ -0,0 +1,211 @@
|
||||
# Test for Bug #30423, InnoDBs treatment of NULL in index stats causes
|
||||
# bad "rows examined" estimates.
|
||||
# Implemented InnoDB system variable "innodb_stats_method" with
|
||||
# "nulls_equal" (default), "nulls_unequal", and "nulls_ignored" options.
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
let $innodb_stats_method_orig = `select @@innodb_stats_method`;
|
||||
|
||||
# default setting for innodb_stats_method is "nulls_equal"
|
||||
set global innodb_stats_method = default;
|
||||
|
||||
select @@innodb_stats_method;
|
||||
|
||||
# create three tables, bug30243_1, bug30243_2 and bug30243_3.
|
||||
# The test scenario is adopted from original bug #30423 report.
|
||||
# table bug30243_1 and bug30243_3 have many NULL values
|
||||
|
||||
-- disable_result_log
|
||||
-- disable_query_log
|
||||
|
||||
DROP TABLE IF EXISTS bug30243_1;
|
||||
CREATE TABLE bug30243_1 (
|
||||
org_id int(11) NOT NULL default '0',
|
||||
UNIQUE KEY (org_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
LOCK TABLES bug30243_1 WRITE;
|
||||
INSERT INTO bug30243_1 VALUES (11),(15),(16),(17),(19),(20),(21),(23),(24),
|
||||
(25),(26),(27),(28),(29),(30),(31),(32),(33),(34),(35),(37),(38),(40),(41),
|
||||
(42),(43),(44),(45),(46),(47),(48),(49),(50),(51),(52),(53),(54),(55),(56),
|
||||
(57),(58),(59),(60),(61),(62),(63),(64),(65),(66),(67),(68),(69),(70),(71),
|
||||
(72),(73),(74),(75),(76),(77),(78),(79),(80),(81),(82),(83),(84),(85),(86),
|
||||
(87),(88),(89),(90),(91),(92),(93),(94),(95),(96),(97),(98),(99),(100),(101),
|
||||
(102),(103),(104),(105),(106),(107),(108),(109),(110),(111),(112),(113),(114),
|
||||
(115),(116),(117),(118),(119),(120),(121),(122),(123),(124),(125),(126),(127),
|
||||
(128),(129),(130),(131),(132),(133),(134),(135),(136),(137),(138),(139),(140),
|
||||
(141),(142),(143),(144),(145);
|
||||
UNLOCK TABLES;
|
||||
|
||||
DROP TABLE IF EXISTS bug30243_3;
|
||||
CREATE TABLE bug30243_3 (
|
||||
org_id int(11) default NULL,
|
||||
KEY (org_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
INSERT INTO bug30243_3 VALUES (NULL);
|
||||
|
||||
begin;
|
||||
let $i=14;
|
||||
while ($i)
|
||||
{
|
||||
INSERT INTO bug30243_3 SELECT NULL FROM bug30243_3;
|
||||
dec $i;
|
||||
}
|
||||
|
||||
INSERT INTO bug30243_3 VALUES (34),(34),(35),(56),(58),(62),(62),(64),(65),(66),(80),(135),(137),(138),(139),(140),(142),(143),(144),(145);
|
||||
commit;
|
||||
|
||||
DROP TABLE IF EXISTS bug30243_2;
|
||||
CREATE TABLE bug30243_2 (
|
||||
org_id int(11) default NULL,
|
||||
KEY `contacts$org_id` (org_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
INSERT INTO bug30243_2 VALUES (NULL);
|
||||
|
||||
begin;
|
||||
let $i=16;
|
||||
while ($i)
|
||||
{
|
||||
INSERT INTO bug30243_2 SELECT NULL FROM bug30243_2;
|
||||
dec $i;
|
||||
}
|
||||
|
||||
INSERT INTO bug30243_2 VALUES (11),(15),(16),(17),(20),(21),(23),(24),(25),
|
||||
(26),(27),(28),(29),(30),(31),(32),(33),(34),(37),(38),(40),(41),(42),(43),
|
||||
(44),(45),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),
|
||||
(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),
|
||||
(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),
|
||||
(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),
|
||||
(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),
|
||||
(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(46),(48),
|
||||
(48),(50),(51),(52),(52),(53),(54),(55),(57),(60),(61),(62),(62),(62),(62),
|
||||
(62),(63),(64),(64),(65),(66),(66),(67),(68),(69),(70),(71),(72),(73),(74),
|
||||
(75),(76),(77),(78),(79),(80),(80),(81),(82),(83),(84),(85),(86),(87),(88),
|
||||
(89),(90),(91),(92),(93),(94),(95),(96),(97),(98),(99),(100),(101),(102),
|
||||
(103),(104),(105),(106),(107),(108),(109),(110),(111),(112),(113),(114),
|
||||
(115),(116),(117),(118),(119),(120),(121),(122),(123),(124),(125),(126),
|
||||
(127),(128),(129),(130),(131),(132),(133),(133),(135),(135),(135),(135),
|
||||
(136),(136),(138),(138),(139),(139),(139),(140),(141),(141),(142),(143),
|
||||
(143),(145),(145);
|
||||
commit;
|
||||
|
||||
|
||||
-- enable_result_log
|
||||
-- enable_query_log
|
||||
|
||||
# check tables's value
|
||||
select count(*) from bug30243_3 where org_id is not NULL;
|
||||
select count(*) from bug30243_3 where org_id is NULL;
|
||||
|
||||
select count(*) from bug30243_2 where org_id is not NULL;
|
||||
select count(*) from bug30243_2 where org_id is NULL;
|
||||
|
||||
select @@innodb_stats_method;
|
||||
|
||||
analyze table bug30243_1;
|
||||
analyze table bug30243_2;
|
||||
analyze table bug30243_3;
|
||||
|
||||
# Following query plan shows that we over estimate the rows per
|
||||
# unique value (since there are many NULLs).
|
||||
# Skip this query log since the stats estimate could vary from runs
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
explain SELECT COUNT(*), 0
|
||||
FROM bug30243_1 orgs
|
||||
LEFT JOIN bug30243_3 sa_opportunities
|
||||
ON orgs.org_id=sa_opportunities.org_id
|
||||
LEFT JOIN bug30243_2 contacts
|
||||
ON orgs.org_id=contacts.org_id ;
|
||||
-- enable_query_log
|
||||
-- enable_result_log
|
||||
|
||||
# following set operation will fail
|
||||
#--error ER_WRONG_VALUE_FOR_VAR
|
||||
--error 1231
|
||||
set global innodb_stats_method = "NULL";
|
||||
|
||||
set global innodb_stats_method = "nulls_ignored";
|
||||
|
||||
select @@innodb_stats_method;
|
||||
|
||||
# Regenerate the stats with "nulls_ignored" option
|
||||
|
||||
analyze table bug30243_1;
|
||||
analyze table bug30243_2;
|
||||
analyze table bug30243_3;
|
||||
|
||||
# Following query plan shows that we get the correct rows per
|
||||
# unique value (should be approximately 1 row per value)
|
||||
explain SELECT COUNT(*), 0
|
||||
FROM bug30243_1 orgs
|
||||
LEFT JOIN bug30243_3 sa_opportunities
|
||||
ON orgs.org_id=sa_opportunities.org_id
|
||||
LEFT JOIN bug30243_2 contacts
|
||||
ON orgs.org_id=contacts.org_id ;
|
||||
|
||||
select @@innodb_stats_method;
|
||||
|
||||
# Try the "nulls_unequal" option
|
||||
set global innodb_stats_method = "nulls_unequal";
|
||||
|
||||
select @@innodb_stats_method;
|
||||
|
||||
analyze table bug30243_1;
|
||||
analyze table bug30243_2;
|
||||
analyze table bug30243_3;
|
||||
|
||||
# Following query plan shows that we get the correct rows per
|
||||
# unique value (~1)
|
||||
explain SELECT COUNT(*), 0
|
||||
FROM bug30243_1 orgs
|
||||
LEFT JOIN bug30243_3 sa_opportunities
|
||||
ON orgs.org_id=sa_opportunities.org_id
|
||||
LEFT JOIN bug30243_2 contacts
|
||||
ON orgs.org_id=contacts.org_id;
|
||||
|
||||
|
||||
# Create a table with all NULL values, make sure the stats calculation
|
||||
# does not crash with table of all NULL values
|
||||
-- disable_query_log
|
||||
CREATE TABLE table_bug30423 (
|
||||
org_id int(11) default NULL,
|
||||
KEY(org_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
INSERT INTO `table_bug30423` VALUES (NULL);
|
||||
|
||||
begin;
|
||||
let $i=10;
|
||||
while ($i)
|
||||
{
|
||||
INSERT INTO table_bug30423 SELECT NULL FROM table_bug30423;
|
||||
dec $i;
|
||||
}
|
||||
commit;
|
||||
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM table_bug30423 WHERE org_id IS NULL;
|
||||
|
||||
# calculate the statistics for the table for "nulls_ignored" and
|
||||
# "nulls_unequal" option
|
||||
set global innodb_stats_method = "nulls_unequal";
|
||||
analyze table table_bug30423;
|
||||
|
||||
set global innodb_stats_method = "nulls_ignored";
|
||||
analyze table table_bug30423;
|
||||
|
||||
|
||||
eval set global innodb_stats_method = $innodb_stats_method_orig;
|
||||
|
||||
drop table bug30243_2;
|
||||
|
||||
drop table bug30243_1;
|
||||
|
||||
drop table bug30243_3;
|
||||
|
||||
drop table table_bug30423;
|
@ -8,6 +8,11 @@
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
|
||||
if ($VALGRIND_TEST)
|
||||
{
|
||||
call mtr.add_suppression("InnoDB: Warning: a long semaphore wait:");
|
||||
}
|
||||
|
||||
SET foreign_key_checks=0;
|
||||
|
||||
DROP TABLE IF EXISTS bug56143_1;
|
||||
|
@ -29,14 +29,10 @@ DELETE FROM t0_definition;
|
||||
let $MYSQLD_DATADIR= `select LEFT(@@datadir, LENGTH(@@datadir)-1)`;
|
||||
#echo MYSQLD_DATADIR: $MYSQLD_DATADIR;
|
||||
|
||||
# Dump the current definition of the table t1 to tmp1
|
||||
# This complicated method - let another mysqltest collect the output - is used
|
||||
# because of two reasons
|
||||
# Save the current definition of the table t1
|
||||
# - SHOW CREATE TABLE t1 is at least currently most probably more reliable than
|
||||
# the corresponding SELECT on the INFORMATION_SCHEMA
|
||||
# - SHOW CREATE TABLE .. cannot write its out put into a file like SELECT
|
||||
let $show_file= $MYSQLD_DATADIR/test/tmp1;
|
||||
--exec echo "SHOW CREATE TABLE t1; exit; " | $MYSQL_TEST > $show_file 2>&1
|
||||
let $show_create= `SHOW CREATE TABLE t1`;
|
||||
if ($do_file_tests)
|
||||
{
|
||||
# List the files belonging to the table t1
|
||||
@ -57,12 +53,13 @@ if (!$do_file_tests)
|
||||
|
||||
# Insert the current definition of the table t1 into t0_definition
|
||||
eval INSERT INTO t0_definition SET state = 'old',
|
||||
create_command = load_file('$show_file'),
|
||||
create_command = "$show_create",
|
||||
file_list = @aux;
|
||||
|
||||
# Print the create table statement into the protocol
|
||||
# Added the concat to avoid changing the result files
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR '\r' ''
|
||||
SELECT create_command FROM t0_definition WHERE state = 'old';
|
||||
SELECT concat('SHOW CREATE TABLE t1;\nTable\tCreate Table\n',create_command,'\n') as `create_command` FROM t0_definition WHERE state = 'old';
|
||||
if ($do_file_tests)
|
||||
{
|
||||
# We stored the list of files, therefore printing the content makes sense
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user