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
|
||||
*.h diff=cpp
|
||||
*.cc diff=cpp
|
||||
*.ic diff=cpp
|
||||
*.inl diff=cpp
|
||||
*.cpp diff=cpp
|
||||
*.java diff=cpp
|
||||
|
@ -407,6 +407,10 @@ IF(WITH_UNIT_TESTS)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
INCLUDE(cpack_tgz)
|
||||
INCLUDE(cpack_rpm)
|
||||
INCLUDE(cpack_deb)
|
||||
|
||||
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
|
||||
|
||||
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}
|
||||
|
||||
cache:
|
||||
- C:\ProgramData\chocolatey\bin -> appveyor.yml
|
||||
- C:\ProgramData\chocolatey\lib -> appveyor.yml
|
||||
|
||||
clone_depth: 1
|
||||
|
||||
build_script:
|
||||
@ -26,8 +16,8 @@ build_script:
|
||||
- cd _build
|
||||
- set BUILD_TYPE=MinSizeRel
|
||||
- set GENERATOR=-GNinja
|
||||
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\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
|
||||
- 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:\cygwin64\bin\bison.exe -DPLUGIN_PERFSCHEMA=NO -DPLUGIN_FEEDBACK=NO
|
||||
- set /A jobs=2*%NUMBER_OF_PROCESSORS%
|
||||
- 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%
|
||||
- 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_IGNORE_DATA,
|
||||
OPT_PRINT_ROW_COUNT, OPT_PRINT_ROW_EVENT_POSITIONS,
|
||||
OPT_CHECK_IF_UPGRADE_NEEDED,
|
||||
OPT_MAX_CLIENT_OPTION /* should be always the last */
|
||||
};
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||
|
||||
#define VER "1.4"
|
||||
#define VER "2.0"
|
||||
|
||||
#ifdef HAVE_SYS_WAIT_H
|
||||
#include <sys/wait.h>
|
||||
@ -37,13 +37,15 @@
|
||||
#endif
|
||||
|
||||
static int phase = 0;
|
||||
static int info_file= -1;
|
||||
static const int phases_total = 7;
|
||||
static char mysql_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;
|
||||
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 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 */
|
||||
|
||||
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;
|
||||
|
||||
@ -95,8 +97,8 @@ static struct my_option my_long_options[]=
|
||||
{"debug", '#', "This is a non-debug version. Catch this and exit.",
|
||||
0, 0, 0, GET_DISABLED, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#else
|
||||
{"debug", '#', "Output debug log.", &default_dbug_option,
|
||||
&default_dbug_option, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"debug", '#', "Output debug log.",
|
||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#endif
|
||||
{"debug-check", OPT_DEBUG_CHECK, "Check memory and open file usage at exit.",
|
||||
&debug_check_flag, &debug_check_flag,
|
||||
@ -110,9 +112,13 @@ static struct my_option my_long_options[]=
|
||||
"Default authentication client-side plugin to use.",
|
||||
&opt_default_auth, &opt_default_auth, 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 "
|
||||
"has already been executed for the current version of MySQL.",
|
||||
&opt_force, &opt_force, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
"has already been executed for the current version of MariaDB.",
|
||||
&opt_not_used, &opt_not_used, 0 , GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"host", 'h', "Connect to host.", 0,
|
||||
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#define PASSWORD_OPT 12
|
||||
@ -193,6 +199,12 @@ static void free_used_memory(void)
|
||||
dynstr_free(&conn_args);
|
||||
if (cnf_file_path)
|
||||
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
|
||||
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");
|
||||
}
|
||||
|
||||
|
||||
static my_bool
|
||||
get_one_option(int optid, const struct my_option *opt,
|
||||
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);
|
||||
die(0);
|
||||
break;
|
||||
case 'f': /* --force */
|
||||
opt_force++;
|
||||
if (argument == disabled_my_option)
|
||||
opt_force= 0;
|
||||
add_option= 0;
|
||||
break;
|
||||
case OPT_SILENT:
|
||||
opt_verbose= 0;
|
||||
add_option= 0;
|
||||
break;
|
||||
case 'f': /* --force */
|
||||
case OPT_CHECK_IF_UPGRADE_NEEDED: /* --check-if-upgrade-needed */
|
||||
case 's': /* --upgrade-system-tables */
|
||||
case OPT_WRITE_BINLOG: /* --write-binlog */
|
||||
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
|
||||
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,
|
||||
MYF(MY_FNABP | MY_WME)))
|
||||
{
|
||||
my_close(fd, MYF(0));
|
||||
my_close(fd, MYF(MY_WME));
|
||||
my_delete(query_file_path, MYF(0));
|
||||
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),
|
||||
MYF(MY_FNABP | MY_WME)))
|
||||
{
|
||||
my_close(fd, MYF(0));
|
||||
my_close(fd, MYF(MY_WME));
|
||||
my_delete(query_file_path, MYF(0));
|
||||
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",
|
||||
NULL);
|
||||
|
||||
my_close(fd, MYF(0));
|
||||
my_close(fd, MYF(MY_WME));
|
||||
my_delete(query_file_path, MYF(0));
|
||||
|
||||
DBUG_RETURN(ret);
|
||||
@ -644,6 +682,9 @@ static int get_upgrade_info_file_name(char* name)
|
||||
&ds_datadir, FALSE) ||
|
||||
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);
|
||||
DBUG_RETURN(1); /* Query failed */
|
||||
}
|
||||
@ -655,6 +696,83 @@ static int get_upgrade_info_file_name(char* name)
|
||||
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
|
||||
@ -664,86 +782,111 @@ static int get_upgrade_info_file_name(char* name)
|
||||
NOTE
|
||||
This is an optimization to avoid running mysql_upgrade
|
||||
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
|
||||
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;
|
||||
char upgrade_info_file[FN_REFLEN]= {0};
|
||||
const char *version = MYSQL_SERVER_VERSION;
|
||||
const char *s;
|
||||
char *pos;
|
||||
my_off_t length;
|
||||
|
||||
if (get_upgrade_info_file_name(upgrade_info_file))
|
||||
return 0; /* Could not get filename => not sure */
|
||||
|
||||
if (!(in= my_fopen(upgrade_info_file, O_RDONLY, flags)))
|
||||
return 0; /* Could not open file => not sure */
|
||||
if (info_file < 0)
|
||||
{
|
||||
DBUG_ASSERT(opt_force > 1);
|
||||
return 1; /* No info file and --force */
|
||||
}
|
||||
|
||||
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 */
|
||||
int save_errno= errno;
|
||||
(void) my_fclose(in, flags);
|
||||
errno= save_errno;
|
||||
return 0;
|
||||
if (opt_verbose)
|
||||
verbose("Empty or non existent %s. Assuming mysql_upgrade has to be run!",
|
||||
upgrade_info_file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (my_fclose(in, flags))
|
||||
return 0;
|
||||
/* Remove possible \ŋ that may end in output */
|
||||
if ((pos= strchr(upgrade_from_version, '\n')))
|
||||
*pos= 0;
|
||||
|
||||
errno= 0;
|
||||
return (strncmp(upgrade_from_version, MYSQL_SERVER_VERSION,
|
||||
sizeof(MYSQL_SERVER_VERSION)-1)==0);
|
||||
if (faulty_server_versions(upgrade_from_version))
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
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)
|
||||
static void finish_mysql_upgrade_info_file(void)
|
||||
{
|
||||
FILE *out;
|
||||
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);
|
||||
if (info_file < 0)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Write new version to file */
|
||||
my_fwrite(out, (uchar*) MYSQL_SERVER_VERSION,
|
||||
sizeof(MYSQL_SERVER_VERSION), MY_WME);
|
||||
my_fclose(out, MYF(MY_WME));
|
||||
(void) my_seek(info_file, 0, SEEK_CUR, MYF(0));
|
||||
(void) my_chsize(info_file, 0, 0, MYF(0));
|
||||
(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
|
||||
*/
|
||||
if (!upgrade_already_done(MY_WME))
|
||||
if (upgrade_already_done(1))
|
||||
fprintf(stderr,
|
||||
"Upgrade file '%s' was not properly created. "
|
||||
"Got error errno while checking file content: %d\n",
|
||||
"Could not write to the upgrade info file '%s' in "
|
||||
"the MariaDB Servers datadir, errno: %d\n",
|
||||
upgrade_info_file, errno);
|
||||
|
||||
my_close(info_file, MYF(MY_WME));
|
||||
info_file= -1;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -814,7 +957,7 @@ static my_bool is_mysql()
|
||||
strstr(ds_events_struct.str, "IGNORE_BAD_TABLE_OPTIONS") != NULL)
|
||||
ret= FALSE;
|
||||
else
|
||||
verbose("MySQL upgrade detected");
|
||||
verbose("MariaDB upgrade detected");
|
||||
|
||||
dynstr_free(&ds_events_struct);
|
||||
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
|
||||
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
|
||||
was compiled with.
|
||||
@ -1188,8 +1313,7 @@ static int check_version_match(void)
|
||||
"check.\n", version_str, MYSQL_SERVER_VERSION);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -1198,6 +1322,8 @@ int main(int argc, char **argv)
|
||||
char self_name[FN_REFLEN + 1];
|
||||
|
||||
MY_INIT(argv[0]);
|
||||
DBUG_PROCESS(argv[0]);
|
||||
|
||||
load_defaults_or_exit("my", load_default_groups, &argc, &argv);
|
||||
defaults_argv= argv; /* Must be freed by 'free_defaults' */
|
||||
|
||||
@ -1238,12 +1364,17 @@ int main(int argc, char **argv)
|
||||
die(NULL);
|
||||
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_close(fd, MYF(0));
|
||||
my_close(fd, MYF(MY_WME));
|
||||
}
|
||||
|
||||
/* Find mysql */
|
||||
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_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
|
||||
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))
|
||||
{
|
||||
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_force && !upgrade_already_done(0))
|
||||
goto end; /* Upgrade already done */
|
||||
|
||||
if (opt_version_check && check_version_match())
|
||||
die("Upgrade failed");
|
||||
@ -1285,8 +1411,8 @@ int main(int argc, char **argv)
|
||||
|
||||
verbose("OK");
|
||||
|
||||
/* Create a file indicating upgrade has been performed */
|
||||
create_mysql_upgrade_info_file();
|
||||
/* Finish writing indicating upgrade has been performed */
|
||||
finish_mysql_upgrade_info_file();
|
||||
|
||||
DBUG_ASSERT(phase == phases_total);
|
||||
|
||||
|
@ -27,7 +27,7 @@ SET(CPACK_COMPONENT_BACKUP_GROUP "backup")
|
||||
|
||||
SET(CPACK_COMPONENTS_ALL Server ManPagesServer IniFiles Server_Scripts
|
||||
SupportFiles Development ManPagesDevelopment
|
||||
ManPagesTest Readme ManPagesClient Test
|
||||
ManPagesTest Readme ManPagesClient Test
|
||||
Common Client SharedLibraries ClientPlugins
|
||||
backup
|
||||
)
|
||||
@ -187,6 +187,8 @@ SETA(CPACK_RPM_devel_PACKAGE_OBSOLETES
|
||||
"MySQL-devel")
|
||||
SETA(CPACK_RPM_devel_PACKAGE_PROVIDES
|
||||
"MySQL-devel")
|
||||
SETA(CPACK_RPM_devel_PACKAGE_REQUIRES
|
||||
"MariaDB-shared >= 10.2.42")
|
||||
|
||||
SETA(CPACK_RPM_server_PACKAGE_OBSOLETES
|
||||
"MariaDB"
|
||||
@ -349,6 +351,7 @@ ENDMACRO()
|
||||
ADDIF(CMAKE_BUILD_TYPE)
|
||||
ADDIF(BUILD_CONFIG)
|
||||
ADDIF(WITH_SSL)
|
||||
ADDIF(WITH_JEMALLOC)
|
||||
|
||||
ENDIF()
|
||||
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()
|
||||
FIND_PACKAGE(OpenSSL)
|
||||
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})
|
||||
INCLUDE(CheckSymbolExists)
|
||||
SET(SSL_SOURCES "")
|
||||
|
@ -73,9 +73,9 @@ typedef void fil_space_t;
|
||||
#include <string.h>
|
||||
|
||||
#ifdef UNIV_NONINL
|
||||
# include "fsp0fsp.ic"
|
||||
# include "mach0data.ic"
|
||||
# include "ut0rnd.ic"
|
||||
# include "fsp0fsp.inl"
|
||||
# include "mach0data.inl"
|
||||
# include "ut0rnd.inl"
|
||||
#endif
|
||||
|
||||
#ifndef PRIuMAX
|
||||
|
@ -36,8 +36,9 @@ extern const char *client_errors[]; /* Error messages */
|
||||
#define CR_MIN_ERROR 2000 /* For easier client code */
|
||||
#define CR_MAX_ERROR 2999
|
||||
#if !defined(ER)
|
||||
#define ER(X) (((X) >= CR_ERROR_FIRST && (X) <= CR_ERROR_LAST)? \
|
||||
client_errors[(X)-CR_ERROR_FIRST]: client_errors[CR_UNKNOWN_ERROR])
|
||||
#define ER(X) (((X) >= CR_ERROR_FIRST && (X) <= CR_ERROR_LAST) \
|
||||
? client_errors[(X)-CR_ERROR_FIRST] \
|
||||
: client_errors[CR_UNKNOWN_ERROR-CR_ERROR_FIRST])
|
||||
|
||||
#endif
|
||||
#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* 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
|
||||
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_safe_to_handle_signal, /* Set when allowed to SIGTSTP */
|
||||
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 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 */
|
||||
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);
|
||||
goto err;
|
||||
|
@ -239,6 +239,21 @@ Old option accepted for backward compatibility but ignored\&.
|
||||
.sp -1
|
||||
.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
|
||||
.\" datadir option: mysql_upgrade
|
||||
\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,^
|
||||
main,^
|
||||
innodb,^
|
||||
|
@ -150,12 +150,22 @@ explain select * from t0 where
|
||||
(((key3 <7 and key7 < 6) or key5 < 2) and (key5 < 5 or key6 < 6));
|
||||
|
||||
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
|
||||
((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))
|
||||
((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
|
||||
((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%'`)
|
||||
{
|
||||
--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_embedded = `select version() like '%embedded%'`;
|
||||
#echo is_win: $is_win;
|
||||
#echo is_embedded: $is_embedded;
|
||||
if ($is_win)
|
||||
{
|
||||
if ($is_embedded)
|
||||
if(!$MYSQL_EMBEDDED)
|
||||
{
|
||||
skip Not supported with embedded on windows;
|
||||
}
|
||||
|
@ -142,11 +142,11 @@ sub diff {
|
||||
|
||||
sub is_subset {
|
||||
my ($set, $subset)= @_;
|
||||
my %cache = map { _split_option($_) } @$set;
|
||||
my %cache = map { join('=', _split_option($_)), 1 } @$set;
|
||||
|
||||
for (@$subset){
|
||||
my ($name, $value)= _split_option($_);
|
||||
return 0 unless exists $cache{$name} and $cache{$name} eq $value;
|
||||
return 0 unless $cache{"$name=$value"};
|
||||
}
|
||||
|
||||
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
|
||||
% 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;
|
||||
#
|
||||
# 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;
|
||||
select * from mysql.user where 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 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
|
||||
#
|
||||
#
|
||||
|
@ -1036,6 +1036,57 @@ REPLACE INTO v2 ( SELECT * FROM v4 ) UNION ( SELECT f FROM v2 );
|
||||
drop view v1,v2,v3,v4;
|
||||
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 # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -3498,4 +3498,134 @@ a
|
||||
3
|
||||
drop view v1;
|
||||
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
|
||||
|
@ -2289,4 +2289,115 @@ select * from ((select a from t1 limit 2) order by a desc) dt;
|
||||
drop view v1;
|
||||
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
|
||||
|
@ -2,4 +2,3 @@
|
||||
|
||||
--error 1193
|
||||
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;
|
||||
ERROR HY000: Field 'mi' doesn't have a default value
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Start of 10.2 tests
|
||||
#
|
||||
set timestamp=unix_timestamp('2001-01-01 10:20:30.123456');
|
||||
create table t1 (a int default 1, b int default (a+1),
|
||||
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 11 foo bar 2001-01-01 10:20:30 2001-01-01 10:20:30.120000
|
||||
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;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# 10.2 tests
|
||||
#
|
||||
--echo #
|
||||
--echo # Start of 10.2 tests
|
||||
--echo #
|
||||
|
||||
set timestamp=unix_timestamp('2001-01-01 10:20:30.123456');
|
||||
create table t1 (a int default 1, b int default (a+1),
|
||||
@ -46,3 +46,99 @@ insert t1 () values ();
|
||||
insert t1 (a) values (10);
|
||||
select default(a),default(b),default(c),default(d),default(e),default(f) from 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' )
|
||||
["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
|
||||
#
|
||||
#
|
||||
|
@ -557,6 +557,21 @@ SELECT
|
||||
|
||||
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 # End of 10.2 tests
|
||||
--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
|
||||
#
|
||||
# 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
|
||||
#
|
||||
#
|
||||
|
@ -1997,6 +1997,42 @@ DROP TABLE t1;
|
||||
|
||||
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 # 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;
|
||||
Table Create Table
|
||||
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,
|
||||
`version` char(60) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
@ -95,3 +95,21 @@ select left(concat(a,version()),1) from t1;
|
||||
left(concat(a,version()),1)
|
||||
a
|
||||
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;
|
||||
|
||||
# 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
|
||||
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
|
||||
((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));
|
||||
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 <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));
|
||||
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;
|
||||
key1 key2 key3 key4 key5 key6 key7 key8
|
||||
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 t2 (id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id, id),
|
||||
FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE,
|
||||
|
@ -1,8 +1,6 @@
|
||||
-- source include/testdb_only.inc
|
||||
-- source include/have_innodb.inc
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
--enable_warnings
|
||||
-- source include/have_symlink.inc
|
||||
|
||||
#
|
||||
# Test for KEY_COLUMN_USAGE & TABLE_CONSTRAINTS tables
|
||||
|
@ -865,3 +865,22 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1, t2;
|
||||
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;
|
||||
|
||||
--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
|
||||
--max-allowed-packet=32000000
|
||||
--proxy-protocol-networks=*
|
||||
--sequence=on
|
||||
|
@ -1,3 +1,4 @@
|
||||
--loose-enable-performance-schema
|
||||
--max-allowed-packet=32000000
|
||||
--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
|
||||
--max-allowed-packet=32000000
|
||||
--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';
|
||||
|
||||
--replace_regex /[^ ]*mysql_upgrade_info/...mysql_upgrade_info/
|
||||
--exec $MYSQL_UPGRADE
|
||||
|
||||
connect(con1,localhost,root,foo,,,);
|
||||
@ -21,3 +22,6 @@ update mysql.user set password='' where user='root';
|
||||
flush privileges;
|
||||
# Load event table
|
||||
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'
|
||||
OK
|
||||
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
|
||||
Phase 1/7: Checking and upgrading mysql database
|
||||
Processing databases
|
||||
@ -145,11 +146,12 @@ test
|
||||
Phase 7/7: Running 'FLUSH PRIVILEGES'
|
||||
OK
|
||||
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)
|
||||
FATAL ERROR: Upgrade failed
|
||||
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
|
||||
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
|
||||
Phase 1/7: Checking and upgrading mysql database
|
||||
@ -413,9 +415,12 @@ OK
|
||||
# Bug #21489398: MYSQL_UPGRADE: FATAL ERROR: UPGRADE FAILED - IMPROVE ERROR
|
||||
#
|
||||
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)
|
||||
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-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`
|
||||
DROP ROLE `aRole`;
|
||||
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
|
||||
#
|
||||
# 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;
|
||||
|
||||
--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
|
||||
|
||||
# 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
|
||||
|
||||
--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
|
||||
|
||||
# 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
|
||||
--error 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 # MDEV-4332 Increase username length from 16 characters
|
||||
@ -235,6 +238,7 @@ FLUSH TABLES mysql.user;
|
||||
FLUSH PRIVILEGES;
|
||||
SHOW CREATE TABLE mysql.user;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR var
|
||||
--exec $MYSQL_UPGRADE --force 2>&1
|
||||
SHOW CREATE TABLE mysql.user;
|
||||
|
||||
@ -279,6 +283,79 @@ SHOW GRANTS;
|
||||
DROP ROLE `aRole`;
|
||||
--exec $MYSQL mysql < $MYSQLTEST_VARDIR/tmp/user.sql
|
||||
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
|
||||
|
||||
--echo End of 10.2 tests
|
||||
|
@ -53,6 +53,7 @@ Warnings:
|
||||
Level Warning
|
||||
Code 1286
|
||||
Message Unknown storage engine 'ARCHIVE'
|
||||
# upgrade from 10.1 - engines aren't enabled
|
||||
Phase 1/7: Checking and upgrading mysql database
|
||||
Processing databases
|
||||
mysql
|
||||
@ -142,6 +143,8 @@ Level Warning
|
||||
Code 1286
|
||||
Message Unknown storage engine 'ARCHIVE'
|
||||
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
|
||||
Processing databases
|
||||
mysql
|
||||
@ -231,6 +234,7 @@ Level Warning
|
||||
Code 1286
|
||||
Message Unknown storage engine 'ARCHIVE'
|
||||
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
|
||||
Processing databases
|
||||
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='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;
|
||||
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';
|
||||
@ -42,7 +43,8 @@ write_file $datadir/mysql_upgrade_info;
|
||||
10.1.10-MariaDB
|
||||
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;
|
||||
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';
|
||||
@ -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;
|
||||
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;
|
||||
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';
|
||||
|
@ -211,7 +211,7 @@ v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
|
||||
show create view v4;
|
||||
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
|
||||
MySQL upgrade detected
|
||||
MariaDB upgrade detected
|
||||
Phase 1/7: Checking and upgrading mysql database
|
||||
Processing databases
|
||||
mysql
|
||||
@ -336,7 +336,7 @@ drop view v1,v2,v3,v4;
|
||||
rename table mysql.event to mysql.ev_bk;
|
||||
flush tables;
|
||||
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
|
||||
Processing databases
|
||||
mysql
|
||||
|
@ -3485,6 +3485,29 @@ b a
|
||||
40 1
|
||||
30 4
|
||||
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
|
||||
#
|
||||
# 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;
|
||||
|
||||
--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 #
|
||||
|
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 p1 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data');
|
||||
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 p0,
|
||||
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 @@optimizer_switch= @optimizer_switch_save;
|
||||
# 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;
|
||||
|
||||
--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
|
||||
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
|
||||
#
|
||||
|
@ -34,6 +34,14 @@ show fields from test.t1 where field in
|
||||
where table_name='t1' group by column_name) dt);
|
||||
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 # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -8502,6 +8502,34 @@ b-c
|
||||
0
|
||||
drop procedure p1|
|
||||
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
|
||||
#
|
||||
# MDEV-12007 Allow ROW variables as a cursor FETCH target
|
||||
|
@ -1,4 +1,6 @@
|
||||
--source include/have_partition.inc
|
||||
--source include/have_sequence.inc
|
||||
|
||||
#
|
||||
# Basic stored PROCEDURE tests
|
||||
#
|
||||
@ -10045,6 +10047,46 @@ drop procedure p1|
|
||||
drop function f1|
|
||||
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
|
||||
|
||||
|
@ -2424,6 +2424,13 @@ CREATE TRIGGER t1_trigger BEFORE INSERT ON t1 FOR EACH ROW BEGIN END;
|
||||
INSERT INTO t1 () VALUES ();
|
||||
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
|
||||
#
|
||||
#
|
||||
|
@ -2756,6 +2756,14 @@ CREATE TRIGGER t1_trigger BEFORE INSERT ON t1 FOR EACH ROW BEGIN END;
|
||||
INSERT INTO t1 () VALUES ();
|
||||
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 # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -2225,6 +2225,27 @@ a
|
||||
|
||||
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
|
||||
#
|
||||
#
|
||||
|
@ -457,6 +457,26 @@ ALTER TABLE t1 MODIFY a ENUM('2001','2002');
|
||||
SELECT * FROM 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 # Start of 10.3 tests
|
||||
--echo #
|
||||
|
@ -6777,49 +6777,6 @@ sum(z)
|
||||
DROP TABLE t1;
|
||||
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
|
||||
# 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`;
|
||||
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
|
||||
#
|
||||
#
|
||||
|
@ -6499,56 +6499,6 @@ SELECT sum(z) FROM v1;
|
||||
DROP TABLE t1;
|
||||
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 # MDEV-26299: Some views force server (and mysqldump) to generate
|
||||
--echo # invalid SQL for their definitions
|
||||
@ -6565,8 +6515,28 @@ drop view v1;
|
||||
|
||||
eval CREATE VIEW v1 AS $definition;
|
||||
|
||||
|
||||
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 # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -1975,7 +1975,7 @@ sub executable_setup () {
|
||||
$exe_mysql= mtr_exe_exists("$path_client_bindir/mysql");
|
||||
$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
|
||||
if ( $opt_embedded_server )
|
||||
|
@ -1921,3 +1921,28 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
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.
|
||||
#
|
||||
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.
|
||||
#
|
||||
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_file_key_management_plugin.inc
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_symlink.inc
|
||||
|
||||
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
|
||||
|
||||
# The following is needed as embedded server can be compiled with and without
|
||||
# privlege tables
|
||||
|
||||
eval
|
||||
SELECT * FROM information_schema.columns
|
||||
$my_where
|
||||
|
@ -14,7 +14,7 @@
|
||||
#
|
||||
|
||||
--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'
|
||||
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.
|
||||
#
|
||||
|
||||
if (`SELECT VERSION() NOT LIKE '%embedded%'`)
|
||||
{
|
||||
--skip Test requires: embedded server
|
||||
}
|
||||
--source include/is_embedded_no_privileges.inc
|
||||
|
||||
let $engine_type= MyISAM;
|
||||
SET @@session.sql_mode = 'NO_ENGINE_SUBSTITUTION';
|
||||
--source suite/funcs_1/datadict/datadict_load.inc
|
||||
|
@ -10,10 +10,7 @@
|
||||
# 2008-06-06 mleich Create this variant for the embedded server
|
||||
#
|
||||
|
||||
if (`SELECT VERSION() NOT LIKE '%embedded%'`)
|
||||
{
|
||||
--skip Test requires: embedded server
|
||||
}
|
||||
--source include/is_embedded_no_privileges.inc
|
||||
|
||||
let $my_where = WHERE table_schema = 'mysql';
|
||||
--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;
|
||||
Warnings:
|
||||
Note 1266 Using storage engine InnoDB for table 't2'
|
||||
Note 1266 Using storage engine InnoDB for table 't2'
|
||||
connection node_2;
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
|
@ -47,3 +47,8 @@ DROP TABLE schema2.real_table2;
|
||||
DROP TABLE schema2.real_table3;
|
||||
DROP SCHEMA schema1;
|
||||
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
|
||||
1
|
||||
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 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;
|
||||
|
||||
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 # wsrep_slave_threads
|
@ -331,7 +331,7 @@ SELECT * FROM t1;
|
||||
ERROR HY000: Tablespace has been discarded for table `t1`
|
||||
restore: t1 .ibd and .cfg files
|
||||
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.cfg
|
||||
DROP TABLE t1;
|
||||
@ -916,6 +916,22 @@ c1 c2
|
||||
15 1
|
||||
16 1
|
||||
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("InnoDB: Error: tablespace id and flags in file '.*'");
|
||||
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;
|
||||
@@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 or replace view view0 as select 1 union all select 1;
|
||||
set @`v_id` := 0;
|
||||
@ -18,9 +18,9 @@ count(val)
|
||||
262144
|
||||
drop table t1;
|
||||
drop view view0;
|
||||
set global innodb_buffer_pool_size = 1048576;
|
||||
set global innodb_buffer_pool_size = 2*1048576;
|
||||
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;
|
||||
@@innodb_buffer_pool_size
|
||||
6291456
|
||||
4194304
|
||||
|
@ -1,18 +1,18 @@
|
||||
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 2 '1', 'abc', '''abc', 'abc''', 'a''bc', 'a''bc''', '''abc'''''
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 3 '2', 'abc', '"abc', 'abc"', 'a"bc', 'a"bc"', '"abc""'
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 3 '2', 'abc', '"abc', 'abc"', 'a"bc', 'a"bc"', '"abc""'
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 4 '3', 'abc', '\\abc', 'abc\\', 'a\\bc', 'a\\bc\\', '\\abc\\\\'
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 4 '3', 'abc', '\\abc', 'abc\\', 'a\\bc', 'a\\bc\\', '\\abc\\\\'
|
||||
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 5 '4', 'abc', '\0abc', 'abc\0', 'a\0bc', 'a\0bc\0', 'a\0bc\0\0'
|
||||
X RECORD `test`.`t_min` PRIMARY 2 -128, 0, -32768, 0, -8388608, 0, -2147483648, 0, -9223372036854775808, 0
|
||||
X RECORD `test`.`t_min` PRIMARY 2 -128, 0, -32768, 0, -8388608, 0, -2147483648, 0, -9223372036854775808, 0
|
||||
X RECORD `test`.`t_max` PRIMARY 2 127, 255, 32767, 65535, 8388607, 16777215, 2147483647, 4294967295, 9223372036854775807, 18446744073709551615
|
||||
X RECORD `test`.`t_max` PRIMARY 2 127, 255, 32767, 65535, 8388607, 16777215, 2147483647, 4294967295, 9223372036854775807, 18446744073709551615
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 1 supremum pseudo-record
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 1 supremum pseudo-record
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 1 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 1 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 2 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 2 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 3 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 3 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 4 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 4 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 5 #
|
||||
X RECORD `test`.```t'\"_str` PRIMARY 5 #
|
||||
X RECORD `test`.`t_max` PRIMARY 2 #
|
||||
X RECORD `test`.`t_max` PRIMARY 2 #
|
||||
X RECORD `test`.`t_min` PRIMARY 2 #
|
||||
X RECORD `test`.`t_min` PRIMARY 2 #
|
||||
lock_table COUNT(*)
|
||||
`test`.`t_max` 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;
|
||||
a
|
||||
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/not_embedded.inc
|
||||
--source include/have_symlink.inc
|
||||
|
||||
-- echo #
|
||||
-- echo # MDEV-11623 MariaDB 10.1 fails to start datadir created with
|
||||
|
@ -1,5 +1,6 @@
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_symlink.inc
|
||||
|
||||
--disable_query_log
|
||||
CALL mtr.add_suppression(".*Failed to set O_DIRECT on file.*");
|
||||
|
@ -1056,6 +1056,43 @@ SELECT * FROM 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("InnoDB: Error: tablespace id and flags in file '.*'");
|
||||
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