Merge branch '10.4' into 10.5
This commit is contained in:
commit
1ac0bce36e
@ -125,7 +125,7 @@ get_make_parallel_flag
|
|||||||
|
|
||||||
# SSL library to use.--with-ssl will select our bundled yaSSL
|
# SSL library to use.--with-ssl will select our bundled yaSSL
|
||||||
# implementation of SSL. --with-ssl=yes will first try system library
|
# implementation of SSL. --with-ssl=yes will first try system library
|
||||||
# then the boundled one --with-ssl=system will use the system library.
|
# then the bundled one --with-ssl=system will use the system library.
|
||||||
# We use bundled by default as this is guaranteed to work with Galera
|
# We use bundled by default as this is guaranteed to work with Galera
|
||||||
SSL_LIBRARY=--with-ssl
|
SSL_LIBRARY=--with-ssl
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ path=`dirname $0`
|
|||||||
. "$path/autorun.sh"
|
. "$path/autorun.sh"
|
||||||
|
|
||||||
# C options:
|
# C options:
|
||||||
# -apo - auto-parallize for multiprocessors (implies -mp)
|
# -apo - auto-parallelize for multiprocessors (implies -mp)
|
||||||
# -mp - generate multiprocessor code
|
# -mp - generate multiprocessor code
|
||||||
# These two common optimization options apparently use 'sproc' model of
|
# These two common optimization options apparently use 'sproc' model of
|
||||||
# threading, which is not compatible with PTHREADS: don't add them unless you
|
# threading, which is not compatible with PTHREADS: don't add them unless you
|
||||||
|
@ -44,8 +44,8 @@ However most documentation at www.mysql.com also applies.
|
|||||||
shell> groupadd mysql
|
shell> groupadd mysql
|
||||||
shell> useradd -g mysql mysql
|
shell> useradd -g mysql mysql
|
||||||
shell> cd /usr/local
|
shell> cd /usr/local
|
||||||
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
|
shell> gunzip < /path/to/mariadb-VERSION-OS.tar.gz | tar xvf -
|
||||||
shell> ln -s full-path-to-mysql-VERSION-OS mysql
|
shell> ln -s full-path-to-mariadb-VERSION-OS mysql
|
||||||
shell> cd mysql
|
shell> cd mysql
|
||||||
shell> chown -R mysql .
|
shell> chown -R mysql .
|
||||||
shell> chgrp -R mysql .
|
shell> chgrp -R mysql .
|
||||||
@ -88,16 +88,16 @@ shell> cd /usr/local
|
|||||||
|
|
||||||
4. Unpack the distribution, which creates the installation
|
4. Unpack the distribution, which creates the installation
|
||||||
directory. Then create a symbolic link to that directory:
|
directory. Then create a symbolic link to that directory:
|
||||||
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
|
shell> gunzip < /path/to/mariadb-VERSION-OS.tar.gz | tar xvf -
|
||||||
shell> ln -s full-path-to-mysql-VERSION-OS mysql
|
shell> ln -s full-path-to-mariadb-VERSION-OS mysql
|
||||||
The tar command creates a directory named mysql-VERSION-OS.
|
The tar command creates a directory named mariadb-VERSION-OS.
|
||||||
The ln command makes a symbolic link to that directory. This
|
The ln command makes a symbolic link to that directory. This
|
||||||
lets you refer more easily to the installation directory as
|
lets you refer more easily to the installation directory as
|
||||||
/usr/local/mysql.
|
/usr/local/mysql.
|
||||||
With GNU tar, no separate invocation of gunzip is necessary.
|
With GNU tar, no separate invocation of gunzip is necessary.
|
||||||
You can replace the first line with the following alternative
|
You can replace the first line with the following alternative
|
||||||
command to uncompress and extract the distribution:
|
command to uncompress and extract the distribution:
|
||||||
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
|
shell> tar zxvf /path/to/mariadb-VERSION-OS.tar.gz
|
||||||
|
|
||||||
5. Change location into the installation directory:
|
5. Change location into the installation directory:
|
||||||
shell> cd mysql
|
shell> cd mysql
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
echo is a replacement for the "echo" command builtin to cmd.exe
|
echo is a replacement for the "echo" command builtin to cmd.exe
|
||||||
on Windows, to get a Unix eqvivalent behaviour when running commands
|
on Windows, to get a Unix equivalent behaviour when running commands
|
||||||
like:
|
like:
|
||||||
$> echo "hello" | mysql
|
$> echo "hello" | mysql
|
||||||
|
|
||||||
|
@ -2336,7 +2336,7 @@ static bool add_line(String &buffer, char *line, size_t line_length,
|
|||||||
!(*in_string &&
|
!(*in_string &&
|
||||||
(mysql.server_status & SERVER_STATUS_NO_BACKSLASH_ESCAPES)))
|
(mysql.server_status & SERVER_STATUS_NO_BACKSLASH_ESCAPES)))
|
||||||
{
|
{
|
||||||
// Found possbile one character command like \c
|
// Found possible one character command like \c
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The null-terminating character (ASCII '\0') marks the end of user
|
The null-terminating character (ASCII '\0') marks the end of user
|
||||||
|
@ -281,7 +281,7 @@ static char *convert_path(const char *argument)
|
|||||||
|
|
||||||
@param[in] path The Windows path to examine.
|
@param[in] path The Windows path to examine.
|
||||||
|
|
||||||
@returns string containing excaped quotes if spaces found in path
|
@returns string containing escaped quotes if spaces found in path
|
||||||
*/
|
*/
|
||||||
static char *add_quotes(const char *path)
|
static char *add_quotes(const char *path)
|
||||||
{
|
{
|
||||||
|
@ -714,7 +714,7 @@ static char upgrade_info_file[FN_REFLEN]= {0};
|
|||||||
Open or create mysql_upgrade_info file in servers data dir.
|
Open or create mysql_upgrade_info file in servers data dir.
|
||||||
|
|
||||||
Take a lock to ensure there cannot be any other mysql_upgrades
|
Take a lock to ensure there cannot be any other mysql_upgrades
|
||||||
runninc concurrently
|
running concurrently
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const char *create_error_message=
|
const char *create_error_message=
|
||||||
@ -775,7 +775,7 @@ static void open_mysql_upgrade_file()
|
|||||||
/**
|
/**
|
||||||
Place holder for versions that require a major upgrade
|
Place holder for versions that require a major upgrade
|
||||||
|
|
||||||
@return 0 upgrade has alredy been run on this version
|
@return 0 upgrade has already been run on this version
|
||||||
@return 1 upgrade has to be run
|
@return 1 upgrade has to be run
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@ -799,7 +799,7 @@ static int faulty_server_versions(const char *version)
|
|||||||
file it's always better to report that the upgrade hasn't
|
file it's always better to report that the upgrade hasn't
|
||||||
been performed.
|
been performed.
|
||||||
|
|
||||||
@return 0 Upgrade has alredy been run on this version
|
@return 0 Upgrade has already been run on this version
|
||||||
@return > 0 Upgrade has to be run
|
@return > 0 Upgrade has to be run
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
|
||||||
|
|
||||||
/* maintaince of mysql databases */
|
/* maintenance of mysql databases */
|
||||||
|
|
||||||
#include "client_priv.h"
|
#include "client_priv.h"
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
@ -183,7 +183,7 @@ enum Exit_status {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Pointer to the last read Annotate_rows_log_event. Having read an
|
Pointer to the last read Annotate_rows_log_event. Having read an
|
||||||
Annotate_rows event, we should not print it immediatedly because all
|
Annotate_rows event, we should not print it immediately because all
|
||||||
subsequent rbr events can be filtered away, and have to keep it for a while.
|
subsequent rbr events can be filtered away, and have to keep it for a while.
|
||||||
Also because of that when reading a remote Annotate event we have to keep
|
Also because of that when reading a remote Annotate event we have to keep
|
||||||
its binary log representation in a separately allocated buffer.
|
its binary log representation in a separately allocated buffer.
|
||||||
|
@ -919,7 +919,7 @@ static int handle_request_for_tables(char *tables, size_t length,
|
|||||||
case DO_ANALYZE:
|
case DO_ANALYZE:
|
||||||
if (view)
|
if (view)
|
||||||
{
|
{
|
||||||
printf("%-50s %s\n", tables, "Can't run anaylyze on a view");
|
printf("%-50s %s\n", tables, "Can't run analyze on a view");
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
DBUG_ASSERT(!view);
|
DBUG_ASSERT(!view);
|
||||||
|
@ -1096,8 +1096,8 @@ static int get_options(int *argc, char ***argv)
|
|||||||
return(ho_error);
|
return(ho_error);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Dumping under --system=stats with --replace or --inser-ignore is safe and will not
|
Dumping under --system=stats with --replace or --insert-ignore is safe and will not
|
||||||
retult into race condition. Otherwise dump only structure and ignore data by default
|
result into race condition. Otherwise dump only structure and ignore data by default
|
||||||
while dumping.
|
while dumping.
|
||||||
*/
|
*/
|
||||||
if (!(opt_system & OPT_SYSTEM_STATS) && !(opt_ignore || opt_replace_into))
|
if (!(opt_system & OPT_SYSTEM_STATS) && !(opt_ignore || opt_replace_into))
|
||||||
@ -2901,7 +2901,7 @@ static inline my_bool general_log_or_slow_log_tables(const char *db,
|
|||||||
!my_strcasecmp(charset_info, table, "transaction_registry"));
|
!my_strcasecmp(charset_info, table, "transaction_registry"));
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
get_sequence_structure-- retrievs sequence structure, prints out corresponding
|
get_sequence_structure-- retrieves sequence structure, prints out corresponding
|
||||||
CREATE statement
|
CREATE statement
|
||||||
ARGS
|
ARGS
|
||||||
seq - sequence name
|
seq - sequence name
|
||||||
@ -2963,7 +2963,7 @@ static void get_sequence_structure(const char *seq, const char *db)
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
get_table_structure -- retrievs database structure, prints out corresponding
|
get_table_structure -- retrieves database structure, prints out corresponding
|
||||||
CREATE statement and fills out insert_pat if the table is the type we will
|
CREATE statement and fills out insert_pat if the table is the type we will
|
||||||
be dumping.
|
be dumping.
|
||||||
|
|
||||||
@ -4605,7 +4605,7 @@ static int dump_all_users_roles_and_grants()
|
|||||||
echo "$dosomethingspecial"
|
echo "$dosomethingspecial"
|
||||||
) | mysql -h $host
|
) | mysql -h $host
|
||||||
|
|
||||||
doesn't end up with a suprise that the $dosomethingspecial cannot
|
doesn't end up with a surprise that the $dosomethingspecial cannot
|
||||||
be done because `special_role` isn't active.
|
be done because `special_role` isn't active.
|
||||||
|
|
||||||
We create a new role for importing that becomes the default admin for new
|
We create a new role for importing that becomes the default admin for new
|
||||||
@ -4614,8 +4614,8 @@ static int dump_all_users_roles_and_grants()
|
|||||||
create new admins for the created role.
|
create new admins for the created role.
|
||||||
|
|
||||||
At the end of the import the mariadb_dump_import_role is be dropped,
|
At the end of the import the mariadb_dump_import_role is be dropped,
|
||||||
which implictly drops all its admin aspects of the dropped role.
|
which implicitly drops all its admin aspects of the dropped role.
|
||||||
This is significiantly easlier than revoking the ADMIN of each role
|
This is significantly easier than revoking the ADMIN of each role
|
||||||
from the current user.
|
from the current user.
|
||||||
*/
|
*/
|
||||||
fputs("SELECT COALESCE(CURRENT_ROLE(),'NONE') into @current_role;\n"
|
fputs("SELECT COALESCE(CURRENT_ROLE(),'NONE') into @current_role;\n"
|
||||||
@ -7038,7 +7038,7 @@ int main(int argc, char **argv)
|
|||||||
if (opt_system & OPT_SYSTEM_SERVERS)
|
if (opt_system & OPT_SYSTEM_SERVERS)
|
||||||
dump_all_servers();
|
dump_all_servers();
|
||||||
|
|
||||||
/* These must be last as they explictly change the current database to mysql */
|
/* These must be last as they explicitly change the current database to mysql */
|
||||||
if (opt_system & OPT_SYSTEM_STATS)
|
if (opt_system & OPT_SYSTEM_STATS)
|
||||||
dump_all_stats();
|
dump_all_stats();
|
||||||
|
|
||||||
|
@ -571,7 +571,7 @@ static char *add_load_option(char *ptr, const char *object,
|
|||||||
/*
|
/*
|
||||||
** Allow the user to specify field terminator strings like:
|
** Allow the user to specify field terminator strings like:
|
||||||
** "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline)
|
** "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline)
|
||||||
** This is done by doubleing ' and add a end -\ if needed to avoid
|
** This is done by doubling ' and add a end -\ if needed to avoid
|
||||||
** syntax errors from the SQL parser.
|
** syntax errors from the SQL parser.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
then reporting the timing of each stage.
|
then reporting the timing of each stage.
|
||||||
|
|
||||||
MySQL slap runs three stages:
|
MySQL slap runs three stages:
|
||||||
1) Create schema,table, and optionally any SP or data you want to beign
|
1) Create schema,table, and optionally any SP or data you want to begin
|
||||||
the test with. (single client)
|
the test with. (single client)
|
||||||
2) Load test (many clients)
|
2) Load test (many clients)
|
||||||
3) Cleanup (disconnection, drop table if specified, single client)
|
3) Cleanup (disconnection, drop table if specified, single client)
|
||||||
@ -2022,7 +2022,7 @@ parse_option(const char *origin, option_string **stmt, char delm)
|
|||||||
char *buffer_ptr;
|
char *buffer_ptr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return an error if the length of the any of the comma seprated value
|
Return an error if the length of the comma separated values
|
||||||
exceeds HUGE_STRING_LENGTH.
|
exceeds HUGE_STRING_LENGTH.
|
||||||
*/
|
*/
|
||||||
if ((size_t)(retstr - ptr) > HUGE_STRING_LENGTH)
|
if ((size_t)(retstr - ptr) > HUGE_STRING_LENGTH)
|
||||||
@ -2068,7 +2068,7 @@ parse_option(const char *origin, option_string **stmt, char delm)
|
|||||||
char *origin_ptr;
|
char *origin_ptr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return an error if the length of the any of the comma seprated value
|
Return an error if the length of any of the comma separated values
|
||||||
exceeds HUGE_STRING_LENGTH.
|
exceeds HUGE_STRING_LENGTH.
|
||||||
*/
|
*/
|
||||||
if (strlen(ptr) > HUGE_STRING_LENGTH)
|
if (strlen(ptr) > HUGE_STRING_LENGTH)
|
||||||
|
@ -575,10 +575,10 @@ char builtin_echo[FN_REFLEN];
|
|||||||
|
|
||||||
struct st_replace_regex
|
struct st_replace_regex
|
||||||
{
|
{
|
||||||
DYNAMIC_ARRAY regex_arr; /* stores a list of st_regex subsitutions */
|
DYNAMIC_ARRAY regex_arr; /* stores a list of st_regex substitutions */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Temporary storage areas for substitutions. To reduce unnessary copying
|
Temporary storage areas for substitutions. To reduce unnecessary copying
|
||||||
and memory freeing/allocation, we pre-allocate two buffers, and alternate
|
and memory freeing/allocation, we pre-allocate two buffers, and alternate
|
||||||
their use, one for input/one for output, the roles changing on the next
|
their use, one for input/one for output, the roles changing on the next
|
||||||
st_regex substitution. At the end of substitutions buf points to the
|
st_regex substitution. At the end of substitutions buf points to the
|
||||||
@ -1934,7 +1934,7 @@ void show_diff(DYNAMIC_STRING* ds,
|
|||||||
needs special processing due to return values
|
needs special processing due to return values
|
||||||
on that OS
|
on that OS
|
||||||
This test is only done on Windows since it's only needed there
|
This test is only done on Windows since it's only needed there
|
||||||
in order to correctly detect non-availibility of 'diff', and
|
in order to correctly detect non-availability of 'diff', and
|
||||||
the way it's implemented does not work with default 'diff' on Solaris.
|
the way it's implemented does not work with default 'diff' on Solaris.
|
||||||
*/
|
*/
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -2313,7 +2313,7 @@ static int strip_surrounding(char* str, char c1, char c2)
|
|||||||
/* Replace it with a space */
|
/* Replace it with a space */
|
||||||
*ptr= ' ';
|
*ptr= ' ';
|
||||||
|
|
||||||
/* Last non space charecter should be c2 */
|
/* Last non space character should be c2 */
|
||||||
ptr= strend(str)-1;
|
ptr= strend(str)-1;
|
||||||
while(*ptr && my_isspace(charset_info, *ptr))
|
while(*ptr && my_isspace(charset_info, *ptr))
|
||||||
ptr--;
|
ptr--;
|
||||||
@ -3082,7 +3082,7 @@ void open_file(const char *name)
|
|||||||
if overlay-dir is specified, and the file is located somewhere
|
if overlay-dir is specified, and the file is located somewhere
|
||||||
under overlay-dir or under suite-dir, the search works as follows:
|
under overlay-dir or under suite-dir, the search works as follows:
|
||||||
|
|
||||||
0.let suffix be current file dirname relative to siute-dir or overlay-dir
|
0.let suffix be current file dirname relative to suite-dir or overlay-dir
|
||||||
1.try in overlay-dir/suffix
|
1.try in overlay-dir/suffix
|
||||||
2.try in suite-dir/suffix
|
2.try in suite-dir/suffix
|
||||||
3.try in overlay-dir
|
3.try in overlay-dir
|
||||||
@ -5595,7 +5595,7 @@ void do_close_connection(struct st_command *command)
|
|||||||
con->stmt= 0;
|
con->stmt= 0;
|
||||||
#ifdef EMBEDDED_LIBRARY
|
#ifdef EMBEDDED_LIBRARY
|
||||||
/*
|
/*
|
||||||
As query could be still executed in a separate theread
|
As query could be still executed in a separate thread
|
||||||
we need to check if the query's thread was finished and probably wait
|
we need to check if the query's thread was finished and probably wait
|
||||||
(embedded-server specific)
|
(embedded-server specific)
|
||||||
*/
|
*/
|
||||||
@ -5894,7 +5894,7 @@ void do_connect(struct st_command *command)
|
|||||||
{ "connection name", ARG_STRING, TRUE, &ds_connection_name, "Name of the connection" },
|
{ "connection name", ARG_STRING, TRUE, &ds_connection_name, "Name of the connection" },
|
||||||
{ "host", ARG_STRING, TRUE, &ds_host, "Host to connect to" },
|
{ "host", ARG_STRING, TRUE, &ds_host, "Host to connect to" },
|
||||||
{ "user", ARG_STRING, FALSE, &ds_user, "User to connect as" },
|
{ "user", ARG_STRING, FALSE, &ds_user, "User to connect as" },
|
||||||
{ "passsword", ARG_STRING, FALSE, &ds_password, "Password used when connecting" },
|
{ "password", ARG_STRING, FALSE, &ds_password, "Password used when connecting" },
|
||||||
{ "database", ARG_STRING, FALSE, &ds_database, "Database to select after connect" },
|
{ "database", ARG_STRING, FALSE, &ds_database, "Database to select after connect" },
|
||||||
{ "port", ARG_STRING, FALSE, &ds_port, "Port to connect to" },
|
{ "port", ARG_STRING, FALSE, &ds_port, "Port to connect to" },
|
||||||
{ "socket", ARG_STRING, FALSE, &ds_sock, "Socket to connect with" },
|
{ "socket", ARG_STRING, FALSE, &ds_sock, "Socket to connect with" },
|
||||||
@ -6388,7 +6388,7 @@ void do_block(enum block_cmd cmd, struct st_command* command)
|
|||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
if (*expr_start != '`' && ! my_isdigit(charset_info, *expr_start))
|
if (*expr_start != '`' && ! my_isdigit(charset_info, *expr_start))
|
||||||
die("Expression in if/while must beging with $, ` or a number");
|
die("Expression in if/while must begin with $, ` or a number");
|
||||||
eval_expr(&v, expr_start, &expr_end);
|
eval_expr(&v, expr_start, &expr_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8292,7 +8292,7 @@ void handle_no_error(struct st_command *command)
|
|||||||
/*
|
/*
|
||||||
Run query using prepared statement C API
|
Run query using prepared statement C API
|
||||||
|
|
||||||
SYNPOSIS
|
SYNOPSIS
|
||||||
run_query_stmt
|
run_query_stmt
|
||||||
mysql - mysql handle
|
mysql - mysql handle
|
||||||
command - current command pointer
|
command - current command pointer
|
||||||
@ -8527,6 +8527,7 @@ end:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8981,7 +8982,7 @@ int util_query(MYSQL* org_mysql, const char* query){
|
|||||||
/*
|
/*
|
||||||
Run query
|
Run query
|
||||||
|
|
||||||
SYNPOSIS
|
SYNOPSIS
|
||||||
run_query()
|
run_query()
|
||||||
mysql mysql handle
|
mysql mysql handle
|
||||||
command current command pointer
|
command current command pointer
|
||||||
@ -10711,7 +10712,7 @@ err:
|
|||||||
/*
|
/*
|
||||||
Execute all substitutions on val.
|
Execute all substitutions on val.
|
||||||
|
|
||||||
Returns: true if substituition was made, false otherwise
|
Returns: true if substitution was made, false otherwise
|
||||||
Side-effect: Sets r->buf to be the buffer with all substitutions done.
|
Side-effect: Sets r->buf to be the buffer with all substitutions done.
|
||||||
|
|
||||||
IN:
|
IN:
|
||||||
@ -10805,7 +10806,7 @@ void free_replace_regex()
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
auxiluary macro used by reg_replace
|
auxiliary macro used by reg_replace
|
||||||
makes sure the result buffer has sufficient length
|
makes sure the result buffer has sufficient length
|
||||||
*/
|
*/
|
||||||
#define SECURE_REG_BUF if (buf_len < need_buf_len) \
|
#define SECURE_REG_BUF if (buf_len < need_buf_len) \
|
||||||
@ -11344,7 +11345,7 @@ int init_sets(REP_SETS *sets,uint states)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make help sets invisible for nicer codeing */
|
/* Make help sets invisible for nicer coding */
|
||||||
|
|
||||||
void make_sets_invisible(REP_SETS *sets)
|
void make_sets_invisible(REP_SETS *sets)
|
||||||
{
|
{
|
||||||
|
@ -334,7 +334,7 @@ IF(compat53 AND compat101)
|
|||||||
# RHEL6/CentOS6 install Postfix by default, and it requires
|
# RHEL6/CentOS6 install Postfix by default, and it requires
|
||||||
# libmysqlclient.so.16 that pulls in mysql-libs-5.1.x
|
# libmysqlclient.so.16 that pulls in mysql-libs-5.1.x
|
||||||
# And the latter conflicts with our rpms.
|
# And the latter conflicts with our rpms.
|
||||||
# Make sure that for these distribuions all our rpms require
|
# Make sure that for these distributions all our rpms require
|
||||||
# MariaDB-compat, that will replace mysql-libs-5.1
|
# MariaDB-compat, that will replace mysql-libs-5.1
|
||||||
IF(RPM MATCHES "(rhel|centos)[67]")
|
IF(RPM MATCHES "(rhel|centos)[67]")
|
||||||
SET(CPACK_RPM_common_PACKAGE_REQUIRES "MariaDB-compat")
|
SET(CPACK_RPM_common_PACKAGE_REQUIRES "MariaDB-compat")
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory
|
# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory
|
||||||
# On Windows :
|
# On Windows :
|
||||||
# - add version resource
|
# - add version resource
|
||||||
# - instruct CPack to do autenticode signing if SIGNCODE is set
|
# - instruct CPack to do authenticode signing if SIGNCODE is set
|
||||||
|
|
||||||
INCLUDE(CMakeParseArguments)
|
INCLUDE(CMakeParseArguments)
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ MACRO (FIND_CURSES)
|
|||||||
remove CMakeCache.txt and rerun cmake.")
|
remove CMakeCache.txt and rerun cmake.")
|
||||||
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
SET(ERRORMSG ${ERRORMSG}
|
SET(ERRORMSG ${ERRORMSG}
|
||||||
"On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates "
|
"On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivatives "
|
||||||
"it is ncurses-devel.")
|
"it is ncurses-devel.")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
MESSAGE(FATAL_ERROR ${ERRORMSG})
|
MESSAGE(FATAL_ERROR ${ERRORMSG})
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# If timestamping is used, it can (rarely) fail, when public timestamping service has issues.
|
# If timestamping is used, it can (rarely) fail, when public timestamping service has issues.
|
||||||
#
|
#
|
||||||
# To handle the error gracefully and tranparently, we'll retry the signtool command,
|
# To handle the error gracefully and transparently, we'll retry the signtool command,
|
||||||
# second time without "/t URL" parameter
|
# second time without "/t URL" parameter
|
||||||
SET(SIGNTOOL_PARAMETERS_NO_TIMESTAMP "@SIGNTOOL_PARAMETERS@")
|
SET(SIGNTOOL_PARAMETERS_NO_TIMESTAMP "@SIGNTOOL_PARAMETERS@")
|
||||||
LIST(FIND SIGNTOOL_PARAMETERS_NO_TIMESTAMP /t idx)
|
LIST(FIND SIGNTOOL_PARAMETERS_NO_TIMESTAMP /t idx)
|
||||||
|
@ -26,7 +26,7 @@ ENDMACRO()
|
|||||||
#
|
#
|
||||||
# Provides the following configure options:
|
# Provides the following configure options:
|
||||||
# WITH_ZLIB_BUNDLED
|
# WITH_ZLIB_BUNDLED
|
||||||
# If this is set,we use bindled zlib
|
# If this is set,we use bundled zlib
|
||||||
# If this is not set,search for system zlib.
|
# If this is not set,search for system zlib.
|
||||||
# if system zlib is not found, use bundled copy
|
# if system zlib is not found, use bundled copy
|
||||||
# ZLIB_LIBRARIES, ZLIB_INCLUDE_DIR and ZLIB_SOURCES
|
# ZLIB_LIBRARIES, ZLIB_INCLUDE_DIR and ZLIB_SOURCES
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
*
|
*
|
||||||
* Michael Widenius:
|
* Michael Widenius:
|
||||||
* DBUG_DUMP - To dump a block of memory.
|
* DBUG_DUMP - To dump a block of memory.
|
||||||
* PUSH_FLAG "O" - To be used insted of "o" if we
|
* PUSH_FLAG "O" - To be used instead of "o" if we
|
||||||
* want flushing after each write
|
* want flushing after each write
|
||||||
* PUSH_FLAG "A" - as 'O', but we will append to the out file instead
|
* PUSH_FLAG "A" - as 'O', but we will append to the out file instead
|
||||||
* of creating a new one.
|
* of creating a new one.
|
||||||
|
@ -847,7 +847,7 @@ EX:\fC
|
|||||||
Unlocks DBUG_FILE stream, that was locked with a DBUG_LOCK_FILE.
|
Unlocks DBUG_FILE stream, that was locked with a DBUG_LOCK_FILE.
|
||||||
.LI DBUG_ASSERT\
|
.LI DBUG_ASSERT\
|
||||||
This macro just does a regular assert(). The difference is that it will be
|
This macro just does a regular assert(). The difference is that it will be
|
||||||
disabled by DBUG_OFF togeher with the
|
disabled by DBUG_OFF together with the
|
||||||
.I dbug
|
.I dbug
|
||||||
library. So there will be no need to disable asserts separately with NDEBUG.
|
library. So there will be no need to disable asserts separately with NDEBUG.
|
||||||
.SP 1
|
.SP 1
|
||||||
@ -1115,7 +1115,7 @@ will usually have problems using the standard
|
|||||||
package.
|
package.
|
||||||
The most common problem is multiply allocated memory.
|
The most common problem is multiply allocated memory.
|
||||||
.SP 2
|
.SP 2
|
||||||
.\" .DE nroff dident like this. davida 900108
|
.\" .DE nroff didn't like this. davida 900108
|
||||||
.CS
|
.CS
|
||||||
|
|
||||||
.\" vim:filetype=nroff
|
.\" vim:filetype=nroff
|
||||||
|
@ -140,13 +140,20 @@ void handle_core(pid_t pid __attribute__((unused))) {}
|
|||||||
static int kill_child(bool was_killed)
|
static int kill_child(bool was_killed)
|
||||||
{
|
{
|
||||||
int status= 0;
|
int status= 0;
|
||||||
|
pid_t ret_pid= 0;
|
||||||
|
|
||||||
message("Killing child: %d", child_pid);
|
message("Killing child: %d", child_pid);
|
||||||
// Terminate whole process group
|
// Terminate whole process group
|
||||||
if (! was_killed)
|
if (! was_killed)
|
||||||
kill(-child_pid, SIGKILL);
|
{
|
||||||
|
kill(-child_pid, SIGTERM);
|
||||||
|
sleep(10); // will be interrupted by SIGCHLD
|
||||||
|
if (!(ret_pid= waitpid(child_pid, &status, WNOHANG)))
|
||||||
|
kill(-child_pid, SIGKILL);
|
||||||
|
}
|
||||||
|
|
||||||
pid_t ret_pid= waitpid(child_pid, &status, 0);
|
if (!ret_pid)
|
||||||
|
ret_pid= waitpid(child_pid, &status, 0);
|
||||||
if (ret_pid == child_pid)
|
if (ret_pid == child_pid)
|
||||||
{
|
{
|
||||||
int exit_code= 1;
|
int exit_code= 1;
|
||||||
|
@ -4872,8 +4872,153 @@ a
|
|||||||
0
|
0
|
||||||
NULL
|
NULL
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-12325 Unexpected data type and truncation when using CTE
|
||||||
|
#
|
||||||
|
CREATE TABLE t1
|
||||||
|
(
|
||||||
|
id INT, mid INT, name TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (0,NULL,'Name'),(1,0,'Name1'),(2,0,'Name2'),(11,1,'Name11'),(12,1,'Name12');
|
||||||
|
WITH RECURSIVE
|
||||||
|
cteReports (level, id, mid, name) AS
|
||||||
|
(
|
||||||
|
SELECT 1, id, mid, name FROM t1 WHERE mid IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.level + 1, e.id, e.mid + 1000000000000, e.name FROM t1 e
|
||||||
|
INNER JOIN cteReports r ON e.mid = r.id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level, id, mid, name,
|
||||||
|
(SELECT name FROM t1 WHERE id= cteReports.mid) AS mname
|
||||||
|
FROM cteReports ORDER BY level, mid;
|
||||||
|
ERROR 22003: Out of range value for column 'mid' at row 2
|
||||||
|
create table t2 as WITH RECURSIVE
|
||||||
|
cteReports (level, id, mid, name) AS
|
||||||
|
(
|
||||||
|
SELECT 1, id, mid, name FROM t1 WHERE mid IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.level + 1, e.id, e.mid + 1000000000000, e.name FROM t1 e
|
||||||
|
INNER JOIN cteReports r ON e.mid = r.id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level, id, mid, name,
|
||||||
|
(SELECT name FROM t1 WHERE id= cteReports.mid) AS mname
|
||||||
|
FROM cteReports ORDER BY level, mid;;
|
||||||
|
ERROR 22003: Out of range value for column 'mid' at row 2
|
||||||
|
create table t2 ignore as WITH RECURSIVE
|
||||||
|
cteReports (level, id, mid, name) AS
|
||||||
|
(
|
||||||
|
SELECT 1, id, mid, name FROM t1 WHERE mid IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.level + 1, e.id, e.mid + 1000000000000, e.name FROM t1 e
|
||||||
|
INNER JOIN cteReports r ON e.mid = r.id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level, id, mid, name,
|
||||||
|
(SELECT name FROM t1 WHERE id= cteReports.mid) AS mname
|
||||||
|
FROM cteReports ORDER BY level, mid;;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 2
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 3
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 4
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 5
|
||||||
|
show create table t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`level` int(1) DEFAULT NULL,
|
||||||
|
`id` int(11) DEFAULT NULL,
|
||||||
|
`mid` int(11) DEFAULT NULL,
|
||||||
|
`name` text DEFAULT NULL,
|
||||||
|
`mname` text DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
insert into t2 WITH RECURSIVE
|
||||||
|
cteReports (level, id, mid, name) AS
|
||||||
|
(
|
||||||
|
SELECT 1, id, mid, name FROM t1 WHERE mid IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.level + 1, e.id, e.mid + 1000000000000, e.name FROM t1 e
|
||||||
|
INNER JOIN cteReports r ON e.mid = r.id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level, id, mid, name,
|
||||||
|
(SELECT name FROM t1 WHERE id= cteReports.mid) AS mname
|
||||||
|
FROM cteReports ORDER BY level, mid;;
|
||||||
|
ERROR 22003: Out of range value for column 'mid' at row 2
|
||||||
|
insert ignore into t2 WITH RECURSIVE
|
||||||
|
cteReports (level, id, mid, name) AS
|
||||||
|
(
|
||||||
|
SELECT 1, id, mid, name FROM t1 WHERE mid IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.level + 1, e.id, e.mid + 1000000000000, e.name FROM t1 e
|
||||||
|
INNER JOIN cteReports r ON e.mid = r.id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level, id, mid, name,
|
||||||
|
(SELECT name FROM t1 WHERE id= cteReports.mid) AS mname
|
||||||
|
FROM cteReports ORDER BY level, mid;;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 2
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 3
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 4
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 5
|
||||||
|
drop table t2;
|
||||||
|
set @@sql_mode="";
|
||||||
|
WITH RECURSIVE
|
||||||
|
cteReports (level, id, mid, name) AS
|
||||||
|
(
|
||||||
|
SELECT 1, id, mid, name FROM t1 WHERE mid IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.level + 1, e.id, e.mid + 1000000000000, e.name FROM t1 e
|
||||||
|
INNER JOIN cteReports r ON e.mid = r.id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level, id, mid, name,
|
||||||
|
(SELECT name FROM t1 WHERE id= cteReports.mid) AS mname
|
||||||
|
FROM cteReports ORDER BY level, mid;
|
||||||
|
level id mid name mname
|
||||||
|
1 0 NULL Name NULL
|
||||||
|
2 1 2147483647 Name1 NULL
|
||||||
|
2 2 2147483647 Name2 NULL
|
||||||
|
3 11 2147483647 Name11 NULL
|
||||||
|
3 12 2147483647 Name12 NULL
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 2
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 3
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 4
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 5
|
||||||
|
create table t2 as WITH RECURSIVE
|
||||||
|
cteReports (level, id, mid, name) AS
|
||||||
|
(
|
||||||
|
SELECT 1, id, mid, name FROM t1 WHERE mid IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.level + 1, e.id, e.mid + 1000000000000, e.name FROM t1 e
|
||||||
|
INNER JOIN cteReports r ON e.mid = r.id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level, id, mid, name,
|
||||||
|
(SELECT name FROM t1 WHERE id= cteReports.mid) AS mname
|
||||||
|
FROM cteReports ORDER BY level, mid;;
|
||||||
|
Warnings:
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 2
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 3
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 4
|
||||||
|
Warning 1264 Out of range value for column 'mid' at row 5
|
||||||
|
show create table t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`level` int(1) DEFAULT NULL,
|
||||||
|
`id` int(11) DEFAULT NULL,
|
||||||
|
`mid` int(11) DEFAULT NULL,
|
||||||
|
`name` text DEFAULT NULL,
|
||||||
|
`mname` text DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
set @@sql_mode=default;
|
||||||
|
drop table t1,t2;
|
||||||
|
#
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
# MDEV-26108: Recursive CTE embedded into another CTE which is used twice
|
# MDEV-26108: Recursive CTE embedded into another CTE which is used twice
|
||||||
#
|
#
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
|
@ -3168,7 +3168,50 @@ SELECT * FROM cte;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-12325 Unexpected data type and truncation when using CTE
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1
|
||||||
|
(
|
||||||
|
id INT, mid INT, name TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (0,NULL,'Name'),(1,0,'Name1'),(2,0,'Name2'),(11,1,'Name11'),(12,1,'Name12');
|
||||||
|
|
||||||
|
let $query=
|
||||||
|
WITH RECURSIVE
|
||||||
|
cteReports (level, id, mid, name) AS
|
||||||
|
(
|
||||||
|
SELECT 1, id, mid, name FROM t1 WHERE mid IS NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT r.level + 1, e.id, e.mid + 1000000000000, e.name FROM t1 e
|
||||||
|
INNER JOIN cteReports r ON e.mid = r.id
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
level, id, mid, name,
|
||||||
|
(SELECT name FROM t1 WHERE id= cteReports.mid) AS mname
|
||||||
|
FROM cteReports ORDER BY level, mid;
|
||||||
|
|
||||||
|
--error ER_WARN_DATA_OUT_OF_RANGE
|
||||||
|
--eval $query
|
||||||
|
--error ER_WARN_DATA_OUT_OF_RANGE
|
||||||
|
--eval create table t2 as $query;
|
||||||
|
--eval create table t2 ignore as $query;
|
||||||
|
show create table t2;
|
||||||
|
--error ER_WARN_DATA_OUT_OF_RANGE
|
||||||
|
--eval insert into t2 $query;
|
||||||
|
--eval insert ignore into t2 $query;
|
||||||
|
drop table t2;
|
||||||
|
set @@sql_mode="";
|
||||||
|
--eval $query
|
||||||
|
--eval create table t2 as $query;
|
||||||
|
show create table t2;
|
||||||
|
set @@sql_mode=default;
|
||||||
|
drop table t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-26108: Recursive CTE embedded into another CTE which is used twice
|
--echo # MDEV-26108: Recursive CTE embedded into another CTE which is used twice
|
||||||
|
@ -193,9 +193,6 @@ DROP TABLE t1;
|
|||||||
# End of 10.1 tests
|
# End of 10.1 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Start of 10.2 tests
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# MDEV-10134 Add full support for DEFAULT
|
# MDEV-10134 Add full support for DEFAULT
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (a TEXT, b BLOB DEFAULT COMPRESS(a), bl INT DEFAULT UNCOMPRESSED_LENGTH(b), a1 TEXT DEFAULT UNCOMPRESS(b));
|
CREATE TABLE t1 (a TEXT, b BLOB DEFAULT COMPRESS(a), bl INT DEFAULT UNCOMPRESSED_LENGTH(b), a1 TEXT DEFAULT UNCOMPRESS(b));
|
||||||
@ -213,5 +210,13 @@ bl a1
|
|||||||
100 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
100 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-23149 Server crashes in my_convert / ErrConvString::ptr / Item_char_typecast::check_truncation_with_warn
|
||||||
|
#
|
||||||
|
select 'foo' in (cast(compress('bar') as char(4)), 'qux');
|
||||||
|
'foo' in (cast(compress('bar') as char(4)), 'qux')
|
||||||
|
0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect CHAR(4) value: '\x03\x00\x00\x00x\x9CKJ,\x02\x00\x02]\x016'
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
|
@ -173,10 +173,6 @@ DROP TABLE t1;
|
|||||||
--echo # End of 10.1 tests
|
--echo # End of 10.1 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
--echo #
|
|
||||||
--echo # Start of 10.2 tests
|
|
||||||
--echo #
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-10134 Add full support for DEFAULT
|
--echo # MDEV-10134 Add full support for DEFAULT
|
||||||
--echo #
|
--echo #
|
||||||
@ -186,6 +182,11 @@ INSERT INTO t1 (a) VALUES (REPEAT('a',100));
|
|||||||
SELECT bl, a1 FROM t1;
|
SELECT bl, a1 FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-23149 Server crashes in my_convert / ErrConvString::ptr / Item_char_typecast::check_truncation_with_warn
|
||||||
|
--echo #
|
||||||
|
select 'foo' in (cast(compress('bar') as char(4)), 'qux');
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -765,8 +765,8 @@ DROP TABLE t1;
|
|||||||
#
|
#
|
||||||
# MDEV-16054 simple json functions flatline cpu on garbage input.
|
# MDEV-16054 simple json functions flatline cpu on garbage input.
|
||||||
#
|
#
|
||||||
select json_array(1,uuid(),compress(5.140264e+307));
|
select json_array(1,user(),compress(5.140264e+307));
|
||||||
json_array(1,uuid(),compress(5.140264e+307))
|
json_array(1,user(),compress(5.140264e+307))
|
||||||
NULL
|
NULL
|
||||||
#
|
#
|
||||||
# MDEV-16869 String functions don't respect character set of JSON_VALUE.
|
# MDEV-16869 String functions don't respect character set of JSON_VALUE.
|
||||||
|
@ -429,7 +429,7 @@ DROP TABLE t1;
|
|||||||
--echo # MDEV-16054 simple json functions flatline cpu on garbage input.
|
--echo # MDEV-16054 simple json functions flatline cpu on garbage input.
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
select json_array(1,uuid(),compress(5.140264e+307));
|
select json_array(1,user(),compress(5.140264e+307));
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-16869 String functions don't respect character set of JSON_VALUE.
|
--echo # MDEV-16869 String functions don't respect character set of JSON_VALUE.
|
||||||
|
@ -500,7 +500,7 @@ anything goes
|
|||||||
0 != string
|
0 != string
|
||||||
mysqltest: At line 2: Only == and != are supported for string values
|
mysqltest: At line 2: Only == and != are supported for string values
|
||||||
mysqltest: At line 2: Found junk '~= 6' after $variable in condition
|
mysqltest: At line 2: Found junk '~= 6' after $variable in condition
|
||||||
mysqltest: At line 2: Expression in if/while must beging with $, ` or a number
|
mysqltest: At line 2: Expression in if/while must begin with $, ` or a number
|
||||||
mysqltest: At line 1: Missing right operand in comparison
|
mysqltest: At line 1: Missing right operand in comparison
|
||||||
mysqltest: At line 1: Missing right operand in comparison
|
mysqltest: At line 1: Missing right operand in comparison
|
||||||
counter is 2
|
counter is 2
|
||||||
|
@ -4613,7 +4613,7 @@ sub check_warnings ($) {
|
|||||||
$tinfo->{comment}.=
|
$tinfo->{comment}.=
|
||||||
"Could not execute 'check-warnings' for ".
|
"Could not execute 'check-warnings' for ".
|
||||||
"testcase '$tname' (res: $res) server: '".
|
"testcase '$tname' (res: $res) server: '".
|
||||||
$mysqld->name() .":\n";
|
$mysqld->name() ."':\n";
|
||||||
$tinfo->{comment}.= $report;
|
$tinfo->{comment}.= $report;
|
||||||
|
|
||||||
$result= 2;
|
$result= 2;
|
||||||
|
@ -82,7 +82,7 @@ let $counter= 80;
|
|||||||
let $mysql_errno= 0;
|
let $mysql_errno= 0;
|
||||||
while (!$mysql_errno)
|
while (!$mysql_errno)
|
||||||
{
|
{
|
||||||
--error 0,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,2002,2006,2013
|
--error 0,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,2002,2006,2013,5014
|
||||||
show status;
|
show status;
|
||||||
|
|
||||||
dec $counter;
|
dec $counter;
|
||||||
|
@ -2663,10 +2663,8 @@ String *Item_func_json_merge_patch::val_str(String *str)
|
|||||||
if (json_read_value(&je2))
|
if (json_read_value(&je2))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
if (je2.value_type == JSON_VALUE_OBJECT)
|
if (je2.value_type == JSON_VALUE_OBJECT)
|
||||||
{
|
|
||||||
merge_to_null= true;
|
|
||||||
goto cont_point;
|
goto cont_point;
|
||||||
}
|
|
||||||
merge_to_null= false;
|
merge_to_null= false;
|
||||||
str->set(js2->ptr(), js2->length(), js2->charset());
|
str->set(js2->ptr(), js2->length(), js2->charset());
|
||||||
goto cont_point;
|
goto cont_point;
|
||||||
|
@ -4287,6 +4287,7 @@ String *Item_func_compress::val_str(String *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
str->length((uint32)new_size + 4);
|
str->length((uint32)new_size + 4);
|
||||||
|
str->set_charset(&my_charset_bin);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4088,15 +4088,15 @@ static int init_common_variables()
|
|||||||
/* check log options and issue warnings if needed */
|
/* check log options and issue warnings if needed */
|
||||||
if (opt_log && opt_logname && *opt_logname &&
|
if (opt_log && opt_logname && *opt_logname &&
|
||||||
!(log_output_options & (LOG_FILE | LOG_NONE)))
|
!(log_output_options & (LOG_FILE | LOG_NONE)))
|
||||||
sql_print_warning("Although a path was specified for the "
|
sql_print_warning("Although a general log file was specified, "
|
||||||
"--log option, log tables are used. "
|
"log tables are used. "
|
||||||
"To enable logging to files use the --log-output option.");
|
"To enable logging to files use the --log-output option.");
|
||||||
|
|
||||||
if (global_system_variables.sql_log_slow && opt_slow_logname &&
|
if (global_system_variables.sql_log_slow && opt_slow_logname &&
|
||||||
*opt_slow_logname &&
|
*opt_slow_logname &&
|
||||||
!(log_output_options & (LOG_FILE | LOG_NONE)))
|
!(log_output_options & (LOG_FILE | LOG_NONE)))
|
||||||
sql_print_warning("Although a path was specified for the "
|
sql_print_warning("Although a slow query log file was specified, "
|
||||||
"--log-slow-queries option, log tables are used. "
|
"log tables are used. "
|
||||||
"To enable logging to files use the --log-output=file option.");
|
"To enable logging to files use the --log-output=file option.");
|
||||||
|
|
||||||
if (!opt_logname || !*opt_logname)
|
if (!opt_logname || !*opt_logname)
|
||||||
|
@ -1205,7 +1205,7 @@ void Query_cache::end_of_result(THD *thd)
|
|||||||
BLOCK_LOCK_WR(query_block);
|
BLOCK_LOCK_WR(query_block);
|
||||||
Query_cache_query *header= query_block->query();
|
Query_cache_query *header= query_block->query();
|
||||||
Query_cache_block *last_result_block;
|
Query_cache_block *last_result_block;
|
||||||
size_t allign_size;
|
size_t align_size;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
if (header->result() == 0)
|
if (header->result() == 0)
|
||||||
@ -1223,8 +1223,8 @@ void Query_cache::end_of_result(THD *thd)
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
last_result_block= header->result()->prev;
|
last_result_block= header->result()->prev;
|
||||||
allign_size= ALIGN_SIZE(last_result_block->used);
|
align_size= ALIGN_SIZE(last_result_block->used);
|
||||||
len= MY_MAX(query_cache.min_allocation_unit, allign_size);
|
len= MY_MAX(query_cache.min_allocation_unit, align_size);
|
||||||
if (last_result_block->length >= query_cache.min_allocation_unit + len)
|
if (last_result_block->length >= query_cache.min_allocation_unit + len)
|
||||||
query_cache.split_block(last_result_block,len);
|
query_cache.split_block(last_result_block,len);
|
||||||
|
|
||||||
|
@ -6212,10 +6212,12 @@ class select_union_recursive :public select_unit
|
|||||||
or for the unit specifying a CTE that mutually recursive with this CTE.
|
or for the unit specifying a CTE that mutually recursive with this CTE.
|
||||||
*/
|
*/
|
||||||
uint cleanup_count;
|
uint cleanup_count;
|
||||||
|
long row_counter;
|
||||||
|
|
||||||
select_union_recursive(THD *thd_arg):
|
select_union_recursive(THD *thd_arg):
|
||||||
select_unit(thd_arg),
|
select_unit(thd_arg),
|
||||||
incr_table(0), first_rec_table_to_update(0), cleanup_count(0)
|
incr_table(0), first_rec_table_to_update(0), cleanup_count(0),
|
||||||
|
row_counter(0)
|
||||||
{ incr_table_param.init(); };
|
{ incr_table_param.init(); };
|
||||||
|
|
||||||
int send_data(List<Item> &items);
|
int send_data(List<Item> &items);
|
||||||
|
@ -722,6 +722,13 @@ private:
|
|||||||
/** Reset the current row counter. Start counting from the first row. */
|
/** Reset the current row counter. Start counting from the first row. */
|
||||||
void reset_current_row_for_warning() { m_current_row_for_warning= 1; }
|
void reset_current_row_for_warning() { m_current_row_for_warning= 1; }
|
||||||
|
|
||||||
|
ulong set_current_row_for_warning(ulong row)
|
||||||
|
{
|
||||||
|
ulong old_row= m_current_row_for_warning;
|
||||||
|
m_current_row_for_warning= row;
|
||||||
|
return old_row;
|
||||||
|
}
|
||||||
|
|
||||||
/** Return the current counter value. */
|
/** Return the current counter value. */
|
||||||
ulong current_row_for_warning() const { return m_current_row_for_warning; }
|
ulong current_row_for_warning() const { return m_current_row_for_warning; }
|
||||||
|
|
||||||
@ -1135,6 +1142,9 @@ public:
|
|||||||
void opt_clear_warning_info(ulonglong query_id)
|
void opt_clear_warning_info(ulonglong query_id)
|
||||||
{ get_warning_info()->opt_clear(query_id); }
|
{ get_warning_info()->opt_clear(query_id); }
|
||||||
|
|
||||||
|
long set_current_row_for_warning(long row)
|
||||||
|
{ return get_warning_info()->set_current_row_for_warning(row); }
|
||||||
|
|
||||||
ulong current_row_for_warning() const
|
ulong current_row_for_warning() const
|
||||||
{ return get_warning_info()->current_row_for_warning(); }
|
{ return get_warning_info()->current_row_for_warning(); }
|
||||||
|
|
||||||
|
@ -251,7 +251,27 @@ bool select_unit::send_eof()
|
|||||||
|
|
||||||
int select_union_recursive::send_data(List<Item> &values)
|
int select_union_recursive::send_data(List<Item> &values)
|
||||||
{
|
{
|
||||||
int rc= select_unit::send_data(values);
|
|
||||||
|
int rc;
|
||||||
|
bool save_abort_on_warning= thd->abort_on_warning;
|
||||||
|
enum_check_fields save_count_cuted_fields= thd->count_cuted_fields;
|
||||||
|
long save_counter;
|
||||||
|
|
||||||
|
/*
|
||||||
|
For recursive CTE's give warnings for wrong field info
|
||||||
|
However, we don't do that for CREATE TABLE ... SELECT or INSERT ... SELECT
|
||||||
|
as the upper level code for these handles setting of abort_on_warning
|
||||||
|
depending on if 'IGNORE' is used.
|
||||||
|
*/
|
||||||
|
if (thd->lex->sql_command != SQLCOM_CREATE_TABLE &&
|
||||||
|
thd->lex->sql_command != SQLCOM_INSERT_SELECT)
|
||||||
|
thd->abort_on_warning= thd->is_strict_mode();
|
||||||
|
thd->count_cuted_fields= CHECK_FIELD_WARN;
|
||||||
|
save_counter= thd->get_stmt_da()->set_current_row_for_warning(++row_counter);
|
||||||
|
rc= select_unit::send_data(values);
|
||||||
|
thd->get_stmt_da()->set_current_row_for_warning(save_counter);
|
||||||
|
thd->count_cuted_fields= save_count_cuted_fields;
|
||||||
|
thd->abort_on_warning= save_abort_on_warning;
|
||||||
|
|
||||||
if (rc == 0 &&
|
if (rc == 0 &&
|
||||||
write_err != HA_ERR_FOUND_DUPP_KEY &&
|
write_err != HA_ERR_FOUND_DUPP_KEY &&
|
||||||
@ -918,6 +938,7 @@ void select_union_recursive::cleanup()
|
|||||||
thd->rec_tables= tab;
|
thd->rec_tables= tab;
|
||||||
tbl->derived_result= 0;
|
tbl->derived_result= 0;
|
||||||
}
|
}
|
||||||
|
row_counter= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ ulonglong find_set(const TYPELIB *lib,
|
|||||||
if ((mblen= cs->mb_wc(&wc, (const uchar *) pos,
|
if ((mblen= cs->mb_wc(&wc, (const uchar *) pos,
|
||||||
(const uchar *) end)) < 1)
|
(const uchar *) end)) < 1)
|
||||||
mblen= 1; // Not to hang on a wrong multibyte sequence
|
mblen= 1; // Not to hang on a wrong multibyte sequence
|
||||||
if (wc == (my_wc_t) field_separator)
|
else if (wc == (my_wc_t) field_separator)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user