Merge branch '10.2' into 10.3
This commit is contained in:
commit
41a163ac5c
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -30,6 +30,6 @@ pcre/testdata/greppatN4 -text
|
|||||||
*.c diff=cpp
|
*.c diff=cpp
|
||||||
*.h diff=cpp
|
*.h diff=cpp
|
||||||
*.cc diff=cpp
|
*.cc diff=cpp
|
||||||
*.ic diff=cpp
|
*.inl diff=cpp
|
||||||
*.cpp diff=cpp
|
*.cpp diff=cpp
|
||||||
*.java diff=cpp
|
*.java diff=cpp
|
||||||
|
@ -407,6 +407,10 @@ IF(WITH_UNIT_TESTS)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
INCLUDE(cpack_tgz)
|
||||||
|
INCLUDE(cpack_rpm)
|
||||||
|
INCLUDE(cpack_deb)
|
||||||
|
|
||||||
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
|
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
|
||||||
|
|
||||||
INCLUDE(submodules)
|
INCLUDE(submodules)
|
||||||
|
16
appveyor.yml
16
appveyor.yml
@ -1,15 +1,5 @@
|
|||||||
init:
|
|
||||||
# Install bison
|
|
||||||
- choco feature disable --name showDownloadProgress
|
|
||||||
- choco install -y winflexbison
|
|
||||||
- C:\ProgramData\chocolatey\lib\winflexbison\tools\win_bison.exe --version
|
|
||||||
|
|
||||||
version: build-{build}~branch-{branch}
|
version: build-{build}~branch-{branch}
|
||||||
|
|
||||||
cache:
|
|
||||||
- C:\ProgramData\chocolatey\bin -> appveyor.yml
|
|
||||||
- C:\ProgramData\chocolatey\lib -> appveyor.yml
|
|
||||||
|
|
||||||
clone_depth: 1
|
clone_depth: 1
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
@ -26,8 +16,8 @@ build_script:
|
|||||||
- cd _build
|
- cd _build
|
||||||
- set BUILD_TYPE=MinSizeRel
|
- set BUILD_TYPE=MinSizeRel
|
||||||
- set GENERATOR=-GNinja
|
- set GENERATOR=-GNinja
|
||||||
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
|
- call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
- cmake -E time cmake %GENERATOR% .. -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DMYSQL_MAINTAINER_MODE=ERR -DFAST_BUILD=1 -DBISON_EXECUTABLE=C:\ProgramData\chocolatey\lib\winflexbison\tools\win_bison.exe -DPLUGIN_PERFSCHEMA=NO -DPLUGIN_FEEDBACK=NO
|
- cmake -E time cmake %GENERATOR% .. -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DMYSQL_MAINTAINER_MODE=ERR -DFAST_BUILD=1 -DBISON_EXECUTABLE=C:\cygwin64\bin\bison.exe -DPLUGIN_PERFSCHEMA=NO -DPLUGIN_FEEDBACK=NO
|
||||||
- set /A jobs=2*%NUMBER_OF_PROCESSORS%
|
- set /A jobs=2*%NUMBER_OF_PROCESSORS%
|
||||||
- cmake -E time cmake --build . -j %jobs% --config %BUILD_TYPE% --target minbuild
|
- cmake -E time cmake --build . -j %jobs% --config %BUILD_TYPE% --target minbuild
|
||||||
|
|
||||||
@ -37,4 +27,4 @@ test_script:
|
|||||||
- set /A parallel=4*%NUMBER_OF_PROCESSORS%
|
- set /A parallel=4*%NUMBER_OF_PROCESSORS%
|
||||||
- perl mysql-test-run.pl --force --max-test-fail=10 --retry=2 -parallel=%parallel% --testcase-timeout=4 --suite=main --skip-test-list=unstable-tests --mysqld=--loose-innodb-flush-log-at-trx-commit=2
|
- perl mysql-test-run.pl --force --max-test-fail=10 --retry=2 -parallel=%parallel% --testcase-timeout=4 --suite=main --skip-test-list=unstable-tests --mysqld=--loose-innodb-flush-log-at-trx-commit=2
|
||||||
|
|
||||||
image: Visual Studio 2019
|
image: Visual Studio 2022
|
||||||
|
@ -101,6 +101,7 @@ enum options_client
|
|||||||
OPT_SSL_CRL, OPT_SSL_CRLPATH,
|
OPT_SSL_CRL, OPT_SSL_CRLPATH,
|
||||||
OPT_IGNORE_DATA,
|
OPT_IGNORE_DATA,
|
||||||
OPT_PRINT_ROW_COUNT, OPT_PRINT_ROW_EVENT_POSITIONS,
|
OPT_PRINT_ROW_COUNT, OPT_PRINT_ROW_EVENT_POSITIONS,
|
||||||
|
OPT_CHECK_IF_UPGRADE_NEEDED,
|
||||||
OPT_MAX_CLIENT_OPTION /* should be always the last */
|
OPT_MAX_CLIENT_OPTION /* should be always the last */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||||
|
|
||||||
#define VER "1.4"
|
#define VER "2.0"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_WAIT_H
|
#ifdef HAVE_SYS_WAIT_H
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
@ -37,13 +37,15 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int phase = 0;
|
static int phase = 0;
|
||||||
|
static int info_file= -1;
|
||||||
static const int phases_total = 7;
|
static const int phases_total = 7;
|
||||||
static char mysql_path[FN_REFLEN];
|
static char mysql_path[FN_REFLEN];
|
||||||
static char mysqlcheck_path[FN_REFLEN];
|
static char mysqlcheck_path[FN_REFLEN];
|
||||||
|
|
||||||
static my_bool opt_force, opt_verbose, debug_info_flag, debug_check_flag,
|
static my_bool debug_info_flag, debug_check_flag,
|
||||||
opt_systables_only, opt_version_check;
|
opt_systables_only, opt_version_check;
|
||||||
static my_bool opt_not_used, opt_silent;
|
static my_bool opt_not_used, opt_silent, opt_check_upgrade;
|
||||||
|
static uint opt_force, opt_verbose;
|
||||||
static uint my_end_arg= 0;
|
static uint my_end_arg= 0;
|
||||||
static char *opt_user= (char*)"root";
|
static char *opt_user= (char*)"root";
|
||||||
|
|
||||||
@ -69,7 +71,7 @@ static char **defaults_argv;
|
|||||||
|
|
||||||
static my_bool not_used; /* Can't use GET_BOOL without a value pointer */
|
static my_bool not_used; /* Can't use GET_BOOL without a value pointer */
|
||||||
|
|
||||||
char upgrade_from_version[sizeof("10.20.456-MariaDB")+1];
|
char upgrade_from_version[sizeof("10.20.456-MariaDB")+30];
|
||||||
|
|
||||||
static my_bool opt_write_binlog;
|
static my_bool opt_write_binlog;
|
||||||
|
|
||||||
@ -95,8 +97,8 @@ static struct my_option my_long_options[]=
|
|||||||
{"debug", '#', "This is a non-debug version. Catch this and exit.",
|
{"debug", '#', "This is a non-debug version. Catch this and exit.",
|
||||||
0, 0, 0, GET_DISABLED, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_DISABLED, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#else
|
#else
|
||||||
{"debug", '#', "Output debug log.", &default_dbug_option,
|
{"debug", '#', "Output debug log.",
|
||||||
&default_dbug_option, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
{"debug-check", OPT_DEBUG_CHECK, "Check memory and open file usage at exit.",
|
{"debug-check", OPT_DEBUG_CHECK, "Check memory and open file usage at exit.",
|
||||||
&debug_check_flag, &debug_check_flag,
|
&debug_check_flag, &debug_check_flag,
|
||||||
@ -110,9 +112,13 @@ static struct my_option my_long_options[]=
|
|||||||
"Default authentication client-side plugin to use.",
|
"Default authentication client-side plugin to use.",
|
||||||
&opt_default_auth, &opt_default_auth, 0,
|
&opt_default_auth, &opt_default_auth, 0,
|
||||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"check-if-upgrade-is-needed", OPT_CHECK_IF_UPGRADE_NEEDED,
|
||||||
|
"Exits with status 0 if an upgrades is required, 1 otherwise.",
|
||||||
|
&opt_check_upgrade, &opt_check_upgrade,
|
||||||
|
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"force", 'f', "Force execution of mysqlcheck even if mysql_upgrade "
|
{"force", 'f', "Force execution of mysqlcheck even if mysql_upgrade "
|
||||||
"has already been executed for the current version of MySQL.",
|
"has already been executed for the current version of MariaDB.",
|
||||||
&opt_force, &opt_force, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
&opt_not_used, &opt_not_used, 0 , GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"host", 'h', "Connect to host.", 0,
|
{"host", 'h', "Connect to host.", 0,
|
||||||
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
#define PASSWORD_OPT 12
|
#define PASSWORD_OPT 12
|
||||||
@ -193,6 +199,12 @@ static void free_used_memory(void)
|
|||||||
dynstr_free(&conn_args);
|
dynstr_free(&conn_args);
|
||||||
if (cnf_file_path)
|
if (cnf_file_path)
|
||||||
my_delete(cnf_file_path, MYF(MY_WME));
|
my_delete(cnf_file_path, MYF(MY_WME));
|
||||||
|
if (info_file >= 0)
|
||||||
|
{
|
||||||
|
(void) my_lock(info_file, F_UNLCK, 0, 1, MYF(0));
|
||||||
|
my_close(info_file, MYF(MY_WME));
|
||||||
|
info_file= -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -238,6 +250,13 @@ static void verbose(const char *fmt, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void print_error(const char *error_msg, DYNAMIC_STRING *output)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s\n", error_msg);
|
||||||
|
fprintf(stderr, "%s", output->str);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Add one option - passed to mysql_upgrade on command line
|
Add one option - passed to mysql_upgrade on command line
|
||||||
or by defaults file(my.cnf) - to a dynamic string, in
|
or by defaults file(my.cnf) - to a dynamic string, in
|
||||||
@ -271,6 +290,7 @@ static void add_one_option_cnf_file(DYNAMIC_STRING *ds,
|
|||||||
dynstr_append(ds, "\n");
|
dynstr_append(ds, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static my_bool
|
static my_bool
|
||||||
get_one_option(int optid, const struct my_option *opt,
|
get_one_option(int optid, const struct my_option *opt,
|
||||||
char *argument)
|
char *argument)
|
||||||
@ -339,11 +359,17 @@ get_one_option(int optid, const struct my_option *opt,
|
|||||||
my_progname, VER, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE);
|
my_progname, VER, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE);
|
||||||
die(0);
|
die(0);
|
||||||
break;
|
break;
|
||||||
|
case 'f': /* --force */
|
||||||
|
opt_force++;
|
||||||
|
if (argument == disabled_my_option)
|
||||||
|
opt_force= 0;
|
||||||
|
add_option= 0;
|
||||||
|
break;
|
||||||
case OPT_SILENT:
|
case OPT_SILENT:
|
||||||
opt_verbose= 0;
|
opt_verbose= 0;
|
||||||
add_option= 0;
|
add_option= 0;
|
||||||
break;
|
break;
|
||||||
case 'f': /* --force */
|
case OPT_CHECK_IF_UPGRADE_NEEDED: /* --check-if-upgrade-needed */
|
||||||
case 's': /* --upgrade-system-tables */
|
case 's': /* --upgrade-system-tables */
|
||||||
case OPT_WRITE_BINLOG: /* --write-binlog */
|
case OPT_WRITE_BINLOG: /* --write-binlog */
|
||||||
add_option= FALSE;
|
add_option= FALSE;
|
||||||
@ -374,6 +400,18 @@ get_one_option(int optid, const struct my_option *opt,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Convert the specified version string into the numeric format. */
|
||||||
|
|
||||||
|
static ulong STDCALL calc_server_version(char *some_version)
|
||||||
|
{
|
||||||
|
uint major, minor, version;
|
||||||
|
char *point= some_version, *end_point;
|
||||||
|
major= (uint) strtoul(point, &end_point, 10); point=end_point+1;
|
||||||
|
minor= (uint) strtoul(point, &end_point, 10); point=end_point+1;
|
||||||
|
version= (uint) strtoul(point, &end_point, 10);
|
||||||
|
return (ulong) major * 10000L + (ulong)(minor * 100 + version);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Run a command using the shell, storing its output in the supplied dynamic
|
Run a command using the shell, storing its output in the supplied dynamic
|
||||||
string.
|
string.
|
||||||
@ -571,7 +609,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
|
|||||||
if (my_write(fd, sql_log_bin, sizeof(sql_log_bin)-1,
|
if (my_write(fd, sql_log_bin, sizeof(sql_log_bin)-1,
|
||||||
MYF(MY_FNABP | MY_WME)))
|
MYF(MY_FNABP | MY_WME)))
|
||||||
{
|
{
|
||||||
my_close(fd, MYF(0));
|
my_close(fd, MYF(MY_WME));
|
||||||
my_delete(query_file_path, MYF(0));
|
my_delete(query_file_path, MYF(0));
|
||||||
die("Failed to write to '%s'", query_file_path);
|
die("Failed to write to '%s'", query_file_path);
|
||||||
}
|
}
|
||||||
@ -580,7 +618,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
|
|||||||
if (my_write(fd, (uchar*) query, strlen(query),
|
if (my_write(fd, (uchar*) query, strlen(query),
|
||||||
MYF(MY_FNABP | MY_WME)))
|
MYF(MY_FNABP | MY_WME)))
|
||||||
{
|
{
|
||||||
my_close(fd, MYF(0));
|
my_close(fd, MYF(MY_WME));
|
||||||
my_delete(query_file_path, MYF(0));
|
my_delete(query_file_path, MYF(0));
|
||||||
die("Failed to write to '%s'", query_file_path);
|
die("Failed to write to '%s'", query_file_path);
|
||||||
}
|
}
|
||||||
@ -597,7 +635,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
|
|||||||
"2>&1",
|
"2>&1",
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
my_close(fd, MYF(0));
|
my_close(fd, MYF(MY_WME));
|
||||||
my_delete(query_file_path, MYF(0));
|
my_delete(query_file_path, MYF(0));
|
||||||
|
|
||||||
DBUG_RETURN(ret);
|
DBUG_RETURN(ret);
|
||||||
@ -644,6 +682,9 @@ static int get_upgrade_info_file_name(char* name)
|
|||||||
&ds_datadir, FALSE) ||
|
&ds_datadir, FALSE) ||
|
||||||
extract_variable_from_show(&ds_datadir, name))
|
extract_variable_from_show(&ds_datadir, name))
|
||||||
{
|
{
|
||||||
|
print_error("Reading datadir from the MariaDB server failed. Got the "
|
||||||
|
"following error when executing the 'mysql' command line client",
|
||||||
|
&ds_datadir);
|
||||||
dynstr_free(&ds_datadir);
|
dynstr_free(&ds_datadir);
|
||||||
DBUG_RETURN(1); /* Query failed */
|
DBUG_RETURN(1); /* Query failed */
|
||||||
}
|
}
|
||||||
@ -655,6 +696,83 @@ static int get_upgrade_info_file_name(char* name)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char upgrade_info_file[FN_REFLEN]= {0};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Open or create mysql_upgrade_info file in servers data dir.
|
||||||
|
|
||||||
|
Take a lock to ensure there cannot be any other mysql_upgrades
|
||||||
|
runninc concurrently
|
||||||
|
*/
|
||||||
|
|
||||||
|
const char *create_error_message=
|
||||||
|
"%sCould not open or create the upgrade info file '%s' in "
|
||||||
|
"the MariaDB Servers data directory, errno: %d (%s)\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void open_mysql_upgrade_file()
|
||||||
|
{
|
||||||
|
char errbuff[80];
|
||||||
|
if (get_upgrade_info_file_name(upgrade_info_file))
|
||||||
|
{
|
||||||
|
die("Upgrade failed");
|
||||||
|
}
|
||||||
|
if ((info_file= my_create(upgrade_info_file, 0,
|
||||||
|
O_RDWR | O_NOFOLLOW,
|
||||||
|
MYF(0))) < 0)
|
||||||
|
{
|
||||||
|
if (opt_force >= 2)
|
||||||
|
{
|
||||||
|
fprintf(stdout, create_error_message,
|
||||||
|
"", upgrade_info_file, errno,
|
||||||
|
my_strerror(errbuff, sizeof(errbuff)-1, errno));
|
||||||
|
fprintf(stdout,
|
||||||
|
"--force --force used, continuing without using the %s file.\n"
|
||||||
|
"Note that this means that there is no protection against "
|
||||||
|
"concurrent mysql_upgrade executions and next mysql_upgrade run "
|
||||||
|
"will do a full upgrade again!\n",
|
||||||
|
upgrade_info_file);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fprintf(stdout, create_error_message,
|
||||||
|
"FATAL ERROR: ",
|
||||||
|
upgrade_info_file, errno,
|
||||||
|
my_strerror(errbuff, sizeof(errbuff)-1, errno));
|
||||||
|
if (errno == EACCES)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"Note that mysql_upgrade should be run as the same user as the "
|
||||||
|
"MariaDB server binary, normally 'mysql' or 'root'.\n"
|
||||||
|
"Alternatively you can use mysql_upgrade --force --force. "
|
||||||
|
"Please check the documentation if you decide to use the force "
|
||||||
|
"option!\n");
|
||||||
|
}
|
||||||
|
fflush(stderr);
|
||||||
|
die(0);
|
||||||
|
}
|
||||||
|
if (my_lock(info_file, F_WRLCK, 0, 1, MYF(0)))
|
||||||
|
{
|
||||||
|
die("Could not exclusively lock on file '%s'. Error %d: %s\n",
|
||||||
|
upgrade_info_file, my_errno,
|
||||||
|
my_strerror(errbuff, sizeof(errbuff)-1, my_errno));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Place holder for versions that require a major upgrade
|
||||||
|
|
||||||
|
@return 0 upgrade has alredy been run on this version
|
||||||
|
@return 1 upgrade has to be run
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int faulty_server_versions(const char *version)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read the content of mysql_upgrade_info file and
|
Read the content of mysql_upgrade_info file and
|
||||||
@ -664,86 +782,111 @@ static int get_upgrade_info_file_name(char* name)
|
|||||||
NOTE
|
NOTE
|
||||||
This is an optimization to avoid running mysql_upgrade
|
This is an optimization to avoid running mysql_upgrade
|
||||||
when it's already been performed for the particular
|
when it's already been performed for the particular
|
||||||
version of MySQL.
|
version of MariaDB.
|
||||||
|
|
||||||
In case the MySQL server can't return the upgrade info
|
In case the MariaDBL server can't return the upgrade info
|
||||||
file it's always better to report that the upgrade hasn't
|
file it's always better to report that the upgrade hasn't
|
||||||
been performed.
|
been performed.
|
||||||
|
|
||||||
|
@return 0 Upgrade has alredy been run on this version
|
||||||
|
@return > 0 Upgrade has to be run
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int upgrade_already_done(myf flags)
|
static int upgrade_already_done(int silent)
|
||||||
{
|
{
|
||||||
FILE *in;
|
const char *version = MYSQL_SERVER_VERSION;
|
||||||
char upgrade_info_file[FN_REFLEN]= {0};
|
const char *s;
|
||||||
|
char *pos;
|
||||||
|
my_off_t length;
|
||||||
|
|
||||||
if (get_upgrade_info_file_name(upgrade_info_file))
|
if (info_file < 0)
|
||||||
return 0; /* Could not get filename => not sure */
|
{
|
||||||
|
DBUG_ASSERT(opt_force > 1);
|
||||||
if (!(in= my_fopen(upgrade_info_file, O_RDONLY, flags)))
|
return 1; /* No info file and --force */
|
||||||
return 0; /* Could not open file => not sure */
|
}
|
||||||
|
|
||||||
bzero(upgrade_from_version, sizeof(upgrade_from_version));
|
bzero(upgrade_from_version, sizeof(upgrade_from_version));
|
||||||
if (!fgets(upgrade_from_version, sizeof(upgrade_from_version), in))
|
|
||||||
|
(void) my_seek(info_file, 0, SEEK_SET, MYF(0));
|
||||||
|
/* We have -3 here to make calc_server_version() safe */
|
||||||
|
length= my_read(info_file, (uchar*) upgrade_from_version,
|
||||||
|
sizeof(upgrade_from_version)-3,
|
||||||
|
MYF(MY_WME));
|
||||||
|
|
||||||
|
if (!length)
|
||||||
{
|
{
|
||||||
/* Preserve errno for caller */
|
if (opt_verbose)
|
||||||
int save_errno= errno;
|
verbose("Empty or non existent %s. Assuming mysql_upgrade has to be run!",
|
||||||
(void) my_fclose(in, flags);
|
upgrade_info_file);
|
||||||
errno= save_errno;
|
return 1;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (my_fclose(in, flags))
|
/* Remove possible \ŋ that may end in output */
|
||||||
return 0;
|
if ((pos= strchr(upgrade_from_version, '\n')))
|
||||||
|
*pos= 0;
|
||||||
|
|
||||||
errno= 0;
|
if (faulty_server_versions(upgrade_from_version))
|
||||||
return (strncmp(upgrade_from_version, MYSQL_SERVER_VERSION,
|
{
|
||||||
sizeof(MYSQL_SERVER_VERSION)-1)==0);
|
if (opt_verbose)
|
||||||
|
verbose("Upgrading from version %s requires mysql_upgrade to be run!",
|
||||||
|
upgrade_from_version);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
s= strchr(version, '.');
|
||||||
|
s= strchr(s + 1, '.');
|
||||||
|
|
||||||
|
if (strncmp(upgrade_from_version, version,
|
||||||
|
(size_t)(s - version + 1)))
|
||||||
|
{
|
||||||
|
if (calc_server_version(upgrade_from_version) <= MYSQL_VERSION_ID)
|
||||||
|
{
|
||||||
|
verbose("Major version upgrade detected from %s to %s. Check required!",
|
||||||
|
upgrade_from_version, version);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
die("Version mismatch (%s -> %s): Trying to downgrade from a higher to "
|
||||||
|
"lower version is not supported!",
|
||||||
|
upgrade_from_version, version);
|
||||||
|
}
|
||||||
|
if (!silent)
|
||||||
|
{
|
||||||
|
verbose("This installation of MariaDB is already upgraded to %s.\n"
|
||||||
|
"There is no need to run mysql_upgrade again for %s.",
|
||||||
|
upgrade_from_version, version);
|
||||||
|
if (!opt_check_upgrade)
|
||||||
|
verbose("You can use --force if you still want to run mysql_upgrade",
|
||||||
|
upgrade_from_version, version);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void finish_mysql_upgrade_info_file(void)
|
||||||
/*
|
|
||||||
Write mysql_upgrade_info file in servers data dir indicating that
|
|
||||||
upgrade has been done for this version
|
|
||||||
|
|
||||||
NOTE
|
|
||||||
This might very well fail but since it's just an optimization
|
|
||||||
to run mysql_upgrade only when necessary the error can be
|
|
||||||
ignored.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void create_mysql_upgrade_info_file(void)
|
|
||||||
{
|
{
|
||||||
FILE *out;
|
if (info_file < 0)
|
||||||
char upgrade_info_file[FN_REFLEN]= {0};
|
|
||||||
|
|
||||||
if (get_upgrade_info_file_name(upgrade_info_file))
|
|
||||||
return; /* Could not get filename => skip */
|
|
||||||
|
|
||||||
if (!(out= my_fopen(upgrade_info_file, O_TRUNC | O_WRONLY, MYF(0))))
|
|
||||||
{
|
|
||||||
fprintf(stderr,
|
|
||||||
"Could not create the upgrade info file '%s' in "
|
|
||||||
"the MariaDB Servers datadir, errno: %d\n",
|
|
||||||
upgrade_info_file, errno);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
/* Write new version to file */
|
/* Write new version to file */
|
||||||
my_fwrite(out, (uchar*) MYSQL_SERVER_VERSION,
|
(void) my_seek(info_file, 0, SEEK_CUR, MYF(0));
|
||||||
sizeof(MYSQL_SERVER_VERSION), MY_WME);
|
(void) my_chsize(info_file, 0, 0, MYF(0));
|
||||||
my_fclose(out, MYF(MY_WME));
|
(void) my_seek(info_file, 0, 0, MYF(0));
|
||||||
|
(void) my_write(info_file, (uchar*) MYSQL_SERVER_VERSION,
|
||||||
|
sizeof(MYSQL_SERVER_VERSION)-1, MYF(MY_WME));
|
||||||
|
(void) my_write(info_file, (uchar*) "\n", 1, MYF(MY_WME));
|
||||||
|
(void) my_lock(info_file, F_UNLCK, 0, 1, MYF(0));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Check if the upgrad_info_file was properly created/updated
|
Check if the upgrade_info_file was properly created/updated
|
||||||
It's not a fatal error -> just print a message if it fails
|
It's not a fatal error -> just print a message if it fails
|
||||||
*/
|
*/
|
||||||
if (!upgrade_already_done(MY_WME))
|
if (upgrade_already_done(1))
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Upgrade file '%s' was not properly created. "
|
"Could not write to the upgrade info file '%s' in "
|
||||||
"Got error errno while checking file content: %d\n",
|
"the MariaDB Servers datadir, errno: %d\n",
|
||||||
upgrade_info_file, errno);
|
upgrade_info_file, errno);
|
||||||
|
|
||||||
|
my_close(info_file, MYF(MY_WME));
|
||||||
|
info_file= -1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,7 +957,7 @@ static my_bool is_mysql()
|
|||||||
strstr(ds_events_struct.str, "IGNORE_BAD_TABLE_OPTIONS") != NULL)
|
strstr(ds_events_struct.str, "IGNORE_BAD_TABLE_OPTIONS") != NULL)
|
||||||
ret= FALSE;
|
ret= FALSE;
|
||||||
else
|
else
|
||||||
verbose("MySQL upgrade detected");
|
verbose("MariaDB upgrade detected");
|
||||||
|
|
||||||
dynstr_free(&ds_events_struct);
|
dynstr_free(&ds_events_struct);
|
||||||
return(ret);
|
return(ret);
|
||||||
@ -1066,7 +1209,7 @@ static int check_slave_repositories(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Update all system tables in MySQL Server to current
|
Update all system tables in MariaDB Server to current
|
||||||
version using "mysql" to execute all the SQL commands
|
version using "mysql" to execute all the SQL commands
|
||||||
compiled into the mysql_fix_privilege_tables array
|
compiled into the mysql_fix_privilege_tables array
|
||||||
*/
|
*/
|
||||||
@ -1135,24 +1278,6 @@ static int run_sql_fix_privilege_tables(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void print_error(const char *error_msg, DYNAMIC_STRING *output)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s\n", error_msg);
|
|
||||||
fprintf(stderr, "%s", output->str);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Convert the specified version string into the numeric format. */
|
|
||||||
static ulong STDCALL calc_server_version(char *some_version)
|
|
||||||
{
|
|
||||||
uint major, minor, version;
|
|
||||||
char *point= some_version, *end_point;
|
|
||||||
major= (uint) strtoul(point, &end_point, 10); point=end_point+1;
|
|
||||||
minor= (uint) strtoul(point, &end_point, 10); point=end_point+1;
|
|
||||||
version= (uint) strtoul(point, &end_point, 10);
|
|
||||||
return (ulong) major * 10000L + (ulong)(minor * 100 + version);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check if the server version matches with the server version mysql_upgrade
|
Check if the server version matches with the server version mysql_upgrade
|
||||||
was compiled with.
|
was compiled with.
|
||||||
@ -1188,8 +1313,7 @@ static int check_version_match(void)
|
|||||||
"check.\n", version_str, MYSQL_SERVER_VERSION);
|
"check.\n", version_str, MYSQL_SERVER_VERSION);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
return 0;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1198,6 +1322,8 @@ int main(int argc, char **argv)
|
|||||||
char self_name[FN_REFLEN + 1];
|
char self_name[FN_REFLEN + 1];
|
||||||
|
|
||||||
MY_INIT(argv[0]);
|
MY_INIT(argv[0]);
|
||||||
|
DBUG_PROCESS(argv[0]);
|
||||||
|
|
||||||
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
|
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
|
||||||
defaults_argv= argv; /* Must be freed by 'free_defaults' */
|
defaults_argv= argv; /* Must be freed by 'free_defaults' */
|
||||||
|
|
||||||
@ -1238,12 +1364,17 @@ int main(int argc, char **argv)
|
|||||||
die(NULL);
|
die(NULL);
|
||||||
my_write(fd, USTRING_WITH_LEN( "[client]\n"), MYF(MY_FAE));
|
my_write(fd, USTRING_WITH_LEN( "[client]\n"), MYF(MY_FAE));
|
||||||
my_write(fd, (uchar*)ds_args.str, ds_args.length, MYF(MY_FAE));
|
my_write(fd, (uchar*)ds_args.str, ds_args.length, MYF(MY_FAE));
|
||||||
my_close(fd, MYF(0));
|
my_close(fd, MYF(MY_WME));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find mysql */
|
/* Find mysql */
|
||||||
find_tool(mysql_path, IF_WIN("mysql.exe", "mysql"), self_name);
|
find_tool(mysql_path, IF_WIN("mysql.exe", "mysql"), self_name);
|
||||||
|
|
||||||
|
open_mysql_upgrade_file();
|
||||||
|
|
||||||
|
if (opt_check_upgrade)
|
||||||
|
exit(upgrade_already_done(0) == 0);
|
||||||
|
|
||||||
/* Find mysqlcheck */
|
/* Find mysqlcheck */
|
||||||
find_tool(mysqlcheck_path, IF_WIN("mysqlcheck.exe", "mysqlcheck"), self_name);
|
find_tool(mysqlcheck_path, IF_WIN("mysqlcheck.exe", "mysqlcheck"), self_name);
|
||||||
|
|
||||||
@ -1252,15 +1383,10 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Read the mysql_upgrade_info file to check if mysql_upgrade
|
Read the mysql_upgrade_info file to check if mysql_upgrade
|
||||||
already has been run for this installation of MySQL
|
already has been run for this installation of MariaDB
|
||||||
*/
|
*/
|
||||||
if (!opt_force && upgrade_already_done(0))
|
if (!opt_force && !upgrade_already_done(0))
|
||||||
{
|
goto end; /* Upgrade already done */
|
||||||
printf("This installation of MySQL is already upgraded to %s, "
|
|
||||||
"use --force if you still need to run mysql_upgrade\n",
|
|
||||||
MYSQL_SERVER_VERSION);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opt_version_check && check_version_match())
|
if (opt_version_check && check_version_match())
|
||||||
die("Upgrade failed");
|
die("Upgrade failed");
|
||||||
@ -1285,8 +1411,8 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
verbose("OK");
|
verbose("OK");
|
||||||
|
|
||||||
/* Create a file indicating upgrade has been performed */
|
/* Finish writing indicating upgrade has been performed */
|
||||||
create_mysql_upgrade_info_file();
|
finish_mysql_upgrade_info_file();
|
||||||
|
|
||||||
DBUG_ASSERT(phase == phases_total);
|
DBUG_ASSERT(phase == phases_total);
|
||||||
|
|
||||||
|
@ -187,6 +187,8 @@ SETA(CPACK_RPM_devel_PACKAGE_OBSOLETES
|
|||||||
"MySQL-devel")
|
"MySQL-devel")
|
||||||
SETA(CPACK_RPM_devel_PACKAGE_PROVIDES
|
SETA(CPACK_RPM_devel_PACKAGE_PROVIDES
|
||||||
"MySQL-devel")
|
"MySQL-devel")
|
||||||
|
SETA(CPACK_RPM_devel_PACKAGE_REQUIRES
|
||||||
|
"MariaDB-shared >= 10.2.42")
|
||||||
|
|
||||||
SETA(CPACK_RPM_server_PACKAGE_OBSOLETES
|
SETA(CPACK_RPM_server_PACKAGE_OBSOLETES
|
||||||
"MariaDB"
|
"MariaDB"
|
||||||
@ -349,6 +351,7 @@ ENDMACRO()
|
|||||||
ADDIF(CMAKE_BUILD_TYPE)
|
ADDIF(CMAKE_BUILD_TYPE)
|
||||||
ADDIF(BUILD_CONFIG)
|
ADDIF(BUILD_CONFIG)
|
||||||
ADDIF(WITH_SSL)
|
ADDIF(WITH_SSL)
|
||||||
|
ADDIF(WITH_JEMALLOC)
|
||||||
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF(RPM)
|
ENDIF(RPM)
|
||||||
|
10
cmake/cpack_tgz.cmake
Normal file
10
cmake/cpack_tgz.cmake
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
IF(NOT RPM AND NOT DEB)
|
||||||
|
#
|
||||||
|
# use -DEXTRA_FILES='/path/to/file=where/to/install;/bin/dd=bin;...'
|
||||||
|
#
|
||||||
|
FOREACH(f ${EXTRA_FILES})
|
||||||
|
STRING(REGEX REPLACE "=.*$" "" from ${f})
|
||||||
|
STRING(REGEX REPLACE "^.*=" "" to ${f})
|
||||||
|
INSTALL(PROGRAMS ${from} DESTINATION ${to})
|
||||||
|
ENDFOREACH()
|
||||||
|
ENDIF()
|
@ -127,7 +127,7 @@ MACRO (MYSQL_CHECK_SSL)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
FIND_PACKAGE(OpenSSL)
|
FIND_PACKAGE(OpenSSL)
|
||||||
SET_PACKAGE_PROPERTIES(OpenSSL PROPERTIES TYPE RECOMMENDED)
|
SET_PACKAGE_PROPERTIES(OpenSSL PROPERTIES TYPE RECOMMENDED)
|
||||||
IF(OPENSSL_FOUND)
|
IF(OPENSSL_FOUND AND OPENSSL_VERSION AND OPENSSL_VERSION VERSION_LESS "3.0.0")
|
||||||
SET(OPENSSL_LIBRARY ${OPENSSL_SSL_LIBRARY})
|
SET(OPENSSL_LIBRARY ${OPENSSL_SSL_LIBRARY})
|
||||||
INCLUDE(CheckSymbolExists)
|
INCLUDE(CheckSymbolExists)
|
||||||
SET(SSL_SOURCES "")
|
SET(SSL_SOURCES "")
|
||||||
|
@ -73,9 +73,9 @@ typedef void fil_space_t;
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef UNIV_NONINL
|
#ifdef UNIV_NONINL
|
||||||
# include "fsp0fsp.ic"
|
# include "fsp0fsp.inl"
|
||||||
# include "mach0data.ic"
|
# include "mach0data.inl"
|
||||||
# include "ut0rnd.ic"
|
# include "ut0rnd.inl"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PRIuMAX
|
#ifndef PRIuMAX
|
||||||
|
@ -36,8 +36,9 @@ extern const char *client_errors[]; /* Error messages */
|
|||||||
#define CR_MIN_ERROR 2000 /* For easier client code */
|
#define CR_MIN_ERROR 2000 /* For easier client code */
|
||||||
#define CR_MAX_ERROR 2999
|
#define CR_MAX_ERROR 2999
|
||||||
#if !defined(ER)
|
#if !defined(ER)
|
||||||
#define ER(X) (((X) >= CR_ERROR_FIRST && (X) <= CR_ERROR_LAST)? \
|
#define ER(X) (((X) >= CR_ERROR_FIRST && (X) <= CR_ERROR_LAST) \
|
||||||
client_errors[(X)-CR_ERROR_FIRST]: client_errors[CR_UNKNOWN_ERROR])
|
? client_errors[(X)-CR_ERROR_FIRST] \
|
||||||
|
: client_errors[CR_UNKNOWN_ERROR-CR_ERROR_FIRST])
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */
|
#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2010, 2021, MariaDB Corporation.
|
Copyright (c) 2010, 2022, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -280,7 +280,7 @@ extern int my_umask_dir,
|
|||||||
my_recived_signals, /* Signals we have got */
|
my_recived_signals, /* Signals we have got */
|
||||||
my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */
|
my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */
|
||||||
my_dont_interrupt; /* call remember_intr when set */
|
my_dont_interrupt; /* call remember_intr when set */
|
||||||
extern my_bool my_use_symdir;
|
extern MYSQL_PLUGIN_IMPORT my_bool my_use_symdir;
|
||||||
|
|
||||||
extern ulong my_default_record_cache_size;
|
extern ulong my_default_record_cache_size;
|
||||||
extern MYSQL_PLUGIN_IMPORT my_bool my_disable_locking;
|
extern MYSQL_PLUGIN_IMPORT my_bool my_disable_locking;
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 735a7299dbae19cc2b82b9697becaf90e9b43047
|
Subproject commit f6c3d9fd2af5d17db64cc996574aa312efd70fcf
|
@ -839,7 +839,7 @@ int check_embedded_connection(MYSQL *mysql, const char *db)
|
|||||||
/* acl_authenticate() takes the data from thd->net->read_pos */
|
/* acl_authenticate() takes the data from thd->net->read_pos */
|
||||||
thd->net.read_pos= (uchar*)buf;
|
thd->net.read_pos= (uchar*)buf;
|
||||||
|
|
||||||
if (acl_authenticate(thd, 0, end - buf))
|
if (acl_authenticate(thd, (uint) (end - buf)))
|
||||||
{
|
{
|
||||||
my_free(thd->security_ctx->user);
|
my_free(thd->security_ctx->user);
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -239,6 +239,21 @@ Old option accepted for backward compatibility but ignored\&.
|
|||||||
.sp -1
|
.sp -1
|
||||||
.IP \(bu 2.3
|
.IP \(bu 2.3
|
||||||
.\}
|
.\}
|
||||||
|
.\" mysql_upgrade: check-if-upgrade-is-needed option
|
||||||
|
.\" check-if-upgrade-is-needed option: mysql_upgrade
|
||||||
|
\fB\-\-check\-if\-upgrade\-is\-needed\fR
|
||||||
|
.sp
|
||||||
|
Exit with a status code indicating if an upgrade is needed\&. Returns 0 if upgrade needed or current version couldn't be determined, 1 when no action required\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
.\" mysql_upgrade: datadir option
|
.\" mysql_upgrade: datadir option
|
||||||
.\" datadir option: mysql_upgrade
|
.\" datadir option: mysql_upgrade
|
||||||
\fB\-\-datadir=\fR\fB\fIpath\fR\fR
|
\fB\-\-datadir=\fR\fB\fIpath\fR\fR
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
perl mysql-test-run.pl --verbose-restart --force --suite-timeout=120 --max-test-fail=10 --retry=3 --parallel=4 --suite=^
|
if "%MTR_PARALLEL%"=="" set MTR_PARALLEL=%NUMBER_OF_PROCESSORS%
|
||||||
|
perl mysql-test-run.pl --verbose-restart --force --suite-timeout=120 --max-test-fail=10 --retry=3 --suite=^
|
||||||
vcol,gcol,perfschema,^
|
vcol,gcol,perfschema,^
|
||||||
main,^
|
main,^
|
||||||
innodb,^
|
innodb,^
|
||||||
|
@ -150,12 +150,22 @@ explain select * from t0 where
|
|||||||
(((key3 <7 and key7 < 6) or key5 < 2) and (key5 < 5 or key6 < 6));
|
(((key3 <7 and key7 < 6) or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
|
|
||||||
explain select * from t0 where
|
explain select * from t0 where
|
||||||
((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
|
((key3 < 4 or key5 < 4) and (key1 < 4 or key2 < 4))
|
||||||
or
|
or
|
||||||
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
|
|
||||||
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
|
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
|
||||||
((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
|
((key3 < 4 or key5 < 4) and (key1 < 4 or key2 < 4))
|
||||||
|
or
|
||||||
|
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
|
|
||||||
|
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
|
||||||
|
((key3 < 5 or key5 < 4) and (key1 < 4 or key2 < 4))
|
||||||
|
or
|
||||||
|
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
|
|
||||||
|
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
|
||||||
|
((key3 < 10 or key5 < 4) and (key1 < 4 or key2 < 4))
|
||||||
or
|
or
|
||||||
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
#
|
||||||
|
# Check if the current used server is an embedded server#
|
||||||
|
#
|
||||||
if (`SELECT VERSION() NOT LIKE '%embedded%'`)
|
if (`SELECT VERSION() NOT LIKE '%embedded%'`)
|
||||||
{
|
{
|
||||||
--skip Test requires: embedded server
|
--skip Test requires: embedded server
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
mysql-test/include/is_embedded_no_privileges.inc
Normal file
16
mysql-test/include/is_embedded_no_privileges.inc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# Test that we do not have an embedded server compiled with privileges.
|
||||||
|
# This is not a regular setup, but we are running this in buildbot for
|
||||||
|
# testing of embedded + privileges.
|
||||||
|
# Some funcs_1 test cannot handle this combination, which is why we have this
|
||||||
|
# file to disable them
|
||||||
|
#
|
||||||
|
|
||||||
|
--source include/is_embedded.inc
|
||||||
|
|
||||||
|
let priv=`SELECT privileges FROM information_schema.columns limit 1`;
|
||||||
|
|
||||||
|
if (`SELECT "$priv" <> ""`)
|
||||||
|
{
|
||||||
|
--skip Embedded server is compiled with privileges; Test disabled.
|
||||||
|
}
|
@ -1,10 +1,8 @@
|
|||||||
let $is_win = `select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows")`;
|
let $is_win = `select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows")`;
|
||||||
let $is_embedded = `select version() like '%embedded%'`;
|
|
||||||
#echo is_win: $is_win;
|
#echo is_win: $is_win;
|
||||||
#echo is_embedded: $is_embedded;
|
|
||||||
if ($is_win)
|
if ($is_win)
|
||||||
{
|
{
|
||||||
if ($is_embedded)
|
if(!$MYSQL_EMBEDDED)
|
||||||
{
|
{
|
||||||
skip Not supported with embedded on windows;
|
skip Not supported with embedded on windows;
|
||||||
}
|
}
|
||||||
|
@ -142,11 +142,11 @@ sub diff {
|
|||||||
|
|
||||||
sub is_subset {
|
sub is_subset {
|
||||||
my ($set, $subset)= @_;
|
my ($set, $subset)= @_;
|
||||||
my %cache = map { _split_option($_) } @$set;
|
my %cache = map { join('=', _split_option($_)), 1 } @$set;
|
||||||
|
|
||||||
for (@$subset){
|
for (@$subset){
|
||||||
my ($name, $value)= _split_option($_);
|
my ($name, $value)= _split_option($_);
|
||||||
return 0 unless exists $cache{$name} and $cache{$name} eq $value;
|
return 0 unless $cache{"$name=$value"};
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -91,3 +91,13 @@ select * from mysql.user where user = 'foo';
|
|||||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
|
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv Delete_history_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired is_role default_role max_statement_time
|
||||||
% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N SPECIFIED text foo_issuer foo_subject 10 20 30 40 N N 0.000000
|
% foo *88C89BE093D4ECF72D039F62EBB7477EA1FD4D63 N N N N N N N N N N N N N N N Y N N N N N N N N N Y N N N N SPECIFIED text foo_issuer foo_subject 10 20 30 40 N N 0.000000
|
||||||
drop user foo;
|
drop user foo;
|
||||||
|
#
|
||||||
|
# Bug #29882299: ALTER USER ... IDENTIFIED WITH ... BY ... SHOULD BE A PRIVILEGED OPERATION
|
||||||
|
#
|
||||||
|
create user foo@localhost;
|
||||||
|
connect x,localhost,foo;
|
||||||
|
alter user current_user identified with 'something';
|
||||||
|
ERROR 42000: Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation
|
||||||
|
connection default;
|
||||||
|
disconnect x;
|
||||||
|
drop user foo@localhost;
|
||||||
|
@ -77,3 +77,14 @@ alter user foo with MAX_QUERIES_PER_HOUR 10
|
|||||||
MAX_USER_CONNECTIONS 40;
|
MAX_USER_CONNECTIONS 40;
|
||||||
select * from mysql.user where user = 'foo';
|
select * from mysql.user where user = 'foo';
|
||||||
drop user foo;
|
drop user foo;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #29882299: ALTER USER ... IDENTIFIED WITH ... BY ... SHOULD BE A PRIVILEGED OPERATION
|
||||||
|
--echo #
|
||||||
|
create user foo@localhost;
|
||||||
|
--connect x,localhost,foo
|
||||||
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
||||||
|
alter user current_user identified with 'something';
|
||||||
|
--connection default
|
||||||
|
--disconnect x
|
||||||
|
drop user foo@localhost;
|
||||||
|
@ -1204,6 +1204,59 @@ REPLACE INTO v2 ( SELECT * FROM v4 ) UNION ( SELECT f FROM v2 );
|
|||||||
drop view v1,v2,v3,v4;
|
drop view v1,v2,v3,v4;
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
#
|
#
|
||||||
|
# MDEV-20325: Assertion `outer_context || !*from_field || *from_field == not_found_field' failed in Item_field::fix_outer_field | `!derived->is_excluded()' failed in TABLE_LIST::set_check_materialized | SIGEGV in st_select_lex::mark_as_dependent (optimized builds)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
# Check that re-execution of a stored routine containing
|
||||||
|
# a query with subquery in the FROM clause doesn't result in
|
||||||
|
# assert failure in case the 'derived_merge' optimizer option
|
||||||
|
# has been turned on/off
|
||||||
|
CREATE PROCEDURE sp() SELECT * FROM (SELECT a FROM t1) tb;
|
||||||
|
CALL sp();
|
||||||
|
a
|
||||||
|
SET optimizer_switch='derived_merge=off';
|
||||||
|
# Without the patch the following statement would result in assert
|
||||||
|
# failure
|
||||||
|
CALL sp();
|
||||||
|
a
|
||||||
|
# Check the same test case for Prepared Statement
|
||||||
|
SET optimizer_switch='derived_merge=on';
|
||||||
|
PREPARE stmt FROM "SELECT * FROM (SELECT a FROM t1) tb";
|
||||||
|
EXECUTE stmt;
|
||||||
|
a
|
||||||
|
SET optimizer_switch='derived_merge=off';
|
||||||
|
# Without the patch the following statement would result in assert
|
||||||
|
# failure
|
||||||
|
EXECUTE stmt;
|
||||||
|
a
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
# Here check the reverse test case - first turn off the 'derived_merge'
|
||||||
|
# optimizer option, run the stored routine containing a query with
|
||||||
|
# subquery in the FROM clause, then turn on the 'derived_merge'
|
||||||
|
# optimizer option and re-execute the same stored routine to check that
|
||||||
|
# the routine is finished successfully.
|
||||||
|
CREATE PROCEDURE sp1() SELECT * FROM (SELECT a FROM t1) tb;
|
||||||
|
SET optimizer_switch='derived_merge=off';
|
||||||
|
CALL sp1();
|
||||||
|
a
|
||||||
|
SET optimizer_switch='derived_merge=on';
|
||||||
|
CALL sp1();
|
||||||
|
a
|
||||||
|
# Check the same test case for Prepared Statement
|
||||||
|
SET optimizer_switch='derived_merge=off';
|
||||||
|
PREPARE stmt FROM "SELECT * FROM (SELECT a FROM t1) tb";
|
||||||
|
EXECUTE stmt;
|
||||||
|
a
|
||||||
|
SET optimizer_switch='derived_merge=on';
|
||||||
|
# Without the patch the following statement would result in assert
|
||||||
|
# failure
|
||||||
|
EXECUTE stmt;
|
||||||
|
a
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP PROCEDURE sp;
|
||||||
|
DROP PROCEDURE sp1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -1036,6 +1036,57 @@ REPLACE INTO v2 ( SELECT * FROM v4 ) UNION ( SELECT f FROM v2 );
|
|||||||
drop view v1,v2,v3,v4;
|
drop view v1,v2,v3,v4;
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-20325: Assertion `outer_context || !*from_field || *from_field == not_found_field' failed in Item_field::fix_outer_field | `!derived->is_excluded()' failed in TABLE_LIST::set_check_materialized | SIGEGV in st_select_lex::mark_as_dependent (optimized builds)
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
|
||||||
|
--echo # Check that re-execution of a stored routine containing
|
||||||
|
--echo # a query with subquery in the FROM clause doesn't result in
|
||||||
|
--echo # assert failure in case the 'derived_merge' optimizer option
|
||||||
|
--echo # has been turned on/off
|
||||||
|
CREATE PROCEDURE sp() SELECT * FROM (SELECT a FROM t1) tb;
|
||||||
|
CALL sp();
|
||||||
|
SET optimizer_switch='derived_merge=off';
|
||||||
|
--echo # Without the patch the following statement would result in assert
|
||||||
|
--echo # failure
|
||||||
|
CALL sp();
|
||||||
|
|
||||||
|
--echo # Check the same test case for Prepared Statement
|
||||||
|
SET optimizer_switch='derived_merge=on';
|
||||||
|
PREPARE stmt FROM "SELECT * FROM (SELECT a FROM t1) tb";
|
||||||
|
EXECUTE stmt;
|
||||||
|
SET optimizer_switch='derived_merge=off';
|
||||||
|
--echo # Without the patch the following statement would result in assert
|
||||||
|
--echo # failure
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
--echo # Here check the reverse test case - first turn off the 'derived_merge'
|
||||||
|
--echo # optimizer option, run the stored routine containing a query with
|
||||||
|
--echo # subquery in the FROM clause, then turn on the 'derived_merge'
|
||||||
|
--echo # optimizer option and re-execute the same stored routine to check that
|
||||||
|
--echo # the routine is finished successfully.
|
||||||
|
CREATE PROCEDURE sp1() SELECT * FROM (SELECT a FROM t1) tb;
|
||||||
|
SET optimizer_switch='derived_merge=off';
|
||||||
|
CALL sp1();
|
||||||
|
SET optimizer_switch='derived_merge=on';
|
||||||
|
CALL sp1();
|
||||||
|
|
||||||
|
--echo # Check the same test case for Prepared Statement
|
||||||
|
SET optimizer_switch='derived_merge=off';
|
||||||
|
PREPARE stmt FROM "SELECT * FROM (SELECT a FROM t1) tb";
|
||||||
|
EXECUTE stmt;
|
||||||
|
SET optimizer_switch='derived_merge=on';
|
||||||
|
--echo # Without the patch the following statement would result in assert
|
||||||
|
--echo # failure
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
DROP PROCEDURE sp;
|
||||||
|
DROP PROCEDURE sp1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -3498,4 +3498,134 @@ a
|
|||||||
3
|
3
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-24454 Second execution of SELECT containing set function
|
||||||
|
# MDEV-25086: whose only argument is an outer reference to a column
|
||||||
|
# of mergeable view/derived/table/CTE
|
||||||
|
#
|
||||||
|
create table t1 (a int);
|
||||||
|
create table t2 (b int);
|
||||||
|
insert into t1 values (3), (1), (3);
|
||||||
|
insert into t2 values (70), (30), (70);
|
||||||
|
create view v1 as select * from t2;
|
||||||
|
prepare stmt from "
|
||||||
|
select (select sum(b) from t1 where a=1) as r from v1;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
170
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
170
|
||||||
|
deallocate prepare stmt;
|
||||||
|
prepare stmt from "
|
||||||
|
select (select sum(b) from t1 where a=1) as r from (select * from t2) dt;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
170
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
170
|
||||||
|
deallocate prepare stmt;
|
||||||
|
prepare stmt from "
|
||||||
|
with cte as (select * from t2)
|
||||||
|
select (select sum(b) from t1 where a=1) as r from cte;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
170
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
170
|
||||||
|
deallocate prepare stmt;
|
||||||
|
prepare stmt from "
|
||||||
|
select (select sum(b) from t1 where a=1) as r
|
||||||
|
from (select * from v1 where b > 50) dt;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
140
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
140
|
||||||
|
deallocate prepare stmt;
|
||||||
|
prepare stmt from "
|
||||||
|
select (select sum(b) from t1 where a=1) as r
|
||||||
|
from (select * from (select * from t2) dt1 where b > 50) dt;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
140
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
140
|
||||||
|
deallocate prepare stmt;
|
||||||
|
prepare stmt from "
|
||||||
|
with cte as (select * from (select * from t2) dt1 where b > 50)
|
||||||
|
select (select sum(b) from t1 where a=1) as r from cte;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
140
|
||||||
|
execute stmt;
|
||||||
|
r
|
||||||
|
140
|
||||||
|
deallocate prepare stmt;
|
||||||
|
create procedure sp1()
|
||||||
|
begin
|
||||||
|
select (select sum(b) from t1 where a=1) as r from v1;
|
||||||
|
end |
|
||||||
|
call sp1();
|
||||||
|
r
|
||||||
|
170
|
||||||
|
call sp1();
|
||||||
|
r
|
||||||
|
170
|
||||||
|
drop procedure sp1;
|
||||||
|
create procedure sp1()
|
||||||
|
begin
|
||||||
|
select (select sum(b) from t1 where a=1) as r from (select * from t2) dt;
|
||||||
|
end |
|
||||||
|
call sp1();
|
||||||
|
r
|
||||||
|
170
|
||||||
|
call sp1();
|
||||||
|
r
|
||||||
|
170
|
||||||
|
drop procedure sp1;
|
||||||
|
create procedure sp1()
|
||||||
|
begin
|
||||||
|
with cte as (select * from t2)
|
||||||
|
select (select sum(b) from t1 where a=1) as r from cte;
|
||||||
|
end |
|
||||||
|
call sp1();
|
||||||
|
r
|
||||||
|
170
|
||||||
|
call sp1();
|
||||||
|
r
|
||||||
|
170
|
||||||
|
drop procedure sp1;
|
||||||
|
drop view v1;
|
||||||
|
drop table t1,t2;
|
||||||
|
CREATE TABLE t1(f0 INT);
|
||||||
|
INSERT INTO t1 VALUES (3);
|
||||||
|
CREATE VIEW v1 AS SELECT f0 AS f1 FROM t1;
|
||||||
|
CREATE VIEW v2 AS
|
||||||
|
SELECT
|
||||||
|
(SELECT GROUP_CONCAT(v1.f1 SEPARATOR ', ') FROM v1 n) AS f2,
|
||||||
|
GROUP_CONCAT('aa' SEPARATOR ', ') AS f3
|
||||||
|
FROM v1;
|
||||||
|
CREATE VIEW v3 AS SELECT * FROM v2;
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
SELECT * FROM v3;
|
||||||
|
CALL p1();
|
||||||
|
f2 f3
|
||||||
|
3 aa
|
||||||
|
CALL p1();
|
||||||
|
f2 f3
|
||||||
|
3 aa
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP VIEW v1,v2,v3;
|
||||||
|
DROP TABLE t1;
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
|
@ -2289,4 +2289,115 @@ select * from ((select a from t1 limit 2) order by a desc) dt;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-24454 Second execution of SELECT containing set function
|
||||||
|
--echo # MDEV-25086: whose only argument is an outer reference to a column
|
||||||
|
--echo # of mergeable view/derived/table/CTE
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (a int);
|
||||||
|
create table t2 (b int);
|
||||||
|
insert into t1 values (3), (1), (3);
|
||||||
|
insert into t2 values (70), (30), (70);
|
||||||
|
create view v1 as select * from t2;
|
||||||
|
|
||||||
|
prepare stmt from "
|
||||||
|
select (select sum(b) from t1 where a=1) as r from v1;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
|
||||||
|
prepare stmt from "
|
||||||
|
select (select sum(b) from t1 where a=1) as r from (select * from t2) dt;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
|
||||||
|
prepare stmt from "
|
||||||
|
with cte as (select * from t2)
|
||||||
|
select (select sum(b) from t1 where a=1) as r from cte;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
|
||||||
|
prepare stmt from "
|
||||||
|
select (select sum(b) from t1 where a=1) as r
|
||||||
|
from (select * from v1 where b > 50) dt;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
|
||||||
|
prepare stmt from "
|
||||||
|
select (select sum(b) from t1 where a=1) as r
|
||||||
|
from (select * from (select * from t2) dt1 where b > 50) dt;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
|
||||||
|
prepare stmt from "
|
||||||
|
with cte as (select * from (select * from t2) dt1 where b > 50)
|
||||||
|
select (select sum(b) from t1 where a=1) as r from cte;
|
||||||
|
";
|
||||||
|
execute stmt;
|
||||||
|
execute stmt;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
|
||||||
|
--delimiter |
|
||||||
|
create procedure sp1()
|
||||||
|
begin
|
||||||
|
select (select sum(b) from t1 where a=1) as r from v1;
|
||||||
|
end |
|
||||||
|
--delimiter ;
|
||||||
|
call sp1();
|
||||||
|
call sp1();
|
||||||
|
drop procedure sp1;
|
||||||
|
|
||||||
|
--delimiter |
|
||||||
|
create procedure sp1()
|
||||||
|
begin
|
||||||
|
select (select sum(b) from t1 where a=1) as r from (select * from t2) dt;
|
||||||
|
end |
|
||||||
|
--delimiter ;
|
||||||
|
call sp1();
|
||||||
|
call sp1();
|
||||||
|
drop procedure sp1;
|
||||||
|
|
||||||
|
--delimiter |
|
||||||
|
create procedure sp1()
|
||||||
|
begin
|
||||||
|
with cte as (select * from t2)
|
||||||
|
select (select sum(b) from t1 where a=1) as r from cte;
|
||||||
|
end |
|
||||||
|
--delimiter ;
|
||||||
|
call sp1();
|
||||||
|
call sp1();
|
||||||
|
drop procedure sp1;
|
||||||
|
|
||||||
|
drop view v1;
|
||||||
|
drop table t1,t2;
|
||||||
|
|
||||||
|
CREATE TABLE t1(f0 INT);
|
||||||
|
INSERT INTO t1 VALUES (3);
|
||||||
|
CREATE VIEW v1 AS SELECT f0 AS f1 FROM t1;
|
||||||
|
CREATE VIEW v2 AS
|
||||||
|
SELECT
|
||||||
|
(SELECT GROUP_CONCAT(v1.f1 SEPARATOR ', ') FROM v1 n) AS f2,
|
||||||
|
GROUP_CONCAT('aa' SEPARATOR ', ') AS f3
|
||||||
|
FROM v1;
|
||||||
|
CREATE VIEW v3 AS SELECT * FROM v2;
|
||||||
|
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
SELECT * FROM v3;
|
||||||
|
CALL p1();
|
||||||
|
CALL p1();
|
||||||
|
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP VIEW v1,v2,v3;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
|
@ -2,4 +2,3 @@
|
|||||||
|
|
||||||
--error 1193
|
--error 1193
|
||||||
set global event_scheduler=ON;
|
set global event_scheduler=ON;
|
||||||
|
|
||||||
|
@ -29,6 +29,9 @@ INSERT INTO t1 VALUES (1, 'one'), (2, 'two'), (3, 'three');
|
|||||||
SELECT s, 32 AS mi FROM t1 GROUP BY s HAVING DEFAULT(mi) IS NULL;
|
SELECT s, 32 AS mi FROM t1 GROUP BY s HAVING DEFAULT(mi) IS NULL;
|
||||||
ERROR HY000: Field 'mi' doesn't have a default value
|
ERROR HY000: Field 'mi' doesn't have a default value
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Start of 10.2 tests
|
||||||
|
#
|
||||||
set timestamp=unix_timestamp('2001-01-01 10:20:30.123456');
|
set timestamp=unix_timestamp('2001-01-01 10:20:30.123456');
|
||||||
create table t1 (a int default 1, b int default (a+1),
|
create table t1 (a int default 1, b int default (a+1),
|
||||||
c varchar(100) default 'foo', d text default 'bar',
|
c varchar(100) default 'foo', d text default 'bar',
|
||||||
@ -40,3 +43,121 @@ default(a) default(b) default(c) default(d) default(e) default(f)
|
|||||||
1 2 foo bar 2001-01-01 10:20:30 2001-01-01 10:20:30.120000
|
1 2 foo bar 2001-01-01 10:20:30 2001-01-01 10:20:30.120000
|
||||||
1 11 foo bar 2001-01-01 10:20:30 2001-01-01 10:20:30.120000
|
1 11 foo bar 2001-01-01 10:20:30 2001-01-01 10:20:30.120000
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-21639 DEFAULT(col) evaluates to a bad value in WHERE clause
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a BIGINT NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),10)));
|
||||||
|
INSERT INTO t1 VALUES (10000);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = 10 AS ce
|
||||||
|
FROM t1;
|
||||||
|
a DEFAULT(a) c ce
|
||||||
|
10000 10 10 1
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END=10;
|
||||||
|
a
|
||||||
|
10000
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DOUBLE NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),10)));
|
||||||
|
INSERT INTO t1 VALUES (10000);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = 10 AS ce
|
||||||
|
FROM t1;
|
||||||
|
a DEFAULT(a) c ce
|
||||||
|
10000 10 10 1
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END=10;
|
||||||
|
a
|
||||||
|
10000
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DECIMAL(10,0) NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),10)));
|
||||||
|
INSERT INTO t1 VALUES (10000);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = 10 AS ce
|
||||||
|
FROM t1;
|
||||||
|
a DEFAULT(a) c ce
|
||||||
|
10000 10 10 1
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END=10;
|
||||||
|
a
|
||||||
|
10000
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a VARCHAR(32) NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),10)));
|
||||||
|
INSERT INTO t1 VALUES (10000);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = '10' AS ce
|
||||||
|
FROM t1;
|
||||||
|
a DEFAULT(a) c ce
|
||||||
|
10000 10 10 1
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END='10';
|
||||||
|
a
|
||||||
|
10000
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATE NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP()%10,DATE'2001-01-01')));
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01');
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = '2001-01-01' AS ce
|
||||||
|
FROM t1;
|
||||||
|
a DEFAULT(a) c ce
|
||||||
|
2000-01-01 2001-01-01 2001-01-01 1
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END='2001-01-01';
|
||||||
|
a
|
||||||
|
2000-01-01
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a TIME NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP()%10,TIME'10:20:30')));
|
||||||
|
INSERT INTO t1 VALUES ('10:00:00');
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = '10:20:30' AS ce
|
||||||
|
FROM t1;
|
||||||
|
a DEFAULT(a) c ce
|
||||||
|
10:00:00 10:20:30 10:20:30 1
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END='10:20:30';
|
||||||
|
a
|
||||||
|
10:00:00
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a DATETIME NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),TIMESTAMP'2001-01-01 10:20:30')));
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01 10:00:00');
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = '2001-01-01 10:20:30' AS ce
|
||||||
|
FROM t1;
|
||||||
|
a DEFAULT(a) c ce
|
||||||
|
2000-01-01 10:00:00 2001-01-01 10:20:30 2001-01-01 10:20:30 1
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END='2001-01-01 10:20:30';
|
||||||
|
a
|
||||||
|
2000-01-01 10:00:00
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),FALSE)));
|
||||||
|
INSERT INTO t1 VALUES (10);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END IS FALSE AS ce
|
||||||
|
FROM t1;
|
||||||
|
a DEFAULT(a) c ce
|
||||||
|
10 0 0 1
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END IS FALSE;
|
||||||
|
a
|
||||||
|
10
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# End of 10.2 tests
|
||||||
|
#
|
||||||
|
@ -34,9 +34,9 @@ INSERT INTO t1 VALUES (1, 'one'), (2, 'two'), (3, 'three');
|
|||||||
SELECT s, 32 AS mi FROM t1 GROUP BY s HAVING DEFAULT(mi) IS NULL;
|
SELECT s, 32 AS mi FROM t1 GROUP BY s HAVING DEFAULT(mi) IS NULL;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
#
|
--echo #
|
||||||
# 10.2 tests
|
--echo # Start of 10.2 tests
|
||||||
#
|
--echo #
|
||||||
|
|
||||||
set timestamp=unix_timestamp('2001-01-01 10:20:30.123456');
|
set timestamp=unix_timestamp('2001-01-01 10:20:30.123456');
|
||||||
create table t1 (a int default 1, b int default (a+1),
|
create table t1 (a int default 1, b int default (a+1),
|
||||||
@ -46,3 +46,99 @@ insert t1 () values ();
|
|||||||
insert t1 (a) values (10);
|
insert t1 (a) values (10);
|
||||||
select default(a),default(b),default(c),default(d),default(e),default(f) from t1;
|
select default(a),default(b),default(c),default(d),default(e),default(f) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-21639 DEFAULT(col) evaluates to a bad value in WHERE clause
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a BIGINT NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),10)));
|
||||||
|
INSERT INTO t1 VALUES (10000);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = 10 AS ce
|
||||||
|
FROM t1;
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END=10;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a DOUBLE NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),10)));
|
||||||
|
INSERT INTO t1 VALUES (10000);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = 10 AS ce
|
||||||
|
FROM t1;
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END=10;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a DECIMAL(10,0) NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),10)));
|
||||||
|
INSERT INTO t1 VALUES (10000);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = 10 AS ce
|
||||||
|
FROM t1;
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END=10;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a VARCHAR(32) NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),10)));
|
||||||
|
INSERT INTO t1 VALUES (10000);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = '10' AS ce
|
||||||
|
FROM t1;
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END='10';
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a DATE NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP()%10,DATE'2001-01-01')));
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01');
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = '2001-01-01' AS ce
|
||||||
|
FROM t1;
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END='2001-01-01';
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a TIME NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP()%10,TIME'10:20:30')));
|
||||||
|
INSERT INTO t1 VALUES ('10:00:00');
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = '10:20:30' AS ce
|
||||||
|
FROM t1;
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END='10:20:30';
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a DATETIME NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),TIMESTAMP'2001-01-01 10:20:30')));
|
||||||
|
INSERT INTO t1 VALUES ('2000-01-01 10:00:00');
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END = '2001-01-01 10:20:30' AS ce
|
||||||
|
FROM t1;
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END='2001-01-01 10:20:30';
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL DEFAULT (IF(false,UNIX_TIMESTAMP(),FALSE)));
|
||||||
|
INSERT INTO t1 VALUES (10);
|
||||||
|
SELECT
|
||||||
|
a,
|
||||||
|
DEFAULT(a),
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END AS c,
|
||||||
|
CASE WHEN a THEN DEFAULT(a) END IS FALSE AS ce
|
||||||
|
FROM t1;
|
||||||
|
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END IS FALSE;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.2 tests
|
||||||
|
--echo #
|
||||||
|
@ -940,6 +940,24 @@ SELECT JSON_REPLACE( JSON_DETAILED('["x"]'), '$.a', 'xx' );
|
|||||||
JSON_REPLACE( JSON_DETAILED('["x"]'), '$.a', 'xx' )
|
JSON_REPLACE( JSON_DETAILED('["x"]'), '$.a', 'xx' )
|
||||||
["x"]
|
["x"]
|
||||||
#
|
#
|
||||||
|
# MDEV-18284 JSON casting using JSON_COMPACT doesn't always work
|
||||||
|
# with values from subqueries
|
||||||
|
#
|
||||||
|
CREATE TABLE json_test(a JSON, b JSON);
|
||||||
|
INSERT INTO json_test VALUES ("[1,2,3]", '{"a":"foo"}');
|
||||||
|
SELECT * FROM json_test;
|
||||||
|
a b
|
||||||
|
[1,2,3] {"a":"foo"}
|
||||||
|
SELECT json_object("a", json_compact(a), "b", b)
|
||||||
|
FROM (SELECT * FROM json_test) AS json_test_values;
|
||||||
|
json_object("a", json_compact(a), "b", b)
|
||||||
|
{"a": [1,2,3], "b": "{\"a\":\"foo\"}"}
|
||||||
|
SELECT json_object("a", json_compact(a), "b", json_compact(b))
|
||||||
|
FROM (SELECT * FROM json_test) AS json_test_values;
|
||||||
|
json_object("a", json_compact(a), "b", json_compact(b))
|
||||||
|
{"a": [1,2,3], "b": {"a":"foo"}}
|
||||||
|
DROP TABLE json_test;
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -557,6 +557,21 @@ SELECT
|
|||||||
|
|
||||||
SELECT JSON_REPLACE( JSON_DETAILED('["x"]'), '$.a', 'xx' );
|
SELECT JSON_REPLACE( JSON_DETAILED('["x"]'), '$.a', 'xx' );
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-18284 JSON casting using JSON_COMPACT doesn't always work
|
||||||
|
--echo # with values from subqueries
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE json_test(a JSON, b JSON);
|
||||||
|
INSERT INTO json_test VALUES ("[1,2,3]", '{"a":"foo"}');
|
||||||
|
SELECT * FROM json_test;
|
||||||
|
|
||||||
|
SELECT json_object("a", json_compact(a), "b", b)
|
||||||
|
FROM (SELECT * FROM json_test) AS json_test_values;
|
||||||
|
SELECT json_object("a", json_compact(a), "b", json_compact(b))
|
||||||
|
FROM (SELECT * FROM json_test) AS json_test_values;
|
||||||
|
DROP TABLE json_test;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -5023,6 +5023,59 @@ SELECT NULL IN (RIGHT(AES_ENCRYPT('foo','bar'), LAST_INSERT_ID()), 'qux');
|
|||||||
NULL IN (RIGHT(AES_ENCRYPT('foo','bar'), LAST_INSERT_ID()), 'qux')
|
NULL IN (RIGHT(AES_ENCRYPT('foo','bar'), LAST_INSERT_ID()), 'qux')
|
||||||
NULL
|
NULL
|
||||||
#
|
#
|
||||||
|
# Bug#31374305 - FORMAT() NOT DISPLAYING WHOLE NUMBER SIDE CORRECTLY
|
||||||
|
# FOR ES_MX AND ES_ES LOCALES
|
||||||
|
#
|
||||||
|
CREATE PROCEDURE load_locale_format_table()
|
||||||
|
BEGIN
|
||||||
|
DECLARE locale_list VARCHAR(1000) DEFAULT '
|
||||||
|
es_AR,es_BO,es_CL,es_CO,es_CR,es_DO,es_EC,es_ES,es_GT,es_HN,
|
||||||
|
es_MX,es_NI,es_PA,es_PE,es_PR,es_PY,es_SV,es_US,es_UY,es_VE';
|
||||||
|
SET @fmt_stmt = 'INSERT INTO locale_format VALUES
|
||||||
|
(?, FORMAT(12131254123412541,2,?));';
|
||||||
|
PREPARE stmt FROM @fmt_stmt;
|
||||||
|
WHILE locale_list != '' DO
|
||||||
|
/* get the first locale from the list */
|
||||||
|
SET @locale =
|
||||||
|
TRIM(REPLACE((SUBSTRING_INDEX(locale_list, ',', 1)), '\n',''));
|
||||||
|
EXECUTE stmt USING @locale, @locale;
|
||||||
|
/* remove the first locale from the list */
|
||||||
|
IF LOCATE(',', locale_list) > 0 THEN
|
||||||
|
SET locale_list =
|
||||||
|
SUBSTRING(locale_list, LOCATE(',', locale_list) + 1);
|
||||||
|
ELSE
|
||||||
|
SET locale_list = '';
|
||||||
|
END IF;
|
||||||
|
END WHILE;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
END|
|
||||||
|
CREATE TABLE locale_format(locale VARCHAR(10), formatted_string VARCHAR(100));
|
||||||
|
CALL load_locale_format_table();
|
||||||
|
SELECT * FROM locale_format;
|
||||||
|
locale formatted_string
|
||||||
|
es_AR 12.131.254.123.412.541,00
|
||||||
|
es_BO 12.131.254.123.412.541,00
|
||||||
|
es_CL 12.131.254.123.412.541,00
|
||||||
|
es_CO 12.131.254.123.412.541,00
|
||||||
|
es_CR 12 131 254 123 412 541,00
|
||||||
|
es_DO 12,131,254,123,412,541.00
|
||||||
|
es_EC 12.131.254.123.412.541,00
|
||||||
|
es_ES 12.131.254.123.412.541,00
|
||||||
|
es_GT 12,131,254,123,412,541.00
|
||||||
|
es_HN 12,131,254,123,412,541.00
|
||||||
|
es_MX 12,131,254,123,412,541.00
|
||||||
|
es_NI 12,131,254,123,412,541.00
|
||||||
|
es_PA 12,131,254,123,412,541.00
|
||||||
|
es_PE 12,131,254,123,412,541.00
|
||||||
|
es_PR 12,131,254,123,412,541.00
|
||||||
|
es_PY 12.131.254.123.412.541,00
|
||||||
|
es_SV 12,131,254,123,412,541.00
|
||||||
|
es_US 12,131,254,123,412,541.00
|
||||||
|
es_UY 12.131.254.123.412.541,00
|
||||||
|
es_VE 12.131.254.123.412.541,00
|
||||||
|
DROP PROCEDURE load_locale_format_table;
|
||||||
|
DROP TABLE locale_format;
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -1997,6 +1997,42 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
SELECT NULL IN (RIGHT(AES_ENCRYPT('foo','bar'), LAST_INSERT_ID()), 'qux');
|
SELECT NULL IN (RIGHT(AES_ENCRYPT('foo','bar'), LAST_INSERT_ID()), 'qux');
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#31374305 - FORMAT() NOT DISPLAYING WHOLE NUMBER SIDE CORRECTLY
|
||||||
|
--echo # FOR ES_MX AND ES_ES LOCALES
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
DELIMITER |;
|
||||||
|
CREATE PROCEDURE load_locale_format_table()
|
||||||
|
BEGIN
|
||||||
|
DECLARE locale_list VARCHAR(1000) DEFAULT '
|
||||||
|
es_AR,es_BO,es_CL,es_CO,es_CR,es_DO,es_EC,es_ES,es_GT,es_HN,
|
||||||
|
es_MX,es_NI,es_PA,es_PE,es_PR,es_PY,es_SV,es_US,es_UY,es_VE';
|
||||||
|
SET @fmt_stmt = 'INSERT INTO locale_format VALUES
|
||||||
|
(?, FORMAT(12131254123412541,2,?));';
|
||||||
|
PREPARE stmt FROM @fmt_stmt;
|
||||||
|
WHILE locale_list != '' DO
|
||||||
|
/* get the first locale from the list */
|
||||||
|
SET @locale =
|
||||||
|
TRIM(REPLACE((SUBSTRING_INDEX(locale_list, ',', 1)), '\n',''));
|
||||||
|
EXECUTE stmt USING @locale, @locale;
|
||||||
|
/* remove the first locale from the list */
|
||||||
|
IF LOCATE(',', locale_list) > 0 THEN
|
||||||
|
SET locale_list =
|
||||||
|
SUBSTRING(locale_list, LOCATE(',', locale_list) + 1);
|
||||||
|
ELSE
|
||||||
|
SET locale_list = '';
|
||||||
|
END IF;
|
||||||
|
END WHILE;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
END|
|
||||||
|
DELIMITER ;|
|
||||||
|
|
||||||
|
CREATE TABLE locale_format(locale VARCHAR(10), formatted_string VARCHAR(100));
|
||||||
|
CALL load_locale_format_table();
|
||||||
|
SELECT * FROM locale_format;
|
||||||
|
DROP PROCEDURE load_locale_format_table;
|
||||||
|
DROP TABLE locale_format;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
|
@ -46,7 +46,7 @@ create table t1 (version char(60)) select database(), user(), version() as 'vers
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`database()` varchar(34) CHARACTER SET utf8 DEFAULT NULL,
|
`database()` varchar(64) CHARACTER SET utf8 DEFAULT NULL,
|
||||||
`user()` varchar(141) CHARACTER SET utf8 DEFAULT NULL,
|
`user()` varchar(141) CHARACTER SET utf8 DEFAULT NULL,
|
||||||
`version` char(60) DEFAULT NULL
|
`version` char(60) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
@ -95,3 +95,21 @@ select left(concat(a,version()),1) from t1;
|
|||||||
left(concat(a,version()),1)
|
left(concat(a,version()),1)
|
||||||
a
|
a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Start of 10.2 tests
|
||||||
|
#
|
||||||
|
|
||||||
|
MDEV-27544 database() function under UNION ALL truncates results to 34 characters
|
||||||
|
|
||||||
|
|
||||||
|
SET NAMES utf8;
|
||||||
|
create database betäubungsmittelverschreibungsverordnung;
|
||||||
|
use betäubungsmittelverschreibungsverordnung;
|
||||||
|
select database() as "database" union all select database();
|
||||||
|
database
|
||||||
|
betäubungsmittelverschreibungsverordnung
|
||||||
|
betäubungsmittelverschreibungsverordnung
|
||||||
|
drop database betäubungsmittelverschreibungsverordnung;
|
||||||
|
#
|
||||||
|
# End of 10.2 tests
|
||||||
|
#
|
||||||
|
@ -55,3 +55,23 @@ select left(concat(a,version()),1) from t1;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.2 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo MDEV-27544 database() function under UNION ALL truncates results to 34 characters
|
||||||
|
--echo
|
||||||
|
--echo
|
||||||
|
|
||||||
|
SET NAMES utf8;
|
||||||
|
create database betäubungsmittelverschreibungsverordnung;
|
||||||
|
use betäubungsmittelverschreibungsverordnung;
|
||||||
|
select database() as "database" union all select database();
|
||||||
|
drop database betäubungsmittelverschreibungsverordnung;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.2 tests
|
||||||
|
--echo #
|
||||||
|
@ -173,17 +173,29 @@ or
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t0 index_merge i1,i2,i3,i5,i6,i7 i3,i5 4,4 NULL 11 Using sort_union(i3,i5); Using where
|
1 SIMPLE t0 index_merge i1,i2,i3,i5,i6,i7 i3,i5 4,4 NULL 11 Using sort_union(i3,i5); Using where
|
||||||
explain select * from t0 where
|
explain select * from t0 where
|
||||||
((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
|
((key3 < 4 or key5 < 4) and (key1 < 4 or key2 < 4))
|
||||||
or
|
or
|
||||||
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t0 ALL i1,i2,i3,i5,i6 NULL NULL NULL 1024 Using where
|
1 SIMPLE t0 ALL i1,i2,i3,i5,i6 NULL NULL NULL 1024 Using where
|
||||||
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
|
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
|
||||||
((key3 <5 or key5 < 4) and (key1 < 4 or key2 < 4))
|
((key3 < 4 or key5 < 4) and (key1 < 4 or key2 < 4))
|
||||||
or
|
or
|
||||||
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t0 index_merge i1,i2,i3,i5,i6 i3,i5 0,4 NULL 1024 Using sort_union(i3,i5); Using where
|
1 SIMPLE t0 index_merge i1,i2,i3,i5,i6 i3,i5 4,4 NULL 1024 Using sort_union(i3,i5); Using where
|
||||||
|
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
|
||||||
|
((key3 < 5 or key5 < 4) and (key1 < 4 or key2 < 4))
|
||||||
|
or
|
||||||
|
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t0 ALL i1,i2,i3,i5,i6 NULL NULL NULL 1024 Using where
|
||||||
|
explain select * from t0 force index(i1, i2, i3, i4, i5, i6 ) where
|
||||||
|
((key3 < 10 or key5 < 4) and (key1 < 4 or key2 < 4))
|
||||||
|
or
|
||||||
|
((key3 >=5 or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t0 ALL i1,i2,i3,i5,i6 NULL NULL NULL 1024 Using where
|
||||||
select * from t0 where key1 < 5 or key8 < 4 order by key1;
|
select * from t0 where key1 < 5 or key8 < 4 order by key1;
|
||||||
key1 key2 key3 key4 key5 key6 key7 key8
|
key1 key2 key3 key4 key5 key6 key7 key8
|
||||||
1 1 1 1 1 1 1 1023
|
1 1 1 1 1 1 1 1023
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
DROP TABLE IF EXISTS t1,t2,t3;
|
|
||||||
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
||||||
CREATE TABLE t2 (id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id, id),
|
CREATE TABLE t2 (id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id, id),
|
||||||
FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE,
|
FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE,
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
-- source include/testdb_only.inc
|
-- source include/testdb_only.inc
|
||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
--disable_warnings
|
-- source include/have_symlink.inc
|
||||||
DROP TABLE IF EXISTS t1,t2,t3;
|
|
||||||
--enable_warnings
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test for KEY_COLUMN_USAGE & TABLE_CONSTRAINTS tables
|
# Test for KEY_COLUMN_USAGE & TABLE_CONSTRAINTS tables
|
||||||
|
@ -865,3 +865,22 @@ t2 CREATE TABLE `t2` (
|
|||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
End of 5.5 tests
|
End of 5.5 tests
|
||||||
|
#
|
||||||
|
# Beginning of 10.2 test
|
||||||
|
#
|
||||||
|
# MDEV-26698: Incorrect row number upon INSERT .. SELECT from the same
|
||||||
|
# table: rows are counted twice
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a TINYINT);
|
||||||
|
INSERT INTO t1 VALUES (1), (100);
|
||||||
|
INSERT INTO t1 SELECT a*2 FROM t1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 2
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
# using ORDER BY
|
||||||
|
INSERT INTO t1 VALUES(1), (2), (100), (3);
|
||||||
|
INSERT INTO t1 SELECT a*2 FROM t1 ORDER BY a;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'a' at row 4
|
||||||
|
DROP TABLE t1;
|
||||||
|
# End of 10.2 test
|
||||||
|
@ -435,3 +435,28 @@ show create table t2;
|
|||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
--echo End of 5.5 tests
|
--echo End of 5.5 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Beginning of 10.2 test
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26698: Incorrect row number upon INSERT .. SELECT from the same
|
||||||
|
--echo # table: rows are counted twice
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(a TINYINT);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1), (100);
|
||||||
|
|
||||||
|
INSERT INTO t1 SELECT a*2 FROM t1;
|
||||||
|
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
|
||||||
|
--echo # using ORDER BY
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES(1), (2), (100), (3);
|
||||||
|
|
||||||
|
INSERT INTO t1 SELECT a*2 FROM t1 ORDER BY a;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # End of 10.2 test
|
||||||
|
@ -3,3 +3,4 @@
|
|||||||
--log-output=FILE,TABLE
|
--log-output=FILE,TABLE
|
||||||
--max-allowed-packet=32000000
|
--max-allowed-packet=32000000
|
||||||
--proxy-protocol-networks=*
|
--proxy-protocol-networks=*
|
||||||
|
--sequence=on
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
--loose-enable-performance-schema
|
--loose-enable-performance-schema
|
||||||
--max-allowed-packet=32000000
|
--max-allowed-packet=32000000
|
||||||
--proxy-protocol-networks=::1/32,127.0.0.0/8,localhost
|
--proxy-protocol-networks=::1/32,127.0.0.0/8,localhost
|
||||||
|
--sequence=on
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
--general-log --general-log-file=$MYSQLTEST_VARDIR/log/master.log --log-output=FILE,TABLE
|
--general-log --general-log-file=$MYSQLTEST_VARDIR/log/master.log --log-output=FILE,TABLE
|
||||||
--max-allowed-packet=32000000
|
--max-allowed-packet=32000000
|
||||||
--proxy-protocol-networks=::1,::ffff:127.0.0.1/97,localhost
|
--proxy-protocol-networks=::1,::ffff:127.0.0.1/97,localhost
|
||||||
|
--sequence=on
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
update mysql.user set password=password("foo") where user='root';
|
update mysql.user set password=password("foo") where user='root';
|
||||||
|
|
||||||
|
--replace_regex /[^ ]*mysql_upgrade_info/...mysql_upgrade_info/
|
||||||
--exec $MYSQL_UPGRADE
|
--exec $MYSQL_UPGRADE
|
||||||
|
|
||||||
connect(con1,localhost,root,foo,,,);
|
connect(con1,localhost,root,foo,,,);
|
||||||
@ -21,3 +22,6 @@ update mysql.user set password='' where user='root';
|
|||||||
flush privileges;
|
flush privileges;
|
||||||
# Load event table
|
# Load event table
|
||||||
set global event_scheduler=OFF;
|
set global event_scheduler=OFF;
|
||||||
|
|
||||||
|
let MYSQLD_DATADIR= `select @@datadir`;
|
||||||
|
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
||||||
|
@ -47,7 +47,8 @@ test
|
|||||||
Phase 7/7: Running 'FLUSH PRIVILEGES'
|
Phase 7/7: Running 'FLUSH PRIVILEGES'
|
||||||
OK
|
OK
|
||||||
Run it again - should say already completed
|
Run it again - should say already completed
|
||||||
This installation of MySQL is already upgraded to VERSION, use --force if you still need to run mysql_upgrade
|
This installation of MariaDB is already upgraded to VERSION.There is no need to run mysql_upgrade again for VERSION.
|
||||||
|
You can use --force if you still want to run mysql_upgrade
|
||||||
Force should run it regardless of whether it has been run before
|
Force should run it regardless of whether it has been run before
|
||||||
Phase 1/7: Checking and upgrading mysql database
|
Phase 1/7: Checking and upgrading mysql database
|
||||||
Processing databases
|
Processing databases
|
||||||
@ -145,11 +146,12 @@ test
|
|||||||
Phase 7/7: Running 'FLUSH PRIVILEGES'
|
Phase 7/7: Running 'FLUSH PRIVILEGES'
|
||||||
OK
|
OK
|
||||||
DROP USER mysqltest1@'%';
|
DROP USER mysqltest1@'%';
|
||||||
Version check failed. Got the following error when calling the 'mysql' command line client
|
Reading datadir from the MariaDB server failed. Got the following error when executing the 'mysql' command line client
|
||||||
ERROR 1045 (28000): Access denied for user 'mysqltest1'@'localhost' (using password: YES)
|
ERROR 1045 (28000): Access denied for user 'mysqltest1'@'localhost' (using password: YES)
|
||||||
FATAL ERROR: Upgrade failed
|
FATAL ERROR: Upgrade failed
|
||||||
Run mysql_upgrade with a non existing server socket
|
Run mysql_upgrade with a non existing server socket
|
||||||
mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect
|
Reading datadir from the MariaDB server failed. Got the following error when executing the 'mysql' command line client
|
||||||
|
ERROR 2005 (HY000): Unknown MySQL server host 'not_existing_host' (errno)
|
||||||
FATAL ERROR: Upgrade failed
|
FATAL ERROR: Upgrade failed
|
||||||
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
|
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
|
||||||
Phase 1/7: Checking and upgrading mysql database
|
Phase 1/7: Checking and upgrading mysql database
|
||||||
@ -413,9 +415,12 @@ OK
|
|||||||
# Bug #21489398: MYSQL_UPGRADE: FATAL ERROR: UPGRADE FAILED - IMPROVE ERROR
|
# Bug #21489398: MYSQL_UPGRADE: FATAL ERROR: UPGRADE FAILED - IMPROVE ERROR
|
||||||
#
|
#
|
||||||
Run mysql_upgrade with unauthorized access
|
Run mysql_upgrade with unauthorized access
|
||||||
Version check failed. Got the following error when calling the 'mysql' command line client
|
Reading datadir from the MariaDB server failed. Got the following error when executing the 'mysql' command line client
|
||||||
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
|
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
|
||||||
FATAL ERROR: Upgrade failed
|
FATAL ERROR: Upgrade failed
|
||||||
|
Reading datadir from the MariaDB server failed. Got the following error when executing the 'mysql' command line client
|
||||||
|
ERROR 1045 (errno): Access denied for user 'root'@'localhost' (using password: YES)
|
||||||
|
FATAL ERROR: Upgrade failed
|
||||||
#
|
#
|
||||||
# MDEV-4332 Increase username length from 16 characters
|
# MDEV-4332 Increase username length from 16 characters
|
||||||
# MDEV-6068, MDEV-6178 mysql_upgrade breaks databases with long user names
|
# MDEV-6068, MDEV-6178 mysql_upgrade breaks databases with long user names
|
||||||
@ -868,6 +873,34 @@ GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
|
|||||||
GRANT USAGE ON *.* TO `aRole`
|
GRANT USAGE ON *.* TO `aRole`
|
||||||
DROP ROLE `aRole`;
|
DROP ROLE `aRole`;
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
|
#
|
||||||
|
# MDEV-27279: mariadb_upgrade add --check-if-upgrade-is-needed
|
||||||
|
#
|
||||||
|
This installation of MariaDB is already upgraded to MariaDB .
|
||||||
|
There is no need to run mysql_upgrade again for MariaDB .
|
||||||
|
Looking for 'mysql' as: mysql
|
||||||
|
This installation of MariaDB is already upgraded to MariaDB .
|
||||||
|
There is no need to run mysql_upgrade again for MariaDB .
|
||||||
|
#
|
||||||
|
# MDEV-27279: mariadb_upgrade check-if-upgrade absence is do it
|
||||||
|
#
|
||||||
|
Looking for 'mysql' as: mysql
|
||||||
|
Empty or non existent ...mysql_upgrade_info. Assuming mysql_upgrade has to be run!
|
||||||
|
#
|
||||||
|
# MDEV-27279: mariadb_upgrade check-if-upgrade with minor version change
|
||||||
|
#
|
||||||
|
Looking for 'mysql' as: mysql
|
||||||
|
This installation of MariaDB is already upgraded to MariaDB .
|
||||||
|
There is no need to run mysql_upgrade again for MariaDB .
|
||||||
|
This installation of MariaDB is already upgraded to MariaDB .
|
||||||
|
There is no need to run mysql_upgrade again for MariaDB .
|
||||||
|
You can use --force if you still want to run mysql_upgrade
|
||||||
|
#
|
||||||
|
# MDEV-27279: mariadb_upgrade check-if-upgrade with major version change
|
||||||
|
#
|
||||||
|
Major version upgrade detected from MariaDB to MariaDB . Check required!
|
||||||
|
Looking for 'mysql' as: mysql
|
||||||
|
Major version upgrade detected from MariaDB to MariaDB . Check required!
|
||||||
End of 10.2 tests
|
End of 10.2 tests
|
||||||
#
|
#
|
||||||
# Ensure that mysql_upgrade correctly sets truncate_versioning_priv
|
# Ensure that mysql_upgrade correctly sets truncate_versioning_priv
|
||||||
|
@ -17,7 +17,7 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
|||||||
file_exists $MYSQLD_DATADIR/mysql_upgrade_info;
|
file_exists $MYSQLD_DATADIR/mysql_upgrade_info;
|
||||||
|
|
||||||
--echo Run it again - should say already completed
|
--echo Run it again - should say already completed
|
||||||
--replace_regex /upgraded to .*, use/upgraded to VERSION, use/
|
--replace_regex /upgraded to [^\n].*/upgraded to VERSION./ /again for [^\n]*/again for VERSION./
|
||||||
--exec $MYSQL_UPGRADE 2>&1
|
--exec $MYSQL_UPGRADE 2>&1
|
||||||
|
|
||||||
# It should have created a file in the MySQL Servers datadir
|
# It should have created a file in the MySQL Servers datadir
|
||||||
@ -126,7 +126,7 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
|||||||
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
||||||
|
|
||||||
--echo # Running mysql_upgrade with --skip-write-binlog..
|
--echo # Running mysql_upgrade with --skip-write-binlog..
|
||||||
--replace_result $MYSQLTEST_VARDIR var
|
--replace_regex /[^ ]*mysql_upgrade_info/...mysql_upgrade_info/
|
||||||
--exec $MYSQL_UPGRADE --skip-write-binlog
|
--exec $MYSQL_UPGRADE --skip-write-binlog
|
||||||
|
|
||||||
# mysql_upgrade must have created mysql_upgrade_info file,
|
# mysql_upgrade must have created mysql_upgrade_info file,
|
||||||
@ -140,6 +140,9 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
|||||||
--echo Run mysql_upgrade with unauthorized access
|
--echo Run mysql_upgrade with unauthorized access
|
||||||
--error 1
|
--error 1
|
||||||
--exec $MYSQL_UPGRADE --skip-verbose --user=root --password=wrong_password 2>&1
|
--exec $MYSQL_UPGRADE --skip-verbose --user=root --password=wrong_password 2>&1
|
||||||
|
--replace_regex /.*mysqlcheck.*: Got/mysqlcheck: Got/ /\([0-9|-]*\)/(errno)/
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_UPGRADE --skip-verbose --skip-version-check --user=root --password=wrong_password 2>&1
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-4332 Increase username length from 16 characters
|
--echo # MDEV-4332 Increase username length from 16 characters
|
||||||
@ -235,6 +238,7 @@ FLUSH TABLES mysql.user;
|
|||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
SHOW CREATE TABLE mysql.user;
|
SHOW CREATE TABLE mysql.user;
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR var
|
||||||
--exec $MYSQL_UPGRADE --force 2>&1
|
--exec $MYSQL_UPGRADE --force 2>&1
|
||||||
SHOW CREATE TABLE mysql.user;
|
SHOW CREATE TABLE mysql.user;
|
||||||
|
|
||||||
@ -279,6 +283,79 @@ SHOW GRANTS;
|
|||||||
DROP ROLE `aRole`;
|
DROP ROLE `aRole`;
|
||||||
--exec $MYSQL mysql < $MYSQLTEST_VARDIR/tmp/user.sql
|
--exec $MYSQL mysql < $MYSQLTEST_VARDIR/tmp/user.sql
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-27279: mariadb_upgrade add --check-if-upgrade-is-needed
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed --silent
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB / /'mysql.* as:[^\n]*/'mysql' as: mysql/
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed --verbose
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-27279: mariadb_upgrade check-if-upgrade absence is do it
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
||||||
|
--replace_regex /[^ ]*mysql_upgrade_info/...mysql_upgrade_info/
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed
|
||||||
|
|
||||||
|
--replace_regex /'mysql.* as:[^\n]*/'mysql' as: mysql/ /open .* Assuming/open XXX. Assuming/ /[^ ]*mysql_upgrade_info/...mysql_upgrade_info/
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed --verbose
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-27279: mariadb_upgrade check-if-upgrade with minor version change
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# take 3rd number of version and change to 0
|
||||||
|
|
||||||
|
let DATADIR= $MYSQLD_DATADIR;
|
||||||
|
|
||||||
|
perl;
|
||||||
|
my $ver= $ENV{'MYSQL_SERVER_VERSION'} or die "MYSQL_SERVER_VERSION not set";
|
||||||
|
my $file= $ENV{'DATADIR'} or die "MYSQLD_DATADIR not set";
|
||||||
|
$ver =~ s/^(\d*)\.(\d*).(\d*)(.*)/$1.$2.0$4/;
|
||||||
|
open(FILE, ">$file/mysql_upgrade_info") or die "Failed to open $file";
|
||||||
|
print FILE "$ver\n";
|
||||||
|
close(FILE);
|
||||||
|
EOF
|
||||||
|
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed --silent
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB / /'mysql.* as:[^\n]*/'mysql' as: mysql/
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed --verbose
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
|
||||||
|
--exec $MYSQL_UPGRADE
|
||||||
|
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-27279: mariadb_upgrade check-if-upgrade with major version change
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# take 2rd number of version and change to 0
|
||||||
|
|
||||||
|
let DATADIR= $MYSQLD_DATADIR;
|
||||||
|
|
||||||
|
perl;
|
||||||
|
my $ver= $ENV{'MYSQL_SERVER_VERSION'} or die "MYSQL_SERVER_VERSION not set";
|
||||||
|
my $file= $ENV{'DATADIR'} or die "MYSQLD_DATADIR not set";
|
||||||
|
$ver =~ s/^(\d*)\.(\d*).(\d*)(.*)/$1.0.$3$4/;
|
||||||
|
open(FILE, ">$file/mysql_upgrade_info") or die "Failed to open $file";
|
||||||
|
print FILE "$ver\n";
|
||||||
|
close(FILE);
|
||||||
|
EOF
|
||||||
|
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed --silent
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB / /'mysql.* as:[^\n]*/'mysql' as: mysql/
|
||||||
|
--exec $MYSQL_UPGRADE --check-if-upgrade-is-needed --verbose
|
||||||
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
||||||
|
|
||||||
--echo End of 10.2 tests
|
--echo End of 10.2 tests
|
||||||
|
@ -53,6 +53,7 @@ Warnings:
|
|||||||
Level Warning
|
Level Warning
|
||||||
Code 1286
|
Code 1286
|
||||||
Message Unknown storage engine 'ARCHIVE'
|
Message Unknown storage engine 'ARCHIVE'
|
||||||
|
# upgrade from 10.1 - engines aren't enabled
|
||||||
Phase 1/7: Checking and upgrading mysql database
|
Phase 1/7: Checking and upgrading mysql database
|
||||||
Processing databases
|
Processing databases
|
||||||
mysql
|
mysql
|
||||||
@ -142,6 +143,8 @@ Level Warning
|
|||||||
Code 1286
|
Code 1286
|
||||||
Message Unknown storage engine 'ARCHIVE'
|
Message Unknown storage engine 'ARCHIVE'
|
||||||
alter table mysql.user drop column default_role, drop column max_statement_time;
|
alter table mysql.user drop column default_role, drop column max_statement_time;
|
||||||
|
# still upgrade from 10.1
|
||||||
|
Major version upgrade detected from MariaDB to MariaDB . Check required!
|
||||||
Phase 1/7: Checking and upgrading mysql database
|
Phase 1/7: Checking and upgrading mysql database
|
||||||
Processing databases
|
Processing databases
|
||||||
mysql
|
mysql
|
||||||
@ -231,6 +234,7 @@ Level Warning
|
|||||||
Code 1286
|
Code 1286
|
||||||
Message Unknown storage engine 'ARCHIVE'
|
Message Unknown storage engine 'ARCHIVE'
|
||||||
alter table mysql.user drop column default_role, drop column max_statement_time;
|
alter table mysql.user drop column default_role, drop column max_statement_time;
|
||||||
|
# upgrade from 10.0 - engines are enabled
|
||||||
Phase 1/7: Checking and upgrading mysql database
|
Phase 1/7: Checking and upgrading mysql database
|
||||||
Processing databases
|
Processing databases
|
||||||
mysql
|
mysql
|
||||||
|
@ -28,7 +28,8 @@ uninstall plugin archive;
|
|||||||
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
|
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
|
||||||
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
|
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
|
||||||
|
|
||||||
# upgrade from 10.1 - engines aren't enabled
|
--echo # upgrade from 10.1 - engines aren't enabled
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
|
||||||
exec $MYSQL_UPGRADE 2>&1;
|
exec $MYSQL_UPGRADE 2>&1;
|
||||||
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
|
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
|
||||||
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
|
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
|
||||||
@ -42,7 +43,8 @@ write_file $datadir/mysql_upgrade_info;
|
|||||||
10.1.10-MariaDB
|
10.1.10-MariaDB
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# still upgrade from 10.1
|
--echo # still upgrade from 10.1
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
|
||||||
exec $MYSQL_UPGRADE 2>&1;
|
exec $MYSQL_UPGRADE 2>&1;
|
||||||
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
|
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
|
||||||
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
|
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
|
||||||
@ -50,7 +52,8 @@ select table_catalog, table_schema, table_name, table_type, engine, row_format,
|
|||||||
alter table mysql.user drop column default_role, drop column max_statement_time;
|
alter table mysql.user drop column default_role, drop column max_statement_time;
|
||||||
remove_file $datadir/mysql_upgrade_info;
|
remove_file $datadir/mysql_upgrade_info;
|
||||||
|
|
||||||
# upgrade from 10.0 - engines are enabled
|
--echo # upgrade from 10.0 - engines are enabled
|
||||||
|
--replace_regex /\d\d\.\d*\.\d*[^ .\n]*/MariaDB /
|
||||||
exec $MYSQL_UPGRADE 2>&1;
|
exec $MYSQL_UPGRADE 2>&1;
|
||||||
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
|
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t1';
|
||||||
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
|
select table_catalog, table_schema, table_name, table_type, engine, row_format, table_rows, data_length, table_comment from information_schema.tables where table_schema='test' and table_name='t2';
|
||||||
|
@ -211,7 +211,7 @@ v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
|
|||||||
show create view v4;
|
show create view v4;
|
||||||
View Create View character_set_client collation_connection
|
View Create View character_set_client collation_connection
|
||||||
v4 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS select `t1`.`a` AS `a` from `t1` latin1 latin1_swedish_ci
|
v4 CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS select `t1`.`a` AS `a` from `t1` latin1 latin1_swedish_ci
|
||||||
MySQL upgrade detected
|
MariaDB upgrade detected
|
||||||
Phase 1/7: Checking and upgrading mysql database
|
Phase 1/7: Checking and upgrading mysql database
|
||||||
Processing databases
|
Processing databases
|
||||||
mysql
|
mysql
|
||||||
@ -336,7 +336,7 @@ drop view v1,v2,v3,v4;
|
|||||||
rename table mysql.event to mysql.ev_bk;
|
rename table mysql.event to mysql.ev_bk;
|
||||||
flush tables;
|
flush tables;
|
||||||
The --upgrade-system-tables option was used, user tables won't be touched.
|
The --upgrade-system-tables option was used, user tables won't be touched.
|
||||||
MySQL upgrade detected
|
MariaDB upgrade detected
|
||||||
Phase 1/7: Checking and upgrading mysql database
|
Phase 1/7: Checking and upgrading mysql database
|
||||||
Processing databases
|
Processing databases
|
||||||
mysql
|
mysql
|
||||||
|
@ -3485,6 +3485,29 @@ b a
|
|||||||
40 1
|
40 1
|
||||||
30 4
|
30 4
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
#
|
||||||
|
# MDEV-22256 Assertion `length == pack_length()' failed in Field_timestamp_with_dec::sort_string
|
||||||
|
#
|
||||||
|
SET sql_mode='';
|
||||||
|
SET @@SESSION.max_sort_length=4;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect max_sort_length value: '4'
|
||||||
|
CREATE TABLE t1 (c TIMESTAMP(1));
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
DELETE FROM t1 ORDER BY c;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @@SESSION.max_sort_length=DEFAULT;
|
||||||
|
SET sql_mode=DEFAULT;
|
||||||
|
SET sql_mode='';
|
||||||
|
SET @@SESSION.max_sort_length=1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect max_sort_length value: '1'
|
||||||
|
CREATE TEMPORARY TABLE t1 (c DATETIME);
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
DELETE FROM t1 ORDER BY c;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @@SESSION.max_sort_length=DEFAULT;
|
||||||
|
SET sql_mode=DEFAULT;
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
# MDEV-16214: Incorrect plan taken by the optimizer , uses INDEX instead of ref access with ORDER BY
|
# MDEV-16214: Incorrect plan taken by the optimizer , uses INDEX instead of ref access with ORDER BY
|
||||||
|
@ -2309,6 +2309,29 @@ explain (select b,a from t2 order by a limit 3) order by b desc;
|
|||||||
|
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-22256 Assertion `length == pack_length()' failed in Field_timestamp_with_dec::sort_string
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET sql_mode='';
|
||||||
|
SET @@SESSION.max_sort_length=4;
|
||||||
|
CREATE TABLE t1 (c TIMESTAMP(1));
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
DELETE FROM t1 ORDER BY c;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @@SESSION.max_sort_length=DEFAULT;
|
||||||
|
SET sql_mode=DEFAULT;
|
||||||
|
|
||||||
|
SET sql_mode='';
|
||||||
|
SET @@SESSION.max_sort_length=1;
|
||||||
|
CREATE TEMPORARY TABLE t1 (c DATETIME);
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
DELETE FROM t1 ORDER BY c;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET @@SESSION.max_sort_length=DEFAULT;
|
||||||
|
SET sql_mode=DEFAULT;
|
||||||
|
|
||||||
|
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
22
mysql-test/main/partition_sp.result
Normal file
22
mysql-test/main/partition_sp.result
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# MDEV-8652: Partitioned table creation problem when
|
||||||
|
# creating from procedure context twice in same session
|
||||||
|
#
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
BEGIN
|
||||||
|
DROP TABLE IF EXISTS t1 ;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id INT PRIMARY KEY
|
||||||
|
)
|
||||||
|
PARTITION BY RANGE (id) (
|
||||||
|
PARTITION P1 VALUES LESS THAN (2),
|
||||||
|
PARTITION P2 VALUES LESS THAN (3)
|
||||||
|
);
|
||||||
|
END |
|
||||||
|
call p1();
|
||||||
|
call p1();
|
||||||
|
drop procedure p1;
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# End of 10.2 tests
|
||||||
|
#
|
35
mysql-test/main/partition_sp.test
Normal file
35
mysql-test/main/partition_sp.test
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
--source include/have_partition.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-8652: Partitioned table creation problem when
|
||||||
|
--echo # creating from procedure context twice in same session
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
|
DELIMITER |;
|
||||||
|
|
||||||
|
CREATE PROCEDURE p1()
|
||||||
|
BEGIN
|
||||||
|
DROP TABLE IF EXISTS t1 ;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id INT PRIMARY KEY
|
||||||
|
)
|
||||||
|
PARTITION BY RANGE (id) (
|
||||||
|
PARTITION P1 VALUES LESS THAN (2),
|
||||||
|
PARTITION P2 VALUES LESS THAN (3)
|
||||||
|
);
|
||||||
|
END |
|
||||||
|
|
||||||
|
DELIMITER ;|
|
||||||
|
|
||||||
|
call p1();
|
||||||
|
call p1();
|
||||||
|
|
||||||
|
drop procedure p1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.2 tests
|
||||||
|
--echo #
|
||||||
|
|
@ -177,3 +177,97 @@ partition by key (a)
|
|||||||
(partition p0,
|
(partition p0,
|
||||||
partition p1 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data');
|
partition p1 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data');
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
|
#
|
||||||
|
# MDEV-25917 create table like fails if source table is partitioned and engine is myisam or aria with data directory.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT)
|
||||||
|
ENGINE = MyISAM
|
||||||
|
PARTITION BY LIST (a)
|
||||||
|
(PARTITION p0 VALUES IN (0)
|
||||||
|
DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp',
|
||||||
|
PARTITION p1 VALUES IN (1)
|
||||||
|
DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp',
|
||||||
|
PARTITION p2 VALUES IN (2));
|
||||||
|
CREATE TABLE t2 LIKE t1;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
PARTITION BY LIST (`a`)
|
||||||
|
(PARTITION `p0` VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp' ENGINE = MyISAM,
|
||||||
|
PARTITION `p1` VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp' ENGINE = MyISAM,
|
||||||
|
PARTITION `p2` VALUES IN (2) ENGINE = MyISAM)
|
||||||
|
SHOW CREATE TABLE t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
PARTITION BY LIST (`a`)
|
||||||
|
(PARTITION `p0` VALUES IN (0) ENGINE = MyISAM,
|
||||||
|
PARTITION `p1` VALUES IN (1) ENGINE = MyISAM,
|
||||||
|
PARTITION `p2` VALUES IN (2) ENGINE = MyISAM)
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
ID int(11) NOT NULL,
|
||||||
|
type int(11)) Engine=MyISAM
|
||||||
|
PARTITION BY RANGE(ID)
|
||||||
|
SUBPARTITION BY HASH(type)
|
||||||
|
(
|
||||||
|
PARTITION p01 VALUES LESS THAN(100)
|
||||||
|
(SUBPARTITION s11
|
||||||
|
DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp',
|
||||||
|
SUBPARTITION s12
|
||||||
|
DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp'
|
||||||
|
),
|
||||||
|
PARTITION p11 VALUES LESS THAN(200)
|
||||||
|
(SUBPARTITION s21, SUBPARTITION s22),
|
||||||
|
PARTITION p21 VALUES LESS THAN MAXVALUE
|
||||||
|
(SUBPARTITION s31
|
||||||
|
DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp',
|
||||||
|
SUBPARTITION s32
|
||||||
|
DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
CREATE TABLE t2 LIKE t1;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`ID` int(11) NOT NULL,
|
||||||
|
`type` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
PARTITION BY RANGE (`ID`)
|
||||||
|
SUBPARTITION BY HASH (`type`)
|
||||||
|
(PARTITION `p01` VALUES LESS THAN (100)
|
||||||
|
(SUBPARTITION `s11` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp' ENGINE = MyISAM,
|
||||||
|
SUBPARTITION `s12` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp' ENGINE = MyISAM),
|
||||||
|
PARTITION `p11` VALUES LESS THAN (200)
|
||||||
|
(SUBPARTITION `s21` ENGINE = MyISAM,
|
||||||
|
SUBPARTITION `s22` ENGINE = MyISAM),
|
||||||
|
PARTITION `p21` VALUES LESS THAN MAXVALUE
|
||||||
|
(SUBPARTITION `s31` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp' ENGINE = MyISAM,
|
||||||
|
SUBPARTITION `s32` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp' ENGINE = MyISAM))
|
||||||
|
SHOW CREATE TABLE t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`ID` int(11) NOT NULL,
|
||||||
|
`type` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
PARTITION BY RANGE (`ID`)
|
||||||
|
SUBPARTITION BY HASH (`type`)
|
||||||
|
(PARTITION `p01` VALUES LESS THAN (100)
|
||||||
|
(SUBPARTITION `s11` ENGINE = MyISAM,
|
||||||
|
SUBPARTITION `s12` ENGINE = MyISAM),
|
||||||
|
PARTITION `p11` VALUES LESS THAN (200)
|
||||||
|
(SUBPARTITION `s21` ENGINE = MyISAM,
|
||||||
|
SUBPARTITION `s22` ENGINE = MyISAM),
|
||||||
|
PARTITION `p21` VALUES LESS THAN MAXVALUE
|
||||||
|
(SUBPARTITION `s31` ENGINE = MyISAM,
|
||||||
|
SUBPARTITION `s32` ENGINE = MyISAM))
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -220,3 +220,58 @@ ENGINE = MyISAM
|
|||||||
partition by key (a)
|
partition by key (a)
|
||||||
(partition p0,
|
(partition p0,
|
||||||
partition p1 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data');
|
partition p1 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data');
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-25917 create table like fails if source table is partitioned and engine is myisam or aria with data directory.
|
||||||
|
--echo #
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval CREATE TABLE t1 (a INT)
|
||||||
|
ENGINE = MyISAM
|
||||||
|
PARTITION BY LIST (a)
|
||||||
|
(PARTITION p0 VALUES IN (0)
|
||||||
|
DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp',
|
||||||
|
PARTITION p1 VALUES IN (1)
|
||||||
|
DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp',
|
||||||
|
PARTITION p2 VALUES IN (2));
|
||||||
|
|
||||||
|
CREATE TABLE t2 LIKE t1;
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
SHOW CREATE TABLE t2;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval CREATE TABLE t1 (
|
||||||
|
ID int(11) NOT NULL,
|
||||||
|
type int(11)) Engine=MyISAM
|
||||||
|
PARTITION BY RANGE(ID)
|
||||||
|
SUBPARTITION BY HASH(type)
|
||||||
|
(
|
||||||
|
PARTITION p01 VALUES LESS THAN(100)
|
||||||
|
(SUBPARTITION s11
|
||||||
|
DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp',
|
||||||
|
SUBPARTITION s12
|
||||||
|
DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp'
|
||||||
|
),
|
||||||
|
PARTITION p11 VALUES LESS THAN(200)
|
||||||
|
(SUBPARTITION s21, SUBPARTITION s22),
|
||||||
|
PARTITION p21 VALUES LESS THAN MAXVALUE
|
||||||
|
(SUBPARTITION s31
|
||||||
|
DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp',
|
||||||
|
SUBPARTITION s32
|
||||||
|
DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp'
|
||||||
|
INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE t2 LIKE t1;
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
SHOW CREATE TABLE t2;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -108,3 +108,108 @@ DROP TABLE t0,t1;
|
|||||||
SET @@GLOBAL.debug_dbug = @saved_dbug;
|
SET @@GLOBAL.debug_dbug = @saved_dbug;
|
||||||
set @@optimizer_switch= @optimizer_switch_save;
|
set @@optimizer_switch= @optimizer_switch_save;
|
||||||
# End of 10.1 tests
|
# End of 10.1 tests
|
||||||
|
#
|
||||||
|
# MDEV-27262: Index intersection with full scan over an index
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
p char(32) DEFAULT NULL,
|
||||||
|
es tinyint(3) unsigned NOT NULL DEFAULT 0,
|
||||||
|
er tinyint(3) unsigned NOT NULL DEFAULT 0,
|
||||||
|
x mediumint(8) unsigned NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
INDEX es (es),
|
||||||
|
INDEX x (x),
|
||||||
|
INDEX er (er,x),
|
||||||
|
INDEX p (p)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
insert into t1(es,er) select 0, 1 from seq_1_to_45;
|
||||||
|
insert into t1(es,er) select 0, 2 from seq_1_to_49;
|
||||||
|
insert into t1(es,er) select 0, 3 from seq_1_to_951;
|
||||||
|
insert into t1(es,er) select 0, 3 from seq_1_to_1054;
|
||||||
|
insert into t1(es,er) select 0, 6 from seq_1_to_25;
|
||||||
|
insert into t1(es,er) select 0, 11 from seq_1_to_1;
|
||||||
|
insert into t1(es,er) select 1, 1 from seq_1_to_45;
|
||||||
|
insert into t1(es,er) select 1, 2 from seq_1_to_16;
|
||||||
|
insert into t1(es,er) select 1, 3 from seq_1_to_511;
|
||||||
|
insert into t1(es,er) select 1, 4 from seq_1_to_687;
|
||||||
|
insert into t1(es,er) select 1, 6 from seq_1_to_50;
|
||||||
|
insert into t1(es,er) select 1, 7 from seq_1_to_4;
|
||||||
|
insert into t1(es,er) select 1, 11 from seq_1_to_1;
|
||||||
|
insert into t1(es,er) select 2, 1 from seq_1_to_82;
|
||||||
|
insert into t1(es,er) select 2, 2 from seq_1_to_82;
|
||||||
|
insert into t1(es,er) select 2, 3 from seq_1_to_1626;
|
||||||
|
insert into t1(es,er) select 2, 4 from seq_1_to_977;
|
||||||
|
insert into t1(es,er) select 2, 6 from seq_1_to_33;
|
||||||
|
insert into t1(es,er) select 2, 11 from seq_1_to_1;
|
||||||
|
insert into t1(es,er) select 3, 1 from seq_1_to_245;
|
||||||
|
insert into t1(es,er) select 3, 2 from seq_1_to_81;
|
||||||
|
insert into t1(es,er) select 3, 3 from seq_1_to_852;
|
||||||
|
insert into t1(es,er) select 3, 4 from seq_1_to_2243;
|
||||||
|
insert into t1(es,er) select 3, 6 from seq_1_to_44;
|
||||||
|
insert into t1(es,er) select 3, 11 from seq_1_to_1;
|
||||||
|
insert into t1(es,er) select 4, 1 from seq_1_to_91;
|
||||||
|
insert into t1(es,er) select 4, 2 from seq_1_to_83;
|
||||||
|
insert into t1(es,er) select 4, 3 from seq_1_to_297;
|
||||||
|
insert into t1(es,er) select 4, 4 from seq_1_to_2456;
|
||||||
|
insert into t1(es,er) select 4, 6 from seq_1_to_19;
|
||||||
|
insert into t1(es,er) select 4, 11 from seq_1_to_1;
|
||||||
|
update t1 set p='foobar';
|
||||||
|
update t1 set x=0;
|
||||||
|
set @save_isp=@@innodb_stats_persistent;
|
||||||
|
set global innodb_stats_persistent= 1;
|
||||||
|
analyze table t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 analyze status OK
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=on';
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er != 4) OR er = 4 ) AND (es >= 4) LIMIT 2;
|
||||||
|
id p es er x
|
||||||
|
14645 foobar 4 4 0
|
||||||
|
14646 foobar 4 4 0
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er != 4) OR er = 4 ) AND (es >= 4) LIMIT 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t1 range es,er,p es 1 NULL # 100.00 Using index condition; Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`p` AS `p`,`test`.`t1`.`es` AS `es`,`test`.`t1`.`er` AS `er`,`test`.`t1`.`x` AS `x` from `test`.`t1` where (`test`.`t1`.`p` = 'foo' and `test`.`t1`.`er` <> 4 or `test`.`t1`.`er` = 4) and `test`.`t1`.`es` >= 4 limit 2
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=off';
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er != 4) OR er = 4 ) AND (es >= 4) LIMIT 2;
|
||||||
|
id p es er x
|
||||||
|
14645 foobar 4 4 0
|
||||||
|
14646 foobar 4 4 0
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er != 4) OR er = 4 ) AND (es >= 4) LIMIT 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t1 range es,er,p es 1 NULL # 100.00 Using index condition; Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`p` AS `p`,`test`.`t1`.`es` AS `es`,`test`.`t1`.`er` AS `er`,`test`.`t1`.`x` AS `x` from `test`.`t1` where (`test`.`t1`.`p` = 'foo' and `test`.`t1`.`er` <> 4 or `test`.`t1`.`er` = 4) and `test`.`t1`.`es` >= 4 limit 2
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=on';
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er < 6) OR er >=2 ) AND (es >= 4) LIMIT 2;
|
||||||
|
id p es er x
|
||||||
|
14007 foobar 4 2 0
|
||||||
|
14008 foobar 4 2 0
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er < 6) OR er >=2 ) AND (es >= 4) LIMIT 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t1 range es,er,p es 1 NULL # 100.00 Using index condition; Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`p` AS `p`,`test`.`t1`.`es` AS `es`,`test`.`t1`.`er` AS `er`,`test`.`t1`.`x` AS `x` from `test`.`t1` where (`test`.`t1`.`p` = 'foo' and `test`.`t1`.`er` < 6 or `test`.`t1`.`er` >= 2) and `test`.`t1`.`es` >= 4 limit 2
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=off';
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er < 6) OR er >=2 ) AND (es >= 4) LIMIT 2;
|
||||||
|
id p es er x
|
||||||
|
14007 foobar 4 2 0
|
||||||
|
14008 foobar 4 2 0
|
||||||
|
EXPLAIN EXTENDED SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er < 6) OR er >=2 ) AND (es >= 4) LIMIT 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t1 range es,er,p es 1 NULL # 100.00 Using index condition; Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`p` AS `p`,`test`.`t1`.`es` AS `es`,`test`.`t1`.`er` AS `er`,`test`.`t1`.`x` AS `x` from `test`.`t1` where (`test`.`t1`.`p` = 'foo' and `test`.`t1`.`er` < 6 or `test`.`t1`.`er` >= 2) and `test`.`t1`.`es` >= 4 limit 2
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=default';
|
||||||
|
set global innodb_stats_persistent= @save_isp;
|
||||||
|
DROP TABLE t1;
|
||||||
|
# End of 10.2 tests
|
||||||
|
@ -116,3 +116,96 @@ SET @@GLOBAL.debug_dbug = @saved_dbug;
|
|||||||
set @@optimizer_switch= @optimizer_switch_save;
|
set @@optimizer_switch= @optimizer_switch_save;
|
||||||
|
|
||||||
--echo # End of 10.1 tests
|
--echo # End of 10.1 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-27262: Index intersection with full scan over an index
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--source include/have_sequence.inc
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
p char(32) DEFAULT NULL,
|
||||||
|
es tinyint(3) unsigned NOT NULL DEFAULT 0,
|
||||||
|
er tinyint(3) unsigned NOT NULL DEFAULT 0,
|
||||||
|
x mediumint(8) unsigned NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
INDEX es (es),
|
||||||
|
INDEX x (x),
|
||||||
|
INDEX er (er,x),
|
||||||
|
INDEX p (p)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
|
||||||
|
insert into t1(es,er) select 0, 1 from seq_1_to_45;
|
||||||
|
insert into t1(es,er) select 0, 2 from seq_1_to_49;
|
||||||
|
insert into t1(es,er) select 0, 3 from seq_1_to_951;
|
||||||
|
insert into t1(es,er) select 0, 3 from seq_1_to_1054;
|
||||||
|
insert into t1(es,er) select 0, 6 from seq_1_to_25;
|
||||||
|
insert into t1(es,er) select 0, 11 from seq_1_to_1;
|
||||||
|
insert into t1(es,er) select 1, 1 from seq_1_to_45;
|
||||||
|
insert into t1(es,er) select 1, 2 from seq_1_to_16;
|
||||||
|
insert into t1(es,er) select 1, 3 from seq_1_to_511;
|
||||||
|
insert into t1(es,er) select 1, 4 from seq_1_to_687;
|
||||||
|
insert into t1(es,er) select 1, 6 from seq_1_to_50;
|
||||||
|
insert into t1(es,er) select 1, 7 from seq_1_to_4;
|
||||||
|
insert into t1(es,er) select 1, 11 from seq_1_to_1;
|
||||||
|
insert into t1(es,er) select 2, 1 from seq_1_to_82;
|
||||||
|
insert into t1(es,er) select 2, 2 from seq_1_to_82;
|
||||||
|
insert into t1(es,er) select 2, 3 from seq_1_to_1626;
|
||||||
|
insert into t1(es,er) select 2, 4 from seq_1_to_977;
|
||||||
|
insert into t1(es,er) select 2, 6 from seq_1_to_33;
|
||||||
|
insert into t1(es,er) select 2, 11 from seq_1_to_1;
|
||||||
|
insert into t1(es,er) select 3, 1 from seq_1_to_245;
|
||||||
|
insert into t1(es,er) select 3, 2 from seq_1_to_81;
|
||||||
|
insert into t1(es,er) select 3, 3 from seq_1_to_852;
|
||||||
|
insert into t1(es,er) select 3, 4 from seq_1_to_2243;
|
||||||
|
insert into t1(es,er) select 3, 6 from seq_1_to_44;
|
||||||
|
insert into t1(es,er) select 3, 11 from seq_1_to_1;
|
||||||
|
insert into t1(es,er) select 4, 1 from seq_1_to_91;
|
||||||
|
insert into t1(es,er) select 4, 2 from seq_1_to_83;
|
||||||
|
insert into t1(es,er) select 4, 3 from seq_1_to_297;
|
||||||
|
insert into t1(es,er) select 4, 4 from seq_1_to_2456;
|
||||||
|
insert into t1(es,er) select 4, 6 from seq_1_to_19;
|
||||||
|
insert into t1(es,er) select 4, 11 from seq_1_to_1;
|
||||||
|
update t1 set p='foobar';
|
||||||
|
update t1 set x=0;
|
||||||
|
set @save_isp=@@innodb_stats_persistent;
|
||||||
|
set global innodb_stats_persistent= 1;
|
||||||
|
analyze table t1;
|
||||||
|
|
||||||
|
let $q=
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er != 4) OR er = 4 ) AND (es >= 4) LIMIT 2;
|
||||||
|
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=on';
|
||||||
|
eval $q;
|
||||||
|
--replace_column 9 #
|
||||||
|
eval EXPLAIN EXTENDED $q;
|
||||||
|
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=off';
|
||||||
|
# execution of $q and explain for it led to an assertion failure in 10.4
|
||||||
|
# (with the optimizer switch rowid_filter set to 'on')
|
||||||
|
eval $q;
|
||||||
|
--replace_column 9 #
|
||||||
|
eval EXPLAIN EXTENDED $q;
|
||||||
|
|
||||||
|
let $q=
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE ((p = 'foo' AND er < 6) OR er >=2 ) AND (es >= 4) LIMIT 2;
|
||||||
|
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=on';
|
||||||
|
eval $q;
|
||||||
|
--replace_column 9 #
|
||||||
|
eval EXPLAIN EXTENDED $q;
|
||||||
|
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=off';
|
||||||
|
eval $q;
|
||||||
|
--replace_column 9 #
|
||||||
|
eval EXPLAIN EXTENDED $q;
|
||||||
|
|
||||||
|
set optimizer_switch='index_merge_sort_intersection=default';
|
||||||
|
|
||||||
|
set global innodb_stats_persistent= @save_isp;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # End of 10.2 tests
|
||||||
|
@ -40,5 +40,16 @@ nm varchar(32) YES NULL
|
|||||||
a int(11) YES NULL
|
a int(11) YES NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-4621 select returns null for information_schema.statistics.collation field
|
||||||
|
#
|
||||||
|
create table t1 (f varchar(64), key(f));
|
||||||
|
select index_name, column_name, collation, cardinality from information_schema.STATISTICS where table_schema='test' and table_name='t1';
|
||||||
|
index_name column_name collation cardinality
|
||||||
|
f f A NULL
|
||||||
|
select index_name, column_name, collation from information_schema.STATISTICS where table_schema='test' and table_name='t1';
|
||||||
|
index_name column_name collation
|
||||||
|
f f A
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
|
@ -34,6 +34,14 @@ show fields from test.t1 where field in
|
|||||||
where table_name='t1' group by column_name) dt);
|
where table_name='t1' group by column_name) dt);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-4621 select returns null for information_schema.statistics.collation field
|
||||||
|
--echo #
|
||||||
|
create table t1 (f varchar(64), key(f));
|
||||||
|
select index_name, column_name, collation, cardinality from information_schema.STATISTICS where table_schema='test' and table_name='t1';
|
||||||
|
select index_name, column_name, collation from information_schema.STATISTICS where table_schema='test' and table_name='t1';
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -8502,6 +8502,34 @@ b-c
|
|||||||
0
|
0
|
||||||
drop procedure p1|
|
drop procedure p1|
|
||||||
drop function f1|
|
drop function f1|
|
||||||
|
#
|
||||||
|
# MDEV-24827: MariaDB 10.5.5 crash (sig 11) during a SELECT
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT);
|
||||||
|
CREATE TABLE t2 (c1 INT PRIMARY KEY, c2 INT, KEY idx_c2(c2));
|
||||||
|
INSERT INTO t1 (c1, c2) SELECT seq, seq FROM seq_1_to_10000;
|
||||||
|
INSERT INTO t2 (c1, c2) SELECT seq, seq FROM seq_1_to_20000;
|
||||||
|
CREATE OR REPLACE PROCEDURE p1()
|
||||||
|
begin
|
||||||
|
DECLARE done INT DEFAULT FALSE;
|
||||||
|
DECLARE a INT;
|
||||||
|
DECLARE cur1 CURSOR FOR
|
||||||
|
SELECT t2.c1 AS c1 FROM t1 LEFT JOIN t2 ON t1.c1 = t2.c1
|
||||||
|
WHERE EXISTS (SELECT 1 FROM t1 WHERE c2 = -1) ORDER BY c1;
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||||
|
OPEN cur1;
|
||||||
|
read_loop: LOOP
|
||||||
|
FETCH cur1 INTO a;
|
||||||
|
IF done THEN
|
||||||
|
LEAVE read_loop;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
CLOSE cur1;
|
||||||
|
END $
|
||||||
|
CALL p1();
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
#End of 10.2 tests
|
#End of 10.2 tests
|
||||||
#
|
#
|
||||||
# MDEV-12007 Allow ROW variables as a cursor FETCH target
|
# MDEV-12007 Allow ROW variables as a cursor FETCH target
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
--source include/have_partition.inc
|
--source include/have_partition.inc
|
||||||
|
--source include/have_sequence.inc
|
||||||
|
|
||||||
#
|
#
|
||||||
# Basic stored PROCEDURE tests
|
# Basic stored PROCEDURE tests
|
||||||
#
|
#
|
||||||
@ -10045,6 +10047,46 @@ drop procedure p1|
|
|||||||
drop function f1|
|
drop function f1|
|
||||||
delimiter ;|
|
delimiter ;|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-24827: MariaDB 10.5.5 crash (sig 11) during a SELECT
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT);
|
||||||
|
CREATE TABLE t2 (c1 INT PRIMARY KEY, c2 INT, KEY idx_c2(c2));
|
||||||
|
|
||||||
|
INSERT INTO t1 (c1, c2) SELECT seq, seq FROM seq_1_to_10000;
|
||||||
|
INSERT INTO t2 (c1, c2) SELECT seq, seq FROM seq_1_to_20000;
|
||||||
|
|
||||||
|
--delimiter $
|
||||||
|
|
||||||
|
CREATE OR REPLACE PROCEDURE p1()
|
||||||
|
begin
|
||||||
|
DECLARE done INT DEFAULT FALSE;
|
||||||
|
DECLARE a INT;
|
||||||
|
|
||||||
|
DECLARE cur1 CURSOR FOR
|
||||||
|
SELECT t2.c1 AS c1 FROM t1 LEFT JOIN t2 ON t1.c1 = t2.c1
|
||||||
|
WHERE EXISTS (SELECT 1 FROM t1 WHERE c2 = -1) ORDER BY c1;
|
||||||
|
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||||
|
|
||||||
|
OPEN cur1;
|
||||||
|
read_loop: LOOP
|
||||||
|
FETCH cur1 INTO a;
|
||||||
|
IF done THEN
|
||||||
|
LEAVE read_loop;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
CLOSE cur1;
|
||||||
|
END $
|
||||||
|
|
||||||
|
--delimiter ;
|
||||||
|
|
||||||
|
CALL p1();
|
||||||
|
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
|
||||||
--echo #End of 10.2 tests
|
--echo #End of 10.2 tests
|
||||||
|
|
||||||
|
@ -2424,6 +2424,13 @@ CREATE TRIGGER t1_trigger BEFORE INSERT ON t1 FOR EACH ROW BEGIN END;
|
|||||||
INSERT INTO t1 () VALUES ();
|
INSERT INTO t1 () VALUES ();
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# Bug#33141958 - THE FIRST ASAN UAF ISSUE OF MYSQL SERVER
|
||||||
|
#
|
||||||
|
create table t1 (a int);
|
||||||
|
create trigger tr1 after insert on t1 for each row alter table t1 tablespace s2;
|
||||||
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -2756,6 +2756,14 @@ CREATE TRIGGER t1_trigger BEFORE INSERT ON t1 FOR EACH ROW BEGIN END;
|
|||||||
INSERT INTO t1 () VALUES ();
|
INSERT INTO t1 () VALUES ();
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#33141958 - THE FIRST ASAN UAF ISSUE OF MYSQL SERVER
|
||||||
|
--echo #
|
||||||
|
create table t1 (a int);
|
||||||
|
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
|
||||||
|
create trigger tr1 after insert on t1 for each row alter table t1 tablespace s2;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -2225,6 +2225,27 @@ a
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-26129 Bad results with join comparing case insensitive VARCHAR/ENUM/SET expression to a _bin ENUM column
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a ENUM('a') CHARACTER SET latin1 PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES ('a');
|
||||||
|
CREATE TABLE t2 (a ENUM('a','A','b','B','c','C','d','D','e','E') CHARACTER SET latin1 COLLATE latin1_bin);
|
||||||
|
INSERT INTO t2 VALUES ('a'),('A');
|
||||||
|
INSERT INTO t2 VALUES ('b'),('B'),('c'),('C'),('d'),('D'),('e'),('E');
|
||||||
|
ALTER TABLE t2 ADD PRIMARY KEY(a);
|
||||||
|
SELECT t1.a res FROM t1 JOIN t2 ON t1.a COLLATE latin1_swedish_ci=t2.a;
|
||||||
|
res
|
||||||
|
a
|
||||||
|
a
|
||||||
|
SELECT t1.a res FROM t1 LEFT JOIN t2 ON t1.a COLLATE latin1_swedish_ci=t2.a;
|
||||||
|
res
|
||||||
|
a
|
||||||
|
a
|
||||||
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
|
#
|
||||||
|
# End of 10.2. tests
|
||||||
|
#
|
||||||
|
#
|
||||||
# Start of 10.3 tests
|
# Start of 10.3 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -457,6 +457,26 @@ ALTER TABLE t1 MODIFY a ENUM('2001','2002');
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-26129 Bad results with join comparing case insensitive VARCHAR/ENUM/SET expression to a _bin ENUM column
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a ENUM('a') CHARACTER SET latin1 PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES ('a');
|
||||||
|
CREATE TABLE t2 (a ENUM('a','A','b','B','c','C','d','D','e','E') CHARACTER SET latin1 COLLATE latin1_bin);
|
||||||
|
INSERT INTO t2 VALUES ('a'),('A');
|
||||||
|
# without the following insert the bug doesn't show, was fixed in MDEV-6978
|
||||||
|
INSERT INTO t2 VALUES ('b'),('B'),('c'),('C'),('d'),('D'),('e'),('E');
|
||||||
|
ALTER TABLE t2 ADD PRIMARY KEY(a);
|
||||||
|
SELECT t1.a res FROM t1 JOIN t2 ON t1.a COLLATE latin1_swedish_ci=t2.a;
|
||||||
|
SELECT t1.a res FROM t1 LEFT JOIN t2 ON t1.a COLLATE latin1_swedish_ci=t2.a;
|
||||||
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.2. tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Start of 10.3 tests
|
--echo # Start of 10.3 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -6777,49 +6777,6 @@ sum(z)
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
#
|
#
|
||||||
# MDEV-24454: Crash at change_item_tree
|
|
||||||
#
|
|
||||||
CREATE TABLE t1(f0 INT);
|
|
||||||
CREATE VIEW v1 AS
|
|
||||||
SELECT
|
|
||||||
f0 AS f1
|
|
||||||
FROM t1;
|
|
||||||
CREATE VIEW v2 AS
|
|
||||||
SELECT
|
|
||||||
(SELECT GROUP_CONCAT(v1.f1 SEPARATOR ', ')
|
|
||||||
FROM v1 n) AS f2,
|
|
||||||
GROUP_CONCAT('' SEPARATOR ', ') AS f3
|
|
||||||
FROM v1;
|
|
||||||
CREATE VIEW v3 AS
|
|
||||||
SELECT 1 as f4 FROM v2;
|
|
||||||
CREATE PROCEDURE p1()
|
|
||||||
SELECT * FROM v3;
|
|
||||||
CALL p1();
|
|
||||||
f4
|
|
||||||
1
|
|
||||||
CALL p1();
|
|
||||||
f4
|
|
||||||
1
|
|
||||||
drop procedure p1;
|
|
||||||
drop view v1,v2,v3;
|
|
||||||
drop table t1;
|
|
||||||
#
|
|
||||||
# MDEV-25631: Crash in st_select_lex::mark_as_dependent with
|
|
||||||
# VIEW, aggregate and subquery
|
|
||||||
#
|
|
||||||
CREATE TABLE t1 (i1 int);
|
|
||||||
insert into t1 values (1),(2),(3);
|
|
||||||
CREATE VIEW v1 AS
|
|
||||||
SELECT t1.i1 FROM (t1 a JOIN t1 ON (t1.i1 = (SELECT t1.i1 FROM t1 b)));
|
|
||||||
SELECT 1 FROM (SELECT count(((SELECT i1 FROM v1))) FROM v1) dt ;
|
|
||||||
ERROR 21000: Subquery returns more than 1 row
|
|
||||||
delete from t1 where i1 > 1;
|
|
||||||
SELECT 1 FROM (SELECT count(((SELECT i1 FROM v1))) FROM v1) dt ;
|
|
||||||
1
|
|
||||||
1
|
|
||||||
drop view v1;
|
|
||||||
drop table t1;
|
|
||||||
#
|
|
||||||
# MDEV-26299: Some views force server (and mysqldump) to generate
|
# MDEV-26299: Some views force server (and mysqldump) to generate
|
||||||
# invalid SQL for their definitions
|
# invalid SQL for their definitions
|
||||||
#
|
#
|
||||||
@ -6831,6 +6788,24 @@ drop view v1;
|
|||||||
CREATE VIEW v1 AS select `t1`.`12345678901234567890123456789012345678901234567890123456789012345` AS `Name_exp_1` from (select '12345678901234567890123456789012345678901234567890123456789012345') `t1`;
|
CREATE VIEW v1 AS select `t1`.`12345678901234567890123456789012345678901234567890123456789012345` AS `Name_exp_1` from (select '12345678901234567890123456789012345678901234567890123456789012345') `t1`;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
#
|
#
|
||||||
|
# MDEV-25631: view with outer reference in select used
|
||||||
|
# as argument of set function
|
||||||
|
#
|
||||||
|
create table t1 (c int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
create view v1 as select c from t1 where (select t1.c from t1 t) = 1;
|
||||||
|
select * from (select sum((select * from v1)) as r) dt;
|
||||||
|
r
|
||||||
|
1
|
||||||
|
with cte as (select c from t1 where (select t1.c from t1 t) = 1)
|
||||||
|
select * from (select sum((select * from cte)) as r) dt1
|
||||||
|
union
|
||||||
|
select * from (select sum((select * from cte)) as r) dt2;
|
||||||
|
r
|
||||||
|
1
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -6499,56 +6499,6 @@ SELECT sum(z) FROM v1;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
|
|
||||||
--echo #
|
|
||||||
--echo # MDEV-24454: Crash at change_item_tree
|
|
||||||
--echo #
|
|
||||||
|
|
||||||
CREATE TABLE t1(f0 INT);
|
|
||||||
|
|
||||||
CREATE VIEW v1 AS
|
|
||||||
SELECT
|
|
||||||
f0 AS f1
|
|
||||||
FROM t1;
|
|
||||||
|
|
||||||
CREATE VIEW v2 AS
|
|
||||||
SELECT
|
|
||||||
(SELECT GROUP_CONCAT(v1.f1 SEPARATOR ', ')
|
|
||||||
FROM v1 n) AS f2,
|
|
||||||
GROUP_CONCAT('' SEPARATOR ', ') AS f3
|
|
||||||
FROM v1;
|
|
||||||
|
|
||||||
CREATE VIEW v3 AS
|
|
||||||
SELECT 1 as f4 FROM v2;
|
|
||||||
|
|
||||||
CREATE PROCEDURE p1()
|
|
||||||
SELECT * FROM v3;
|
|
||||||
|
|
||||||
CALL p1();
|
|
||||||
CALL p1();
|
|
||||||
|
|
||||||
drop procedure p1;
|
|
||||||
drop view v1,v2,v3;
|
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
--echo #
|
|
||||||
--echo # MDEV-25631: Crash in st_select_lex::mark_as_dependent with
|
|
||||||
--echo # VIEW, aggregate and subquery
|
|
||||||
--echo #
|
|
||||||
|
|
||||||
CREATE TABLE t1 (i1 int);
|
|
||||||
insert into t1 values (1),(2),(3); #not important
|
|
||||||
CREATE VIEW v1 AS
|
|
||||||
SELECT t1.i1 FROM (t1 a JOIN t1 ON (t1.i1 = (SELECT t1.i1 FROM t1 b)));
|
|
||||||
|
|
||||||
--error ER_SUBQUERY_NO_1_ROW
|
|
||||||
SELECT 1 FROM (SELECT count(((SELECT i1 FROM v1))) FROM v1) dt ;
|
|
||||||
delete from t1 where i1 > 1;
|
|
||||||
SELECT 1 FROM (SELECT count(((SELECT i1 FROM v1))) FROM v1) dt ;
|
|
||||||
|
|
||||||
drop view v1;
|
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-26299: Some views force server (and mysqldump) to generate
|
--echo # MDEV-26299: Some views force server (and mysqldump) to generate
|
||||||
--echo # invalid SQL for their definitions
|
--echo # invalid SQL for their definitions
|
||||||
@ -6565,8 +6515,28 @@ drop view v1;
|
|||||||
|
|
||||||
eval CREATE VIEW v1 AS $definition;
|
eval CREATE VIEW v1 AS $definition;
|
||||||
|
|
||||||
|
|
||||||
drop view v1;
|
drop view v1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-25631: view with outer reference in select used
|
||||||
|
--echo # as argument of set function
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (c int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
create view v1 as select c from t1 where (select t1.c from t1 t) = 1;
|
||||||
|
|
||||||
|
select * from (select sum((select * from v1)) as r) dt;
|
||||||
|
|
||||||
|
with cte as (select c from t1 where (select t1.c from t1 t) = 1)
|
||||||
|
select * from (select sum((select * from cte)) as r) dt1
|
||||||
|
union
|
||||||
|
select * from (select sum((select * from cte)) as r) dt2;
|
||||||
|
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1975,7 +1975,7 @@ sub executable_setup () {
|
|||||||
$exe_mysql= mtr_exe_exists("$path_client_bindir/mysql");
|
$exe_mysql= mtr_exe_exists("$path_client_bindir/mysql");
|
||||||
$exe_mysql_plugin= mtr_exe_exists("$path_client_bindir/mysql_plugin");
|
$exe_mysql_plugin= mtr_exe_exists("$path_client_bindir/mysql_plugin");
|
||||||
|
|
||||||
$exe_mysql_embedded= mtr_exe_maybe_exists("$basedir/libmysqld/examples/mysql_embedded");
|
$exe_mysql_embedded= mtr_exe_maybe_exists("$bindir/libmysqld/examples/mysql_embedded");
|
||||||
|
|
||||||
# Look for mysqltest executable
|
# Look for mysqltest executable
|
||||||
if ( $opt_embedded_server )
|
if ( $opt_embedded_server )
|
||||||
|
@ -1921,3 +1921,28 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Beginning of 10.2 test
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-25460: Assertion `!is_set() || (m_status == DA_OK_BULK &&
|
||||||
|
--echo # is_bulk_op())' failed in Diagnostics_area::set_ok_status in my_ok
|
||||||
|
--echo # from mysql_sql_stmt_prepare
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE a (c INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE b (c INT) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
--error ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR
|
||||||
|
PREPARE s FROM 'SET STATEMENT binlog_format=ROW FOR SELECT * FROM b';
|
||||||
|
|
||||||
|
DROP TABLE b;
|
||||||
|
DROP TEMPORARY TABLE a;
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE t (c INT);
|
||||||
|
--error ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR
|
||||||
|
PREPARE s FROM 'SET STATEMENT binlog_format=ROW FOR SELECT 1';
|
||||||
|
DROP TEMPORARY TABLE t;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.2 test
|
||||||
|
--echo #
|
||||||
|
@ -6372,3 +6372,23 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
# Cleanup.
|
# Cleanup.
|
||||||
#
|
#
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Beginning of 10.2 test
|
||||||
|
#
|
||||||
|
# MDEV-25460: Assertion `!is_set() || (m_status == DA_OK_BULK &&
|
||||||
|
# is_bulk_op())' failed in Diagnostics_area::set_ok_status in my_ok
|
||||||
|
# from mysql_sql_stmt_prepare
|
||||||
|
#
|
||||||
|
CREATE TEMPORARY TABLE a (c INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE b (c INT) ENGINE=InnoDB;
|
||||||
|
PREPARE s FROM 'SET STATEMENT binlog_format=ROW FOR SELECT * FROM b';
|
||||||
|
ERROR HY000: Cannot switch out of the row-based binary log format when the session has open temporary tables
|
||||||
|
DROP TABLE b;
|
||||||
|
DROP TEMPORARY TABLE a;
|
||||||
|
CREATE TEMPORARY TABLE t (c INT);
|
||||||
|
PREPARE s FROM 'SET STATEMENT binlog_format=ROW FOR SELECT 1';
|
||||||
|
ERROR HY000: Cannot switch out of the row-based binary log format when the session has open temporary tables
|
||||||
|
DROP TEMPORARY TABLE t;
|
||||||
|
#
|
||||||
|
# End of 10.2 test
|
||||||
|
#
|
||||||
|
@ -6413,3 +6413,29 @@ ROLLBACK /* added by mysqlbinlog */;
|
|||||||
# Cleanup.
|
# Cleanup.
|
||||||
#
|
#
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Beginning of 10.2 test
|
||||||
|
#
|
||||||
|
# MDEV-25460: Assertion `!is_set() || (m_status == DA_OK_BULK &&
|
||||||
|
# is_bulk_op())' failed in Diagnostics_area::set_ok_status in my_ok
|
||||||
|
# from mysql_sql_stmt_prepare
|
||||||
|
#
|
||||||
|
CREATE TEMPORARY TABLE a (c INT) ENGINE=InnoDB;
|
||||||
|
Warnings:
|
||||||
|
Warning 1286 Unknown storage engine 'InnoDB'
|
||||||
|
Warning 1266 Using storage engine MyISAM for table 'a'
|
||||||
|
CREATE TABLE b (c INT) ENGINE=InnoDB;
|
||||||
|
Warnings:
|
||||||
|
Warning 1286 Unknown storage engine 'InnoDB'
|
||||||
|
Warning 1266 Using storage engine MyISAM for table 'b'
|
||||||
|
PREPARE s FROM 'SET STATEMENT binlog_format=ROW FOR SELECT * FROM b';
|
||||||
|
ERROR HY000: Cannot switch out of the row-based binary log format when the session has open temporary tables
|
||||||
|
DROP TABLE b;
|
||||||
|
DROP TEMPORARY TABLE a;
|
||||||
|
CREATE TEMPORARY TABLE t (c INT);
|
||||||
|
PREPARE s FROM 'SET STATEMENT binlog_format=ROW FOR SELECT 1';
|
||||||
|
ERROR HY000: Cannot switch out of the row-based binary log format when the session has open temporary tables
|
||||||
|
DROP TEMPORARY TABLE t;
|
||||||
|
#
|
||||||
|
# End of 10.2 test
|
||||||
|
#
|
||||||
|
11
mysql-test/suite/binlog/r/binlog_xa_handling.result
Normal file
11
mysql-test/suite/binlog/r/binlog_xa_handling.result
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
connection default;
|
||||||
|
CREATE TABLE t1(f1 int) ENGINE=Innodb;
|
||||||
|
XA START 'xa';
|
||||||
|
INSERT INTO t1 VALUES(10);
|
||||||
|
BINLOG '
|
||||||
|
SOgWTg8BAAAAbgAAAHIAAAAAAAQANS42LjMtbTUtZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAABI6BZOEzgNAAgAEgAEBAQEEgAAVgAEGggAAAAICAgCAAAAAAVAYI8=';
|
||||||
|
XA END 'xa';
|
||||||
|
XA PREPARE 'xa';
|
||||||
|
XA ROLLBACK 'xa';
|
||||||
|
DROP TABLE t1;
|
28
mysql-test/suite/binlog/t/binlog_xa_handling.test
Normal file
28
mysql-test/suite/binlog/t/binlog_xa_handling.test
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Bug#19928622: ASSERTION `! IS_SET()' FAILED. | ABORT IN
|
||||||
|
# DIAGNOSTICS_AREA::SET_OK_STATUS
|
||||||
|
#
|
||||||
|
# MDEV-27536 Invalid BINLOG_BASE64_EVENT and assertion Diagnostics_area:: !is_set()
|
||||||
|
#
|
||||||
|
# Test:
|
||||||
|
# =====
|
||||||
|
# Begin an XA transaction and execte a DML statement so that XA state becomes
|
||||||
|
# XA_ACTIVE. Execute the BINLOG command it should not cause any assert.
|
||||||
|
# Execution should be successful.
|
||||||
|
###############################################################################
|
||||||
|
--source include/have_log_bin.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
CREATE TABLE t1(f1 int) ENGINE=Innodb;
|
||||||
|
|
||||||
|
XA START 'xa';
|
||||||
|
INSERT INTO t1 VALUES(10);
|
||||||
|
BINLOG '
|
||||||
|
SOgWTg8BAAAAbgAAAHIAAAAAAAQANS42LjMtbTUtZGVidWctbG9nAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAABI6BZOEzgNAAgAEgAEBAQEEgAAVgAEGggAAAAICAgCAAAAAAVAYI8=';
|
||||||
|
XA END 'xa';
|
||||||
|
XA PREPARE 'xa';
|
||||||
|
XA ROLLBACK 'xa';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
@ -1,6 +1,7 @@
|
|||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
-- source include/have_file_key_management_plugin.inc
|
-- source include/have_file_key_management_plugin.inc
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
|
-- source include/have_symlink.inc
|
||||||
|
|
||||||
FLUSH STATUS;
|
FLUSH STATUS;
|
||||||
|
|
||||||
|
18
mysql-test/suite/federated/rpl.result
Normal file
18
mysql-test/suite/federated/rpl.result
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
include/master-slave.inc
|
||||||
|
[connection master]
|
||||||
|
create table t1 (a int primary key, b int);
|
||||||
|
connection slave;
|
||||||
|
rename table t1 to t2;
|
||||||
|
create table t1 (a int primary key, b int) engine=federated connection='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/t2';
|
||||||
|
connection master;
|
||||||
|
insert t1 values (1,1),(2,2),(3,1);
|
||||||
|
delete from t1 where a=2;
|
||||||
|
connection slave;
|
||||||
|
select * from t1;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
3 1
|
||||||
|
drop table t2;
|
||||||
|
connection master;
|
||||||
|
drop table t1;
|
||||||
|
include/rpl_end.inc
|
19
mysql-test/suite/federated/rpl.test
Normal file
19
mysql-test/suite/federated/rpl.test
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
source include/have_binlog_format_row.inc;
|
||||||
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
create table t1 (a int primary key, b int);
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
rename table t1 to t2;
|
||||||
|
evalp create table t1 (a int primary key, b int) engine=federated connection='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/t2';
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
insert t1 values (1,1),(2,2),(3,1);
|
||||||
|
delete from t1 where a=2;
|
||||||
|
sync_slave_with_master;
|
||||||
|
select * from t1;
|
||||||
|
drop table t2;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
drop table t1;
|
||||||
|
source include/rpl_end.inc;
|
@ -25,6 +25,10 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
||||||
|
|
||||||
|
# The following is needed as embedded server can be compiled with and without
|
||||||
|
# privlege tables
|
||||||
|
|
||||||
eval
|
eval
|
||||||
SELECT * FROM information_schema.columns
|
SELECT * FROM information_schema.columns
|
||||||
$my_where
|
$my_where
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/is_embedded.inc
|
--source include/is_embedded_no_privileges.inc
|
||||||
|
|
||||||
let $my_where = WHERE table_schema = 'information_schema'
|
let $my_where = WHERE table_schema = 'information_schema'
|
||||||
AND table_name <> 'profiling' AND table_name not like 'innodb_%';
|
AND table_name <> 'profiling' AND table_name not like 'innodb_%';
|
||||||
|
@ -10,10 +10,8 @@
|
|||||||
# 2008-06-06 mleich Create this this variant for the embedded server.
|
# 2008-06-06 mleich Create this this variant for the embedded server.
|
||||||
#
|
#
|
||||||
|
|
||||||
if (`SELECT VERSION() NOT LIKE '%embedded%'`)
|
--source include/is_embedded_no_privileges.inc
|
||||||
{
|
|
||||||
--skip Test requires: embedded server
|
|
||||||
}
|
|
||||||
let $engine_type= MyISAM;
|
let $engine_type= MyISAM;
|
||||||
SET @@session.sql_mode = 'NO_ENGINE_SUBSTITUTION';
|
SET @@session.sql_mode = 'NO_ENGINE_SUBSTITUTION';
|
||||||
--source suite/funcs_1/datadict/datadict_load.inc
|
--source suite/funcs_1/datadict/datadict_load.inc
|
||||||
|
@ -10,10 +10,7 @@
|
|||||||
# 2008-06-06 mleich Create this variant for the embedded server
|
# 2008-06-06 mleich Create this variant for the embedded server
|
||||||
#
|
#
|
||||||
|
|
||||||
if (`SELECT VERSION() NOT LIKE '%embedded%'`)
|
--source include/is_embedded_no_privileges.inc
|
||||||
{
|
|
||||||
--skip Test requires: embedded server
|
|
||||||
}
|
|
||||||
|
|
||||||
let $my_where = WHERE table_schema = 'mysql';
|
let $my_where = WHERE table_schema = 'mysql';
|
||||||
--source suite/funcs_1/datadict/columns.inc
|
--source suite/funcs_1/datadict/columns.inc
|
||||||
|
@ -7,6 +7,7 @@ CREATE TABLE t1(i INT) ENGINE=INNODB;
|
|||||||
CREATE TABLE t2(i INT) ENGINE=MYISAM;
|
CREATE TABLE t2(i INT) ENGINE=MYISAM;
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1266 Using storage engine InnoDB for table 't2'
|
Note 1266 Using storage engine InnoDB for table 't2'
|
||||||
|
Note 1266 Using storage engine InnoDB for table 't2'
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SHOW TABLES;
|
SHOW TABLES;
|
||||||
Tables_in_test
|
Tables_in_test
|
||||||
|
@ -47,3 +47,8 @@ DROP TABLE schema2.real_table2;
|
|||||||
DROP TABLE schema2.real_table3;
|
DROP TABLE schema2.real_table3;
|
||||||
DROP SCHEMA schema1;
|
DROP SCHEMA schema1;
|
||||||
DROP SCHEMA schema2;
|
DROP SCHEMA schema2;
|
||||||
|
use test;
|
||||||
|
CREATE TEMPORARY TABLE t (c INT) ENGINE=mrg_myisam UNION=(t,t2) insert_method=FIRST;
|
||||||
|
CREATE TABLE t2 LIKE t;
|
||||||
|
ERROR HY000: Table 't' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
DROP TABLE t;
|
||||||
|
@ -35,3 +35,14 @@ SELECT COUNT(*) = 0 FROM t2;
|
|||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
DROP TABLE t1, t2, t3;
|
DROP TABLE t1, t2, t3;
|
||||||
|
SET SESSION lock_wait_timeout=2;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= ON;
|
||||||
|
CREATE TEMPORARY TABLE t1 (i INT, PRIMARY KEY pk (i)) ENGINE=MyISAM;
|
||||||
|
Warnings:
|
||||||
|
Warning 1280 Name 'pk' ignored for PRIMARY key.
|
||||||
|
PREPARE stmt FROM "INSERT INTO t1 (id) SELECT * FROM (SELECT 4 AS i) AS y";
|
||||||
|
INSERT INTO t1 VALUES(4);
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
COMMIT;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam=OFF;
|
||||||
|
@ -48,3 +48,12 @@ DROP TABLE schema2.real_table3;
|
|||||||
|
|
||||||
DROP SCHEMA schema1;
|
DROP SCHEMA schema1;
|
||||||
DROP SCHEMA schema2;
|
DROP SCHEMA schema2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-25856: SIGSEGV in ha_myisammrg::append_create_info
|
||||||
|
#
|
||||||
|
use test;
|
||||||
|
CREATE TEMPORARY TABLE t (c INT) ENGINE=mrg_myisam UNION=(t,t2) insert_method=FIRST;
|
||||||
|
--error 1472
|
||||||
|
CREATE TABLE t2 LIKE t;
|
||||||
|
DROP TABLE t;
|
||||||
|
@ -34,3 +34,16 @@ SELECT COUNT(*) = 0 FROM t2;
|
|||||||
SELECT COUNT(*) = 0 FROM t2;
|
SELECT COUNT(*) = 0 FROM t2;
|
||||||
|
|
||||||
DROP TABLE t1, t2, t3;
|
DROP TABLE t1, t2, t3;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-25201 : Assertion `thd->wsrep_trx_meta.gtid.seqno == (-1)' failed in int wsrep_to_isolation_begin(THD*, const char*, const char*, const TABLE_LIST*, Alter_info*)
|
||||||
|
#
|
||||||
|
SET SESSION lock_wait_timeout=2;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam= ON;
|
||||||
|
CREATE TEMPORARY TABLE t1 (i INT, PRIMARY KEY pk (i)) ENGINE=MyISAM;
|
||||||
|
PREPARE stmt FROM "INSERT INTO t1 (id) SELECT * FROM (SELECT 4 AS i) AS y";
|
||||||
|
INSERT INTO t1 VALUES(4);
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
COMMIT;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL wsrep_replicate_myisam=OFF;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--source include/have_wsrep.inc
|
--source include/galera_cluster.inc
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # wsrep_slave_threads
|
--echo # wsrep_slave_threads
|
@ -331,7 +331,7 @@ SELECT * FROM t1;
|
|||||||
ERROR HY000: Tablespace has been discarded for table `t1`
|
ERROR HY000: Tablespace has been discarded for table `t1`
|
||||||
restore: t1 .ibd and .cfg files
|
restore: t1 .ibd and .cfg files
|
||||||
ALTER TABLE t1 IMPORT TABLESPACE;
|
ALTER TABLE t1 IMPORT TABLESPACE;
|
||||||
ERROR HY000: Schema mismatch (Number of columns don't match, table has 6 columns but the tablespace meta-data file has 5 columns)
|
ERROR HY000: Schema mismatch (Column c3 not found in tablespace.)
|
||||||
unlink: t1.ibd
|
unlink: t1.ibd
|
||||||
unlink: t1.cfg
|
unlink: t1.cfg
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@ -916,6 +916,22 @@ c1 c2
|
|||||||
15 1
|
15 1
|
||||||
16 1
|
16 1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 ( id INT NOT NULL, i1 INT, i2 INT, i3 INT, PRIMARY KEY (id)) engine=innodb;
|
||||||
|
CREATE TABLE t2 ( id INT NOT NULL, i1 INT, i2 INT, PRIMARY KEY (id)) engine=innodb;
|
||||||
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||||
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
|
ERROR HY000: Schema mismatch (Column DB_ROW_ID ordinal value mismatch, it's at 3 in the table and 4 in the tablespace meta-data file)
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
CREATE TABLE t1 ( id INT NOT NULL, i1 INT, i2 INT, PRIMARY KEY (id)) engine=innodb;
|
||||||
|
CREATE TABLE t2 ( id INT NOT NULL, i1 INT, i2 INT, i3 INT, PRIMARY KEY (id)) engine=innodb;
|
||||||
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||||
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
|
ERROR HY000: Schema mismatch (Column i3 not found in tablespace.)
|
||||||
|
DROP TABLE t1, t2;
|
||||||
call mtr.add_suppression("Got error -1 when reading table '.*'");
|
call mtr.add_suppression("Got error -1 when reading table '.*'");
|
||||||
call mtr.add_suppression("InnoDB: Error: tablespace id and flags in file '.*'");
|
call mtr.add_suppression("InnoDB: Error: tablespace id and flags in file '.*'");
|
||||||
call mtr.add_suppression("InnoDB: The table .* doesn't have a corresponding tablespace, it was discarded");
|
call mtr.add_suppression("InnoDB: The table .* doesn't have a corresponding tablespace, it was discarded");
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
select @@innodb_buffer_pool_chunk_size;
|
select @@innodb_buffer_pool_chunk_size;
|
||||||
@@innodb_buffer_pool_chunk_size
|
@@innodb_buffer_pool_chunk_size
|
||||||
2097152
|
4194304
|
||||||
create table t1 (id int not null, val int not null default '0', primary key (id)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
|
create table t1 (id int not null, val int not null default '0', primary key (id)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;
|
||||||
create or replace view view0 as select 1 union all select 1;
|
create or replace view view0 as select 1 union all select 1;
|
||||||
set @`v_id` := 0;
|
set @`v_id` := 0;
|
||||||
@ -18,9 +18,9 @@ count(val)
|
|||||||
262144
|
262144
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop view view0;
|
drop view view0;
|
||||||
set global innodb_buffer_pool_size = 1048576;
|
set global innodb_buffer_pool_size = 2*1048576;
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect innodb_buffer_pool_size value: '1048576'
|
Warning 1292 Truncated incorrect innodb_buffer_pool_size value: '2097152'
|
||||||
select @@innodb_buffer_pool_size;
|
select @@innodb_buffer_pool_size;
|
||||||
@@innodb_buffer_pool_size
|
@@innodb_buffer_pool_size
|
||||||
6291456
|
4194304
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
lock_mode lock_type lock_table lock_index lock_rec lock_data
|
lock_mode lock_type lock_table lock_index lock_rec lock_data
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 2 '1', 'abc', '''abc', 'abc''', 'a''bc', 'a''bc''', '''abc'''''
|
X RECORD `test`.```t'\"_str` PRIMARY 1 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 2 '1', 'abc', '''abc', 'abc''', 'a''bc', 'a''bc''', '''abc'''''
|
X RECORD `test`.```t'\"_str` PRIMARY 1 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 3 '2', 'abc', '"abc', 'abc"', 'a"bc', 'a"bc"', '"abc""'
|
X RECORD `test`.```t'\"_str` PRIMARY 2 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 3 '2', 'abc', '"abc', 'abc"', 'a"bc', 'a"bc"', '"abc""'
|
X RECORD `test`.```t'\"_str` PRIMARY 2 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 4 '3', 'abc', '\\abc', 'abc\\', 'a\\bc', 'a\\bc\\', '\\abc\\\\'
|
X RECORD `test`.```t'\"_str` PRIMARY 3 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 4 '3', 'abc', '\\abc', 'abc\\', 'a\\bc', 'a\\bc\\', '\\abc\\\\'
|
X RECORD `test`.```t'\"_str` PRIMARY 3 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 5 '4', 'abc', '\0abc', 'abc\0', 'a\0bc', 'a\0bc\0', 'a\0bc\0\0'
|
X RECORD `test`.```t'\"_str` PRIMARY 4 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 5 '4', 'abc', '\0abc', 'abc\0', 'a\0bc', 'a\0bc\0', 'a\0bc\0\0'
|
X RECORD `test`.```t'\"_str` PRIMARY 4 #
|
||||||
X RECORD `test`.`t_min` PRIMARY 2 -128, 0, -32768, 0, -8388608, 0, -2147483648, 0, -9223372036854775808, 0
|
X RECORD `test`.```t'\"_str` PRIMARY 5 #
|
||||||
X RECORD `test`.`t_min` PRIMARY 2 -128, 0, -32768, 0, -8388608, 0, -2147483648, 0, -9223372036854775808, 0
|
X RECORD `test`.```t'\"_str` PRIMARY 5 #
|
||||||
X RECORD `test`.`t_max` PRIMARY 2 127, 255, 32767, 65535, 8388607, 16777215, 2147483647, 4294967295, 9223372036854775807, 18446744073709551615
|
X RECORD `test`.`t_max` PRIMARY 2 #
|
||||||
X RECORD `test`.`t_max` PRIMARY 2 127, 255, 32767, 65535, 8388607, 16777215, 2147483647, 4294967295, 9223372036854775807, 18446744073709551615
|
X RECORD `test`.`t_max` PRIMARY 2 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 1 supremum pseudo-record
|
X RECORD `test`.`t_min` PRIMARY 2 #
|
||||||
X RECORD `test`.```t'\"_str` PRIMARY 1 supremum pseudo-record
|
X RECORD `test`.`t_min` PRIMARY 2 #
|
||||||
lock_table COUNT(*)
|
lock_table COUNT(*)
|
||||||
`test`.`t_max` 2
|
`test`.`t_max` 2
|
||||||
`test`.`t_min` 2
|
`test`.`t_min` 2
|
||||||
|
16
mysql-test/suite/innodb/r/restart,16k,innodb.rdiff
Normal file
16
mysql-test/suite/innodb/r/restart,16k,innodb.rdiff
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
--- ./suite/innodb/r/restart.result 2022-01-18 20:36:56.054653376 +1100
|
||||||
|
+++ suite/innodb/r/restart.reject 2022-01-19 08:12:28.602794678 +1100
|
||||||
|
@@ -32,10 +32,10 @@
|
||||||
|
SELECT @@innodb_buffer_pool_size INTO @innodb_buffer_pool_size_orig;
|
||||||
|
SELECT CEILING((256 + 64) * @@innodb_page_size / 1048576) * 1048576 INTO @min_pool_size;
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size -1);
|
||||||
|
-ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of '5242879'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
-Warning 1210 innodb_buffer_pool_size must be at least MIN_VAL for innodb_page_size=PAGE_SIZE
|
||||||
|
-Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+Warning 1210 innodb_buffer_pool_size must be at least 5242880 for innodb_page_size=16384
|
||||||
|
+Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of '5242879'
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size);
|
||||||
|
SET GLOBAL innodb_buffer_pool_size = @innodb_buffer_pool_size_orig;
|
16
mysql-test/suite/innodb/r/restart,32k,innodb.rdiff
Normal file
16
mysql-test/suite/innodb/r/restart,32k,innodb.rdiff
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
--- ./suite/innodb/r/restart.result 2022-01-18 20:36:56.054653376 +1100
|
||||||
|
+++ suite/innodb/r/restart.reject 2022-01-19 08:07:57.402230887 +1100
|
||||||
|
@@ -32,10 +32,10 @@
|
||||||
|
SELECT @@innodb_buffer_pool_size INTO @innodb_buffer_pool_size_orig;
|
||||||
|
SELECT CEILING((256 + 64) * @@innodb_page_size / 1048576) * 1048576 INTO @min_pool_size;
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size -1);
|
||||||
|
-ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of '10485759'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
-Warning 1210 innodb_buffer_pool_size must be at least MIN_VAL for innodb_page_size=PAGE_SIZE
|
||||||
|
-Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+Warning 1210 innodb_buffer_pool_size must be at least 10485760 for innodb_page_size=32768
|
||||||
|
+Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of '10485759'
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size);
|
||||||
|
SET GLOBAL innodb_buffer_pool_size = @innodb_buffer_pool_size_orig;
|
16
mysql-test/suite/innodb/r/restart,4k,innodb.rdiff
Normal file
16
mysql-test/suite/innodb/r/restart,4k,innodb.rdiff
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
--- ./suite/innodb/r/restart.result 2022-01-18 20:36:56.054653376 +1100
|
||||||
|
+++ suite/innodb/r/restart.reject 2022-01-19 08:13:56.397475513 +1100
|
||||||
|
@@ -32,10 +32,10 @@
|
||||||
|
SELECT @@innodb_buffer_pool_size INTO @innodb_buffer_pool_size_orig;
|
||||||
|
SELECT CEILING((256 + 64) * @@innodb_page_size / 1048576) * 1048576 INTO @min_pool_size;
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size -1);
|
||||||
|
-ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of '2097151'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
-Warning 1210 innodb_buffer_pool_size must be at least MIN_VAL for innodb_page_size=PAGE_SIZE
|
||||||
|
-Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+Warning 1210 innodb_buffer_pool_size must be at least 2097152 for innodb_page_size=4096
|
||||||
|
+Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of '2097151'
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size);
|
||||||
|
SET GLOBAL innodb_buffer_pool_size = @innodb_buffer_pool_size_orig;
|
16
mysql-test/suite/innodb/r/restart,64k,innodb.rdiff
Normal file
16
mysql-test/suite/innodb/r/restart,64k,innodb.rdiff
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
--- ./suite/innodb/r/restart.result 2022-01-18 20:36:56.054653376 +1100
|
||||||
|
+++ suite/innodb/r/restart.reject 2022-01-19 08:11:32.418759095 +1100
|
||||||
|
@@ -32,10 +32,10 @@
|
||||||
|
SELECT @@innodb_buffer_pool_size INTO @innodb_buffer_pool_size_orig;
|
||||||
|
SELECT CEILING((256 + 64) * @@innodb_page_size / 1048576) * 1048576 INTO @min_pool_size;
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size -1);
|
||||||
|
-ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of '20971519'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
-Warning 1210 innodb_buffer_pool_size must be at least MIN_VAL for innodb_page_size=PAGE_SIZE
|
||||||
|
-Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+Warning 1210 innodb_buffer_pool_size must be at least 20971520 for innodb_page_size=65536
|
||||||
|
+Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of '20971519'
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size);
|
||||||
|
SET GLOBAL innodb_buffer_pool_size = @innodb_buffer_pool_size_orig;
|
16
mysql-test/suite/innodb/r/restart,8k,innodb.rdiff
Normal file
16
mysql-test/suite/innodb/r/restart,8k,innodb.rdiff
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
--- ./suite/innodb/r/restart.result 2022-01-18 20:36:56.054653376 +1100
|
||||||
|
+++ suite/innodb/r/restart.reject 2022-01-19 08:13:11.027788852 +1100
|
||||||
|
@@ -32,10 +32,10 @@
|
||||||
|
SELECT @@innodb_buffer_pool_size INTO @innodb_buffer_pool_size_orig;
|
||||||
|
SELECT CEILING((256 + 64) * @@innodb_page_size / 1048576) * 1048576 INTO @min_pool_size;
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size -1);
|
||||||
|
-ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of '3145727'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
-Warning 1210 innodb_buffer_pool_size must be at least MIN_VAL for innodb_page_size=PAGE_SIZE
|
||||||
|
-Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
+Warning 1210 innodb_buffer_pool_size must be at least 3145728 for innodb_page_size=8192
|
||||||
|
+Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of '3145727'
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size);
|
||||||
|
SET GLOBAL innodb_buffer_pool_size = @innodb_buffer_pool_size_orig;
|
@ -26,3 +26,16 @@ a
|
|||||||
SELECT * FROM td;
|
SELECT * FROM td;
|
||||||
a
|
a
|
||||||
DROP TABLE tr,tc,td;
|
DROP TABLE tr,tc,td;
|
||||||
|
#
|
||||||
|
# MDEV-27467 innodb to enfore the minimum innodb_buffer_pool_size in SET (resize) the same as startup
|
||||||
|
#
|
||||||
|
SELECT @@innodb_buffer_pool_size INTO @innodb_buffer_pool_size_orig;
|
||||||
|
SELECT CEILING((256 + 64) * @@innodb_page_size / 1048576) * 1048576 INTO @min_pool_size;
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size -1);
|
||||||
|
ERROR 42000: Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Warning 1210 innodb_buffer_pool_size must be at least MIN_VAL for innodb_page_size=PAGE_SIZE
|
||||||
|
Error 1231 Variable 'innodb_buffer_pool_size' can't be set to the value of 'WRONG_VALUE'
|
||||||
|
EXECUTE IMMEDIATE 'SET GLOBAL innodb_buffer_pool_size = ?' USING (@min_pool_size);
|
||||||
|
SET GLOBAL innodb_buffer_pool_size = @innodb_buffer_pool_size_orig;
|
||||||
|
54
mysql-test/suite/innodb/r/skip_symbolic_links.result
Normal file
54
mysql-test/suite/innodb/r/skip_symbolic_links.result
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
SELECT @@have_symlink;
|
||||||
|
@@have_symlink
|
||||||
|
DISABLED
|
||||||
|
CREATE TABLE t1(a INT) ENGINE=InnoDB DATA DIRECTORY 'MYSQL_TMP_DIR';
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a INT) ENGINE=InnoDB;
|
||||||
|
ALTER TABLE t1 DATA DIRECTORY 'MYSQL_TMP_DIR';
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a INT PRIMARY KEY, b INT) ENGINE=InnoDB
|
||||||
|
DATA DIRECTORY 'MYSQL_TMP_DIR';
|
||||||
|
CREATE TABLE t2(a INT PRIMARY KEY, b INT) ENGINE=InnoDB
|
||||||
|
DATA DIRECTORY 'MYSQL_TMP_DIR';
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
TRUNCATE TABLE t2;
|
||||||
|
ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
ALTER TABLE t2 FORCE, ALGORITHM=COPY;
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
OPTIMIZE TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
||||||
|
test.t1 optimize status OK
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
t1.ibd
|
||||||
|
DROP TABLE t2;
|
||||||
|
RENAME TABLE t1 TO t2;
|
||||||
|
ALTER TABLE t2 ADD UNIQUE INDEX(b), RENAME TO t3;
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
ALTER TABLE t3 RENAME TO t2;
|
||||||
|
ALTER TABLE t2 DROP INDEX b, RENAME TO t1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
ALTER TABLE t1 CHANGE b c INT;
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
ALTER TABLE t1 CHANGE c b INT NOT NULL;
|
||||||
|
Warnings:
|
||||||
|
Warning 1618 <DATA DIRECTORY> option ignored
|
||||||
|
t1.ibd
|
||||||
|
TRUNCATE TABLE t1;
|
||||||
|
DROP TABLE t1;
|
@ -1,5 +1,6 @@
|
|||||||
--source include/innodb_page_size.inc
|
--source include/innodb_page_size.inc
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
|
--source include/have_symlink.inc
|
||||||
|
|
||||||
-- echo #
|
-- echo #
|
||||||
-- echo # MDEV-11623 MariaDB 10.1 fails to start datadir created with
|
-- echo # MDEV-11623 MariaDB 10.1 fails to start datadir created with
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_symlink.inc
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
CALL mtr.add_suppression(".*Failed to set O_DIRECT on file.*");
|
CALL mtr.add_suppression(".*Failed to set O_DIRECT on file.*");
|
||||||
|
@ -1056,6 +1056,43 @@ SELECT * FROM t1;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( id INT NOT NULL, i1 INT, i2 INT, i3 INT, PRIMARY KEY (id)) engine=innodb;
|
||||||
|
CREATE TABLE t2 ( id INT NOT NULL, i1 INT, i2 INT, PRIMARY KEY (id)) engine=innodb;
|
||||||
|
|
||||||
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||||
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
|
|
||||||
|
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
|
||||||
|
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg
|
||||||
|
|
||||||
|
UNLOCK TABLES;
|
||||||
|
--error ER_TABLE_SCHEMA_MISMATCH
|
||||||
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( id INT NOT NULL, i1 INT, i2 INT, PRIMARY KEY (id)) engine=innodb;
|
||||||
|
CREATE TABLE t2 ( id INT NOT NULL, i1 INT, i2 INT, i3 INT, PRIMARY KEY (id)) engine=innodb;
|
||||||
|
|
||||||
|
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||||
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
|
|
||||||
|
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
|
||||||
|
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg
|
||||||
|
|
||||||
|
UNLOCK TABLES;
|
||||||
|
--error ER_TABLE_SCHEMA_MISMATCH
|
||||||
|
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||||
|
|
||||||
|
--remove_file $MYSQLD_DATADIR/test/t2.ibd
|
||||||
|
--remove_file $MYSQLD_DATADIR/test/t2.cfg
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
|
||||||
call mtr.add_suppression("Got error -1 when reading table '.*'");
|
call mtr.add_suppression("Got error -1 when reading table '.*'");
|
||||||
call mtr.add_suppression("InnoDB: Error: tablespace id and flags in file '.*'");
|
call mtr.add_suppression("InnoDB: Error: tablespace id and flags in file '.*'");
|
||||||
call mtr.add_suppression("InnoDB: The table .* doesn't have a corresponding tablespace, it was discarded");
|
call mtr.add_suppression("InnoDB: The table .* doesn't have a corresponding tablespace, it was discarded");
|
||||||
|
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