summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2022-08-10 13:06:08 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2022-08-10 13:06:08 +0200
commitc442e1ae21edc1f63906ac6101f1e989b589846f (patch)
treec98e223d5236f0e189104121fa96c591b05f1bd6
parent4f54c219e7c73072d7eff1e81e0f51dc1ff47509 (diff)
parent1ac0bce36e5bf2136cedb1ce1da949f53cce4404 (diff)
downloadmariadb-git-c442e1ae21edc1f63906ac6101f1e989b589846f.tar.gz
Merge branch '10.5' into 10.6
-rwxr-xr-xBUILD/SETUP.sh2
-rwxr-xr-xBUILD/compile-irix-mips64-mipspro2
-rw-r--r--Docs/INSTALL-BINARY12
-rw-r--r--client/echo.c2
-rw-r--r--client/mysql.cc2
-rw-r--r--client/mysql_plugin.c2
-rw-r--r--client/mysql_upgrade.c6
-rw-r--r--client/mysqladmin.cc2
-rw-r--r--client/mysqlbinlog.cc2
-rw-r--r--client/mysqlcheck.c2
-rw-r--r--client/mysqldump.c16
-rw-r--r--client/mysqlimport.c2
-rw-r--r--client/mysqlslap.c6
-rw-r--r--client/mysqltest.cc27
-rw-r--r--cmake/cpack_rpm.cmake2
-rw-r--r--cmake/mysql_add_executable.cmake2
-rw-r--r--cmake/readline.cmake2
-rw-r--r--cmake/sign.cmake.in2
-rw-r--r--cmake/zlib.cmake2
-rw-r--r--dbug/dbug.c2
-rw-r--r--dbug/user.r4
-rw-r--r--mysql-test/lib/My/SafeProcess/safe_process.cc11
-rw-r--r--mysql-test/main/cte_recursive.result145
-rw-r--r--mysql-test/main/cte_recursive.test43
-rw-r--r--mysql-test/main/func_compress.result11
-rw-r--r--mysql-test/main/func_compress.test9
-rw-r--r--mysql-test/main/func_json.result4
-rw-r--r--mysql-test/main/func_json.test2
-rw-r--r--mysql-test/main/mysqltest.result2
-rwxr-xr-xmysql-test/mariadb-test-run.pl2
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test2
-rw-r--r--sql/item_jsonfunc.cc4
-rw-r--r--sql/item_strfunc.cc1
-rw-r--r--sql/mysqld.cc8
-rw-r--r--sql/sql_cache.cc6
-rw-r--r--sql/sql_class.h4
-rw-r--r--sql/sql_error.h10
-rw-r--r--sql/sql_union.cc23
-rw-r--r--sql/strfunc.cc2
39 files changed, 312 insertions, 78 deletions
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh
index e77d86d2462..0ddf02813e3 100755
--- a/BUILD/SETUP.sh
+++ b/BUILD/SETUP.sh
@@ -125,7 +125,7 @@ get_make_parallel_flag
# SSL library to use.--with-ssl will select our bundled yaSSL
# 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
SSL_LIBRARY=--with-ssl
diff --git a/BUILD/compile-irix-mips64-mipspro b/BUILD/compile-irix-mips64-mipspro
index 917f3d07bbb..94d19358aca 100755
--- a/BUILD/compile-irix-mips64-mipspro
+++ b/BUILD/compile-irix-mips64-mipspro
@@ -55,7 +55,7 @@ path=`dirname $0`
. "$path/autorun.sh"
# C options:
-# -apo - auto-parallize for multiprocessors (implies -mp)
+# -apo - auto-parallelize for multiprocessors (implies -mp)
# -mp - generate multiprocessor code
# These two common optimization options apparently use 'sproc' model of
# threading, which is not compatible with PTHREADS: don't add them unless you
diff --git a/Docs/INSTALL-BINARY b/Docs/INSTALL-BINARY
index b9153f7cb67..081f4dc9691 100644
--- a/Docs/INSTALL-BINARY
+++ b/Docs/INSTALL-BINARY
@@ -44,8 +44,8 @@ However most documentation at www.mysql.com also applies.
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
-shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
-shell> ln -s full-path-to-mysql-VERSION-OS mysql
+shell> gunzip < /path/to/mariadb-VERSION-OS.tar.gz | tar xvf -
+shell> ln -s full-path-to-mariadb-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
@@ -88,16 +88,16 @@ shell> cd /usr/local
4. Unpack the distribution, which creates the installation
directory. Then create a symbolic link to that directory:
-shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
-shell> ln -s full-path-to-mysql-VERSION-OS mysql
- The tar command creates a directory named mysql-VERSION-OS.
+shell> gunzip < /path/to/mariadb-VERSION-OS.tar.gz | tar xvf -
+shell> ln -s full-path-to-mariadb-VERSION-OS mysql
+ The tar command creates a directory named mariadb-VERSION-OS.
The ln command makes a symbolic link to that directory. This
lets you refer more easily to the installation directory as
/usr/local/mysql.
With GNU tar, no separate invocation of gunzip is necessary.
You can replace the first line with the following alternative
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:
shell> cd mysql
diff --git a/client/echo.c b/client/echo.c
index 90a538faf62..6904f541960 100644
--- a/client/echo.c
+++ b/client/echo.c
@@ -16,7 +16,7 @@
/*
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:
$> echo "hello" | mysql
diff --git a/client/mysql.cc b/client/mysql.cc
index 60f73d15ed1..935dfd12643 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -2400,7 +2400,7 @@ static bool add_line(String &buffer, char *line, size_t line_length,
!(*in_string &&
(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
diff --git a/client/mysql_plugin.c b/client/mysql_plugin.c
index 366d5d07d69..d9084ec7c35 100644
--- a/client/mysql_plugin.c
+++ b/client/mysql_plugin.c
@@ -281,7 +281,7 @@ static char *convert_path(const char *argument)
@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)
{
diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c
index 06a1992bbfa..b35d9e90ffd 100644
--- a/client/mysql_upgrade.c
+++ b/client/mysql_upgrade.c
@@ -714,7 +714,7 @@ 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
+ running concurrently
*/
const char *create_error_message=
@@ -775,7 +775,7 @@ static void open_mysql_upgrade_file()
/**
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
*/
@@ -799,7 +799,7 @@ static int faulty_server_versions(const char *version)
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 already been run on this version
@return > 0 Upgrade has to be run
*/
diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc
index 6fa5d6c73d0..b30cf8e8b2c 100644
--- a/client/mysqladmin.cc
+++ b/client/mysqladmin.cc
@@ -15,7 +15,7 @@
along with this program; if not, write to the Free Software
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 <signal.h>
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index ecca3dcbeb6..cc38a310e5d 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -185,7 +185,7 @@ enum Exit_status {
/**
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.
Also because of that when reading a remote Annotate event we have to keep
its binary log representation in a separately allocated buffer.
diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c
index 5a5c28f4032..45a828cb18c 100644
--- a/client/mysqlcheck.c
+++ b/client/mysqlcheck.c
@@ -973,7 +973,7 @@ static int handle_request_for_tables(char *tables, size_t length,
case DO_ANALYZE:
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_ASSERT(!view);
diff --git a/client/mysqldump.c b/client/mysqldump.c
index da7ea84d281..620ce211691 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -1162,8 +1162,8 @@ static int get_options(int *argc, char ***argv)
/*
- Dumping under --system=stats with --replace or --inser-ignore is safe and will not
- retult into race condition. Otherwise dump only structure and ignore data by default
+ Dumping under --system=stats with --replace or --insert-ignore is safe and will not
+ result into race condition. Otherwise dump only structure and ignore data by default
while dumping.
*/
if (!(opt_system & OPT_SYSTEM_STATS) && !(opt_ignore || opt_replace_into))
@@ -2968,7 +2968,7 @@ static inline my_bool general_log_or_slow_log_tables(const char *db,
!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
ARGS
seq - sequence name
@@ -3030,7 +3030,7 @@ static void get_sequence_structure(const char *seq, const char *db)
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
be dumping.
@@ -4672,7 +4672,7 @@ static int dump_all_users_roles_and_grants()
echo "$dosomethingspecial"
) | 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.
We create a new role for importing that becomes the default admin for new
@@ -4681,8 +4681,8 @@ static int dump_all_users_roles_and_grants()
create new admins for the created role.
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.
- This is significiantly easlier than revoking the ADMIN of each role
+ which implicitly drops all its admin aspects of the dropped role.
+ This is significantly easier than revoking the ADMIN of each role
from the current user.
*/
fputs("SELECT COALESCE(CURRENT_ROLE(),'NONE') into @current_role;\n"
@@ -7113,7 +7113,7 @@ int main(int argc, char **argv)
if (opt_system & OPT_SYSTEM_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)
dump_all_stats();
diff --git a/client/mysqlimport.c b/client/mysqlimport.c
index 3a22938b059..395b64d1119 100644
--- a/client/mysqlimport.c
+++ b/client/mysqlimport.c
@@ -625,7 +625,7 @@ static char *add_load_option(char *ptr, const char *object,
/*
** Allow the user to specify field terminator strings like:
** "'", "\", "\\" (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.
*/
diff --git a/client/mysqlslap.c b/client/mysqlslap.c
index 720616c5d5a..5871e899fad 100644
--- a/client/mysqlslap.c
+++ b/client/mysqlslap.c
@@ -23,7 +23,7 @@
then reporting the timing of each stage.
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)
2) Load test (many clients)
3) Cleanup (disconnection, drop table if specified, single client)
@@ -2084,7 +2084,7 @@ parse_option(const char *origin, option_string **stmt, char delm)
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.
*/
if ((size_t)(retstr - ptr) > HUGE_STRING_LENGTH)
@@ -2130,7 +2130,7 @@ parse_option(const char *origin, option_string **stmt, char delm)
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.
*/
if (strlen(ptr) > HUGE_STRING_LENGTH)
diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index bde7666f47d..f714da61a1d 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -574,10 +574,10 @@ char builtin_echo[FN_REFLEN];
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
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
@@ -1943,7 +1943,7 @@ void show_diff(DYNAMIC_STRING* ds,
needs special processing due to return values
on that OS
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.
*/
#ifdef _WIN32
@@ -2322,7 +2322,7 @@ static int strip_surrounding(char* str, char c1, char c2)
/* Replace it with a space */
*ptr= ' ';
- /* Last non space charecter should be c2 */
+ /* Last non space character should be c2 */
ptr= strend(str)-1;
while(*ptr && my_isspace(charset_info, *ptr))
ptr--;
@@ -3091,7 +3091,7 @@ void open_file(const char *name)
if overlay-dir is specified, and the file is located somewhere
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
2.try in suite-dir/suffix
3.try in overlay-dir
@@ -5605,7 +5605,7 @@ void do_close_connection(struct st_command *command)
con->stmt= 0;
#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
(embedded-server specific)
*/
@@ -5904,7 +5904,7 @@ void do_connect(struct st_command *command)
{ "connection name", ARG_STRING, TRUE, &ds_connection_name, "Name of the connection" },
{ "host", ARG_STRING, TRUE, &ds_host, "Host to connect to" },
{ "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" },
{ "port", ARG_STRING, FALSE, &ds_port, "Port to connect to" },
{ "socket", ARG_STRING, FALSE, &ds_sock, "Socket to connect with" },
@@ -6396,7 +6396,7 @@ void do_block(enum block_cmd cmd, struct st_command* command)
} else
{
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);
}
@@ -8310,7 +8310,7 @@ void handle_no_error(struct st_command *command)
/*
Run query using prepared statement C API
- SYNPOSIS
+ SYNOPSIS
run_query_stmt
mysql - mysql handle
command - current command pointer
@@ -8553,6 +8553,7 @@ end:
}
}
+
DBUG_VOID_RETURN;
}
@@ -9007,7 +9008,7 @@ int util_query(MYSQL* org_mysql, const char* query){
/*
Run query
- SYNPOSIS
+ SYNOPSIS
run_query()
mysql mysql handle
command current command pointer
@@ -10775,7 +10776,7 @@ err:
/*
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.
IN:
@@ -10869,7 +10870,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
*/
#define SECURE_REG_BUF if (buf_len < need_buf_len) \
@@ -11408,7 +11409,7 @@ int init_sets(REP_SETS *sets,uint states)
return 0;
}
-/* Make help sets invisible for nicer codeing */
+/* Make help sets invisible for nicer coding */
void make_sets_invisible(REP_SETS *sets)
{
diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake
index 2accd771006..f21c6325ff3 100644
--- a/cmake/cpack_rpm.cmake
+++ b/cmake/cpack_rpm.cmake
@@ -340,7 +340,7 @@ IF(compat53 AND compat101)
# RHEL6/CentOS6 install Postfix by default, and it requires
# libmysqlclient.so.16 that pulls in mysql-libs-5.1.x
# 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
IF(RPM MATCHES "(rhel|centos)[67]")
SET(CPACK_RPM_common_PACKAGE_REQUIRES "MariaDB-compat")
diff --git a/cmake/mysql_add_executable.cmake b/cmake/mysql_add_executable.cmake
index 426bdaf1896..06bdfce14de 100644
--- a/cmake/mysql_add_executable.cmake
+++ b/cmake/mysql_add_executable.cmake
@@ -22,7 +22,7 @@
# - instruct CPack to install executable under ${CMAKE_INSTALL_PREFIX}/bin directory
# On Windows :
# - 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)
diff --git a/cmake/readline.cmake b/cmake/readline.cmake
index c8bbc7fc259..9c35d8c7d22 100644
--- a/cmake/readline.cmake
+++ b/cmake/readline.cmake
@@ -59,7 +59,7 @@ MACRO (FIND_CURSES)
remove CMakeCache.txt and rerun cmake.")
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
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.")
ENDIF()
MESSAGE(FATAL_ERROR ${ERRORMSG})
diff --git a/cmake/sign.cmake.in b/cmake/sign.cmake.in
index 50768a3dcc9..6b0fa8b128f 100644
--- a/cmake/sign.cmake.in
+++ b/cmake/sign.cmake.in
@@ -1,6 +1,6 @@
# 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
SET(SIGNTOOL_PARAMETERS_NO_TIMESTAMP "@SIGNTOOL_PARAMETERS@")
LIST(FIND SIGNTOOL_PARAMETERS_NO_TIMESTAMP /t idx)
diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake
index 628bbf15f67..9e085189e4f 100644
--- a/cmake/zlib.cmake
+++ b/cmake/zlib.cmake
@@ -26,7 +26,7 @@ ENDMACRO()
#
# Provides the following configure options:
# 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 system zlib is not found, use bundled copy
# ZLIB_LIBRARIES, ZLIB_INCLUDE_DIR and ZLIB_SOURCES
diff --git a/dbug/dbug.c b/dbug/dbug.c
index 1aa587ac246..a6d893e3f49 100644
--- a/dbug/dbug.c
+++ b/dbug/dbug.c
@@ -55,7 +55,7 @@
*
* Michael Widenius:
* 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
* PUSH_FLAG "A" - as 'O', but we will append to the out file instead
* of creating a new one.
diff --git a/dbug/user.r b/dbug/user.r
index 8d8a9ce6910..9a48ba3bcb2 100644
--- a/dbug/user.r
+++ b/dbug/user.r
@@ -847,7 +847,7 @@ EX:\fC
Unlocks DBUG_FILE stream, that was locked with a DBUG_LOCK_FILE.
.LI DBUG_ASSERT\
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
library. So there will be no need to disable asserts separately with NDEBUG.
.SP 1
@@ -1115,7 +1115,7 @@ will usually have problems using the standard
package.
The most common problem is multiply allocated memory.
.SP 2
-.\" .DE nroff dident like this. davida 900108
+.\" .DE nroff didn't like this. davida 900108
.CS
.\" vim:filetype=nroff
diff --git a/mysql-test/lib/My/SafeProcess/safe_process.cc b/mysql-test/lib/My/SafeProcess/safe_process.cc
index 4d0d1e2a3a0..dcf9491d2d6 100644
--- a/mysql-test/lib/My/SafeProcess/safe_process.cc
+++ b/mysql-test/lib/My/SafeProcess/safe_process.cc
@@ -140,13 +140,20 @@ void handle_core(pid_t pid __attribute__((unused))) {}
static int kill_child(bool was_killed)
{
int status= 0;
+ pid_t ret_pid= 0;
message("Killing child: %d", child_pid);
// Terminate whole process group
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)
{
int exit_code= 1;
diff --git a/mysql-test/main/cte_recursive.result b/mysql-test/main/cte_recursive.result
index 24dff8967a5..3e5ca178b41 100644
--- a/mysql-test/main/cte_recursive.result
+++ b/mysql-test/main/cte_recursive.result
@@ -4872,8 +4872,153 @@ a
0
NULL
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
#
+#
# MDEV-26108: Recursive CTE embedded into another CTE which is used twice
#
create table t1 (a int);
diff --git a/mysql-test/main/cte_recursive.test b/mysql-test/main/cte_recursive.test
index 5964c32061b..5afd445ead0 100644
--- a/mysql-test/main/cte_recursive.test
+++ b/mysql-test/main/cte_recursive.test
@@ -3168,7 +3168,50 @@ SELECT * FROM cte;
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 #
--echo #
--echo # MDEV-26108: Recursive CTE embedded into another CTE which is used twice
diff --git a/mysql-test/main/func_compress.result b/mysql-test/main/func_compress.result
index 065b68b4979..dde7080fb2a 100644
--- a/mysql-test/main/func_compress.result
+++ b/mysql-test/main/func_compress.result
@@ -193,9 +193,6 @@ DROP TABLE t1;
# End of 10.1 tests
#
#
-# Start of 10.2 tests
-#
-#
# 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));
@@ -213,5 +210,13 @@ bl a1
100 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
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
#
diff --git a/mysql-test/main/func_compress.test b/mysql-test/main/func_compress.test
index 983b792f4c4..2a6c0276705 100644
--- a/mysql-test/main/func_compress.test
+++ b/mysql-test/main/func_compress.test
@@ -174,10 +174,6 @@ DROP TABLE t1;
--echo #
--echo #
---echo # Start of 10.2 tests
---echo #
-
---echo #
--echo # MDEV-10134 Add full support for DEFAULT
--echo #
CREATE TABLE t1 (a TEXT, b BLOB DEFAULT COMPRESS(a), bl INT DEFAULT UNCOMPRESSED_LENGTH(b), a1 TEXT DEFAULT UNCOMPRESS(b));
@@ -187,5 +183,10 @@ SELECT bl, a1 FROM 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 # End of 10.2 tests
--echo #
diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result
index 73d32ceb13a..cb5d8b4efdc 100644
--- a/mysql-test/main/func_json.result
+++ b/mysql-test/main/func_json.result
@@ -765,8 +765,8 @@ DROP TABLE t1;
#
# MDEV-16054 simple json functions flatline cpu on garbage input.
#
-select json_array(1,uuid(),compress(5.140264e+307));
-json_array(1,uuid(),compress(5.140264e+307))
+select json_array(1,user(),compress(5.140264e+307));
+json_array(1,user(),compress(5.140264e+307))
NULL
#
# MDEV-16869 String functions don't respect character set of JSON_VALUE.
diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test
index 9a31aa98919..dd7e23c0674 100644
--- a/mysql-test/main/func_json.test
+++ b/mysql-test/main/func_json.test
@@ -429,7 +429,7 @@ DROP TABLE t1;
--echo # MDEV-16054 simple json functions flatline cpu on garbage input.
--echo #
-select json_array(1,uuid(),compress(5.140264e+307));
+select json_array(1,user(),compress(5.140264e+307));
--echo #
--echo # MDEV-16869 String functions don't respect character set of JSON_VALUE.
diff --git a/mysql-test/main/mysqltest.result b/mysql-test/main/mysqltest.result
index c8fe81c4d77..73f2c8851f9 100644
--- a/mysql-test/main/mysqltest.result
+++ b/mysql-test/main/mysqltest.result
@@ -500,7 +500,7 @@ anything goes
0 != string
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: 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
counter is 2
diff --git a/mysql-test/mariadb-test-run.pl b/mysql-test/mariadb-test-run.pl
index f5f99e911e5..16f4164061e 100755
--- a/mysql-test/mariadb-test-run.pl
+++ b/mysql-test/mariadb-test-run.pl
@@ -4638,7 +4638,7 @@ sub check_warnings ($) {
$tinfo->{comment}.=
"Could not execute 'check-warnings' for ".
"testcase '$tname' (res: $res) server: '".
- $mysqld->name() .":\n";
+ $mysqld->name() ."':\n";
$tinfo->{comment}.= $report;
$result= 2;
diff --git a/mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test b/mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test
index 9cff94ed5bc..b1b2f9fdda9 100644
--- a/mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test
+++ b/mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test
@@ -43,7 +43,7 @@ let $counter= 80;
let $mysql_errno= 0;
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;
dec $counter;
diff --git a/sql/item_jsonfunc.cc b/sql/item_jsonfunc.cc
index 197a4b12907..3c2787cb799 100644
--- a/sql/item_jsonfunc.cc
+++ b/sql/item_jsonfunc.cc
@@ -2681,10 +2681,8 @@ String *Item_func_json_merge_patch::val_str(String *str)
if (json_read_value(&je2))
goto error_return;
if (je2.value_type == JSON_VALUE_OBJECT)
- {
- merge_to_null= true;
goto cont_point;
- }
+
merge_to_null= false;
str->set(js2->ptr(), js2->length(), js2->charset());
goto cont_point;
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 00ddee4ac4b..07eff218aa3 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -4317,6 +4317,7 @@ String *Item_func_compress::val_str(String *str)
}
str->length((uint32)new_size + 4);
+ str->set_charset(&my_charset_bin);
return str;
}
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index b6759452893..d310d8dcf9b 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -4248,15 +4248,15 @@ static int init_common_variables()
/* check log options and issue warnings if needed */
if (opt_log && opt_logname && *opt_logname &&
!(log_output_options & (LOG_FILE | LOG_NONE)))
- sql_print_warning("Although a path was specified for the "
- "--log option, log tables are used. "
+ sql_print_warning("Although a general log file was specified, "
+ "log tables are used. "
"To enable logging to files use the --log-output option.");
if (global_system_variables.sql_log_slow && opt_slow_logname &&
*opt_slow_logname &&
!(log_output_options & (LOG_FILE | LOG_NONE)))
- sql_print_warning("Although a path was specified for the "
- "--log-slow-queries option, log tables are used. "
+ sql_print_warning("Although a slow query log file was specified, "
+ "log tables are used. "
"To enable logging to files use the --log-output=file option.");
if (!opt_logname || !*opt_logname)
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 646544c12fe..56a443bacc4 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -1205,7 +1205,7 @@ void Query_cache::end_of_result(THD *thd)
BLOCK_LOCK_WR(query_block);
Query_cache_query *header= query_block->query();
Query_cache_block *last_result_block;
- size_t allign_size;
+ size_t align_size;
size_t len;
if (header->result() == 0)
@@ -1223,8 +1223,8 @@ void Query_cache::end_of_result(THD *thd)
DBUG_VOID_RETURN;
}
last_result_block= header->result()->prev;
- allign_size= ALIGN_SIZE(last_result_block->used);
- len= MY_MAX(query_cache.min_allocation_unit, allign_size);
+ align_size= ALIGN_SIZE(last_result_block->used);
+ len= MY_MAX(query_cache.min_allocation_unit, align_size);
if (last_result_block->length >= query_cache.min_allocation_unit + len)
query_cache.split_block(last_result_block,len);
diff --git a/sql/sql_class.h b/sql/sql_class.h
index d9e56ed5e5b..cb58aff5c3e 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -6509,10 +6509,12 @@ class select_union_recursive :public select_unit
or for the unit specifying a CTE that mutually recursive with this CTE.
*/
uint cleanup_count;
+ long row_counter;
select_union_recursive(THD *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(); };
int send_data(List<Item> &items);
diff --git a/sql/sql_error.h b/sql/sql_error.h
index 6b0d4d7749c..8c0deb5e172 100644
--- a/sql/sql_error.h
+++ b/sql/sql_error.h
@@ -722,6 +722,13 @@ private:
/** Reset the current row counter. Start counting from the first row. */
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. */
ulong current_row_for_warning() const { return m_current_row_for_warning; }
@@ -1137,6 +1144,9 @@ public:
void opt_clear_warning_info(ulonglong 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
{ return get_warning_info()->current_row_for_warning(); }
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index a0f60532f32..e8bdbcba2f2 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -251,7 +251,27 @@ bool select_unit::send_eof()
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 &&
write_err != HA_ERR_FOUND_DUPP_KEY &&
@@ -918,6 +938,7 @@ void select_union_recursive::cleanup()
thd->rec_tables= tab;
tbl->derived_result= 0;
}
+ row_counter= 0;
}
diff --git a/sql/strfunc.cc b/sql/strfunc.cc
index 9f178950fb0..416aea589dd 100644
--- a/sql/strfunc.cc
+++ b/sql/strfunc.cc
@@ -72,7 +72,7 @@ ulonglong find_set(const TYPELIB *lib,
if ((mblen= cs->mb_wc(&wc, (const uchar *) pos,
(const uchar *) end)) < 1)
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;
}
}