mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge 10.9 into 10.10
This commit is contained in:
@@ -326,8 +326,8 @@ class Load_log_processor
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Load_log_processor() {}
|
Load_log_processor() = default;
|
||||||
~Load_log_processor() {}
|
~Load_log_processor() = default;
|
||||||
|
|
||||||
int init()
|
int init()
|
||||||
{
|
{
|
||||||
|
@@ -86,7 +86,7 @@
|
|||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#ifdef HAVE_gcov
|
#ifdef HAVE_gcov
|
||||||
extern void __gcov_flush();
|
#include <gcov.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
@@ -2212,7 +2212,7 @@ void _db_suicide_()
|
|||||||
fprintf(stderr, "SIGKILL myself\n");
|
fprintf(stderr, "SIGKILL myself\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
#ifdef HAVE_gcov
|
#ifdef HAVE_gcov
|
||||||
__gcov_flush();
|
__gcov_dump();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
retval= kill(getpid(), SIGKILL);
|
retval= kill(getpid(), SIGKILL);
|
||||||
@@ -2262,7 +2262,7 @@ my_bool _db_my_assert(const char *file, int line, const char *msg)
|
|||||||
fprintf(stderr, "%s:%d: assert: %s\n", file, line, msg);
|
fprintf(stderr, "%s:%d: assert: %s\n", file, line, msg);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
#ifdef HAVE_gcov
|
#ifdef HAVE_gcov
|
||||||
__gcov_flush();
|
__gcov_dump();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return a;
|
return a;
|
||||||
|
7
debian/autobake-deb.sh
vendored
7
debian/autobake-deb.sh
vendored
@@ -104,13 +104,6 @@ fi
|
|||||||
case "${LSBNAME}"
|
case "${LSBNAME}"
|
||||||
in
|
in
|
||||||
# Debian
|
# Debian
|
||||||
stretch)
|
|
||||||
# MDEV-16525 libzstd-dev-1.1.3 minimum version
|
|
||||||
sed -e '/libzstd-dev/d' \
|
|
||||||
-e 's/libcurl4/libcurl3/g' -i debian/control
|
|
||||||
remove_rocksdb_tools
|
|
||||||
disable_pmem
|
|
||||||
;&
|
|
||||||
buster)
|
buster)
|
||||||
disable_libfmt
|
disable_libfmt
|
||||||
replace_uring_with_aio
|
replace_uring_with_aio
|
||||||
|
@@ -1290,7 +1290,7 @@ struct my_option xb_client_options[]= {
|
|||||||
|
|
||||||
{"rsync", OPT_RSYNC,
|
{"rsync", OPT_RSYNC,
|
||||||
"Uses the rsync utility to optimize local file "
|
"Uses the rsync utility to optimize local file "
|
||||||
"transfers. When this option is specified, innobackupex uses rsync "
|
"transfers. When this option is specified, " XB_TOOL_NAME " uses rsync "
|
||||||
"to copy all non-InnoDB files instead of spawning a separate cp for "
|
"to copy all non-InnoDB files instead of spawning a separate cp for "
|
||||||
"each file, which can be much faster for servers with a large number "
|
"each file, which can be much faster for servers with a large number "
|
||||||
"of databases or tables. This option cannot be used together with "
|
"of databases or tables. This option cannot be used together with "
|
||||||
@@ -1398,7 +1398,7 @@ struct my_option xb_client_options[]= {
|
|||||||
|
|
||||||
{"ftwrl-wait-query-type", OPT_LOCK_WAIT_QUERY_TYPE,
|
{"ftwrl-wait-query-type", OPT_LOCK_WAIT_QUERY_TYPE,
|
||||||
"This option specifies which types of queries are allowed to complete "
|
"This option specifies which types of queries are allowed to complete "
|
||||||
"before innobackupex will issue the global lock. Default is all.",
|
"before " XB_TOOL_NAME " will issue the global lock. Default is all.",
|
||||||
(uchar *) &opt_lock_wait_query_type, (uchar *) &opt_lock_wait_query_type,
|
(uchar *) &opt_lock_wait_query_type, (uchar *) &opt_lock_wait_query_type,
|
||||||
&query_type_typelib, GET_ENUM, REQUIRED_ARG, QUERY_TYPE_ALL, 0, 0, 0, 0,
|
&query_type_typelib, GET_ENUM, REQUIRED_ARG, QUERY_TYPE_ALL, 0, 0, 0, 0,
|
||||||
0},
|
0},
|
||||||
@@ -1418,26 +1418,26 @@ struct my_option xb_client_options[]= {
|
|||||||
NULL, NULL, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
NULL, NULL, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
|
||||||
{"kill-long-queries-timeout", OPT_KILL_LONG_QUERIES_TIMEOUT,
|
{"kill-long-queries-timeout", OPT_KILL_LONG_QUERIES_TIMEOUT,
|
||||||
"This option specifies the number of seconds innobackupex waits "
|
"This option specifies the number of seconds " XB_TOOL_NAME " waits "
|
||||||
"between starting FLUSH TABLES WITH READ LOCK and killing those "
|
"between starting FLUSH TABLES WITH READ LOCK and killing those "
|
||||||
"queries that block it. Default is 0 seconds, which means "
|
"queries that block it. Default is 0 seconds, which means "
|
||||||
"innobackupex will not attempt to kill any queries.",
|
XB_TOOL_NAME " will not attempt to kill any queries.",
|
||||||
(uchar *) &opt_kill_long_queries_timeout,
|
(uchar *) &opt_kill_long_queries_timeout,
|
||||||
(uchar *) &opt_kill_long_queries_timeout, 0, GET_UINT, REQUIRED_ARG, 0, 0,
|
(uchar *) &opt_kill_long_queries_timeout, 0, GET_UINT, REQUIRED_ARG, 0, 0,
|
||||||
0, 0, 0, 0},
|
0, 0, 0, 0},
|
||||||
|
|
||||||
{"ftwrl-wait-timeout", OPT_LOCK_WAIT_TIMEOUT,
|
{"ftwrl-wait-timeout", OPT_LOCK_WAIT_TIMEOUT,
|
||||||
"This option specifies time in seconds that innobackupex should wait "
|
"This option specifies time in seconds that " XB_TOOL_NAME " should wait "
|
||||||
"for queries that would block FTWRL before running it. If there are "
|
"for queries that would block FTWRL before running it. If there are "
|
||||||
"still such queries when the timeout expires, innobackupex terminates "
|
"still such queries when the timeout expires, " XB_TOOL_NAME " terminates "
|
||||||
"with an error. Default is 0, in which case innobackupex does not "
|
"with an error. Default is 0, in which case " XB_TOOL_NAME " does not "
|
||||||
"wait for queries to complete and starts FTWRL immediately.",
|
"wait for queries to complete and starts FTWRL immediately.",
|
||||||
(uchar *) &opt_lock_wait_timeout, (uchar *) &opt_lock_wait_timeout, 0,
|
(uchar *) &opt_lock_wait_timeout, (uchar *) &opt_lock_wait_timeout, 0,
|
||||||
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
|
||||||
{"ftwrl-wait-threshold", OPT_LOCK_WAIT_THRESHOLD,
|
{"ftwrl-wait-threshold", OPT_LOCK_WAIT_THRESHOLD,
|
||||||
"This option specifies the query run time threshold which is used by "
|
"This option specifies the query run time threshold which is used by "
|
||||||
"innobackupex to detect long-running queries with a non-zero value "
|
XB_TOOL_NAME " to detect long-running queries with a non-zero value "
|
||||||
"of --ftwrl-wait-timeout. FTWRL is not started until such "
|
"of --ftwrl-wait-timeout. FTWRL is not started until such "
|
||||||
"long-running queries exist. This option has no effect if "
|
"long-running queries exist. This option has no effect if "
|
||||||
"--ftwrl-wait-timeout is 0. Default value is 60 seconds.",
|
"--ftwrl-wait-timeout is 0. Default value is 60 seconds.",
|
||||||
@@ -1918,6 +1918,17 @@ xb_get_one_option(const struct my_option *opt,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case OPT_INNODB_FLUSH_METHOD:
|
case OPT_INNODB_FLUSH_METHOD:
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* From: storage/innobase/handler/ha_innodb.cc:innodb_init_params */
|
||||||
|
switch (srv_file_flush_method) {
|
||||||
|
case SRV_ALL_O_DIRECT_FSYNC + 1 /* "async_unbuffered"="unbuffered" */:
|
||||||
|
srv_file_flush_method= SRV_ALL_O_DIRECT_FSYNC;
|
||||||
|
break;
|
||||||
|
case SRV_ALL_O_DIRECT_FSYNC + 2 /* "normal"="fsync" */:
|
||||||
|
srv_file_flush_method= SRV_FSYNC;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
ut_a(srv_file_flush_method
|
ut_a(srv_file_flush_method
|
||||||
<= IF_WIN(SRV_ALL_O_DIRECT_FSYNC, SRV_O_DIRECT_NO_FSYNC));
|
<= IF_WIN(SRV_ALL_O_DIRECT_FSYNC, SRV_O_DIRECT_NO_FSYNC));
|
||||||
ADD_PRINT_PARAM_OPT(innodb_flush_method_names[srv_file_flush_method]);
|
ADD_PRINT_PARAM_OPT(innodb_flush_method_names[srv_file_flush_method]);
|
||||||
@@ -3104,7 +3115,8 @@ static bool xtrabackup_copy_logfile()
|
|||||||
mysql_mutex_lock(&recv_sys.mutex);
|
mysql_mutex_lock(&recv_sys.mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg(">> log scanned up to (" LSN_PF ")", recv_sys.lsn);
|
if (verbose)
|
||||||
|
msg(">> log scanned up to (" LSN_PF ")", recv_sys.lsn);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3147,7 +3159,7 @@ static void log_copying_thread()
|
|||||||
my_thread_end();
|
my_thread_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** whether io_watching_thread() is active; protected by log_sys.mutex */
|
/** whether io_watching_thread() is active; protected by recv_sys.mutex */
|
||||||
static bool have_io_watching_thread;
|
static bool have_io_watching_thread;
|
||||||
|
|
||||||
/* io throttle watching (rough) */
|
/* io throttle watching (rough) */
|
||||||
|
@@ -27,6 +27,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
|
|||||||
#include "changed_page_bitmap.h"
|
#include "changed_page_bitmap.h"
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
|
#define XB_TOOL_NAME "mariadb-backup"
|
||||||
|
|
||||||
struct xb_delta_info_t
|
struct xb_delta_info_t
|
||||||
{
|
{
|
||||||
xb_delta_info_t(ulint page_size, ulint zip_size, uint32_t space_id)
|
xb_delta_info_t(ulint page_size, ulint zip_size, uint32_t space_id)
|
||||||
|
@@ -12,6 +12,9 @@ IF(MSVC_INTEL)
|
|||||||
SET(WOLFSSL_X86_64_BUILD 1)
|
SET(WOLFSSL_X86_64_BUILD 1)
|
||||||
SET(HAVE_INTEL_RDSEED 1)
|
SET(HAVE_INTEL_RDSEED 1)
|
||||||
SET(HAVE_INTEL_RDRAND 1)
|
SET(HAVE_INTEL_RDRAND 1)
|
||||||
|
ELSEIF(CMAKE_ASM_COMPILER_ID MATCHES "Clang" AND CMAKE_VERSION VERSION_LESS 3.16)
|
||||||
|
|
||||||
|
# WolfSSL 5.5.4 bug workaround below does not work, due to some CMake bug
|
||||||
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
|
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
|
||||||
SET(WOLFSSL_X86_64_BUILD 1)
|
SET(WOLFSSL_X86_64_BUILD 1)
|
||||||
IF(CMAKE_C_COMPILER_ID MATCHES GNU AND CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
|
IF(CMAKE_C_COMPILER_ID MATCHES GNU AND CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
|
||||||
|
@@ -27,12 +27,11 @@
|
|||||||
// Derive your class from this struct to insert to a linked list.
|
// Derive your class from this struct to insert to a linked list.
|
||||||
template <class Tag= void> struct ilist_node
|
template <class Tag= void> struct ilist_node
|
||||||
{
|
{
|
||||||
ilist_node() noexcept
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
: next(NULL), prev(NULL)
|
ilist_node() noexcept : next(NULL), prev(NULL) {}
|
||||||
|
#else
|
||||||
|
ilist_node() = default;
|
||||||
#endif
|
#endif
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ilist_node(ilist_node *next, ilist_node *prev) noexcept
|
ilist_node(ilist_node *next, ilist_node *prev) noexcept
|
||||||
: next(next), prev(prev)
|
: next(next), prev(prev)
|
||||||
|
@@ -39,7 +39,7 @@ public:
|
|||||||
Atomic_relaxed(const Atomic_relaxed<Type> &rhs)
|
Atomic_relaxed(const Atomic_relaxed<Type> &rhs)
|
||||||
{ m.store(rhs, std::memory_order_relaxed); }
|
{ m.store(rhs, std::memory_order_relaxed); }
|
||||||
Atomic_relaxed(Type val) : m(val) {}
|
Atomic_relaxed(Type val) : m(val) {}
|
||||||
Atomic_relaxed() {}
|
Atomic_relaxed() = default;
|
||||||
|
|
||||||
Type load(std::memory_order o= std::memory_order_relaxed) const
|
Type load(std::memory_order o= std::memory_order_relaxed) const
|
||||||
{ return m.load(o); }
|
{ return m.load(o); }
|
||||||
|
@@ -31,7 +31,7 @@ public:
|
|||||||
Atomic_counter(const Atomic_counter<Type> &rhs)
|
Atomic_counter(const Atomic_counter<Type> &rhs)
|
||||||
{ m_counter.store(rhs, std::memory_order_relaxed); }
|
{ m_counter.store(rhs, std::memory_order_relaxed); }
|
||||||
Atomic_counter(Type val): m_counter(val) {}
|
Atomic_counter(Type val): m_counter(val) {}
|
||||||
Atomic_counter() {}
|
Atomic_counter() = default;
|
||||||
|
|
||||||
Type operator++(int) { return add(1); }
|
Type operator++(int) { return add(1); }
|
||||||
Type operator--(int) { return sub(1); }
|
Type operator--(int) { return sub(1); }
|
||||||
|
@@ -81,7 +81,7 @@ public:
|
|||||||
|
|
||||||
span(const span &other) : data_(other.data_), size_(other.size_) {}
|
span(const span &other) : data_(other.data_), size_(other.size_) {}
|
||||||
|
|
||||||
~span(){};
|
~span() = default;
|
||||||
|
|
||||||
span &operator=(const span &other)
|
span &operator=(const span &other)
|
||||||
{
|
{
|
||||||
|
18
mysql-test/include/ctype_casefolding.inc
Normal file
18
mysql-test/include/ctype_casefolding.inc
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
# Uncode code points that have a variable length case mapping in utf8
|
||||||
|
# (e.g. LOWER('2-byte-character') -> '3-byte-character'
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
DROP TABLE case_folding;
|
@@ -3041,6 +3041,51 @@ SELECT 'chž'< 'i';
|
|||||||
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
|
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
|
||||||
ERROR HY000: Unknown collation: 'utf8_czech_test_bad_w2'
|
ERROR HY000: Unknown collation: 'utf8_czech_test_bad_w2'
|
||||||
#
|
#
|
||||||
|
# End of 10.2 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Start of 10.3 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||||
|
#
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_test_520_nopad_ci;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_test_520_nopad_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
#
|
||||||
|
# End of 10.3 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
# MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
|
# MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
|
||||||
#
|
#
|
||||||
SHOW COLLATION LIKE 'latin1_test_replace';
|
SHOW COLLATION LIKE 'latin1_test_replace';
|
||||||
@@ -3048,6 +3093,9 @@ Collation Charset Id Default Compiled Sortlen
|
|||||||
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
|
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
|
||||||
ERROR HY000: Unknown collation: 'latin1_test_replace'
|
ERROR HY000: Unknown collation: 'latin1_test_replace'
|
||||||
#
|
#
|
||||||
|
# End of 10.5 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
# MDEV-27042 UCA: Resetting contractions to ignorable does not work well
|
# MDEV-27042 UCA: Resetting contractions to ignorable does not work well
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@@ -3082,6 +3130,9 @@ tèl.123 10020E8B0F2E025D0E2A0E2B0E2C
|
|||||||
tex.123 10020E8B105A025D0E2A0E2B0E2C
|
tex.123 10020E8B105A025D0E2A0E2B0E2C
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# End of 10.8 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
# MDEV-27009 Add UCA-14.0.0 collations
|
# MDEV-27009 Add UCA-14.0.0 collations
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci, comment VARCHAR(128));
|
CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci, comment VARCHAR(128));
|
||||||
@@ -3178,3 +3229,6 @@ is_400 0
|
|||||||
is_520 0
|
is_520 0
|
||||||
is_1400 1
|
is_1400 1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# End of 10.10 tests
|
||||||
|
#
|
||||||
|
@@ -611,6 +611,27 @@ SELECT 'chž'< 'i';
|
|||||||
--error ER_UNKNOWN_COLLATION
|
--error ER_UNKNOWN_COLLATION
|
||||||
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
|
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.2 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_test_520_nopad_ci;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
|
--echo # MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
|
||||||
@@ -620,6 +641,9 @@ SHOW COLLATION LIKE 'latin1_test_replace';
|
|||||||
--error ER_UNKNOWN_COLLATION
|
--error ER_UNKNOWN_COLLATION
|
||||||
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
|
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.5 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-27042 UCA: Resetting contractions to ignorable does not work well
|
--echo # MDEV-27042 UCA: Resetting contractions to ignorable does not work well
|
||||||
@@ -640,6 +664,9 @@ SELECT * FROM t1 WHERE phone<>'123' ORDER BY BINARY phone;
|
|||||||
SELECT phone, HEX(WEIGHT_STRING(phone)) FROM t1 ORDER BY phone, BINARY phone;
|
SELECT phone, HEX(WEIGHT_STRING(phone)) FROM t1 ORDER BY phone, BINARY phone;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.8 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-27009 Add UCA-14.0.0 collations
|
--echo # MDEV-27009 Add UCA-14.0.0 collations
|
||||||
@@ -669,3 +696,7 @@ FROM t1
|
|||||||
ORDER BY a, HEX(a);
|
ORDER BY a, HEX(a);
|
||||||
--horizontal_results
|
--horizontal_results
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.10 tests
|
||||||
|
--echo #
|
||||||
|
@@ -8204,7 +8204,7 @@ INSERT INTO t1 VALUES (_utf32 0x2CEE);
|
|||||||
SELECT hex(c), hex(lower(c)), hex(upper(c)), hex(weight_string(c)), c
|
SELECT hex(c), hex(lower(c)), hex(upper(c)), hex(weight_string(c)), c
|
||||||
FROM t1 ORDER BY c, BINARY c;
|
FROM t1 ORDER BY c, BINARY c;
|
||||||
hex(c) hex(lower(c)) hex(upper(c)) hex(weight_string(c)) c
|
hex(c) hex(lower(c)) hex(upper(c)) hex(weight_string(c)) c
|
||||||
C8BA C8BA 1214 Ⱥ
|
C8BA E2B1A5 C8BA 1214 Ⱥ
|
||||||
E2B1A5 E2B1A5 C8BA 1214 ⱥ
|
E2B1A5 E2B1A5 C8BA 1214 ⱥ
|
||||||
C680 C680 C983 122D ƀ
|
C680 C680 C983 122D ƀ
|
||||||
C983 C680 C983 122D Ƀ
|
C983 C680 C983 122D Ƀ
|
||||||
@@ -8229,7 +8229,7 @@ E2B1AA E2B1AA E2B1A9 1328 ⱪ
|
|||||||
C8BD C69A C8BD 133B Ƚ
|
C8BD C69A C8BD 133B Ƚ
|
||||||
E2B1A0 E2B1A1 E2B1A0 133F Ⱡ
|
E2B1A0 E2B1A1 E2B1A0 133F Ⱡ
|
||||||
E2B1A1 E2B1A1 E2B1A0 133F ⱡ
|
E2B1A1 E2B1A1 E2B1A0 133F ⱡ
|
||||||
C9AB C9AB 1340 ɫ
|
C9AB C9AB E2B1A2 1340 ɫ
|
||||||
E2B1A2 C9AB E2B1A2 1340 Ɫ
|
E2B1A2 C9AB E2B1A2 1340 Ɫ
|
||||||
E1B5BD E1B5BD E2B1A3 13B8 ᵽ
|
E1B5BD E1B5BD E2B1A3 13B8 ᵽ
|
||||||
E2B1A3 E1B5BD E2B1A3 13B8 Ᵽ
|
E2B1A3 E1B5BD E2B1A3 13B8 Ᵽ
|
||||||
@@ -8237,11 +8237,11 @@ C98A C98B C98A 13D2 Ɋ
|
|||||||
C98B C98B C98A 13D2 ɋ
|
C98B C98B C98A 13D2 ɋ
|
||||||
C98C C98D C98C 13E4 Ɍ
|
C98C C98D C98C 13E4 Ɍ
|
||||||
C98D C98D C98C 13E4 ɍ
|
C98D C98D C98C 13E4 ɍ
|
||||||
C9BD C9BD 13FC ɽ
|
C9BD C9BD E2B1A4 13FC ɽ
|
||||||
E2B1A4 C9BD E2B1A4 13FC Ɽ
|
E2B1A4 C9BD E2B1A4 13FC Ɽ
|
||||||
EA9CA8 EA9CA9 EA9CA8 143314AD Ꜩ
|
EA9CA8 EA9CA9 EA9CA8 143314AD Ꜩ
|
||||||
EA9CA9 EA9CA9 EA9CA8 143314AD ꜩ
|
EA9CA9 EA9CA9 EA9CA8 143314AD ꜩ
|
||||||
C8BE C8BE 143C Ⱦ
|
C8BE E2B1A6 C8BE 143C Ⱦ
|
||||||
E2B1A6 E2B1A6 C8BE 143C ⱦ
|
E2B1A6 E2B1A6 C8BE 143C ⱦ
|
||||||
C984 CA89 C984 145B Ʉ
|
C984 CA89 C984 145B Ʉ
|
||||||
CA89 CA89 C984 145B ʉ
|
CA89 CA89 C984 145B ʉ
|
||||||
|
@@ -588,6 +588,180 @@ DROP TABLE t1;
|
|||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
# Start of 10.3 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||||
|
#
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_ci /*Unicode-4.0 folding*/;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A C8BA C8BA Ⱥ
|
||||||
|
23E C8BE C8BE Ⱦ
|
||||||
|
23F C8BF C8BF ȿ
|
||||||
|
240 C980 C980 ɀ
|
||||||
|
250 C990 C990 ɐ
|
||||||
|
251 C991 C991 ɑ
|
||||||
|
252 C992 C992 ɒ
|
||||||
|
26B C9AB C9AB ɫ
|
||||||
|
271 C9B1 C9B1 ɱ
|
||||||
|
27D C9BD C9BD ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_520_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_myanmar_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_thai_520_w2 DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
#
|
||||||
|
# End of 10.3 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
# Start of 10.10 tests
|
# Start of 10.10 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@@ -22,6 +22,35 @@ SET NAMES utf8 COLLATE utf8_unicode_nopad_ci;
|
|||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_ci /*Unicode-4.0 folding*/;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Start of 10.10 tests
|
--echo # Start of 10.10 tests
|
||||||
--echo #
|
--echo #
|
||||||
@@ -47,7 +76,6 @@ SELECT f1();
|
|||||||
DROP FUNCTION f1;
|
DROP FUNCTION f1;
|
||||||
SET NAMES utf8mb3;
|
SET NAMES utf8mb3;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.10 tests
|
--echo # End of 10.10 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@@ -6606,7 +6606,178 @@ SET NAMES utf8mb4;
|
|||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# End of 10.9 tests
|
# Start of 10.3 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||||
|
#
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci /*Unicode-4.0 folding*/;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A C8BA C8BA Ⱥ
|
||||||
|
23E C8BE C8BE Ⱦ
|
||||||
|
23F C8BF C8BF ȿ
|
||||||
|
240 C980 C980 ɀ
|
||||||
|
250 C990 C990 ɐ
|
||||||
|
251 C991 C991 ɑ
|
||||||
|
252 C992 C992 ɒ
|
||||||
|
26B C9AB C9AB ɫ
|
||||||
|
271 C9B1 C9B1 ɱ
|
||||||
|
27D C9BD C9BD ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_myanmar_ci DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
|
||||||
|
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
|
||||||
|
SHOW CREATE TABLE case_folding;
|
||||||
|
Table Create Table
|
||||||
|
case_folding CREATE TABLE `case_folding` (
|
||||||
|
`code` int(1) NOT NULL,
|
||||||
|
`c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 DEFAULT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
INSERT INTO case_folding (code) VALUES
|
||||||
|
(0x23A),
|
||||||
|
(0x23E),
|
||||||
|
(0x23F),
|
||||||
|
(0x240),
|
||||||
|
(0x250),
|
||||||
|
(0x251),
|
||||||
|
(0x252),
|
||||||
|
(0x26B),
|
||||||
|
(0x271),
|
||||||
|
(0x27D);
|
||||||
|
UPDATE case_folding SET c=CHAR(code USING ucs2);
|
||||||
|
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
|
||||||
|
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
|
||||||
|
23A E2B1A5 C8BA Ⱥ
|
||||||
|
23E E2B1A6 C8BE Ⱦ
|
||||||
|
23F C8BF E2B1BE ȿ
|
||||||
|
240 C980 E2B1BF ɀ
|
||||||
|
250 C990 E2B1AF ɐ
|
||||||
|
251 C991 E2B1AD ɑ
|
||||||
|
252 C992 E2B1B0 ɒ
|
||||||
|
26B C9AB E2B1A2 ɫ
|
||||||
|
271 C9B1 E2B1AE ɱ
|
||||||
|
27D C9BD E2B1A4 ɽ
|
||||||
|
DROP TABLE case_folding;
|
||||||
|
#
|
||||||
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# MDEV-27009 Add UCA-14.0.0 collations
|
# MDEV-27009 Add UCA-14.0.0 collations
|
||||||
@@ -11208,5 +11379,5 @@ DROP TABLE t1;
|
|||||||
DROP PROCEDURE exec_verbose;
|
DROP PROCEDURE exec_verbose;
|
||||||
DROP PROCEDURE test_styles;
|
DROP PROCEDURE test_styles;
|
||||||
#
|
#
|
||||||
# End of 10.9 tests
|
# End of 10.10 tests
|
||||||
#
|
#
|
||||||
|
@@ -109,8 +109,33 @@ SET NAMES utf8mb4;
|
|||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.9 tests
|
--echo # Start of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci /*Unicode-4.0 folding*/;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
|
||||||
|
--source include/ctype_casefolding.inc
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.3 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
@@ -402,5 +427,5 @@ DROP PROCEDURE exec_verbose;
|
|||||||
DROP PROCEDURE test_styles;
|
DROP PROCEDURE test_styles;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.9 tests
|
--echo # End of 10.10 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@@ -2,7 +2,7 @@ SET DEBUG_SYNC= 'RESET';
|
|||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: ''
|
debug_sync ON - current signals: ''
|
||||||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
|
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
|
||||||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
|
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
|
||||||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3';
|
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3';
|
||||||
@@ -150,34 +150,34 @@ SET @myvar= 'now SIGNAL from_myvar';
|
|||||||
SET DEBUG_SYNC= @myvar;
|
SET DEBUG_SYNC= @myvar;
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 'from_myvar'
|
debug_sync ON - current signals: 'from_myvar'
|
||||||
SET DEBUG_SYNC= LEFT('now SIGNAL from_function_cut_here', 24);
|
SET DEBUG_SYNC= LEFT('now SIGNAL from_function_cut_here', 24);
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 'from_function'
|
debug_sync ON - current signals: 'from_myvar,from_function'
|
||||||
SET DEBUG_SYNC= 'now SIGNAL something';
|
SET DEBUG_SYNC= 'now SIGNAL something';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 'something'
|
debug_sync ON - current signals: 'something,from_function,from_myvar'
|
||||||
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
|
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning #### debug sync point wait timed out
|
Warning #### debug sync point wait timed out
|
||||||
SET DEBUG_SYNC= 'now SIGNAL nothing';
|
SET DEBUG_SYNC= 'now SIGNAL nothing';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 'nothing'
|
debug_sync ON - current signals: 'something,from_function,nothing,from_myvar'
|
||||||
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
|
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
|
||||||
SET DEBUG_SYNC= 'now SIGNAL something EXECUTE 0';
|
SET DEBUG_SYNC= 'now SIGNAL something EXECUTE 0';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 'nothing'
|
debug_sync ON - current signals: 'something,from_function,from_myvar'
|
||||||
SET DEBUG_SYNC= 'now WAIT_FOR anotherthing TIMEOUT 0 EXECUTE 0';
|
SET DEBUG_SYNC= 'now WAIT_FOR anotherthing TIMEOUT 0 EXECUTE 0';
|
||||||
SET DEBUG_SYNC= 'now HIT_LIMIT 1';
|
SET DEBUG_SYNC= 'now HIT_LIMIT 1';
|
||||||
ERROR HY000: debug sync point hit limit reached
|
ERROR HY000: debug sync point hit limit reached
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: ''
|
debug_sync ON - current signals: ''
|
||||||
SET DEBUG_SYNC= 'p1abcd SIGNAL s1 EXECUTE 2';
|
SET DEBUG_SYNC= 'p1abcd SIGNAL s1 EXECUTE 2';
|
||||||
SET DEBUG_SYNC= 'p2abc SIGNAL s2 EXECUTE 2';
|
SET DEBUG_SYNC= 'p2abc SIGNAL s2 EXECUTE 2';
|
||||||
SET DEBUG_SYNC= 'p9abcdef SIGNAL s9 EXECUTE 2';
|
SET DEBUG_SYNC= 'p9abcdef SIGNAL s9 EXECUTE 2';
|
||||||
@@ -190,23 +190,30 @@ SET DEBUG_SYNC= 'p3abcdef SIGNAL s3 EXECUTE 2';
|
|||||||
SET DEBUG_SYNC= 'p4a TEST';
|
SET DEBUG_SYNC= 'p4a TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 's4'
|
debug_sync ON - current signals: 's4'
|
||||||
SET DEBUG_SYNC= 'p1abcd TEST';
|
SET DEBUG_SYNC= 'p1abcd TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 's1'
|
debug_sync ON - current signals: 's4,s1'
|
||||||
SET DEBUG_SYNC= 'p7 TEST';
|
SET DEBUG_SYNC= 'p7 TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 's7'
|
debug_sync ON - current signals: 's1,s7,s4'
|
||||||
SET DEBUG_SYNC= 'p9abcdef TEST';
|
SET DEBUG_SYNC= 'p9abcdef TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 's9'
|
debug_sync ON - current signals: 's1,s7,s4,s9'
|
||||||
SET DEBUG_SYNC= 'p3abcdef TEST';
|
SET DEBUG_SYNC= 'p3abcdef TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 's3'
|
debug_sync ON - current signals: 's1,s3,s4,s9,s7'
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s9';
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s1';
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s4';
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s7';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
Variable_name Value
|
||||||
|
debug_sync ON - current signals: 's3'
|
||||||
SET DEBUG_SYNC= 'p1abcd CLEAR';
|
SET DEBUG_SYNC= 'p1abcd CLEAR';
|
||||||
SET DEBUG_SYNC= 'p2abc CLEAR';
|
SET DEBUG_SYNC= 'p2abc CLEAR';
|
||||||
SET DEBUG_SYNC= 'p5abcde CLEAR';
|
SET DEBUG_SYNC= 'p5abcde CLEAR';
|
||||||
@@ -219,19 +226,19 @@ SET DEBUG_SYNC= 'p7 CLEAR';
|
|||||||
SET DEBUG_SYNC= 'p1abcd TEST';
|
SET DEBUG_SYNC= 'p1abcd TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 's3'
|
debug_sync ON - current signals: 's3'
|
||||||
SET DEBUG_SYNC= 'p7 TEST';
|
SET DEBUG_SYNC= 'p7 TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 's3'
|
debug_sync ON - current signals: 's3'
|
||||||
SET DEBUG_SYNC= 'p9abcdef TEST';
|
SET DEBUG_SYNC= 'p9abcdef TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: 's3'
|
debug_sync ON - current signals: 's3'
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: ''
|
debug_sync ON - current signals: ''
|
||||||
CREATE USER mysqltest_1@localhost;
|
CREATE USER mysqltest_1@localhost;
|
||||||
GRANT SUPER ON *.* TO mysqltest_1@localhost;
|
GRANT SUPER ON *.* TO mysqltest_1@localhost;
|
||||||
connect con1,localhost,mysqltest_1,,;
|
connect con1,localhost,mysqltest_1,,;
|
||||||
@@ -292,4 +299,24 @@ disconnect con1;
|
|||||||
disconnect con2;
|
disconnect con2;
|
||||||
connection default;
|
connection default;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Test NO_CLEAR_EVENT flag. The signal should still be visible after
|
||||||
|
# the wait has completed succesfully.
|
||||||
|
#
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL s1';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
Variable_name Value
|
||||||
|
debug_sync ON - current signals: 's1'
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s1 NO_CLEAR_EVENT';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
Variable_name Value
|
||||||
|
debug_sync ON - current signals: 's1'
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s1';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
Variable_name Value
|
||||||
|
debug_sync ON - current signals: ''
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL s1,s2,s5,s7';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
Variable_name Value
|
||||||
|
debug_sync ON - current signals: 's2,s7,s1,s5'
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
@@ -231,15 +231,12 @@ SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
|||||||
# immediately after setting of the DEBUG_SYNC variable.
|
# immediately after setting of the DEBUG_SYNC variable.
|
||||||
# So it is executed before the SET statement ends.
|
# So it is executed before the SET statement ends.
|
||||||
#
|
#
|
||||||
# NOTE: There is only one global signal (say "signal post" or "flag mast").
|
# NOTE: There can be multiple active signals at the same time.
|
||||||
# A SIGNAL action writes its signal into it ("sets a flag").
|
# A SIGNAL action appends its signal into signals set.
|
||||||
# The signal persists until explicitly overwritten.
|
# The signal persists until waited on.
|
||||||
# To avoid confusion for later tests, it is recommended to clear
|
# To avoid confusion for later tests, it is recommended to clear
|
||||||
# the signal by signalling "empty" ("setting the 'empty' flag"):
|
# the signal set by running
|
||||||
# SET DEBUG_SYNC= 'now SIGNAL empty';
|
|
||||||
# Preferably you can reset the whole facility with:
|
|
||||||
# SET DEBUG_SYNC= 'RESET';
|
# SET DEBUG_SYNC= 'RESET';
|
||||||
# The signal is then '' (really empty) which connot be done otherwise.
|
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -298,6 +295,16 @@ SET DEBUG_SYNC= 'p9abcdef TEST';
|
|||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
SET DEBUG_SYNC= 'p3abcdef TEST';
|
SET DEBUG_SYNC= 'p3abcdef TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Wait for all signals currently active except s3.
|
||||||
|
#
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s9';
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s1';
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s4';
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s7';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Clear the actions.
|
# Clear the actions.
|
||||||
#
|
#
|
||||||
@@ -320,7 +327,7 @@ SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
|||||||
SET DEBUG_SYNC= 'p9abcdef TEST';
|
SET DEBUG_SYNC= 'p9abcdef TEST';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
#
|
#
|
||||||
# Now cleanup. Actions are clear already, but signal needs to be cleared.
|
# Now cleanup. Actions are clear already, but s3 signal needs to be cleared.
|
||||||
#
|
#
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
@@ -418,10 +425,24 @@ disconnect con2;
|
|||||||
connection default;
|
connection default;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Test NO_CLEAR_EVENT flag. The signal should still be visible after
|
||||||
|
--echo # the wait has completed succesfully.
|
||||||
|
--echo #
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL s1';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s1 NO_CLEAR_EVENT';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
SET DEBUG_SYNC= 'now WAIT_FOR s1';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL s1,s2,s5,s7';
|
||||||
|
SHOW VARIABLES LIKE 'DEBUG_SYNC';
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Cleanup after test case.
|
# Cleanup after test case.
|
||||||
# Otherwise signal would contain 'flushed' here,
|
# Otherwise signal would confuse the next test.
|
||||||
# which could confuse the next test.
|
|
||||||
#
|
#
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
|
||||||
|
@@ -525,3 +525,35 @@ DELETE v2 FROM v2;
|
|||||||
ERROR HY000: Can not delete from join view 'test.v2'
|
ERROR HY000: Can not delete from join view 'test.v2'
|
||||||
DROP VIEW v2, v1;
|
DROP VIEW v2, v1;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
End of 5.5 tests
|
||||||
|
#
|
||||||
|
# MDEV-30586: DELETE with WHERE containing nested subquery
|
||||||
|
# with set function aggregated in outer subquery
|
||||||
|
#
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (3), (7), (1);
|
||||||
|
create table t2 (b int);
|
||||||
|
insert into t2 values (2), (1), (4), (7);
|
||||||
|
create table t3 (a int, b int);
|
||||||
|
insert into t3 values (2,10), (7,30), (2,30), (1,10), (7,40);
|
||||||
|
select * from t1
|
||||||
|
where t1.a in (select t3.a from t3 group by t3.a
|
||||||
|
having t3.a > any (select t2.b from t2
|
||||||
|
where t2.b*10 < sum(t3.b)));
|
||||||
|
a
|
||||||
|
7
|
||||||
|
delete from t1
|
||||||
|
where t1.a in (select t3.a from t3 group by t3.a
|
||||||
|
having t3.a > any (select t2.b from t2
|
||||||
|
where t2.b*10 < sum(t3.b)));
|
||||||
|
select * from t1
|
||||||
|
where t1.a in (select t3.a from t3 group by t3.a
|
||||||
|
having t3.a > any (select t2.b from t2
|
||||||
|
where t2.b*10 < sum(t3.b)));
|
||||||
|
a
|
||||||
|
update t1 set t1.a=t1.a+10
|
||||||
|
where t1.a in (select t3.a from t3 group by t3.a
|
||||||
|
having t3.a > any (select t2.b from t2
|
||||||
|
where t2.b*10 < sum(t3.b)));
|
||||||
|
drop table t1,t2,t3;
|
||||||
|
End of 10.4 tests
|
||||||
|
@@ -582,3 +582,44 @@ DELETE v2 FROM v2;
|
|||||||
|
|
||||||
DROP VIEW v2, v1;
|
DROP VIEW v2, v1;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo End of 5.5 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30586: DELETE with WHERE containing nested subquery
|
||||||
|
--echo # with set function aggregated in outer subquery
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (3), (7), (1);
|
||||||
|
|
||||||
|
create table t2 (b int);
|
||||||
|
insert into t2 values (2), (1), (4), (7);
|
||||||
|
|
||||||
|
create table t3 (a int, b int);
|
||||||
|
insert into t3 values (2,10), (7,30), (2,30), (1,10), (7,40);
|
||||||
|
|
||||||
|
let $c=
|
||||||
|
t1.a in (select t3.a from t3 group by t3.a
|
||||||
|
having t3.a > any (select t2.b from t2
|
||||||
|
where t2.b*10 < sum(t3.b)));
|
||||||
|
|
||||||
|
eval
|
||||||
|
select * from t1
|
||||||
|
where $c;
|
||||||
|
|
||||||
|
eval
|
||||||
|
delete from t1
|
||||||
|
where $c;
|
||||||
|
|
||||||
|
eval
|
||||||
|
select * from t1
|
||||||
|
where $c;
|
||||||
|
|
||||||
|
eval
|
||||||
|
update t1 set t1.a=t1.a+10
|
||||||
|
where $c;
|
||||||
|
|
||||||
|
drop table t1,t2,t3;
|
||||||
|
|
||||||
|
--echo End of 10.4 tests
|
||||||
|
@@ -16,3 +16,61 @@ ERROR 42S02: Table 'test.t2' doesn't exist
|
|||||||
show status like "Empty_queries";
|
show status like "Empty_queries";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Empty_queries 2
|
Empty_queries 2
|
||||||
|
# End of 4.1 tests
|
||||||
|
#
|
||||||
|
# MDEV-30333 Wrong result with not_null_range_scan and LEFT JOIN with empty table
|
||||||
|
#
|
||||||
|
set @save_optimizer_switch=@@optimizer_switch;
|
||||||
|
CREATE TABLE t1 (a INT, b INT) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 (b) VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (c INT) ENGINE=MyISAM;
|
||||||
|
SET optimizer_switch= 'not_null_range_scan=off';
|
||||||
|
explain extended SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t2 system NULL NULL NULL NULL 0 0.00 Const row not found
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using filesort
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select `test`.`t1`.`b` AS `b` from `test`.`t1` where `test`.`t1`.`a` is null order by `test`.`t1`.`b`
|
||||||
|
SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
b
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SET optimizer_switch = 'not_null_range_scan=on';
|
||||||
|
explain extended SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
|
1 SIMPLE t2 system NULL NULL NULL NULL 0 0.00 Const row not found
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using filesort
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select `test`.`t1`.`b` AS `b` from `test`.`t1` where `test`.`t1`.`a` is null order by `test`.`t1`.`b`
|
||||||
|
SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
b
|
||||||
|
1
|
||||||
|
2
|
||||||
|
flush tables;
|
||||||
|
SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
b
|
||||||
|
1
|
||||||
|
2
|
||||||
|
drop table t1,t2;
|
||||||
|
# Second test in MDEV-30333
|
||||||
|
CREATE TABLE t1 (a int, b varchar(10)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES (69,'foo'),(71,'bar');
|
||||||
|
CREATE TABLE t2 (c int) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t2 VALUES (1),(2);
|
||||||
|
CREATE TABLE t3 (d int, e int, KEY(e)) ENGINE=MyISAM;
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON t3.e = t3.d ON 1;
|
||||||
|
a b c d e
|
||||||
|
69 foo 1 NULL NULL
|
||||||
|
71 bar 1 NULL NULL
|
||||||
|
69 foo 2 NULL NULL
|
||||||
|
71 bar 2 NULL NULL
|
||||||
|
SET optimizer_switch = 'not_null_range_scan=on';
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON t3.e = t3.d ON 1;
|
||||||
|
a b c d e
|
||||||
|
69 foo 1 NULL NULL
|
||||||
|
71 bar 1 NULL NULL
|
||||||
|
69 foo 2 NULL NULL
|
||||||
|
71 bar 2 NULL NULL
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
set @@optimizer_switch=@save_optimizer_switch;
|
||||||
|
End of 10.5 tests
|
||||||
|
@@ -21,4 +21,38 @@ drop table t1;
|
|||||||
select * from t2;
|
select * from t2;
|
||||||
show status like "Empty_queries";
|
show status like "Empty_queries";
|
||||||
|
|
||||||
# End of 4.1 tests
|
--echo # End of 4.1 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30333 Wrong result with not_null_range_scan and LEFT JOIN with empty table
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
set @save_optimizer_switch=@@optimizer_switch;
|
||||||
|
CREATE TABLE t1 (a INT, b INT) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 (b) VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (c INT) ENGINE=MyISAM;
|
||||||
|
SET optimizer_switch= 'not_null_range_scan=off'; # Default
|
||||||
|
explain extended SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
SET optimizer_switch = 'not_null_range_scan=on';
|
||||||
|
explain extended SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
flush tables;
|
||||||
|
SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
|
||||||
|
drop table t1,t2;
|
||||||
|
|
||||||
|
--echo # Second test in MDEV-30333
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a int, b varchar(10)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES (69,'foo'),(71,'bar');
|
||||||
|
CREATE TABLE t2 (c int) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t2 VALUES (1),(2);
|
||||||
|
CREATE TABLE t3 (d int, e int, KEY(e)) ENGINE=MyISAM;
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON t3.e = t3.d ON 1;
|
||||||
|
SET optimizer_switch = 'not_null_range_scan=on';
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON t3.e = t3.d ON 1;
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
set @@optimizer_switch=@save_optimizer_switch;
|
||||||
|
|
||||||
|
--echo End of 10.5 tests
|
||||||
|
|
||||||
|
@@ -1378,3 +1378,31 @@ a
|
|||||||
bar
|
bar
|
||||||
foo
|
foo
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
#
|
||||||
|
# MDEV-30324: Wrong result upon SELECT DISTINCT .. WITH TIES using index
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a int, b char(3), KEY (a));
|
||||||
|
INSERT INTO t1 VALUES (2,'foo'),(3,'bar'),(3,'bar'),(3,'zzz');
|
||||||
|
EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 1 ROWS WITH TIES;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 index NULL a 5 NULL 1 Using temporary
|
||||||
|
SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 1 ROWS WITH TIES;
|
||||||
|
a b
|
||||||
|
2 foo
|
||||||
|
EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 index NULL a 5 NULL 2 Using temporary
|
||||||
|
SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
|
||||||
|
a b
|
||||||
|
2 foo
|
||||||
|
3 bar
|
||||||
|
3 zzz
|
||||||
|
EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 3 ROWS WITH TIES;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
|
||||||
|
SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 3 ROWS WITH TIES;
|
||||||
|
a b
|
||||||
|
2 foo
|
||||||
|
3 bar
|
||||||
|
3 zzz
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -1059,3 +1059,22 @@ SELECT a FROM t ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
|
|||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30324: Wrong result upon SELECT DISTINCT .. WITH TIES using index
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (a int, b char(3), KEY (a));
|
||||||
|
INSERT INTO t1 VALUES (2,'foo'),(3,'bar'),(3,'bar'),(3,'zzz');
|
||||||
|
|
||||||
|
EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 1 ROWS WITH TIES;
|
||||||
|
--sorted_result
|
||||||
|
SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 1 ROWS WITH TIES;
|
||||||
|
EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
|
||||||
|
--sorted_result
|
||||||
|
SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
|
||||||
|
EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 3 ROWS WITH TIES;
|
||||||
|
--sorted_result
|
||||||
|
SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 3 ROWS WITH TIES;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -1623,6 +1623,21 @@ id doc
|
|||||||
{"$oid":"611c0a463b150154132f6636"} { "_id" : { "$oid" : "611c0a463b150154132f6636" }, "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : 1.0 } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] }
|
{"$oid":"611c0a463b150154132f6636"} { "_id" : { "$oid" : "611c0a463b150154132f6636" }, "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : 1.0 } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] }
|
||||||
DROP TABLE arrNestTest;
|
DROP TABLE arrNestTest;
|
||||||
#
|
#
|
||||||
|
# MDEV-30412 JSON_OBJECTAGG doesn't escape double quote in key
|
||||||
|
#
|
||||||
|
SELECT JSON_OBJECTAGG('"', 1);
|
||||||
|
JSON_OBJECTAGG('"', 1)
|
||||||
|
{"\"":1}
|
||||||
|
SELECT JSON_OBJECTAGG('\"', 1);
|
||||||
|
JSON_OBJECTAGG('\"', 1)
|
||||||
|
{"\"":1}
|
||||||
|
SELECT JSON_OBJECTAGG('\\', 1);
|
||||||
|
JSON_OBJECTAGG('\\', 1)
|
||||||
|
{"\\":1}
|
||||||
|
#
|
||||||
|
# End of 10.5 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
# MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
|
# MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
|
||||||
#
|
#
|
||||||
CREATE TABLE t (a VARCHAR(8));
|
CREATE TABLE t (a VARCHAR(8));
|
||||||
@@ -1649,7 +1664,7 @@ JSON_INSERT(JSON_OBJECT(l1, l2, l3, l4), '$.k3', 'v3') JSON_SET(JSON_OBJECT(l1,
|
|||||||
{"k1": "v1", "k2": "v2", "k3": "v3"} {"k1": "v1", "k2": "new v2"} {"k1": "v1", "k2": "new v2"}
|
{"k1": "v1", "k2": "v2", "k3": "v3"} {"k1": "v1", "k2": "new v2"} {"k1": "v1", "k2": "new v2"}
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
#
|
#
|
||||||
# End of 10.5 tests
|
# End of 10.6 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Beginning of 10.9 tests
|
# Beginning of 10.9 tests
|
||||||
@@ -2536,9 +2551,6 @@ JSON_EXTRACT(j, '$[*]')
|
|||||||
[{"key1": 3, "key2": 3}, {"key3": 3, "key4": 3}, {"key5": 3}]
|
[{"key1": 3, "key2": 3}, {"key3": 3, "key4": 3}, {"key5": 3}]
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# End of 10.9 Test
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# MDEV-29381: JSON paths containing dashes are reported as syntax errors in procedures
|
# MDEV-29381: JSON paths containing dashes are reported as syntax errors in procedures
|
||||||
#
|
#
|
||||||
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"');
|
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"');
|
||||||
@@ -2547,3 +2559,6 @@ JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"')
|
|||||||
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$.my-key');
|
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$.my-key');
|
||||||
JSON_EXTRACT('{ "my-key": 1 }', '$.my-key')
|
JSON_EXTRACT('{ "my-key": 1 }', '$.my-key')
|
||||||
1
|
1
|
||||||
|
#
|
||||||
|
# End of 10.9 Test
|
||||||
|
#
|
||||||
|
@@ -1067,6 +1067,18 @@ INSERT INTO test.arrNestTest (doc) VALUES ('{ "_id" : { "$oid" : "611c0a463b1501
|
|||||||
SELECT * FROM arrNestTest;
|
SELECT * FROM arrNestTest;
|
||||||
DROP TABLE arrNestTest;
|
DROP TABLE arrNestTest;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30412 JSON_OBJECTAGG doesn't escape double quote in key
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SELECT JSON_OBJECTAGG('"', 1);
|
||||||
|
SELECT JSON_OBJECTAGG('\"', 1);
|
||||||
|
SELECT JSON_OBJECTAGG('\\', 1);
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.5 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
|
--echo # MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
|
||||||
--echo #
|
--echo #
|
||||||
@@ -1078,7 +1090,6 @@ SELECT JSON_ARRAYAGG(a) AS f FROM v;
|
|||||||
DROP VIEW v;
|
DROP VIEW v;
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-29264 JSON functions overflow error based ON LONGTEXT field
|
--echo # MDEV-29264 JSON functions overflow error based ON LONGTEXT field
|
||||||
--echo #
|
--echo #
|
||||||
@@ -1090,8 +1101,9 @@ SELECT JSON_INSERT(JSON_OBJECT(l1, l2, l3, l4), '$.k3', 'v3'),JSON_SET(JSON_OBJE
|
|||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.5 tests
|
--echo # End of 10.6 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Beginning of 10.9 tests
|
--echo # Beginning of 10.9 tests
|
||||||
--echo #
|
--echo #
|
||||||
@@ -1733,13 +1745,13 @@ SELECT JSON_EXTRACT(j, '$[*]') FROM t1 ;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo #
|
|
||||||
--echo # End of 10.9 Test
|
|
||||||
--echo #
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-29381: JSON paths containing dashes are reported as syntax errors in procedures
|
--echo # MDEV-29381: JSON paths containing dashes are reported as syntax errors in procedures
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"');
|
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"');
|
||||||
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$.my-key');
|
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$.my-key');
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.9 Test
|
||||||
|
--echo #
|
||||||
|
@@ -1269,3 +1269,123 @@ EXPLAIN
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
DROP TABLES t1, t2;
|
DROP TABLES t1, t2;
|
||||||
|
# End of 10.3 tests
|
||||||
|
#
|
||||||
|
# MDEV-28538: multi-table UPDATE/DELETE with possible exists-to-in
|
||||||
|
#
|
||||||
|
create table t1 (c1 int, c2 int, c3 int, index idx(c2));
|
||||||
|
insert into t1 values
|
||||||
|
(1,1,1),(3,2,2),(1,3,3),
|
||||||
|
(2,1,4),(2,2,5),(4,3,6),
|
||||||
|
(2,4,7),(2,5,8);
|
||||||
|
create table t2 (c1 int, c2 int, c3 int, index idx(c2));
|
||||||
|
insert into t2 values
|
||||||
|
(1,7,1),(1,8,2),(1,3,3),
|
||||||
|
(2,1,4),(2,2,5),(2,3,6),
|
||||||
|
(2,4,7),(2,5,8);
|
||||||
|
create table t3 (c1 int, c2 int, c3 int, index idx(c2));
|
||||||
|
insert into t3 values
|
||||||
|
(1,1,1),(1,2,2),(1,3,3),
|
||||||
|
(2,1,4),(2,2,5),(2,3,6),
|
||||||
|
(2,4,7),(2,5,8);
|
||||||
|
insert into t3 select c1+1, c2+2, c3 from t3;
|
||||||
|
insert into t3 select c1, c2+2, c3 from t3;
|
||||||
|
analyze table t1,t2,t3 persistent for all;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 analyze status Engine-independent statistics collected
|
||||||
|
test.t1 analyze status OK
|
||||||
|
test.t2 analyze status Engine-independent statistics collected
|
||||||
|
test.t2 analyze status OK
|
||||||
|
test.t3 analyze status Engine-independent statistics collected
|
||||||
|
test.t3 analyze status OK
|
||||||
|
explain select * from t1,t3
|
||||||
|
where t1.c2 = t3.c2 and
|
||||||
|
t1.c1 > 1 and
|
||||||
|
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
|
||||||
|
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||||
|
1 PRIMARY t3 ref idx idx 5 test.t1.c2 3
|
||||||
|
2 MATERIALIZED t2 range idx idx 5 NULL 3 Using index condition; Using where
|
||||||
|
explain delete from t1 using t1,t3
|
||||||
|
where t1.c2 = t3.c2 and
|
||||||
|
t1.c1 > 1 and
|
||||||
|
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
|
||||||
|
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||||
|
1 PRIMARY t3 ref idx idx 5 test.t1.c2 3 Using index
|
||||||
|
2 MATERIALIZED t2 range idx idx 5 NULL 3 Using where
|
||||||
|
explain update t1,t3 set t1.c1 = t1.c1+10
|
||||||
|
where t1.c2 = t3.c2 and
|
||||||
|
t1.c1 > 1 and
|
||||||
|
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
|
||||||
|
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||||
|
1 PRIMARY t3 ref idx idx 5 test.t1.c2 3 Using index
|
||||||
|
2 MATERIALIZED t2 range idx idx 5 NULL 3 Using where
|
||||||
|
create table t as select * from t1;
|
||||||
|
select * from t1,t3
|
||||||
|
where t1.c2 = t3.c2 and
|
||||||
|
t1.c1 > 1 and
|
||||||
|
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||||
|
c1 c2 c3 c1 c2 c3
|
||||||
|
2 1 4 1 1 1
|
||||||
|
2 1 4 2 1 4
|
||||||
|
2 2 5 1 2 2
|
||||||
|
2 2 5 2 2 5
|
||||||
|
2 4 7 2 4 7
|
||||||
|
2 4 7 2 4 2
|
||||||
|
2 4 7 3 4 5
|
||||||
|
2 4 7 1 4 2
|
||||||
|
2 4 7 2 4 5
|
||||||
|
2 5 8 2 5 8
|
||||||
|
2 5 8 2 5 3
|
||||||
|
2 5 8 3 5 6
|
||||||
|
2 5 8 1 5 3
|
||||||
|
2 5 8 2 5 6
|
||||||
|
2 5 8 2 5 1
|
||||||
|
2 5 8 3 5 4
|
||||||
|
select * from t1;
|
||||||
|
c1 c2 c3
|
||||||
|
1 1 1
|
||||||
|
3 2 2
|
||||||
|
1 3 3
|
||||||
|
2 1 4
|
||||||
|
2 2 5
|
||||||
|
4 3 6
|
||||||
|
2 4 7
|
||||||
|
2 5 8
|
||||||
|
delete from t1 using t1,t3
|
||||||
|
where t1.c2 = t3.c2 and
|
||||||
|
t1.c1 > 1 and
|
||||||
|
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||||
|
select * from t1;
|
||||||
|
c1 c2 c3
|
||||||
|
1 1 1
|
||||||
|
3 2 2
|
||||||
|
1 3 3
|
||||||
|
4 3 6
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 select * from t;
|
||||||
|
analyze table t1 persistent for all;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 analyze status Engine-independent statistics collected
|
||||||
|
test.t1 analyze status Table is already up to date
|
||||||
|
update t1,t3 set t1.c1 = t1.c1+10
|
||||||
|
where t1.c2 = t3.c2 and
|
||||||
|
t1.c1 > 1 and
|
||||||
|
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||||
|
select * from t1;
|
||||||
|
c1 c2 c3
|
||||||
|
1 1 1
|
||||||
|
3 2 2
|
||||||
|
1 3 3
|
||||||
|
12 1 4
|
||||||
|
12 2 5
|
||||||
|
4 3 6
|
||||||
|
12 4 7
|
||||||
|
12 5 8
|
||||||
|
drop table t1,t2,t3,t;
|
||||||
|
# End of 10.4 tests
|
||||||
|
@@ -1130,3 +1130,73 @@ EXPLAIN FORMAT=JSON UPDATE t2 JOIN t1 USING(a) SET t2.part=2 WHERE t2.part=1 AND
|
|||||||
EXPLAIN FORMAT=JSON UPDATE t2 JOIN t1 USING(a) SET t2.part=3 WHERE t2.part=2 AND t1.part=2;
|
EXPLAIN FORMAT=JSON UPDATE t2 JOIN t1 USING(a) SET t2.part=3 WHERE t2.part=2 AND t1.part=2;
|
||||||
|
|
||||||
DROP TABLES t1, t2;
|
DROP TABLES t1, t2;
|
||||||
|
|
||||||
|
--echo # End of 10.3 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-28538: multi-table UPDATE/DELETE with possible exists-to-in
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (c1 int, c2 int, c3 int, index idx(c2));
|
||||||
|
insert into t1 values
|
||||||
|
(1,1,1),(3,2,2),(1,3,3),
|
||||||
|
(2,1,4),(2,2,5),(4,3,6),
|
||||||
|
(2,4,7),(2,5,8);
|
||||||
|
|
||||||
|
create table t2 (c1 int, c2 int, c3 int, index idx(c2));
|
||||||
|
insert into t2 values
|
||||||
|
(1,7,1),(1,8,2),(1,3,3),
|
||||||
|
(2,1,4),(2,2,5),(2,3,6),
|
||||||
|
(2,4,7),(2,5,8);
|
||||||
|
|
||||||
|
create table t3 (c1 int, c2 int, c3 int, index idx(c2));
|
||||||
|
insert into t3 values
|
||||||
|
(1,1,1),(1,2,2),(1,3,3),
|
||||||
|
(2,1,4),(2,2,5),(2,3,6),
|
||||||
|
(2,4,7),(2,5,8);
|
||||||
|
insert into t3 select c1+1, c2+2, c3 from t3;
|
||||||
|
insert into t3 select c1, c2+2, c3 from t3;
|
||||||
|
|
||||||
|
analyze table t1,t2,t3 persistent for all;
|
||||||
|
|
||||||
|
let $c=
|
||||||
|
t1.c2 = t3.c2 and
|
||||||
|
t1.c1 > 1 and
|
||||||
|
exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
|
||||||
|
|
||||||
|
let $q1=
|
||||||
|
select * from t1,t3
|
||||||
|
where $c;
|
||||||
|
|
||||||
|
eval explain $q1;
|
||||||
|
|
||||||
|
let $q2=
|
||||||
|
delete from t1 using t1,t3
|
||||||
|
where $c;
|
||||||
|
|
||||||
|
eval explain $q2;
|
||||||
|
|
||||||
|
let $q3=
|
||||||
|
update t1,t3 set t1.c1 = t1.c1+10
|
||||||
|
where $c;
|
||||||
|
|
||||||
|
eval explain $q3;
|
||||||
|
|
||||||
|
create table t as select * from t1;
|
||||||
|
|
||||||
|
eval $q1;
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
eval $q2;
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
truncate table t1;
|
||||||
|
insert into t1 select * from t;
|
||||||
|
analyze table t1 persistent for all;
|
||||||
|
|
||||||
|
eval $q3;
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
drop table t1,t2,t3,t;
|
||||||
|
|
||||||
|
--echo # End of 10.4 tests
|
||||||
|
@@ -76,7 +76,8 @@ rollback;
|
|||||||
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where
|
||||||
2 DEPENDENT SUBQUERY a ALL NULL NULL NULL NULL 8 Using where
|
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||||
|
2 MATERIALIZED a ALL NULL NULL NULL NULL 8
|
||||||
start transaction;
|
start transaction;
|
||||||
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
||||||
affected rows: 4
|
affected rows: 4
|
||||||
@@ -317,7 +318,8 @@ rollback;
|
|||||||
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
||||||
2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 4 Using index
|
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||||
|
2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
|
||||||
start transaction;
|
start transaction;
|
||||||
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
||||||
affected rows: 4
|
affected rows: 4
|
||||||
@@ -558,7 +560,8 @@ rollback;
|
|||||||
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
||||||
2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 1 Using index
|
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||||
|
2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
|
||||||
start transaction;
|
start transaction;
|
||||||
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
||||||
affected rows: 4
|
affected rows: 4
|
||||||
@@ -800,7 +803,8 @@ rollback;
|
|||||||
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
|
||||||
2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 1 Using index
|
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||||
|
2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
|
||||||
start transaction;
|
start transaction;
|
||||||
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
|
||||||
affected rows: 4
|
affected rows: 4
|
||||||
|
@@ -145,6 +145,7 @@ my $opt_start_exit;
|
|||||||
my $start_only;
|
my $start_only;
|
||||||
my $file_wsrep_provider;
|
my $file_wsrep_provider;
|
||||||
my $num_saved_cores= 0; # Number of core files saved in vardir/log/ so far.
|
my $num_saved_cores= 0; # Number of core files saved in vardir/log/ so far.
|
||||||
|
my $test_name_for_report;
|
||||||
|
|
||||||
our @global_suppressions;
|
our @global_suppressions;
|
||||||
|
|
||||||
@@ -515,13 +516,13 @@ sub main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( not @$completed ) {
|
if ( not @$completed ) {
|
||||||
my $test_name= mtr_grab_file($path_testlog);
|
if ($test_name_for_report)
|
||||||
$test_name =~ s/^CURRENT_TEST:\s//;
|
{
|
||||||
chomp($test_name);
|
my $tinfo = My::Test->new(name => $test_name_for_report);
|
||||||
my $tinfo = My::Test->new(name => $test_name);
|
$tinfo->{result}= 'MTR_RES_FAILED';
|
||||||
$tinfo->{result}= 'MTR_RES_FAILED';
|
$tinfo->{comment}=' ';
|
||||||
$tinfo->{comment}=' ';
|
mtr_report_test($tinfo);
|
||||||
mtr_report_test($tinfo);
|
}
|
||||||
mtr_error("Test suite aborted");
|
mtr_error("Test suite aborted");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3740,8 +3741,8 @@ sub resfile_report_test ($) {
|
|||||||
sub run_testcase ($$) {
|
sub run_testcase ($$) {
|
||||||
my ($tinfo, $server_socket)= @_;
|
my ($tinfo, $server_socket)= @_;
|
||||||
my $print_freq=20;
|
my $print_freq=20;
|
||||||
|
$test_name_for_report= $tinfo->{name};
|
||||||
mtr_verbose("Running test:", $tinfo->{name});
|
mtr_verbose("Running test:", $test_name_for_report);
|
||||||
$ENV{'MTR_TEST_NAME'} = $tinfo->{name};
|
$ENV{'MTR_TEST_NAME'} = $tinfo->{name};
|
||||||
resfile_report_test($tinfo) if $opt_resfile;
|
resfile_report_test($tinfo) if $opt_resfile;
|
||||||
|
|
||||||
@@ -5130,12 +5131,10 @@ sub mysqld_start ($$) {
|
|||||||
if (!$rc)
|
if (!$rc)
|
||||||
{
|
{
|
||||||
# Report failure about the last test case before exit
|
# Report failure about the last test case before exit
|
||||||
my $test_name= mtr_grab_file($path_current_testlog);
|
my $tinfo = My::Test->new(name => $test_name_for_report);
|
||||||
$test_name =~ s/^CURRENT_TEST:\s//;
|
|
||||||
my $tinfo = My::Test->new(name => $test_name);
|
|
||||||
$tinfo->{result}= 'MTR_RES_FAILED';
|
$tinfo->{result}= 'MTR_RES_FAILED';
|
||||||
$tinfo->{failures}= 1;
|
$tinfo->{failures}= 1;
|
||||||
$tinfo->{logfile}=get_log_from_proc($mysqld->{'proc'}, $tinfo->{name});
|
$tinfo->{logfile}=get_log_from_proc($mysqld->{'proc'}, $test_name_for_report);
|
||||||
report_option('verbose', 1);
|
report_option('verbose', 1);
|
||||||
mtr_report_test($tinfo);
|
mtr_report_test($tinfo);
|
||||||
}
|
}
|
||||||
|
@@ -1,23 +0,0 @@
|
|||||||
connection node_2;
|
|
||||||
connection node_1;
|
|
||||||
CREATE TABLE t1 (c1 BIGINT NOT NULL PRIMARY KEY, c2 BINARY (10), c3 DATETIME);
|
|
||||||
SELECT get_lock ('test2', 0);
|
|
||||||
get_lock ('test2', 0)
|
|
||||||
1
|
|
||||||
DROP TABLE t1;
|
|
||||||
CREATE TABLE t1 (c1 SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY);
|
|
||||||
INSERT INTO t1 VALUES (1);
|
|
||||||
SET SESSION wsrep_trx_fragment_size=10;
|
|
||||||
SET SESSION autocommit=0;
|
|
||||||
SELECT * FROM t1 WHERE c1 <=0 ORDER BY c1 DESC;
|
|
||||||
c1
|
|
||||||
INSERT INTO t1 VALUES (4),(3),(1),(2);
|
|
||||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
|
||||||
CREATE TABLE t1 (pk INT PRIMARY KEY, b INT) ENGINE=SEQUENCE;
|
|
||||||
ERROR 42S01: Table 't1' already exists
|
|
||||||
ALTER TABLE t1 DROP COLUMN c2;
|
|
||||||
ERROR 42000: Can't DROP COLUMN `c2`; check that it exists
|
|
||||||
SELECT get_lock ('test', 1.5);
|
|
||||||
get_lock ('test', 1.5)
|
|
||||||
1
|
|
||||||
DROP TABLE t1;
|
|
6
mysql-test/suite/galera/r/galera_backup_start.result
Normal file
6
mysql-test/suite/galera/r/galera_backup_start.result
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
connection node_2;
|
||||||
|
connection node_1;
|
||||||
|
BACKUP STAGE START;
|
||||||
|
START TRANSACTION;
|
||||||
|
COMMIT;
|
||||||
|
BACKUP STAGE END;
|
@@ -1,18 +0,0 @@
|
|||||||
connection node_2;
|
|
||||||
connection node_1;
|
|
||||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
|
||||||
connection node_2a;
|
|
||||||
SELECT GET_LOCK("foo", 1000);
|
|
||||||
GET_LOCK("foo", 1000)
|
|
||||||
1
|
|
||||||
connection node_2;
|
|
||||||
SET AUTOCOMMIT=OFF;
|
|
||||||
INSERT INTO t1 VALUES (1);
|
|
||||||
SELECT GET_LOCK("foo", 1000);;
|
|
||||||
connection node_1;
|
|
||||||
INSERT INTO t1 VALUES (1);
|
|
||||||
connection node_2;
|
|
||||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
|
||||||
wsrep_local_aborts_increment
|
|
||||||
1
|
|
||||||
DROP TABLE t1;
|
|
24
mysql-test/suite/galera/r/galera_locks_funcs.result
Normal file
24
mysql-test/suite/galera/r/galera_locks_funcs.result
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
connection node_2;
|
||||||
|
connection node_1;
|
||||||
|
CREATE TABLE t (c DOUBLE,c2 INT,PRIMARY KEY(c)) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t values (1,1);
|
||||||
|
SELECT GET_LOCK('a',1);
|
||||||
|
ERROR 42000: This version of MariaDB doesn't yet support 'GET_LOCK in cluster (WSREP_ON=ON)'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Error 1235 This version of MariaDB doesn't yet support 'GET_LOCK in cluster (WSREP_ON=ON)'
|
||||||
|
SELECT * FROM t;
|
||||||
|
c c2
|
||||||
|
1 1
|
||||||
|
SELECT RELEASE_LOCK('a');
|
||||||
|
ERROR 42000: This version of MariaDB doesn't yet support 'RELEASE_LOCK in cluster (WSREP_ON=ON)'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Error 1235 This version of MariaDB doesn't yet support 'RELEASE_LOCK in cluster (WSREP_ON=ON)'
|
||||||
|
SELECT RELEASE_ALL_LOCKS();
|
||||||
|
ERROR 42000: This version of MariaDB doesn't yet support 'RELEASE_ALL_LOCKS in cluster (WSREP_ON=ON)'
|
||||||
|
SHOW WARNINGS;
|
||||||
|
Level Code Message
|
||||||
|
Error 1235 This version of MariaDB doesn't yet support 'RELEASE_ALL_LOCKS in cluster (WSREP_ON=ON)'
|
||||||
|
COMMIT;
|
||||||
|
DROP TABLE t;
|
@@ -1,20 +0,0 @@
|
|||||||
--source include/galera_cluster.inc
|
|
||||||
--source include/have_sequence.inc
|
|
||||||
|
|
||||||
CREATE TABLE t1 (c1 BIGINT NOT NULL PRIMARY KEY, c2 BINARY (10), c3 DATETIME);
|
|
||||||
SELECT get_lock ('test2', 0);
|
|
||||||
DROP TABLE t1;
|
|
||||||
CREATE TABLE t1 (c1 SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY);
|
|
||||||
INSERT INTO t1 VALUES (1);
|
|
||||||
SET SESSION wsrep_trx_fragment_size=10;
|
|
||||||
SET SESSION autocommit=0;
|
|
||||||
SELECT * FROM t1 WHERE c1 <=0 ORDER BY c1 DESC;
|
|
||||||
--error ER_LOCK_DEADLOCK
|
|
||||||
INSERT INTO t1 VALUES (4),(3),(1),(2);
|
|
||||||
--error ER_TABLE_EXISTS_ERROR
|
|
||||||
CREATE TABLE t1 (pk INT PRIMARY KEY, b INT) ENGINE=SEQUENCE;
|
|
||||||
--error ER_CANT_DROP_FIELD_OR_KEY
|
|
||||||
ALTER TABLE t1 DROP COLUMN c2;
|
|
||||||
SELECT get_lock ('test', 1.5);
|
|
||||||
DROP TABLE t1;
|
|
||||||
|
|
6
mysql-test/suite/galera/t/galera_backup_start.test
Normal file
6
mysql-test/suite/galera/t/galera_backup_start.test
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
--source include/galera_cluster.inc
|
||||||
|
|
||||||
|
BACKUP STAGE START;
|
||||||
|
START TRANSACTION;
|
||||||
|
COMMIT;
|
||||||
|
BACKUP STAGE END;
|
@@ -1,36 +0,0 @@
|
|||||||
--source include/galera_cluster.inc
|
|
||||||
--source include/have_innodb.inc
|
|
||||||
|
|
||||||
#
|
|
||||||
# Test a local transaction being aborted by a slave one while it is running a GET_LOCK()
|
|
||||||
#
|
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
--let $galera_connection_name = node_2a
|
|
||||||
--let $galera_server_number = 2
|
|
||||||
--source include/galera_connect.inc
|
|
||||||
--connection node_2a
|
|
||||||
SELECT GET_LOCK("foo", 1000);
|
|
||||||
|
|
||||||
--connection node_2
|
|
||||||
SET AUTOCOMMIT=OFF;
|
|
||||||
--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
|
|
||||||
INSERT INTO t1 VALUES (1);
|
|
||||||
--send SELECT GET_LOCK("foo", 1000);
|
|
||||||
|
|
||||||
--connection node_1
|
|
||||||
INSERT INTO t1 VALUES (1);
|
|
||||||
|
|
||||||
--connection node_2
|
|
||||||
--error ER_LOCK_DEADLOCK
|
|
||||||
--reap
|
|
||||||
|
|
||||||
--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
|
|
||||||
|
|
||||||
# Check that wsrep_local_bf_aborts has been incremented by exactly 1
|
|
||||||
--disable_query_log
|
|
||||||
--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment;
|
|
||||||
--enable_query_log
|
|
||||||
|
|
||||||
DROP TABLE t1;
|
|
18
mysql-test/suite/galera/t/galera_locks_funcs.test
Normal file
18
mysql-test/suite/galera/t/galera_locks_funcs.test
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
--source include/galera_cluster.inc
|
||||||
|
|
||||||
|
CREATE TABLE t (c DOUBLE,c2 INT,PRIMARY KEY(c)) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t values (1,1);
|
||||||
|
--error ER_NOT_SUPPORTED_YET
|
||||||
|
SELECT GET_LOCK('a',1);
|
||||||
|
SHOW WARNINGS;
|
||||||
|
SELECT * FROM t;
|
||||||
|
--error ER_NOT_SUPPORTED_YET
|
||||||
|
SELECT RELEASE_LOCK('a');
|
||||||
|
SHOW WARNINGS;
|
||||||
|
# New in 10.5
|
||||||
|
--error ER_NOT_SUPPORTED_YET
|
||||||
|
SELECT RELEASE_ALL_LOCKS();
|
||||||
|
SHOW WARNINGS;
|
||||||
|
COMMIT;
|
||||||
|
DROP TABLE t;
|
||||||
|
|
@@ -51,7 +51,7 @@ ADD INDEX(a,b,d), ADD INDEX(a,d,b), ADD INDEX(b,c,d), ADD INDEX(b,d,c),
|
|||||||
ALGORITHM=COPY;
|
ALGORITHM=COPY;
|
||||||
connection default;
|
connection default;
|
||||||
SET DEBUG_SYNC='now WAIT_FOR hung';
|
SET DEBUG_SYNC='now WAIT_FOR hung';
|
||||||
# restart: --innodb-force-recovery=3
|
# restart: --innodb-force-recovery=3 --debug_dbug=+d,recv_ran_out_of_buffer
|
||||||
disconnect hang;
|
disconnect hang;
|
||||||
FTS_INDEX_1.ibd
|
FTS_INDEX_1.ibd
|
||||||
FTS_INDEX_2.ibd
|
FTS_INDEX_2.ibd
|
||||||
|
@@ -405,3 +405,21 @@ nb_corrupted_rows
|
|||||||
0
|
0
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# End of 10.7 tests
|
# End of 10.7 tests
|
||||||
|
#
|
||||||
|
# MDEV-30426 Assertion !rec_offs_nth_extern(offsets2, n)
|
||||||
|
# during bulk insert
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(f1 TEXT NOT NULL, f2 TEXT NOT NULL,
|
||||||
|
f3 TEXT NOT NULL, f4 TEXT NOT NULL,
|
||||||
|
f5 TEXT NOT NULL, f6 TEXT NOT NULL,
|
||||||
|
PRIMARY KEY(f6(10)))ENGINE=InnoDB;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(repeat('a', 200), repeat('b', 200), repeat('c', 200),
|
||||||
|
repeat('d', 200), repeat('e', 200), repeat('f', 200)),
|
||||||
|
(repeat('b', 20000), repeat('c', 16000), repeat('d', 12000),
|
||||||
|
repeat('e', 12000), repeat('f', 12000), repeat('f', 12000));
|
||||||
|
ERROR HY000: Got error 1 "Operation not permitted" during COMMIT
|
||||||
|
COMMIT;
|
||||||
|
DROP TABLE t1;
|
||||||
|
# End of 10.8 tests
|
||||||
|
@@ -31,11 +31,12 @@ pk f1 f2 f3
|
|||||||
3 t q 1
|
3 t q 1
|
||||||
5 z t NULL
|
5 z t NULL
|
||||||
SET DEBUG_SYNC='now SIGNAL default_dml';
|
SET DEBUG_SYNC='now SIGNAL default_dml';
|
||||||
|
SET DEBUG_SYNC='now SIGNAL con2_dml';
|
||||||
connection default;
|
connection default;
|
||||||
SET DEBUG_SYNC='now WAIT_FOR default_dml';
|
SET DEBUG_SYNC='now WAIT_FOR default_dml';
|
||||||
UPDATE t3 AS alias1 LEFT JOIN t3 AS alias2 ON ( alias1.f1 <> alias1.f2 ) SET alias1.f3 = 59 WHERE ( EXISTS ( SELECT t1.f3 FROM t1 WHERE t1.f1 = alias1.f1 ) ) OR alias2.f1 = 'h';
|
UPDATE t3 AS alias1 LEFT JOIN t3 AS alias2 ON ( alias1.f1 <> alias1.f2 ) SET alias1.f3 = 59 WHERE ( EXISTS ( SELECT t1.f3 FROM t1 WHERE t1.f1 = alias1.f1 ) ) OR alias2.f1 = 'h';
|
||||||
connect con2,localhost,root,,test;
|
connect con2,localhost,root,,test;
|
||||||
set debug_sync='now WAIT_FOR default_dml';
|
set debug_sync='now WAIT_FOR con2_dml';
|
||||||
SET DEBUG_SYNC='now SIGNAL con1_dml2';
|
SET DEBUG_SYNC='now SIGNAL con1_dml2';
|
||||||
disconnect con2;
|
disconnect con2;
|
||||||
connection con1;
|
connection con1;
|
||||||
|
@@ -1,3 +1,7 @@
|
|||||||
|
call mtr.add_suppression("InnoDB: The change buffer is corrupted");
|
||||||
|
call mtr.add_suppression("InnoDB: Plugin initialization aborted at srv0start.cc");
|
||||||
|
call mtr.add_suppression("Plugin 'InnoDB' init function returned error");
|
||||||
|
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
|
||||||
CREATE TABLE t1(c TEXT, KEY(c(3072)))ENGINE=InnoDB;
|
CREATE TABLE t1(c TEXT, KEY(c(3072)))ENGINE=InnoDB;
|
||||||
CREATE PROCEDURE dorepeat()
|
CREATE PROCEDURE dorepeat()
|
||||||
LOOP
|
LOOP
|
||||||
@@ -10,3 +14,19 @@ CALL dorepeat();
|
|||||||
connection default;
|
connection default;
|
||||||
# restart: --innodb_buffer_pool_size=5242880
|
# restart: --innodb_buffer_pool_size=5242880
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
DROP PROCEDURE dorepeat;
|
||||||
|
#
|
||||||
|
# MDEV-30552 InnoDB recovery crashes when error
|
||||||
|
# handling scenario
|
||||||
|
#
|
||||||
|
SET DEBUG_DBUG="+d,ib_log_checkpoint_avoid_hard";
|
||||||
|
CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 SELECT * FROM seq_1_to_65536;
|
||||||
|
# restart: with restart_parameters
|
||||||
|
# restart
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`f1` int(11) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -57,7 +57,7 @@ ALTER TABLE t ADD INDEX(b,c,d,a),ADD INDEX(b,c,a,d),ADD INDEX(b,a,c,d),ADD INDEX
|
|||||||
connection default;
|
connection default;
|
||||||
SET DEBUG_SYNC='now WAIT_FOR hung';
|
SET DEBUG_SYNC='now WAIT_FOR hung';
|
||||||
let $shutdown_timeout=0;
|
let $shutdown_timeout=0;
|
||||||
--let $restart_parameters= --innodb-force-recovery=3
|
--let $restart_parameters= --innodb-force-recovery=3 --debug_dbug="+d,recv_ran_out_of_buffer"
|
||||||
--source include/restart_mysqld.inc
|
--source include/restart_mysqld.inc
|
||||||
disconnect hang;
|
disconnect hang;
|
||||||
let $shutdown_timeout=;
|
let $shutdown_timeout=;
|
||||||
|
1
mysql-test/suite/innodb/t/insert_into_empty.opt
Normal file
1
mysql-test/suite/innodb/t/insert_into_empty.opt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
--innodb_sort_buffer_size=65536
|
@@ -424,3 +424,22 @@ SELECT COUNT(*) AS nb_corrupted_rows FROM t1 WHERE data != REPEAT('X', @@innodb_
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo # End of 10.7 tests
|
--echo # End of 10.7 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30426 Assertion !rec_offs_nth_extern(offsets2, n)
|
||||||
|
--echo # during bulk insert
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(f1 TEXT NOT NULL, f2 TEXT NOT NULL,
|
||||||
|
f3 TEXT NOT NULL, f4 TEXT NOT NULL,
|
||||||
|
f5 TEXT NOT NULL, f6 TEXT NOT NULL,
|
||||||
|
PRIMARY KEY(f6(10)))ENGINE=InnoDB;
|
||||||
|
BEGIN;
|
||||||
|
--error ER_ERROR_DURING_COMMIT
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(repeat('a', 200), repeat('b', 200), repeat('c', 200),
|
||||||
|
repeat('d', 200), repeat('e', 200), repeat('f', 200)),
|
||||||
|
(repeat('b', 20000), repeat('c', 16000), repeat('d', 12000),
|
||||||
|
repeat('e', 12000), repeat('f', 12000), repeat('f', 12000));
|
||||||
|
COMMIT;
|
||||||
|
DROP TABLE t1;
|
||||||
|
--echo # End of 10.8 tests
|
||||||
|
@@ -35,6 +35,7 @@ SET DEBUG_SYNC='now WAIT_FOR con1_dml';
|
|||||||
begin;
|
begin;
|
||||||
SELECT * FROM t1 for update; # Holds x lock of all records in the table t1
|
SELECT * FROM t1 for update; # Holds x lock of all records in the table t1
|
||||||
SET DEBUG_SYNC='now SIGNAL default_dml';
|
SET DEBUG_SYNC='now SIGNAL default_dml';
|
||||||
|
SET DEBUG_SYNC='now SIGNAL con2_dml';
|
||||||
|
|
||||||
--connection default
|
--connection default
|
||||||
SET DEBUG_SYNC='now WAIT_FOR default_dml';
|
SET DEBUG_SYNC='now WAIT_FOR default_dml';
|
||||||
@@ -42,7 +43,7 @@ SET DEBUG_SYNC='now WAIT_FOR default_dml';
|
|||||||
# It holds the lock of all record in t3 and tries to acquire record lock for the table t1.
|
# It holds the lock of all record in t3 and tries to acquire record lock for the table t1.
|
||||||
|
|
||||||
--connect (con2,localhost,root,,test)
|
--connect (con2,localhost,root,,test)
|
||||||
set debug_sync='now WAIT_FOR default_dml';
|
set debug_sync='now WAIT_FOR con2_dml';
|
||||||
let $wait_condition=
|
let $wait_condition=
|
||||||
select count(*) > 0 from information_schema.innodb_lock_waits;
|
select count(*) > 0 from information_schema.innodb_lock_waits;
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
@@ -1,5 +1,11 @@
|
|||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/big_test.inc
|
--source include/big_test.inc
|
||||||
|
--source include/have_sequence.inc
|
||||||
|
--source include/maybe_debug.inc
|
||||||
|
call mtr.add_suppression("InnoDB: The change buffer is corrupted");
|
||||||
|
call mtr.add_suppression("InnoDB: Plugin initialization aborted at srv0start.cc");
|
||||||
|
call mtr.add_suppression("Plugin 'InnoDB' init function returned error");
|
||||||
|
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
|
||||||
CREATE TABLE t1(c TEXT, KEY(c(3072)))ENGINE=InnoDB;
|
CREATE TABLE t1(c TEXT, KEY(c(3072)))ENGINE=InnoDB;
|
||||||
DELIMITER |;
|
DELIMITER |;
|
||||||
|
|
||||||
@@ -19,3 +25,27 @@ let $shutdown_timeout=0;
|
|||||||
let $restart_parameters=--innodb_buffer_pool_size=5242880;
|
let $restart_parameters=--innodb_buffer_pool_size=5242880;
|
||||||
--source include/restart_mysqld.inc
|
--source include/restart_mysqld.inc
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
DROP PROCEDURE dorepeat;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30552 InnoDB recovery crashes when error
|
||||||
|
--echo # handling scenario
|
||||||
|
--echo #
|
||||||
|
if ($have_debug) {
|
||||||
|
SET DEBUG_DBUG="+d,ib_log_checkpoint_avoid_hard";
|
||||||
|
let $restart_parameters=--innodb_buffer_pool_size=5242880 --debug_dbug="+d,ibuf_init_corrupt";
|
||||||
|
}
|
||||||
|
if (!$have_debug) {
|
||||||
|
--echo SET DEBUG_DBUG="+d,ib_log_checkpoint_avoid_hard";
|
||||||
|
let $restart_parameters=--innodb_buffer_pool_size=5242880;
|
||||||
|
}
|
||||||
|
CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 SELECT * FROM seq_1_to_65536;
|
||||||
|
let $restart_noprint=1;
|
||||||
|
let $shutdown_timeout=0;
|
||||||
|
--source include/restart_mysqld.inc
|
||||||
|
let $restart_noprint=0;
|
||||||
|
let $restart_parameters=;
|
||||||
|
--source include/restart_mysqld.inc
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
12
mysql-test/suite/mariabackup/full_backup_win.result
Normal file
12
mysql-test/suite/mariabackup/full_backup_win.result
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#
|
||||||
|
# MDEV-30492 Crash when use mariabackup.exe with config 'innodb_flush_method=async_unbuffered'
|
||||||
|
#
|
||||||
|
# xtrabackup backup
|
||||||
|
# xtrabackup prepare
|
||||||
|
# shutdown server
|
||||||
|
# remove datadir
|
||||||
|
# xtrabackup move back
|
||||||
|
# restart
|
||||||
|
#
|
||||||
|
# End of 10.4 tests
|
||||||
|
#
|
24
mysql-test/suite/mariabackup/full_backup_win.test
Normal file
24
mysql-test/suite/mariabackup/full_backup_win.test
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
--source include/windows.inc
|
||||||
|
|
||||||
|
let $targetdir=$MYSQLTEST_VARDIR/tmp/backup;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30492 Crash when use mariabackup.exe with config 'innodb_flush_method=async_unbuffered'
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
echo # xtrabackup backup;
|
||||||
|
--disable_result_log
|
||||||
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --innodb_flush_method=normal --backup --target-dir=$targetdir;
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
echo # xtrabackup prepare;
|
||||||
|
--disable_result_log
|
||||||
|
exec $XTRABACKUP --prepare --innodb-flush-method=async_unbuffered --target-dir=$targetdir;
|
||||||
|
-- source include/restart_and_restore.inc
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
rmdir $targetdir;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.4 tests
|
||||||
|
--echo #
|
@@ -1,3 +1,4 @@
|
|||||||
|
SET names utf8;
|
||||||
select * from information_schema.locales;
|
select * from information_schema.locales;
|
||||||
ID NAME DESCRIPTION MAX_MONTH_NAME_LENGTH MAX_DAY_NAME_LENGTH DECIMAL_POINT THOUSAND_SEP ERROR_MESSAGE_LANGUAGE
|
ID NAME DESCRIPTION MAX_MONTH_NAME_LENGTH MAX_DAY_NAME_LENGTH DECIMAL_POINT THOUSAND_SEP ERROR_MESSAGE_LANGUAGE
|
||||||
0 en_US English - United States 9 9 . , english
|
0 en_US English - United States 9 9 . , english
|
||||||
@@ -52,7 +53,7 @@ ID NAME DESCRIPTION MAX_MONTH_NAME_LENGTH MAX_DAY_NAME_LENGTH DECIMAL_POINT THOU
|
|||||||
49 ta_IN Tamil - India 10 8 . , english
|
49 ta_IN Tamil - India 10 8 . , english
|
||||||
50 te_IN Telugu - India 10 9 . , english
|
50 te_IN Telugu - India 10 9 . , english
|
||||||
51 th_TH Thai - Thailand 10 8 . , english
|
51 th_TH Thai - Thailand 10 8 . , english
|
||||||
52 tr_TR Turkish - Turkey 7 9 , . english
|
52 tr_TR Turkish - Türkiye 7 9 , . english
|
||||||
53 uk_UA Ukrainian - Ukraine 8 9 , . ukrainian
|
53 uk_UA Ukrainian - Ukraine 8 9 , . ukrainian
|
||||||
54 ur_PK Urdu - Pakistan 6 6 . , english
|
54 ur_PK Urdu - Pakistan 6 6 . , english
|
||||||
55 vi_VN Vietnamese - Vietnam 16 11 , . english
|
55 vi_VN Vietnamese - Vietnam 16 11 , . english
|
||||||
@@ -165,7 +166,7 @@ Id Name Description Error_Message_Language
|
|||||||
49 ta_IN Tamil - India english
|
49 ta_IN Tamil - India english
|
||||||
50 te_IN Telugu - India english
|
50 te_IN Telugu - India english
|
||||||
51 th_TH Thai - Thailand english
|
51 th_TH Thai - Thailand english
|
||||||
52 tr_TR Turkish - Turkey english
|
52 tr_TR Turkish - Türkiye english
|
||||||
53 uk_UA Ukrainian - Ukraine ukrainian
|
53 uk_UA Ukrainian - Ukraine ukrainian
|
||||||
54 ur_PK Urdu - Pakistan english
|
54 ur_PK Urdu - Pakistan english
|
||||||
55 vi_VN Vietnamese - Vietnam english
|
55 vi_VN Vietnamese - Vietnam english
|
||||||
|
@@ -2,6 +2,7 @@ if (`select count(*) = 0 from information_schema.plugins where plugin_name = 'lo
|
|||||||
{
|
{
|
||||||
--skip LOCALES plugin is not active
|
--skip LOCALES plugin is not active
|
||||||
}
|
}
|
||||||
|
SET names utf8;
|
||||||
|
|
||||||
select * from information_schema.locales;
|
select * from information_schema.locales;
|
||||||
show locales;
|
show locales;
|
||||||
|
@@ -35,9 +35,19 @@ connection master;
|
|||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
# Sleep 3 to create gap between events
|
# Sleep 3 to create gap between events
|
||||||
insert into t1 values (2);
|
insert into t1 values (2);
|
||||||
|
include/save_master_pos.inc
|
||||||
connection slave;
|
connection slave;
|
||||||
LOCK TABLES t1 WRITE;
|
LOCK TABLES t1 WRITE;
|
||||||
|
SET @@global.debug_dbug="+d,pause_sql_thread_on_next_event";
|
||||||
START SLAVE IO_THREAD;
|
START SLAVE IO_THREAD;
|
||||||
|
# Before we start processing the events, we ensure both transactions
|
||||||
|
# were written into the relay log. Otherwise, if the IO thread takes too
|
||||||
|
# long to queue the events, the sql thread can think it has caught up
|
||||||
|
# too quickly.
|
||||||
|
SET DEBUG_SYNC='now WAIT_FOR paused_on_event';
|
||||||
|
include/sync_io_with_master.inc
|
||||||
|
SET @@global.debug_dbug="-d,pause_sql_thread_on_next_event";
|
||||||
|
SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
|
||||||
# Wait for first transaction to complete SQL delay and begin execution..
|
# Wait for first transaction to complete SQL delay and begin execution..
|
||||||
# Validate SBM calculation doesn't use the second transaction because SQL thread shouldn't have gone idle..
|
# Validate SBM calculation doesn't use the second transaction because SQL thread shouldn't have gone idle..
|
||||||
# ..and that SBM wasn't calculated using prior committed transactions
|
# ..and that SBM wasn't calculated using prior committed transactions
|
||||||
@@ -50,6 +60,8 @@ UNLOCK TABLES;
|
|||||||
include/stop_slave.inc
|
include/stop_slave.inc
|
||||||
CHANGE MASTER TO master_delay=0;
|
CHANGE MASTER TO master_delay=0;
|
||||||
set @@GLOBAL.slave_parallel_threads=4;
|
set @@GLOBAL.slave_parallel_threads=4;
|
||||||
|
SET @@global.debug_dbug="";
|
||||||
|
SET DEBUG_SYNC='RESET';
|
||||||
include/start_slave.inc
|
include/start_slave.inc
|
||||||
connection master;
|
connection master;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@@ -12,9 +12,12 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_debug_sync.inc
|
||||||
|
|
||||||
--connection slave
|
--connection slave
|
||||||
--source include/stop_slave.inc
|
--source include/stop_slave.inc
|
||||||
|
--let $old_debug_dbug= `SELECT @@global.debug_dbug`
|
||||||
--let $master_delay= 3
|
--let $master_delay= 3
|
||||||
--eval change master to master_delay=$master_delay, master_use_gtid=Slave_Pos
|
--eval change master to master_delay=$master_delay, master_use_gtid=Slave_Pos
|
||||||
--let $old_slave_threads= `SELECT @@GLOBAL.slave_parallel_threads`
|
--let $old_slave_threads= `SELECT @@GLOBAL.slave_parallel_threads`
|
||||||
@@ -82,12 +85,24 @@ sleep 3;
|
|||||||
--eval insert into t1 values ($insert_ctr)
|
--eval insert into t1 values ($insert_ctr)
|
||||||
--inc $insert_ctr
|
--inc $insert_ctr
|
||||||
--let $ts_trx_after_ins= `SELECT UNIX_TIMESTAMP()`
|
--let $ts_trx_after_ins= `SELECT UNIX_TIMESTAMP()`
|
||||||
|
--source include/save_master_pos.inc
|
||||||
|
|
||||||
--connection slave
|
--connection slave
|
||||||
LOCK TABLES t1 WRITE;
|
LOCK TABLES t1 WRITE;
|
||||||
|
|
||||||
|
SET @@global.debug_dbug="+d,pause_sql_thread_on_next_event";
|
||||||
|
|
||||||
START SLAVE IO_THREAD;
|
START SLAVE IO_THREAD;
|
||||||
|
|
||||||
|
--echo # Before we start processing the events, we ensure both transactions
|
||||||
|
--echo # were written into the relay log. Otherwise, if the IO thread takes too
|
||||||
|
--echo # long to queue the events, the sql thread can think it has caught up
|
||||||
|
--echo # too quickly.
|
||||||
|
SET DEBUG_SYNC='now WAIT_FOR paused_on_event';
|
||||||
|
--source include/sync_io_with_master.inc
|
||||||
|
SET @@global.debug_dbug="-d,pause_sql_thread_on_next_event";
|
||||||
|
SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
|
||||||
|
|
||||||
--echo # Wait for first transaction to complete SQL delay and begin execution..
|
--echo # Wait for first transaction to complete SQL delay and begin execution..
|
||||||
--let $wait_condition= SELECT count(*) FROM information_schema.processlist WHERE state LIKE 'Waiting for table metadata lock%' AND command LIKE 'Slave_Worker';
|
--let $wait_condition= SELECT count(*) FROM information_schema.processlist WHERE state LIKE 'Waiting for table metadata lock%' AND command LIKE 'Slave_Worker';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
@@ -120,6 +135,8 @@ UNLOCK TABLES;
|
|||||||
--source include/stop_slave.inc
|
--source include/stop_slave.inc
|
||||||
--eval CHANGE MASTER TO master_delay=0
|
--eval CHANGE MASTER TO master_delay=0
|
||||||
--eval set @@GLOBAL.slave_parallel_threads=$old_slave_threads
|
--eval set @@GLOBAL.slave_parallel_threads=$old_slave_threads
|
||||||
|
--eval SET @@global.debug_dbug="$old_debug_dbug"
|
||||||
|
SET DEBUG_SYNC='RESET';
|
||||||
--source include/start_slave.inc
|
--source include/start_slave.inc
|
||||||
|
|
||||||
--connection master
|
--connection master
|
||||||
|
@@ -19,11 +19,12 @@ a b c
|
|||||||
1 NULL NULL
|
1 NULL NULL
|
||||||
set debug_sync='now SIGNAL go';
|
set debug_sync='now SIGNAL go';
|
||||||
set debug_sync='now WAIT_FOR parked2';
|
set debug_sync='now WAIT_FOR parked2';
|
||||||
set debug_sync='before_wait_for_refs SIGNAL waiting WAIT_FOR go2';
|
set debug_sync='before_wait_for_refs SIGNAL waiting WAIT_FOR go3';
|
||||||
drop table t1;;
|
drop table t1;;
|
||||||
connection con2;
|
connection con2;
|
||||||
set debug_sync='now WAIT_FOR waiting';
|
set debug_sync='now WAIT_FOR waiting';
|
||||||
set debug_sync='now SIGNAL go2';
|
set debug_sync='now SIGNAL go2';
|
||||||
|
set debug_sync='now SIGNAL go3';
|
||||||
connection default;
|
connection default;
|
||||||
connection con1;
|
connection con1;
|
||||||
connection default;
|
connection default;
|
||||||
|
@@ -20,15 +20,12 @@ set debug_sync='now WAIT_FOR parked';
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
set debug_sync='now SIGNAL go';
|
set debug_sync='now SIGNAL go';
|
||||||
set debug_sync='now WAIT_FOR parked2';
|
set debug_sync='now WAIT_FOR parked2';
|
||||||
set debug_sync='before_wait_for_refs SIGNAL waiting WAIT_FOR go2';
|
set debug_sync='before_wait_for_refs SIGNAL waiting WAIT_FOR go3';
|
||||||
--send drop table t1;
|
--send drop table t1;
|
||||||
--connection con2
|
--connection con2
|
||||||
set debug_sync='now WAIT_FOR waiting';
|
set debug_sync='now WAIT_FOR waiting';
|
||||||
set debug_sync='now SIGNAL go2';
|
set debug_sync='now SIGNAL go2';
|
||||||
|
set debug_sync='now SIGNAL go3';
|
||||||
# Write out show processlist if the debug sync point times out
|
|
||||||
let $wait_condition= select count(*)=0 from information_schema.processlist where state like "%debug%";
|
|
||||||
source include/wait_condition.inc;
|
|
||||||
|
|
||||||
--connection default
|
--connection default
|
||||||
--reap
|
--reap
|
||||||
|
@@ -2,17 +2,17 @@ select @@global.debug_sync;
|
|||||||
ERROR HY000: Variable 'debug_sync' is a SESSION variable
|
ERROR HY000: Variable 'debug_sync' is a SESSION variable
|
||||||
select @@session.debug_sync;
|
select @@session.debug_sync;
|
||||||
@@session.debug_sync
|
@@session.debug_sync
|
||||||
ON - current signal: ''
|
ON - current signals: ''
|
||||||
show global variables like "debug_sync";
|
show global variables like "debug_sync";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
show session variables like "debug_sync";
|
show session variables like "debug_sync";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
debug_sync ON - current signal: ''
|
debug_sync ON - current signals: ''
|
||||||
select * from information_schema.global_variables where variable_name="debug_sync";
|
select * from information_schema.global_variables where variable_name="debug_sync";
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
select * from information_schema.session_variables where variable_name="debug_sync";
|
select * from information_schema.session_variables where variable_name="debug_sync";
|
||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
DEBUG_SYNC ON - current signal: ''
|
DEBUG_SYNC ON - current signals: ''
|
||||||
set @@session.debug_sync=1;
|
set @@session.debug_sync=1;
|
||||||
ERROR 42000: Incorrect argument type to variable 'debug_sync'
|
ERROR 42000: Incorrect argument type to variable 'debug_sync'
|
||||||
set @@session.debug_sync=1.1;
|
set @@session.debug_sync=1.1;
|
||||||
|
@@ -77,7 +77,7 @@ READ_ONLY YES
|
|||||||
COMMAND_LINE_ARGUMENT OPTIONAL
|
COMMAND_LINE_ARGUMENT OPTIONAL
|
||||||
GLOBAL_VALUE_PATH NULL
|
GLOBAL_VALUE_PATH NULL
|
||||||
VARIABLE_NAME DEBUG_SYNC
|
VARIABLE_NAME DEBUG_SYNC
|
||||||
SESSION_VALUE ON - current signal: ''
|
SESSION_VALUE ON - current signals: ''
|
||||||
GLOBAL_VALUE NULL
|
GLOBAL_VALUE NULL
|
||||||
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
||||||
DEFAULT_VALUE
|
DEFAULT_VALUE
|
||||||
|
@@ -393,6 +393,8 @@ static int add_collation(struct charset_info_st *cs)
|
|||||||
&my_charset_utf8mb4_unicode_ci,
|
&my_charset_utf8mb4_unicode_ci,
|
||||||
cs);
|
cs);
|
||||||
newcs->m_ctype= my_charset_utf8mb4_unicode_ci.m_ctype;
|
newcs->m_ctype= my_charset_utf8mb4_unicode_ci.m_ctype;
|
||||||
|
if (init_state_maps(newcs))
|
||||||
|
return MY_XML_ERROR;
|
||||||
newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED;
|
newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -376,7 +376,7 @@ uchar *my_large_malloc(size_t *size, myf my_flags)
|
|||||||
ptr= NULL;
|
ptr= NULL;
|
||||||
if (my_flags & MY_WME)
|
if (my_flags & MY_WME)
|
||||||
{
|
{
|
||||||
if (large_page_size)
|
if (large_page_size && errno == ENOMEM)
|
||||||
{
|
{
|
||||||
my_printf_error(EE_OUTOFMEMORY,
|
my_printf_error(EE_OUTOFMEMORY,
|
||||||
"Couldn't allocate %zu bytes (Large/HugeTLB memory "
|
"Couldn't allocate %zu bytes (Large/HugeTLB memory "
|
||||||
|
@@ -34,6 +34,9 @@
|
|||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_gcov
|
||||||
|
#include <gcov.h>
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
Default handler for printing stacktrace
|
Default handler for printing stacktrace
|
||||||
*/
|
*/
|
||||||
@@ -409,9 +412,6 @@ end:
|
|||||||
/* Produce a core for the thread */
|
/* Produce a core for the thread */
|
||||||
void my_write_core(int sig)
|
void my_write_core(int sig)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_gcov
|
|
||||||
extern void __gcov_flush(void);
|
|
||||||
#endif
|
|
||||||
signal(sig, SIG_DFL);
|
signal(sig, SIG_DFL);
|
||||||
#ifdef HAVE_gcov
|
#ifdef HAVE_gcov
|
||||||
/*
|
/*
|
||||||
@@ -419,7 +419,7 @@ void my_write_core(int sig)
|
|||||||
information from this process, causing gcov output to be incomplete.
|
information from this process, causing gcov output to be incomplete.
|
||||||
So we force the writing of coverage information here before terminating.
|
So we force the writing of coverage information here before terminating.
|
||||||
*/
|
*/
|
||||||
__gcov_flush();
|
__gcov_dump();
|
||||||
#endif
|
#endif
|
||||||
pthread_kill(pthread_self(), sig);
|
pthread_kill(pthread_self(), sig);
|
||||||
#if defined(P_MYID) && !defined(SCO)
|
#if defined(P_MYID) && !defined(SCO)
|
||||||
|
@@ -101,7 +101,7 @@ public:
|
|||||||
uchar source_tail[MY_AES_BLOCK_SIZE];
|
uchar source_tail[MY_AES_BLOCK_SIZE];
|
||||||
|
|
||||||
MyCTX_nopad() : MyCTX() { }
|
MyCTX_nopad() : MyCTX() { }
|
||||||
~MyCTX_nopad() { }
|
~MyCTX_nopad() = default;
|
||||||
|
|
||||||
int init(const EVP_CIPHER *cipher, int encrypt, const uchar *key, uint klen,
|
int init(const EVP_CIPHER *cipher, int encrypt, const uchar *key, uint klen,
|
||||||
const uchar *iv, uint ivlen)
|
const uchar *iv, uint ivlen)
|
||||||
|
@@ -189,9 +189,7 @@ database::database(const config& c)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
database::~database()
|
database::~database() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
dbcontext_ptr
|
dbcontext_ptr
|
||||||
database::create_context(bool for_write) volatile
|
database::create_context(bool for_write) volatile
|
||||||
@@ -226,9 +224,7 @@ dbcontext::dbcontext(volatile database *d, bool for_write)
|
|||||||
user_level_lock_timeout = d->get_conf().get_int("wrlock_timeout", 12);
|
user_level_lock_timeout = d->get_conf().get_int("wrlock_timeout", 12);
|
||||||
}
|
}
|
||||||
|
|
||||||
dbcontext::~dbcontext()
|
dbcontext::~dbcontext() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@@ -27,7 +27,7 @@ struct dbcontext_i;
|
|||||||
typedef std::auto_ptr<dbcontext_i> dbcontext_ptr;
|
typedef std::auto_ptr<dbcontext_i> dbcontext_ptr;
|
||||||
|
|
||||||
struct database_i {
|
struct database_i {
|
||||||
virtual ~database_i() { }
|
virtual ~database_i() = default;
|
||||||
virtual dbcontext_ptr create_context(bool for_write) volatile = 0;
|
virtual dbcontext_ptr create_context(bool for_write) volatile = 0;
|
||||||
virtual void stop() volatile = 0;
|
virtual void stop() volatile = 0;
|
||||||
virtual const config& get_conf() const volatile = 0;
|
virtual const config& get_conf() const volatile = 0;
|
||||||
@@ -57,7 +57,7 @@ struct prep_stmt {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct dbcallback_i {
|
struct dbcallback_i {
|
||||||
virtual ~dbcallback_i () { }
|
virtual ~dbcallback_i() = default;
|
||||||
virtual void dbcb_set_prep_stmt(size_t pst_id, const prep_stmt& v) = 0;
|
virtual void dbcb_set_prep_stmt(size_t pst_id, const prep_stmt& v) = 0;
|
||||||
virtual const prep_stmt *dbcb_get_prep_stmt(size_t pst_id) const = 0;
|
virtual const prep_stmt *dbcb_get_prep_stmt(size_t pst_id) const = 0;
|
||||||
virtual void dbcb_resp_short(uint32_t code, const char *msg) = 0;
|
virtual void dbcb_resp_short(uint32_t code, const char *msg) = 0;
|
||||||
@@ -111,7 +111,7 @@ struct cmd_exec_args {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct dbcontext_i {
|
struct dbcontext_i {
|
||||||
virtual ~dbcontext_i() { }
|
virtual ~dbcontext_i() = default;
|
||||||
virtual void init_thread(const void *stack_bottom,
|
virtual void init_thread(const void *stack_bottom,
|
||||||
volatile int& shutdown_flag) = 0;
|
volatile int& shutdown_flag) = 0;
|
||||||
virtual void term_thread() = 0;
|
virtual void term_thread() = 0;
|
||||||
|
@@ -47,7 +47,7 @@ struct hstcpsvr_i;
|
|||||||
typedef std::auto_ptr<hstcpsvr_i> hstcpsvr_ptr;
|
typedef std::auto_ptr<hstcpsvr_i> hstcpsvr_ptr;
|
||||||
|
|
||||||
struct hstcpsvr_i {
|
struct hstcpsvr_i {
|
||||||
virtual ~hstcpsvr_i() { }
|
virtual ~hstcpsvr_i() = default;
|
||||||
virtual std::string start_listen() = 0;
|
virtual std::string start_listen() = 0;
|
||||||
static hstcpsvr_ptr create(const config& conf);
|
static hstcpsvr_ptr create(const config& conf);
|
||||||
};
|
};
|
||||||
|
@@ -24,7 +24,7 @@ struct hstcpsvr_worker_arg {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct hstcpsvr_worker_i {
|
struct hstcpsvr_worker_i {
|
||||||
virtual ~hstcpsvr_worker_i() { }
|
virtual ~hstcpsvr_worker_i() = default;
|
||||||
virtual void run() = 0;
|
virtual void run() = 0;
|
||||||
static hstcpsvr_worker_ptr create(const hstcpsvr_worker_arg& arg);
|
static hstcpsvr_worker_ptr create(const hstcpsvr_worker_arg& arg);
|
||||||
};
|
};
|
||||||
|
@@ -33,7 +33,7 @@ struct hstcpcli_i;
|
|||||||
typedef std::auto_ptr<hstcpcli_i> hstcpcli_ptr;
|
typedef std::auto_ptr<hstcpcli_i> hstcpcli_ptr;
|
||||||
|
|
||||||
struct hstcpcli_i {
|
struct hstcpcli_i {
|
||||||
virtual ~hstcpcli_i() { }
|
virtual ~hstcpcli_i() = default;
|
||||||
virtual void close() = 0;
|
virtual void close() = 0;
|
||||||
virtual int reconnect() = 0;
|
virtual int reconnect() = 0;
|
||||||
virtual bool stable_point() = 0;
|
virtual bool stable_point() = 0;
|
||||||
|
@@ -13,7 +13,7 @@ namespace dena {
|
|||||||
|
|
||||||
/* boost::noncopyable */
|
/* boost::noncopyable */
|
||||||
struct noncopyable {
|
struct noncopyable {
|
||||||
noncopyable() { }
|
noncopyable() = default;
|
||||||
private:
|
private:
|
||||||
noncopyable(const noncopyable&);
|
noncopyable(const noncopyable&);
|
||||||
noncopyable& operator =(const noncopyable&);
|
noncopyable& operator =(const noncopyable&);
|
||||||
|
@@ -153,7 +153,7 @@ class time_collector
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
time_collector(utility& u): m_utility(&u) { flush(); }
|
time_collector(utility& u): m_utility(&u) { flush(); }
|
||||||
~time_collector() { }
|
~time_collector() = default;
|
||||||
uint32_t count(uint index) { return m_count[index]; }
|
uint32_t count(uint index) { return m_count[index]; }
|
||||||
uint64_t total(uint index) { return m_total[index]; }
|
uint64_t total(uint index) { return m_total[index]; }
|
||||||
void flush()
|
void flush()
|
||||||
|
@@ -36,8 +36,8 @@ public:
|
|||||||
static Create_func_trt<TRT_FIELD> s_singleton;
|
static Create_func_trt<TRT_FIELD> s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_trt<TRT_FIELD>() {}
|
Create_func_trt<TRT_FIELD>() = default;
|
||||||
virtual ~Create_func_trt<TRT_FIELD>() {}
|
virtual ~Create_func_trt<TRT_FIELD>() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<TR_table::field_id_t TRT_FIELD>
|
template<TR_table::field_id_t TRT_FIELD>
|
||||||
@@ -132,8 +132,8 @@ public:
|
|||||||
static Create_func_trt_trx_sees<Item_func_trt_trx_seesX> s_singleton;
|
static Create_func_trt_trx_sees<Item_func_trt_trx_seesX> s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() {}
|
Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() = default;
|
||||||
virtual ~Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() {}
|
virtual ~Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class X>
|
template<class X>
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "mariadb.h"
|
#include "mariadb.h"
|
||||||
#include "debug_sync.h"
|
#include "debug_sync.h"
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
#if defined(ENABLED_DEBUG_SYNC)
|
#if defined(ENABLED_DEBUG_SYNC)
|
||||||
|
|
||||||
@@ -48,6 +49,8 @@ struct st_debug_sync_action
|
|||||||
String wait_for; /* signal to wait for */
|
String wait_for; /* signal to wait for */
|
||||||
String sync_point; /* sync point name */
|
String sync_point; /* sync point name */
|
||||||
bool need_sort; /* if new action, array needs sort */
|
bool need_sort; /* if new action, array needs sort */
|
||||||
|
bool clear_event; /* do not clear signal when waited
|
||||||
|
for if false. */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Debug sync control. Referenced by THD. */
|
/* Debug sync control. Referenced by THD. */
|
||||||
@@ -67,21 +70,99 @@ struct st_debug_sync_control
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Definitions for the debug sync facility.
|
Definitions for the debug sync facility.
|
||||||
1. Global string variable to hold a "signal" ("signal post", "flag mast").
|
1. Global string variable to hold a set of of "signals".
|
||||||
2. Global condition variable for signaling and waiting.
|
2. Global condition variable for signaling and waiting.
|
||||||
3. Global mutex to synchronize access to the above.
|
3. Global mutex to synchronize access to the above.
|
||||||
*/
|
*/
|
||||||
struct st_debug_sync_globals
|
struct st_debug_sync_globals
|
||||||
{
|
{
|
||||||
String ds_signal; /* signal variable */
|
Hash_set<LEX_CSTRING> ds_signal_set; /* A set of active signals */
|
||||||
mysql_cond_t ds_cond; /* condition variable */
|
mysql_cond_t ds_cond; /* condition variable */
|
||||||
mysql_mutex_t ds_mutex; /* mutex variable */
|
mysql_mutex_t ds_mutex; /* mutex variable */
|
||||||
ulonglong dsp_hits; /* statistics */
|
ulonglong dsp_hits; /* statistics */
|
||||||
ulonglong dsp_executed; /* statistics */
|
ulonglong dsp_executed; /* statistics */
|
||||||
ulonglong dsp_max_active; /* statistics */
|
ulonglong dsp_max_active; /* statistics */
|
||||||
|
|
||||||
|
st_debug_sync_globals() : ds_signal_set(PSI_NOT_INSTRUMENTED, signal_key) {};
|
||||||
|
~st_debug_sync_globals()
|
||||||
|
{
|
||||||
|
clear_set();
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear_set()
|
||||||
|
{
|
||||||
|
Hash_set<LEX_CSTRING>::Iterator it{ds_signal_set};
|
||||||
|
LEX_CSTRING *s;
|
||||||
|
while ((s= it++))
|
||||||
|
my_free(s);
|
||||||
|
ds_signal_set.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hash key function for ds_signal_set. */
|
||||||
|
static uchar *signal_key(const LEX_CSTRING *str, size_t *klen, my_bool)
|
||||||
|
{
|
||||||
|
*klen= str->length;
|
||||||
|
return (uchar*) str->str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Return true if the signal is found in global signal list.
|
||||||
|
|
||||||
|
@param signal_name Signal name identifying the signal.
|
||||||
|
|
||||||
|
@note
|
||||||
|
If signal is found in the global signal set, it means that the
|
||||||
|
signal thread has signalled to the waiting thread. This method
|
||||||
|
must be called with the debug_sync_global.ds_mutex held.
|
||||||
|
|
||||||
|
@retval true if signal is found in the global signal list.
|
||||||
|
@retval false otherwise.
|
||||||
|
*/
|
||||||
|
|
||||||
|
inline bool is_signalled(const char *signal_name, size_t length)
|
||||||
|
{
|
||||||
|
return ds_signal_set.find(signal_name, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear_signal(const String &signal_name)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("clear_signal");
|
||||||
|
LEX_CSTRING *record= ds_signal_set.find(signal_name.ptr(),
|
||||||
|
signal_name.length());
|
||||||
|
if (record)
|
||||||
|
{
|
||||||
|
ds_signal_set.remove(record);
|
||||||
|
my_free(record);
|
||||||
|
}
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool set_signal(const char *signal_name, size_t length)
|
||||||
|
{
|
||||||
|
/* Need to check if the signal is already in the hash set, because
|
||||||
|
Hash_set doesn't differentiate between OOM and key already in. */
|
||||||
|
if (is_signalled(signal_name, length))
|
||||||
|
return FALSE;
|
||||||
|
/* LEX_CSTRING and the string allocated with only one malloc. */
|
||||||
|
LEX_CSTRING *s= (LEX_CSTRING *) my_malloc(PSI_NOT_INSTRUMENTED,
|
||||||
|
sizeof(LEX_CSTRING) + length + 1,
|
||||||
|
MYF(0));
|
||||||
|
char *str= (char *)(s + 1);
|
||||||
|
memcpy(str, signal_name, length);
|
||||||
|
str[length]= '\0';
|
||||||
|
|
||||||
|
s->length= length;
|
||||||
|
s->str= str;
|
||||||
|
if (ds_signal_set.insert(s))
|
||||||
|
return TRUE;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static st_debug_sync_globals debug_sync_global; /* All globals in one object */
|
static st_debug_sync_globals debug_sync_global; /* All globals in one object */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -161,7 +242,7 @@ int debug_sync_init(void)
|
|||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* Initialize the global variables. */
|
/* Initialize the global variables. */
|
||||||
debug_sync_global.ds_signal.length(0);
|
debug_sync_global.clear_set();
|
||||||
if ((rc= mysql_cond_init(key_debug_sync_globals_ds_cond,
|
if ((rc= mysql_cond_init(key_debug_sync_globals_ds_cond,
|
||||||
&debug_sync_global.ds_cond, NULL)) ||
|
&debug_sync_global.ds_cond, NULL)) ||
|
||||||
(rc= mysql_mutex_init(key_debug_sync_globals_ds_mutex,
|
(rc= mysql_mutex_init(key_debug_sync_globals_ds_mutex,
|
||||||
@@ -195,7 +276,7 @@ void debug_sync_end(void)
|
|||||||
debug_sync_C_callback_ptr= NULL;
|
debug_sync_C_callback_ptr= NULL;
|
||||||
|
|
||||||
/* Destroy the global variables. */
|
/* Destroy the global variables. */
|
||||||
debug_sync_global.ds_signal.free();
|
debug_sync_global.clear_set();
|
||||||
mysql_cond_destroy(&debug_sync_global.ds_cond);
|
mysql_cond_destroy(&debug_sync_global.ds_cond);
|
||||||
mysql_mutex_destroy(&debug_sync_global.ds_mutex);
|
mysql_mutex_destroy(&debug_sync_global.ds_mutex);
|
||||||
|
|
||||||
@@ -271,6 +352,40 @@ void debug_sync_init_thread(THD *thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns an allocated buffer containing a comma-separated C string of all
|
||||||
|
active signals.
|
||||||
|
|
||||||
|
Buffer must be freed by the caller.
|
||||||
|
*/
|
||||||
|
static const char *get_signal_set_as_string()
|
||||||
|
{
|
||||||
|
mysql_mutex_assert_owner(&debug_sync_global.ds_mutex);
|
||||||
|
size_t req_size= 1; // In case of empty set for the end '\0' char.
|
||||||
|
|
||||||
|
for (size_t i= 0; i < debug_sync_global.ds_signal_set.size(); i++)
|
||||||
|
req_size+= debug_sync_global.ds_signal_set.at(i)->length + 1;
|
||||||
|
|
||||||
|
char *buf= (char *) my_malloc(PSI_NOT_INSTRUMENTED, req_size, MYF(0));
|
||||||
|
if (!buf)
|
||||||
|
return nullptr;
|
||||||
|
memset(buf, '\0', req_size);
|
||||||
|
|
||||||
|
char *cur_pos= buf;
|
||||||
|
for (size_t i= 0; i < debug_sync_global.ds_signal_set.size(); i++)
|
||||||
|
{
|
||||||
|
const LEX_CSTRING *signal= debug_sync_global.ds_signal_set.at(i);
|
||||||
|
memcpy(cur_pos, signal->str, signal->length);
|
||||||
|
if (i != debug_sync_global.ds_signal_set.size() - 1)
|
||||||
|
cur_pos[signal->length]= ',';
|
||||||
|
else
|
||||||
|
cur_pos[signal->length] = '\0';
|
||||||
|
cur_pos+= signal->length + 1;
|
||||||
|
}
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
End the debug sync facility at thread end.
|
End the debug sync facility at thread end.
|
||||||
|
|
||||||
@@ -554,7 +669,7 @@ static void debug_sync_reset(THD *thd)
|
|||||||
|
|
||||||
/* Clear the global signal. */
|
/* Clear the global signal. */
|
||||||
mysql_mutex_lock(&debug_sync_global.ds_mutex);
|
mysql_mutex_lock(&debug_sync_global.ds_mutex);
|
||||||
debug_sync_global.ds_signal.length(0);
|
debug_sync_global.clear_set();
|
||||||
mysql_mutex_unlock(&debug_sync_global.ds_mutex);
|
mysql_mutex_unlock(&debug_sync_global.ds_mutex);
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@@ -1175,6 +1290,7 @@ static bool debug_sync_eval_action(THD *thd, char *action_str, char *action_end)
|
|||||||
/* Set default for EXECUTE and TIMEOUT options. */
|
/* Set default for EXECUTE and TIMEOUT options. */
|
||||||
action->execute= 1;
|
action->execute= 1;
|
||||||
action->timeout= opt_debug_sync_timeout;
|
action->timeout= opt_debug_sync_timeout;
|
||||||
|
action->clear_event= true;
|
||||||
|
|
||||||
/* Get next token. If none follows, set action. */
|
/* Get next token. If none follows, set action. */
|
||||||
if (!(ptr= debug_sync_token(&token, &token_length, ptr, action_end)))
|
if (!(ptr= debug_sync_token(&token, &token_length, ptr, action_end)))
|
||||||
@@ -1225,6 +1341,16 @@ static bool debug_sync_eval_action(THD *thd, char *action_str, char *action_end)
|
|||||||
goto set_action;
|
goto set_action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Try NO_CLEAR_EVENT.
|
||||||
|
*/
|
||||||
|
if (!my_strcasecmp(system_charset_info, token, "NO_CLEAR_EVENT"))
|
||||||
|
{
|
||||||
|
action->clear_event= false;
|
||||||
|
/* Get next token. If none follows, set action. */
|
||||||
|
if (!(ptr = debug_sync_token(&token, &token_length, ptr, action_end))) goto set_action;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Try HIT_LIMIT.
|
Try HIT_LIMIT.
|
||||||
*/
|
*/
|
||||||
@@ -1325,13 +1451,19 @@ uchar *debug_sync_value_ptr(THD *thd)
|
|||||||
|
|
||||||
if (opt_debug_sync_timeout)
|
if (opt_debug_sync_timeout)
|
||||||
{
|
{
|
||||||
static char on[]= "ON - current signal: '";
|
static char on[]= "ON - current signals: '";
|
||||||
|
|
||||||
// Ensure exclusive access to debug_sync_global.ds_signal
|
// Ensure exclusive access to debug_sync_global.ds_signal
|
||||||
mysql_mutex_lock(&debug_sync_global.ds_mutex);
|
mysql_mutex_lock(&debug_sync_global.ds_mutex);
|
||||||
|
|
||||||
size_t lgt= (sizeof(on) /* includes '\0' */ +
|
size_t lgt= sizeof(on) + 1; /* +1 as we'll have to append ' at the end. */
|
||||||
debug_sync_global.ds_signal.length() + 1 /* for '\'' */);
|
|
||||||
|
for (size_t i= 0; i < debug_sync_global.ds_signal_set.size(); i++)
|
||||||
|
{
|
||||||
|
/* Assume each signal is separated by a comma, hence +1. */
|
||||||
|
lgt+= debug_sync_global.ds_signal_set.at(i)->length + 1;
|
||||||
|
}
|
||||||
|
|
||||||
char *vend;
|
char *vend;
|
||||||
char *vptr;
|
char *vptr;
|
||||||
|
|
||||||
@@ -1339,10 +1471,15 @@ uchar *debug_sync_value_ptr(THD *thd)
|
|||||||
{
|
{
|
||||||
vend= value + lgt - 1; /* reserve space for '\0'. */
|
vend= value + lgt - 1; /* reserve space for '\0'. */
|
||||||
vptr= debug_sync_bmove_len(value, vend, STRING_WITH_LEN(on));
|
vptr= debug_sync_bmove_len(value, vend, STRING_WITH_LEN(on));
|
||||||
vptr= debug_sync_bmove_len(vptr, vend, debug_sync_global.ds_signal.ptr(),
|
for (size_t i= 0; i < debug_sync_global.ds_signal_set.size(); i++)
|
||||||
debug_sync_global.ds_signal.length());
|
{
|
||||||
if (vptr < vend)
|
const LEX_CSTRING *s= debug_sync_global.ds_signal_set.at(i);
|
||||||
*(vptr++)= '\'';
|
vptr= debug_sync_bmove_len(vptr, vend, s->str, s->length);
|
||||||
|
if (i != debug_sync_global.ds_signal_set.size() - 1)
|
||||||
|
*(vptr++)= ',';
|
||||||
|
}
|
||||||
|
DBUG_ASSERT(vptr < vend);
|
||||||
|
*(vptr++)= '\'';
|
||||||
*vptr= '\0'; /* We have one byte reserved for the worst case. */
|
*vptr= '\0'; /* We have one byte reserved for the worst case. */
|
||||||
}
|
}
|
||||||
mysql_mutex_unlock(&debug_sync_global.ds_mutex);
|
mysql_mutex_unlock(&debug_sync_global.ds_mutex);
|
||||||
@@ -1358,6 +1495,9 @@ uchar *debug_sync_value_ptr(THD *thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Execute requested action at a synchronization point.
|
Execute requested action at a synchronization point.
|
||||||
|
|
||||||
@@ -1413,12 +1553,28 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
|
|||||||
read access too, to create a memory barrier in order to avoid that
|
read access too, to create a memory barrier in order to avoid that
|
||||||
threads just reads an old cached version of the signal.
|
threads just reads an old cached version of the signal.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
mysql_mutex_lock(&debug_sync_global.ds_mutex);
|
mysql_mutex_lock(&debug_sync_global.ds_mutex);
|
||||||
|
|
||||||
if (action->signal.length())
|
if (action->signal.length())
|
||||||
{
|
{
|
||||||
/* Copy the signal to the global variable. */
|
int offset= 0, pos;
|
||||||
if (debug_sync_global.ds_signal.copy(action->signal))
|
bool error= false;
|
||||||
|
|
||||||
|
/* This loop covers all signals in the list except for the last one.
|
||||||
|
Split the signal string by commas and set a signal in the global
|
||||||
|
variable for each one. */
|
||||||
|
while (!error && (pos= action->signal.strstr(",", 1, offset)) > 0)
|
||||||
|
{
|
||||||
|
error= debug_sync_global.set_signal(action->signal.ptr() + offset,
|
||||||
|
pos - offset);
|
||||||
|
offset= pos + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error ||
|
||||||
|
/* The last signal in the list. */
|
||||||
|
debug_sync_global.set_signal(action->signal.ptr() + offset,
|
||||||
|
action->signal.length() - offset))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Error is reported by my_malloc().
|
Error is reported by my_malloc().
|
||||||
@@ -1461,31 +1617,43 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
|
|||||||
restore_current_mutex = false;
|
restore_current_mutex = false;
|
||||||
|
|
||||||
set_timespec(abstime, action->timeout);
|
set_timespec(abstime, action->timeout);
|
||||||
DBUG_EXECUTE("debug_sync_exec",
|
DBUG_EXECUTE("debug_sync_exec", {
|
||||||
/* Functions as DBUG_PRINT args can change keyword and line nr. */
|
const char *signal_set= get_signal_set_as_string();
|
||||||
DBUG_PRINT("debug_sync_exec",
|
if (!signal_set)
|
||||||
("wait for '%s' at: '%s' curr: '%s'",
|
{
|
||||||
sig_wait, dsp_name,
|
DBUG_PRINT("debug_sync_exec",
|
||||||
debug_sync_global.ds_signal.c_ptr())););
|
("Out of memory when fetching signal set"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Functions as DBUG_PRINT args can change keyword and line nr. */
|
||||||
|
DBUG_PRINT("debug_sync_exec",
|
||||||
|
("wait for '%s' at: '%s', curr: '%s'",
|
||||||
|
sig_wait, dsp_name, signal_set));
|
||||||
|
my_free((void *)signal_set);
|
||||||
|
}});
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Wait until global signal string matches the wait_for string.
|
Wait until the signal set contains the wait_for string.
|
||||||
Interrupt when thread or query is killed or facility disabled.
|
Interrupt when thread or query is killed or facility is disabled.
|
||||||
The facility can become disabled when some thread cannot get
|
The facility can become disabled when some thread cannot get
|
||||||
the required dynamic memory allocated.
|
the required dynamic memory allocated.
|
||||||
*/
|
*/
|
||||||
while (stringcmp(&debug_sync_global.ds_signal, &action->wait_for) &&
|
while (!debug_sync_global.is_signalled(action->wait_for.ptr(),
|
||||||
!(thd->killed & KILL_HARD_BIT) && opt_debug_sync_timeout)
|
action->wait_for.length()) &&
|
||||||
|
!(thd->killed & KILL_HARD_BIT) &&
|
||||||
|
opt_debug_sync_timeout)
|
||||||
{
|
{
|
||||||
error= mysql_cond_timedwait(&debug_sync_global.ds_cond,
|
error= mysql_cond_timedwait(&debug_sync_global.ds_cond,
|
||||||
&debug_sync_global.ds_mutex,
|
&debug_sync_global.ds_mutex,
|
||||||
&abstime);
|
&abstime);
|
||||||
DBUG_EXECUTE("debug_sync",
|
// TODO turn this into a for loop printing.
|
||||||
|
DBUG_EXECUTE("debug_sync", {
|
||||||
/* Functions as DBUG_PRINT args can change keyword and line nr. */
|
/* Functions as DBUG_PRINT args can change keyword and line nr. */
|
||||||
DBUG_PRINT("debug_sync",
|
DBUG_PRINT("debug_sync",
|
||||||
("awoke from %s global: %s error: %d",
|
("awoke from %s error: %d",
|
||||||
sig_wait, debug_sync_global.ds_signal.c_ptr(),
|
sig_wait, error));});
|
||||||
error)););
|
|
||||||
if (unlikely(error == ETIMEDOUT || error == ETIME))
|
if (unlikely(error == ETIMEDOUT || error == ETIME))
|
||||||
{
|
{
|
||||||
// We should not make the statement fail, even if in strict mode.
|
// We should not make the statement fail, even if in strict mode.
|
||||||
@@ -1498,6 +1666,10 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
|
|||||||
}
|
}
|
||||||
error= 0;
|
error= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (action->clear_event)
|
||||||
|
debug_sync_global.clear_signal(action->wait_for);
|
||||||
|
|
||||||
DBUG_EXECUTE("debug_sync_exec",
|
DBUG_EXECUTE("debug_sync_exec",
|
||||||
if (thd->killed)
|
if (thd->killed)
|
||||||
DBUG_PRINT("debug_sync_exec",
|
DBUG_PRINT("debug_sync_exec",
|
||||||
@@ -1571,10 +1743,10 @@ static void debug_sync(THD *thd, const char *sync_point_name, size_t name_len)
|
|||||||
st_debug_sync_control *ds_control= thd->debug_sync_control;
|
st_debug_sync_control *ds_control= thd->debug_sync_control;
|
||||||
st_debug_sync_action *action;
|
st_debug_sync_action *action;
|
||||||
DBUG_ENTER("debug_sync");
|
DBUG_ENTER("debug_sync");
|
||||||
|
DBUG_PRINT("debug_sync_point", ("hit: '%s'", sync_point_name));
|
||||||
DBUG_ASSERT(sync_point_name);
|
DBUG_ASSERT(sync_point_name);
|
||||||
DBUG_ASSERT(name_len);
|
DBUG_ASSERT(name_len);
|
||||||
DBUG_ASSERT(ds_control);
|
DBUG_ASSERT(ds_control);
|
||||||
DBUG_PRINT("debug_sync_point", ("hit: '%s'", sync_point_name));
|
|
||||||
|
|
||||||
/* Statistics. */
|
/* Statistics. */
|
||||||
ds_control->dsp_hits++;
|
ds_control->dsp_hits++;
|
||||||
|
@@ -56,7 +56,7 @@ public:
|
|||||||
derived_handler(THD *thd_arg, handlerton *ht_arg)
|
derived_handler(THD *thd_arg, handlerton *ht_arg)
|
||||||
: thd(thd_arg), ht(ht_arg), derived(0),table(0), tmp_table_param(0),
|
: thd(thd_arg), ht(ht_arg), derived(0),table(0), tmp_table_param(0),
|
||||||
unit(0), select(0) {}
|
unit(0), select(0) {}
|
||||||
virtual ~derived_handler() {}
|
virtual ~derived_handler() = default;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Functions to scan data. All these returns 0 if ok, error code in case
|
Functions to scan data. All these returns 0 if ok, error code in case
|
||||||
|
@@ -328,9 +328,7 @@ Event_queue_element::Event_queue_element():
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
Event_queue_element::Event_queue_element()
|
Event_queue_element::Event_queue_element()
|
||||||
*/
|
*/
|
||||||
Event_queue_element::~Event_queue_element()
|
Event_queue_element::~Event_queue_element() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -356,9 +354,7 @@ Event_timed::Event_timed():
|
|||||||
Event_timed::~Event_timed()
|
Event_timed::~Event_timed()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Event_timed::~Event_timed()
|
Event_timed::~Event_timed() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -71,7 +71,7 @@ class Event_parse_data;
|
|||||||
class Event_db_repository
|
class Event_db_repository
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Event_db_repository(){}
|
Event_db_repository() = default;
|
||||||
|
|
||||||
bool
|
bool
|
||||||
create_event(THD *thd, Event_parse_data *parse_data,
|
create_event(THD *thd, Event_parse_data *parse_data,
|
||||||
|
@@ -605,7 +605,7 @@ public:
|
|||||||
name.length= 0;
|
name.length= 0;
|
||||||
};
|
};
|
||||||
Virtual_column_info* clone(THD *thd);
|
Virtual_column_info* clone(THD *thd);
|
||||||
~Virtual_column_info() {};
|
~Virtual_column_info() = default;
|
||||||
enum_vcol_info_type get_vcol_type() const
|
enum_vcol_info_type get_vcol_type() const
|
||||||
{
|
{
|
||||||
return vcol_type;
|
return vcol_type;
|
||||||
@@ -895,7 +895,7 @@ public:
|
|||||||
Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
|
Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
|
||||||
uchar null_bit_arg, utype unireg_check_arg,
|
uchar null_bit_arg, utype unireg_check_arg,
|
||||||
const LEX_CSTRING *field_name_arg);
|
const LEX_CSTRING *field_name_arg);
|
||||||
virtual ~Field() {}
|
virtual ~Field() = default;
|
||||||
|
|
||||||
virtual Type_numeric_attributes type_numeric_attributes() const
|
virtual Type_numeric_attributes type_numeric_attributes() const
|
||||||
{
|
{
|
||||||
@@ -5859,8 +5859,8 @@ public:
|
|||||||
Field *from_field,*to_field;
|
Field *from_field,*to_field;
|
||||||
String tmp; // For items
|
String tmp; // For items
|
||||||
|
|
||||||
Copy_field() {}
|
Copy_field() = default;
|
||||||
~Copy_field() {}
|
~Copy_field() = default;
|
||||||
void set(Field *to,Field *from,bool save); // Field to field
|
void set(Field *to,Field *from,bool save); // Field to field
|
||||||
void set(uchar *to,Field *from); // Field to string
|
void set(uchar *to,Field *from); // Field to string
|
||||||
void (*do_copy)(Copy_field *);
|
void (*do_copy)(Copy_field *);
|
||||||
|
@@ -238,22 +238,11 @@ public:
|
|||||||
/**
|
/**
|
||||||
We need an assignment operator, see filesort().
|
We need an assignment operator, see filesort().
|
||||||
This happens to have the same semantics as the one that would be
|
This happens to have the same semantics as the one that would be
|
||||||
generated by the compiler. We still implement it here, to show shallow
|
generated by the compiler.
|
||||||
assignment explicitly: we have two objects sharing the same array.
|
Note that this is a shallow copy. We have two objects sharing the same
|
||||||
|
array.
|
||||||
*/
|
*/
|
||||||
Filesort_buffer &operator=(const Filesort_buffer &rhs)
|
Filesort_buffer &operator=(const Filesort_buffer &rhs) = default;
|
||||||
{
|
|
||||||
m_next_rec_ptr= rhs.m_next_rec_ptr;
|
|
||||||
m_rawmem= rhs.m_rawmem;
|
|
||||||
m_record_pointers= rhs.m_record_pointers;
|
|
||||||
m_sort_keys= rhs.m_sort_keys;
|
|
||||||
m_num_records= rhs.m_num_records;
|
|
||||||
m_record_length= rhs.m_record_length;
|
|
||||||
m_sort_length= rhs.m_sort_length;
|
|
||||||
m_size_in_bytes= rhs.m_size_in_bytes;
|
|
||||||
m_idx= rhs.m_idx;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint get_sort_length() const { return m_sort_length; }
|
uint get_sort_length() const { return m_sort_length; }
|
||||||
void set_sort_length(uint val) { m_sort_length= val; }
|
void set_sort_length(uint val) { m_sort_length= val; }
|
||||||
|
@@ -344,7 +344,7 @@ public:
|
|||||||
{
|
{
|
||||||
return complete_ring() || complete_poly();
|
return complete_ring() || complete_poly();
|
||||||
}
|
}
|
||||||
virtual ~Gcalc_shape_transporter() {}
|
virtual ~Gcalc_shape_transporter() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -77,7 +77,7 @@ public:
|
|||||||
|
|
||||||
group_by_handler(THD *thd_arg, handlerton *ht_arg)
|
group_by_handler(THD *thd_arg, handlerton *ht_arg)
|
||||||
: thd(thd_arg), ht(ht_arg), table(0) {}
|
: thd(thd_arg), ht(ht_arg), table(0) {}
|
||||||
virtual ~group_by_handler() {}
|
virtual ~group_by_handler() = default;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Functions to scan data. All these returns 0 if ok, error code in case
|
Functions to scan data. All these returns 0 if ok, error code in case
|
||||||
|
@@ -889,7 +889,7 @@ struct xid_t {
|
|||||||
long bqual_length;
|
long bqual_length;
|
||||||
char data[XIDDATASIZE]; // not \0-terminated !
|
char data[XIDDATASIZE]; // not \0-terminated !
|
||||||
|
|
||||||
xid_t() {} /* Remove gcc warning */
|
xid_t() = default; /* Remove gcc warning */
|
||||||
bool eq(struct xid_t *xid) const
|
bool eq(struct xid_t *xid) const
|
||||||
{ return !xid->is_null() && eq(xid->gtrid_length, xid->bqual_length, xid->data); }
|
{ return !xid->is_null() && eq(xid->gtrid_length, xid->bqual_length, xid->data); }
|
||||||
bool eq(long g, long b, const char *d) const
|
bool eq(long g, long b, const char *d) const
|
||||||
@@ -1581,7 +1581,7 @@ struct handlerton
|
|||||||
public:
|
public:
|
||||||
virtual bool add_table(const char *tname, size_t tlen) = 0;
|
virtual bool add_table(const char *tname, size_t tlen) = 0;
|
||||||
virtual bool add_file(const char *fname) = 0;
|
virtual bool add_file(const char *fname) = 0;
|
||||||
protected: virtual ~discovered_list() {}
|
protected: virtual ~discovered_list() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1824,7 +1824,7 @@ struct THD_TRANS
|
|||||||
m_unsafe_rollback_flags= 0;
|
m_unsafe_rollback_flags= 0;
|
||||||
}
|
}
|
||||||
bool is_empty() const { return ha_list == NULL; }
|
bool is_empty() const { return ha_list == NULL; }
|
||||||
THD_TRANS() {} /* Remove gcc warning */
|
THD_TRANS() = default; /* Remove gcc warning */
|
||||||
|
|
||||||
unsigned int m_unsafe_rollback_flags;
|
unsigned int m_unsafe_rollback_flags;
|
||||||
/*
|
/*
|
||||||
@@ -2065,7 +2065,7 @@ struct Table_period_info: Sql_alloc
|
|||||||
|
|
||||||
struct start_end_t
|
struct start_end_t
|
||||||
{
|
{
|
||||||
start_end_t() {};
|
start_end_t() = default;
|
||||||
start_end_t(const LEX_CSTRING& _start, const LEX_CSTRING& _end) :
|
start_end_t(const LEX_CSTRING& _start, const LEX_CSTRING& _end) :
|
||||||
start(_start),
|
start(_start),
|
||||||
end(_end) {}
|
end(_end) {}
|
||||||
@@ -2425,9 +2425,9 @@ struct KEY_PAIR
|
|||||||
class inplace_alter_handler_ctx : public Sql_alloc
|
class inplace_alter_handler_ctx : public Sql_alloc
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inplace_alter_handler_ctx() {}
|
inplace_alter_handler_ctx() = default;
|
||||||
|
|
||||||
virtual ~inplace_alter_handler_ctx() {}
|
virtual ~inplace_alter_handler_ctx() = default;
|
||||||
virtual void set_shared_data(const inplace_alter_handler_ctx& ctx) {}
|
virtual void set_shared_data(const inplace_alter_handler_ctx& ctx) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2682,8 +2682,8 @@ typedef struct st_key_create_information
|
|||||||
class TABLEOP_HOOKS
|
class TABLEOP_HOOKS
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TABLEOP_HOOKS() {}
|
TABLEOP_HOOKS() = default;
|
||||||
virtual ~TABLEOP_HOOKS() {}
|
virtual ~TABLEOP_HOOKS() = default;
|
||||||
|
|
||||||
inline void prelock(TABLE **tables, uint count)
|
inline void prelock(TABLE **tables, uint count)
|
||||||
{
|
{
|
||||||
@@ -2724,7 +2724,7 @@ typedef class Item COND;
|
|||||||
|
|
||||||
typedef struct st_ha_check_opt
|
typedef struct st_ha_check_opt
|
||||||
{
|
{
|
||||||
st_ha_check_opt() {} /* Remove gcc warning */
|
st_ha_check_opt() = default; /* Remove gcc warning */
|
||||||
uint flags; /* isam layer flags (e.g. for myisamchk) */
|
uint flags; /* isam layer flags (e.g. for myisamchk) */
|
||||||
uint sql_flags; /* sql layer flags - for something myisamchk cannot do */
|
uint sql_flags; /* sql layer flags - for something myisamchk cannot do */
|
||||||
time_t start_time; /* When check/repair starts */
|
time_t start_time; /* When check/repair starts */
|
||||||
@@ -3103,8 +3103,8 @@ uint calculate_key_len(TABLE *, uint, const uchar *, key_part_map);
|
|||||||
class Handler_share
|
class Handler_share
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Handler_share() {}
|
Handler_share() = default;
|
||||||
virtual ~Handler_share() {}
|
virtual ~Handler_share() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class Compare_keys : uint32_t
|
enum class Compare_keys : uint32_t
|
||||||
@@ -5266,7 +5266,7 @@ public:
|
|||||||
const LEX_CSTRING *wild_arg);
|
const LEX_CSTRING *wild_arg);
|
||||||
Discovered_table_list(THD *thd_arg, Dynamic_array<LEX_CSTRING*> *tables_arg)
|
Discovered_table_list(THD *thd_arg, Dynamic_array<LEX_CSTRING*> *tables_arg)
|
||||||
: thd(thd_arg), wild(NULL), with_temps(true), tables(tables_arg) {}
|
: thd(thd_arg), wild(NULL), with_temps(true), tables(tables_arg) {}
|
||||||
~Discovered_table_list() {}
|
~Discovered_table_list() = default;
|
||||||
|
|
||||||
bool add_table(const char *tname, size_t tlen);
|
bool add_table(const char *tname, size_t tlen);
|
||||||
bool add_file(const char *fname);
|
bool add_file(const char *fname);
|
||||||
|
@@ -35,7 +35,7 @@ class hash_filo_element
|
|||||||
private:
|
private:
|
||||||
hash_filo_element *next_used,*prev_used;
|
hash_filo_element *next_used,*prev_used;
|
||||||
public:
|
public:
|
||||||
hash_filo_element() {}
|
hash_filo_element() = default;
|
||||||
hash_filo_element *next()
|
hash_filo_element *next()
|
||||||
{ return next_used; }
|
{ return next_used; }
|
||||||
hash_filo_element *prev()
|
hash_filo_element *prev()
|
||||||
|
@@ -74,8 +74,7 @@ Host_errors::Host_errors()
|
|||||||
m_local(0)
|
m_local(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Host_errors::~Host_errors()
|
Host_errors::~Host_errors() = default;
|
||||||
{}
|
|
||||||
|
|
||||||
void Host_errors::reset()
|
void Host_errors::reset()
|
||||||
{
|
{
|
||||||
|
20
sql/item.h
20
sql/item.h
@@ -326,7 +326,7 @@ private:
|
|||||||
TABLE_LIST *save_next_local;
|
TABLE_LIST *save_next_local;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Name_resolution_context_state() {} /* Remove gcc warning */
|
Name_resolution_context_state() = default; /* Remove gcc warning */
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/* Save the state of a name resolution context. */
|
/* Save the state of a name resolution context. */
|
||||||
@@ -427,7 +427,7 @@ class sp_rcontext;
|
|||||||
class Sp_rcontext_handler
|
class Sp_rcontext_handler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~Sp_rcontext_handler() {}
|
virtual ~Sp_rcontext_handler() = default;
|
||||||
/**
|
/**
|
||||||
A prefix used for SP variable names in queries:
|
A prefix used for SP variable names in queries:
|
||||||
- EXPLAIN EXTENDED
|
- EXPLAIN EXTENDED
|
||||||
@@ -500,8 +500,8 @@ public:
|
|||||||
required, otherwise we only reading it and SELECT
|
required, otherwise we only reading it and SELECT
|
||||||
privilege might be required.
|
privilege might be required.
|
||||||
*/
|
*/
|
||||||
Settable_routine_parameter() {}
|
Settable_routine_parameter() = default;
|
||||||
virtual ~Settable_routine_parameter() {}
|
virtual ~Settable_routine_parameter() = default;
|
||||||
virtual void set_required_privilege(bool rw) {};
|
virtual void set_required_privilege(bool rw) {};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -583,7 +583,7 @@ class Rewritable_query_parameter
|
|||||||
limit_clause_param(false)
|
limit_clause_param(false)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual ~Rewritable_query_parameter() { }
|
virtual ~Rewritable_query_parameter() = default;
|
||||||
|
|
||||||
virtual bool append_for_log(THD *thd, String *str) = 0;
|
virtual bool append_for_log(THD *thd, String *str) = 0;
|
||||||
};
|
};
|
||||||
@@ -743,7 +743,7 @@ public:
|
|||||||
class Item_const
|
class Item_const
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~Item_const() {}
|
virtual ~Item_const() = default;
|
||||||
virtual const Type_all_attributes *get_type_all_attributes_from_const() const= 0;
|
virtual const Type_all_attributes *get_type_all_attributes_from_const() const= 0;
|
||||||
virtual bool const_is_null() const { return false; }
|
virtual bool const_is_null() const { return false; }
|
||||||
virtual const longlong *const_ptr_longlong() const { return NULL; }
|
virtual const longlong *const_ptr_longlong() const { return NULL; }
|
||||||
@@ -2922,8 +2922,8 @@ class Field_enumerator
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void visit_field(Item_field *field)= 0;
|
virtual void visit_field(Item_field *field)= 0;
|
||||||
virtual ~Field_enumerator() {}; /* purecov: inspected */
|
virtual ~Field_enumerator() = default;; /* purecov: inspected */
|
||||||
Field_enumerator() {} /* Remove gcc warning */
|
Field_enumerator() = default; /* Remove gcc warning */
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_string;
|
class Item_string;
|
||||||
@@ -3455,7 +3455,7 @@ public:
|
|||||||
Item_result_field(THD *thd, Item_result_field *item):
|
Item_result_field(THD *thd, Item_result_field *item):
|
||||||
Item_fixed_hybrid(thd, item), result_field(item->result_field)
|
Item_fixed_hybrid(thd, item), result_field(item->result_field)
|
||||||
{}
|
{}
|
||||||
~Item_result_field() {} /* Required with gcc 2.95 */
|
~Item_result_field() = default;
|
||||||
Field *get_tmp_table_field() override { return result_field; }
|
Field *get_tmp_table_field() override { return result_field; }
|
||||||
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
|
||||||
const Tmp_field_param *param) override
|
const Tmp_field_param *param) override
|
||||||
@@ -7711,7 +7711,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual void close()= 0;
|
virtual void close()= 0;
|
||||||
|
|
||||||
virtual ~Item_iterator() {}
|
virtual ~Item_iterator() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -61,7 +61,7 @@ Cached_item *new_Cached_item(THD *thd, Item *item, bool pass_through_ref)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Cached_item::~Cached_item() {}
|
Cached_item::~Cached_item() = default;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Compare with old value and replace value with new value.
|
Compare with old value and replace value with new value.
|
||||||
|
@@ -252,8 +252,7 @@ protected:
|
|||||||
Item_bool_func(thd, a), value(a_value), affirmative(a_affirmative)
|
Item_bool_func(thd, a), value(a_value), affirmative(a_affirmative)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
~Item_func_truth()
|
~Item_func_truth() = default;
|
||||||
{}
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
True for <code>X IS [NOT] TRUE</code>,
|
True for <code>X IS [NOT] TRUE</code>,
|
||||||
@@ -275,7 +274,7 @@ class Item_func_istrue : public Item_func_truth
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Item_func_istrue(THD *thd, Item *a): Item_func_truth(thd, a, true, true) {}
|
Item_func_istrue(THD *thd, Item *a): Item_func_truth(thd, a, true, true) {}
|
||||||
~Item_func_istrue() {}
|
~Item_func_istrue() = default;
|
||||||
LEX_CSTRING func_name_cstring() const override
|
LEX_CSTRING func_name_cstring() const override
|
||||||
{
|
{
|
||||||
static LEX_CSTRING name= {STRING_WITH_LEN("istrue") };
|
static LEX_CSTRING name= {STRING_WITH_LEN("istrue") };
|
||||||
@@ -295,7 +294,7 @@ class Item_func_isnottrue : public Item_func_truth
|
|||||||
public:
|
public:
|
||||||
Item_func_isnottrue(THD *thd, Item *a):
|
Item_func_isnottrue(THD *thd, Item *a):
|
||||||
Item_func_truth(thd, a, true, false) {}
|
Item_func_truth(thd, a, true, false) {}
|
||||||
~Item_func_isnottrue() {}
|
~Item_func_isnottrue() = default;
|
||||||
LEX_CSTRING func_name_cstring() const override
|
LEX_CSTRING func_name_cstring() const override
|
||||||
{
|
{
|
||||||
static LEX_CSTRING name= {STRING_WITH_LEN("isnottrue") };
|
static LEX_CSTRING name= {STRING_WITH_LEN("isnottrue") };
|
||||||
@@ -317,7 +316,7 @@ class Item_func_isfalse : public Item_func_truth
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Item_func_isfalse(THD *thd, Item *a): Item_func_truth(thd, a, false, true) {}
|
Item_func_isfalse(THD *thd, Item *a): Item_func_truth(thd, a, false, true) {}
|
||||||
~Item_func_isfalse() {}
|
~Item_func_isfalse() = default;
|
||||||
LEX_CSTRING func_name_cstring() const override
|
LEX_CSTRING func_name_cstring() const override
|
||||||
{
|
{
|
||||||
static LEX_CSTRING name= {STRING_WITH_LEN("isfalse") };
|
static LEX_CSTRING name= {STRING_WITH_LEN("isfalse") };
|
||||||
@@ -337,7 +336,7 @@ class Item_func_isnotfalse : public Item_func_truth
|
|||||||
public:
|
public:
|
||||||
Item_func_isnotfalse(THD *thd, Item *a):
|
Item_func_isnotfalse(THD *thd, Item *a):
|
||||||
Item_func_truth(thd, a, false, false) {}
|
Item_func_truth(thd, a, false, false) {}
|
||||||
~Item_func_isnotfalse() {}
|
~Item_func_isnotfalse() = default;
|
||||||
LEX_CSTRING func_name_cstring() const override
|
LEX_CSTRING func_name_cstring() const override
|
||||||
{
|
{
|
||||||
static LEX_CSTRING name= {STRING_WITH_LEN("isnotfalse") };
|
static LEX_CSTRING name= {STRING_WITH_LEN("isnotfalse") };
|
||||||
@@ -1450,13 +1449,13 @@ public:
|
|||||||
CHARSET_INFO *collation;
|
CHARSET_INFO *collation;
|
||||||
uint count;
|
uint count;
|
||||||
uint used_count;
|
uint used_count;
|
||||||
in_vector() {}
|
in_vector() = default;
|
||||||
in_vector(THD *thd, uint elements, uint element_length, qsort2_cmp cmp_func,
|
in_vector(THD *thd, uint elements, uint element_length, qsort2_cmp cmp_func,
|
||||||
CHARSET_INFO *cmp_coll)
|
CHARSET_INFO *cmp_coll)
|
||||||
:base((char*) thd_calloc(thd, elements * element_length)),
|
:base((char*) thd_calloc(thd, elements * element_length)),
|
||||||
size(element_length), compare(cmp_func), collation(cmp_coll),
|
size(element_length), compare(cmp_func), collation(cmp_coll),
|
||||||
count(elements), used_count(elements) {}
|
count(elements), used_count(elements) {}
|
||||||
virtual ~in_vector() {}
|
virtual ~in_vector() = default;
|
||||||
virtual void set(uint pos,Item *item)=0;
|
virtual void set(uint pos,Item *item)=0;
|
||||||
virtual uchar *get_value(Item *item)=0;
|
virtual uchar *get_value(Item *item)=0;
|
||||||
void sort()
|
void sort()
|
||||||
@@ -1662,7 +1661,7 @@ class cmp_item :public Sql_alloc
|
|||||||
public:
|
public:
|
||||||
CHARSET_INFO *cmp_charset;
|
CHARSET_INFO *cmp_charset;
|
||||||
cmp_item() { cmp_charset= &my_charset_bin; }
|
cmp_item() { cmp_charset= &my_charset_bin; }
|
||||||
virtual ~cmp_item() {}
|
virtual ~cmp_item() = default;
|
||||||
virtual void store_value(Item *item)= 0;
|
virtual void store_value(Item *item)= 0;
|
||||||
/**
|
/**
|
||||||
@returns result (TRUE, FALSE or UNKNOWN) of
|
@returns result (TRUE, FALSE or UNKNOWN) of
|
||||||
@@ -1691,7 +1690,7 @@ class cmp_item_string : public cmp_item_scalar
|
|||||||
protected:
|
protected:
|
||||||
String *value_res;
|
String *value_res;
|
||||||
public:
|
public:
|
||||||
cmp_item_string () {}
|
cmp_item_string () = default;
|
||||||
cmp_item_string (CHARSET_INFO *cs) { cmp_charset= cs; }
|
cmp_item_string (CHARSET_INFO *cs) { cmp_charset= cs; }
|
||||||
void set_charset(CHARSET_INFO *cs) { cmp_charset= cs; }
|
void set_charset(CHARSET_INFO *cs) { cmp_charset= cs; }
|
||||||
friend class cmp_item_sort_string;
|
friend class cmp_item_sort_string;
|
||||||
@@ -1757,7 +1756,7 @@ class cmp_item_int : public cmp_item_scalar
|
|||||||
{
|
{
|
||||||
longlong value;
|
longlong value;
|
||||||
public:
|
public:
|
||||||
cmp_item_int() {} /* Remove gcc warning */
|
cmp_item_int() = default; /* Remove gcc warning */
|
||||||
void store_value(Item *item)
|
void store_value(Item *item)
|
||||||
{
|
{
|
||||||
value= item->val_int();
|
value= item->val_int();
|
||||||
@@ -1790,7 +1789,7 @@ class cmp_item_temporal: public cmp_item_scalar
|
|||||||
protected:
|
protected:
|
||||||
longlong value;
|
longlong value;
|
||||||
public:
|
public:
|
||||||
cmp_item_temporal() {}
|
cmp_item_temporal() = default;
|
||||||
int compare(cmp_item *ci);
|
int compare(cmp_item *ci);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1846,7 +1845,7 @@ class cmp_item_real : public cmp_item_scalar
|
|||||||
{
|
{
|
||||||
double value;
|
double value;
|
||||||
public:
|
public:
|
||||||
cmp_item_real() {} /* Remove gcc warning */
|
cmp_item_real() = default; /* Remove gcc warning */
|
||||||
void store_value(Item *item)
|
void store_value(Item *item)
|
||||||
{
|
{
|
||||||
value= item->val_real();
|
value= item->val_real();
|
||||||
@@ -1876,7 +1875,7 @@ class cmp_item_decimal : public cmp_item_scalar
|
|||||||
{
|
{
|
||||||
my_decimal value;
|
my_decimal value;
|
||||||
public:
|
public:
|
||||||
cmp_item_decimal() {} /* Remove gcc warning */
|
cmp_item_decimal() = default; /* Remove gcc warning */
|
||||||
void store_value(Item *item);
|
void store_value(Item *item);
|
||||||
int cmp(Item *arg);
|
int cmp(Item *arg);
|
||||||
int cmp_not_null(const Value *val);
|
int cmp_not_null(const Value *val);
|
||||||
@@ -3718,8 +3717,8 @@ Item *and_expressions(Item *a, Item *b, Item **org_item);
|
|||||||
class Comp_creator
|
class Comp_creator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Comp_creator() {} /* Remove gcc warning */
|
Comp_creator() = default; /* Remove gcc warning */
|
||||||
virtual ~Comp_creator() {} /* Remove gcc warning */
|
virtual ~Comp_creator() = default; /* Remove gcc warning */
|
||||||
/**
|
/**
|
||||||
Create operation with given arguments.
|
Create operation with given arguments.
|
||||||
*/
|
*/
|
||||||
@@ -3738,8 +3737,8 @@ public:
|
|||||||
class Eq_creator :public Comp_creator
|
class Eq_creator :public Comp_creator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Eq_creator() {} /* Remove gcc warning */
|
Eq_creator() = default; /* Remove gcc warning */
|
||||||
virtual ~Eq_creator() {} /* Remove gcc warning */
|
virtual ~Eq_creator() = default; /* Remove gcc warning */
|
||||||
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
||||||
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
||||||
const char* symbol(bool invert) const { return invert? "<>" : "="; }
|
const char* symbol(bool invert) const { return invert? "<>" : "="; }
|
||||||
@@ -3750,8 +3749,8 @@ public:
|
|||||||
class Ne_creator :public Comp_creator
|
class Ne_creator :public Comp_creator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Ne_creator() {} /* Remove gcc warning */
|
Ne_creator() = default; /* Remove gcc warning */
|
||||||
virtual ~Ne_creator() {} /* Remove gcc warning */
|
virtual ~Ne_creator() = default; /* Remove gcc warning */
|
||||||
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
||||||
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
||||||
const char* symbol(bool invert) const { return invert? "=" : "<>"; }
|
const char* symbol(bool invert) const { return invert? "=" : "<>"; }
|
||||||
@@ -3762,8 +3761,8 @@ public:
|
|||||||
class Gt_creator :public Comp_creator
|
class Gt_creator :public Comp_creator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Gt_creator() {} /* Remove gcc warning */
|
Gt_creator() = default; /* Remove gcc warning */
|
||||||
virtual ~Gt_creator() {} /* Remove gcc warning */
|
virtual ~Gt_creator() = default; /* Remove gcc warning */
|
||||||
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
||||||
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
||||||
const char* symbol(bool invert) const { return invert? "<=" : ">"; }
|
const char* symbol(bool invert) const { return invert? "<=" : ">"; }
|
||||||
@@ -3774,8 +3773,8 @@ public:
|
|||||||
class Lt_creator :public Comp_creator
|
class Lt_creator :public Comp_creator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Lt_creator() {} /* Remove gcc warning */
|
Lt_creator() = default; /* Remove gcc warning */
|
||||||
virtual ~Lt_creator() {} /* Remove gcc warning */
|
virtual ~Lt_creator() = default; /* Remove gcc warning */
|
||||||
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
||||||
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
||||||
const char* symbol(bool invert) const { return invert? ">=" : "<"; }
|
const char* symbol(bool invert) const { return invert? ">=" : "<"; }
|
||||||
@@ -3786,8 +3785,8 @@ public:
|
|||||||
class Ge_creator :public Comp_creator
|
class Ge_creator :public Comp_creator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Ge_creator() {} /* Remove gcc warning */
|
Ge_creator() = default; /* Remove gcc warning */
|
||||||
virtual ~Ge_creator() {} /* Remove gcc warning */
|
virtual ~Ge_creator() = default; /* Remove gcc warning */
|
||||||
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
||||||
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
||||||
const char* symbol(bool invert) const { return invert? "<" : ">="; }
|
const char* symbol(bool invert) const { return invert? "<" : ">="; }
|
||||||
@@ -3798,8 +3797,8 @@ public:
|
|||||||
class Le_creator :public Comp_creator
|
class Le_creator :public Comp_creator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Le_creator() {} /* Remove gcc warning */
|
Le_creator() = default; /* Remove gcc warning */
|
||||||
virtual ~Le_creator() {} /* Remove gcc warning */
|
virtual ~Le_creator() = default; /* Remove gcc warning */
|
||||||
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
|
||||||
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
|
||||||
const char* symbol(bool invert) const { return invert? ">" : "<="; }
|
const char* symbol(bool invert) const { return invert? ">" : "<="; }
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -63,9 +63,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
Create_func() {}
|
Create_func() = default;
|
||||||
/** Destructor */
|
/** Destructor */
|
||||||
virtual ~Create_func() {}
|
virtual ~Create_func() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -88,9 +88,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Constructor. */
|
/** Constructor. */
|
||||||
Create_func_arg0() {}
|
Create_func_arg0() = default;
|
||||||
/** Destructor. */
|
/** Destructor. */
|
||||||
virtual ~Create_func_arg0() {}
|
virtual ~Create_func_arg0() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -114,9 +114,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Constructor. */
|
/** Constructor. */
|
||||||
Create_func_arg1() {}
|
Create_func_arg1() = default;
|
||||||
/** Destructor. */
|
/** Destructor. */
|
||||||
virtual ~Create_func_arg1() {}
|
virtual ~Create_func_arg1() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -141,9 +141,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Constructor. */
|
/** Constructor. */
|
||||||
Create_func_arg2() {}
|
Create_func_arg2() = default;
|
||||||
/** Destructor. */
|
/** Destructor. */
|
||||||
virtual ~Create_func_arg2() {}
|
virtual ~Create_func_arg2() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -169,9 +169,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Constructor. */
|
/** Constructor. */
|
||||||
Create_func_arg3() {}
|
Create_func_arg3() = default;
|
||||||
/** Destructor. */
|
/** Destructor. */
|
||||||
virtual ~Create_func_arg3() {}
|
virtual ~Create_func_arg3() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -203,9 +203,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Constructor. */
|
/** Constructor. */
|
||||||
Create_native_func() {}
|
Create_native_func() = default;
|
||||||
/** Destructor. */
|
/** Destructor. */
|
||||||
virtual ~Create_native_func() {}
|
virtual ~Create_native_func() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -246,9 +246,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Constructor. */
|
/** Constructor. */
|
||||||
Create_qfunc() {}
|
Create_qfunc() = default;
|
||||||
/** Destructor. */
|
/** Destructor. */
|
||||||
virtual ~Create_qfunc() {}
|
virtual ~Create_qfunc() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -295,9 +295,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Constructor. */
|
/** Constructor. */
|
||||||
Create_udf_func() {}
|
Create_udf_func() = default;
|
||||||
/** Destructor. */
|
/** Destructor. */
|
||||||
virtual ~Create_udf_func() {}
|
virtual ~Create_udf_func() = default;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -3994,7 +3994,7 @@ class Interruptible_wait
|
|||||||
Interruptible_wait(THD *thd)
|
Interruptible_wait(THD *thd)
|
||||||
: m_thd(thd) {}
|
: m_thd(thd) {}
|
||||||
|
|
||||||
~Interruptible_wait() {}
|
~Interruptible_wait() = default;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@@ -469,7 +469,7 @@ public:
|
|||||||
class Handler
|
class Handler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~Handler() { }
|
virtual ~Handler() = default;
|
||||||
virtual String *val_str(Item_handled_func *, String *) const= 0;
|
virtual String *val_str(Item_handled_func *, String *) const= 0;
|
||||||
virtual String *val_str_ascii(Item_handled_func *, String *) const= 0;
|
virtual String *val_str_ascii(Item_handled_func *, String *) const= 0;
|
||||||
virtual double val_real(Item_handled_func *) const= 0;
|
virtual double val_real(Item_handled_func *) const= 0;
|
||||||
@@ -3866,8 +3866,7 @@ public:
|
|||||||
Item_func_sp(THD *thd, Name_resolution_context *context_arg,
|
Item_func_sp(THD *thd, Name_resolution_context *context_arg,
|
||||||
sp_name *name, const Sp_handler *sph, List<Item> &list);
|
sp_name *name, const Sp_handler *sph, List<Item> &list);
|
||||||
|
|
||||||
virtual ~Item_func_sp()
|
virtual ~Item_func_sp() = default;
|
||||||
{}
|
|
||||||
|
|
||||||
void update_used_tables() override;
|
void update_used_tables() override;
|
||||||
|
|
||||||
|
@@ -1531,9 +1531,7 @@ exit:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Item_func_spatial_operation::~Item_func_spatial_operation()
|
Item_func_spatial_operation::~Item_func_spatial_operation() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
String *Item_func_spatial_operation::val_str(String *str_value)
|
String *Item_func_spatial_operation::val_str(String *str_value)
|
||||||
@@ -2788,8 +2786,8 @@ public:
|
|||||||
static Create_func_area s_singleton;
|
static Create_func_area s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_area() {}
|
Create_func_area() = default;
|
||||||
virtual ~Create_func_area() {}
|
virtual ~Create_func_area() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2804,8 +2802,8 @@ public:
|
|||||||
static Create_func_as_wkb s_singleton;
|
static Create_func_as_wkb s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_as_wkb() {}
|
Create_func_as_wkb() = default;
|
||||||
virtual ~Create_func_as_wkb() {}
|
virtual ~Create_func_as_wkb() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2820,8 +2818,8 @@ public:
|
|||||||
static Create_func_as_wkt s_singleton;
|
static Create_func_as_wkt s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_as_wkt() {}
|
Create_func_as_wkt() = default;
|
||||||
virtual ~Create_func_as_wkt() {}
|
virtual ~Create_func_as_wkt() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2837,8 +2835,8 @@ public:
|
|||||||
static Create_func_centroid s_singleton;
|
static Create_func_centroid s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_centroid() {}
|
Create_func_centroid() = default;
|
||||||
virtual ~Create_func_centroid() {}
|
virtual ~Create_func_centroid() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2853,8 +2851,8 @@ public:
|
|||||||
static Create_func_convexhull s_singleton;
|
static Create_func_convexhull s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_convexhull() {}
|
Create_func_convexhull() = default;
|
||||||
virtual ~Create_func_convexhull() {}
|
virtual ~Create_func_convexhull() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2869,8 +2867,8 @@ public:
|
|||||||
static Create_func_pointonsurface s_singleton;
|
static Create_func_pointonsurface s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_pointonsurface() {}
|
Create_func_pointonsurface() = default;
|
||||||
virtual ~Create_func_pointonsurface() {}
|
virtual ~Create_func_pointonsurface() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2886,8 +2884,8 @@ public:
|
|||||||
static Create_func_mbr_contains s_singleton;
|
static Create_func_mbr_contains s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_mbr_contains() {}
|
Create_func_mbr_contains() = default;
|
||||||
virtual ~Create_func_mbr_contains() {}
|
virtual ~Create_func_mbr_contains() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2902,8 +2900,8 @@ public:
|
|||||||
static Create_func_contains s_singleton;
|
static Create_func_contains s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_contains() {}
|
Create_func_contains() = default;
|
||||||
virtual ~Create_func_contains() {}
|
virtual ~Create_func_contains() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2918,8 +2916,8 @@ public:
|
|||||||
static Create_func_crosses s_singleton;
|
static Create_func_crosses s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_crosses() {}
|
Create_func_crosses() = default;
|
||||||
virtual ~Create_func_crosses() {}
|
virtual ~Create_func_crosses() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2934,8 +2932,8 @@ public:
|
|||||||
static Create_func_dimension s_singleton;
|
static Create_func_dimension s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_dimension() {}
|
Create_func_dimension() = default;
|
||||||
virtual ~Create_func_dimension() {}
|
virtual ~Create_func_dimension() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2951,8 +2949,8 @@ public:
|
|||||||
static Create_func_mbr_disjoint s_singleton;
|
static Create_func_mbr_disjoint s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_mbr_disjoint() {}
|
Create_func_mbr_disjoint() = default;
|
||||||
virtual ~Create_func_mbr_disjoint() {}
|
virtual ~Create_func_mbr_disjoint() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2967,8 +2965,8 @@ public:
|
|||||||
static Create_func_disjoint s_singleton;
|
static Create_func_disjoint s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_disjoint() {}
|
Create_func_disjoint() = default;
|
||||||
virtual ~Create_func_disjoint() {}
|
virtual ~Create_func_disjoint() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2983,8 +2981,8 @@ public:
|
|||||||
static Create_func_distance s_singleton;
|
static Create_func_distance s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_distance() {}
|
Create_func_distance() = default;
|
||||||
virtual ~Create_func_distance() {}
|
virtual ~Create_func_distance() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2996,8 +2994,8 @@ public:
|
|||||||
static Create_func_distance_sphere s_singleton;
|
static Create_func_distance_sphere s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_distance_sphere() {}
|
Create_func_distance_sphere() = default;
|
||||||
virtual ~Create_func_distance_sphere() {}
|
virtual ~Create_func_distance_sphere() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3031,8 +3029,8 @@ public:
|
|||||||
static Create_func_endpoint s_singleton;
|
static Create_func_endpoint s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_endpoint() {}
|
Create_func_endpoint() = default;
|
||||||
virtual ~Create_func_endpoint() {}
|
virtual ~Create_func_endpoint() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3047,8 +3045,8 @@ public:
|
|||||||
static Create_func_envelope s_singleton;
|
static Create_func_envelope s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_envelope() {}
|
Create_func_envelope() = default;
|
||||||
virtual ~Create_func_envelope() {}
|
virtual ~Create_func_envelope() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Create_func_boundary : public Create_func_arg1
|
class Create_func_boundary : public Create_func_arg1
|
||||||
@@ -3062,8 +3060,8 @@ public:
|
|||||||
static Create_func_boundary s_singleton;
|
static Create_func_boundary s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_boundary() {}
|
Create_func_boundary() = default;
|
||||||
virtual ~Create_func_boundary() {}
|
virtual ~Create_func_boundary() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3079,8 +3077,8 @@ public:
|
|||||||
static Create_func_mbr_equals s_singleton;
|
static Create_func_mbr_equals s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_mbr_equals() {}
|
Create_func_mbr_equals() = default;
|
||||||
virtual ~Create_func_mbr_equals() {}
|
virtual ~Create_func_mbr_equals() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3096,8 +3094,8 @@ public:
|
|||||||
static Create_func_equals s_singleton;
|
static Create_func_equals s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_equals() {}
|
Create_func_equals() = default;
|
||||||
virtual ~Create_func_equals() {}
|
virtual ~Create_func_equals() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3113,8 +3111,8 @@ public:
|
|||||||
static Create_func_exteriorring s_singleton;
|
static Create_func_exteriorring s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_exteriorring() {}
|
Create_func_exteriorring() = default;
|
||||||
virtual ~Create_func_exteriorring() {}
|
virtual ~Create_func_exteriorring() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3128,8 +3126,8 @@ public:
|
|||||||
static Create_func_geometry_from_text s_singleton;
|
static Create_func_geometry_from_text s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_geometry_from_text() {}
|
Create_func_geometry_from_text() = default;
|
||||||
virtual ~Create_func_geometry_from_text() {}
|
virtual ~Create_func_geometry_from_text() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3179,8 +3177,8 @@ public:
|
|||||||
static Create_func_geometry_from_wkb s_singleton;
|
static Create_func_geometry_from_wkb s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_geometry_from_wkb() {}
|
Create_func_geometry_from_wkb() = default;
|
||||||
virtual ~Create_func_geometry_from_wkb() {}
|
virtual ~Create_func_geometry_from_wkb() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3229,8 +3227,8 @@ public:
|
|||||||
static Create_func_geometry_from_json s_singleton;
|
static Create_func_geometry_from_json s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_geometry_from_json() {}
|
Create_func_geometry_from_json() = default;
|
||||||
virtual ~Create_func_geometry_from_json() {}
|
virtual ~Create_func_geometry_from_json() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3289,8 +3287,8 @@ public:
|
|||||||
static Create_func_as_geojson s_singleton;
|
static Create_func_as_geojson s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_as_geojson() {}
|
Create_func_as_geojson() = default;
|
||||||
virtual ~Create_func_as_geojson() {}
|
virtual ~Create_func_as_geojson() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3349,8 +3347,8 @@ public:
|
|||||||
static Create_func_geometry_type s_singleton;
|
static Create_func_geometry_type s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_geometry_type() {}
|
Create_func_geometry_type() = default;
|
||||||
virtual ~Create_func_geometry_type() {}
|
virtual ~Create_func_geometry_type() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3366,8 +3364,8 @@ public:
|
|||||||
static Create_func_geometryn s_singleton;
|
static Create_func_geometryn s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_geometryn() {}
|
Create_func_geometryn() = default;
|
||||||
virtual ~Create_func_geometryn() {}
|
virtual ~Create_func_geometryn() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3383,8 +3381,8 @@ public:
|
|||||||
static Create_func_gis_debug s_singleton;
|
static Create_func_gis_debug s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_gis_debug() {}
|
Create_func_gis_debug() = default;
|
||||||
virtual ~Create_func_gis_debug() {}
|
virtual ~Create_func_gis_debug() = default;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -3400,8 +3398,8 @@ public:
|
|||||||
static Create_func_glength s_singleton;
|
static Create_func_glength s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_glength() {}
|
Create_func_glength() = default;
|
||||||
virtual ~Create_func_glength() {}
|
virtual ~Create_func_glength() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3417,8 +3415,8 @@ public:
|
|||||||
static Create_func_interiorringn s_singleton;
|
static Create_func_interiorringn s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_interiorringn() {}
|
Create_func_interiorringn() = default;
|
||||||
virtual ~Create_func_interiorringn() {}
|
virtual ~Create_func_interiorringn() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3433,8 +3431,8 @@ public:
|
|||||||
static Create_func_relate s_singleton;
|
static Create_func_relate s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_relate() {}
|
Create_func_relate() = default;
|
||||||
virtual ~Create_func_relate() {}
|
virtual ~Create_func_relate() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3450,8 +3448,8 @@ public:
|
|||||||
static Create_func_mbr_intersects s_singleton;
|
static Create_func_mbr_intersects s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_mbr_intersects() {}
|
Create_func_mbr_intersects() = default;
|
||||||
virtual ~Create_func_mbr_intersects() {}
|
virtual ~Create_func_mbr_intersects() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3467,8 +3465,8 @@ public:
|
|||||||
static Create_func_intersects s_singleton;
|
static Create_func_intersects s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_intersects() {}
|
Create_func_intersects() = default;
|
||||||
virtual ~Create_func_intersects() {}
|
virtual ~Create_func_intersects() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3484,8 +3482,8 @@ public:
|
|||||||
static Create_func_intersection s_singleton;
|
static Create_func_intersection s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_intersection() {}
|
Create_func_intersection() = default;
|
||||||
virtual ~Create_func_intersection() {}
|
virtual ~Create_func_intersection() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3501,8 +3499,8 @@ public:
|
|||||||
static Create_func_difference s_singleton;
|
static Create_func_difference s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_difference() {}
|
Create_func_difference() = default;
|
||||||
virtual ~Create_func_difference() {}
|
virtual ~Create_func_difference() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3518,8 +3516,8 @@ public:
|
|||||||
static Create_func_union s_singleton;
|
static Create_func_union s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_union() {}
|
Create_func_union() = default;
|
||||||
virtual ~Create_func_union() {}
|
virtual ~Create_func_union() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3535,8 +3533,8 @@ public:
|
|||||||
static Create_func_symdifference s_singleton;
|
static Create_func_symdifference s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_symdifference() {}
|
Create_func_symdifference() = default;
|
||||||
virtual ~Create_func_symdifference() {}
|
virtual ~Create_func_symdifference() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3551,8 +3549,8 @@ public:
|
|||||||
static Create_func_buffer s_singleton;
|
static Create_func_buffer s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_buffer() {}
|
Create_func_buffer() = default;
|
||||||
virtual ~Create_func_buffer() {}
|
virtual ~Create_func_buffer() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3567,8 +3565,8 @@ public:
|
|||||||
static Create_func_isclosed s_singleton;
|
static Create_func_isclosed s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_isclosed() {}
|
Create_func_isclosed() = default;
|
||||||
virtual ~Create_func_isclosed() {}
|
virtual ~Create_func_isclosed() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3583,8 +3581,8 @@ public:
|
|||||||
static Create_func_isring s_singleton;
|
static Create_func_isring s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_isring() {}
|
Create_func_isring() = default;
|
||||||
virtual ~Create_func_isring() {}
|
virtual ~Create_func_isring() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3599,8 +3597,8 @@ public:
|
|||||||
static Create_func_isempty s_singleton;
|
static Create_func_isempty s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_isempty() {}
|
Create_func_isempty() = default;
|
||||||
virtual ~Create_func_isempty() {}
|
virtual ~Create_func_isempty() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3615,8 +3613,8 @@ public:
|
|||||||
static Create_func_issimple s_singleton;
|
static Create_func_issimple s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_issimple() {}
|
Create_func_issimple() = default;
|
||||||
virtual ~Create_func_issimple() {}
|
virtual ~Create_func_issimple() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3632,8 +3630,8 @@ public:
|
|||||||
static Create_func_numgeometries s_singleton;
|
static Create_func_numgeometries s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_numgeometries() {}
|
Create_func_numgeometries() = default;
|
||||||
virtual ~Create_func_numgeometries() {}
|
virtual ~Create_func_numgeometries() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3648,8 +3646,8 @@ public:
|
|||||||
static Create_func_numinteriorring s_singleton;
|
static Create_func_numinteriorring s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_numinteriorring() {}
|
Create_func_numinteriorring() = default;
|
||||||
virtual ~Create_func_numinteriorring() {}
|
virtual ~Create_func_numinteriorring() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3664,8 +3662,8 @@ public:
|
|||||||
static Create_func_numpoints s_singleton;
|
static Create_func_numpoints s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_numpoints() {}
|
Create_func_numpoints() = default;
|
||||||
virtual ~Create_func_numpoints() {}
|
virtual ~Create_func_numpoints() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3681,8 +3679,8 @@ public:
|
|||||||
static Create_func_mbr_overlaps s_singleton;
|
static Create_func_mbr_overlaps s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_mbr_overlaps() {}
|
Create_func_mbr_overlaps() = default;
|
||||||
virtual ~Create_func_mbr_overlaps() {}
|
virtual ~Create_func_mbr_overlaps() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3698,8 +3696,8 @@ public:
|
|||||||
static Create_func_overlaps s_singleton;
|
static Create_func_overlaps s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_overlaps() {}
|
Create_func_overlaps() = default;
|
||||||
virtual ~Create_func_overlaps() {}
|
virtual ~Create_func_overlaps() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3717,8 +3715,8 @@ public:
|
|||||||
static Create_func_pointn s_singleton;
|
static Create_func_pointn s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_pointn() {}
|
Create_func_pointn() = default;
|
||||||
virtual ~Create_func_pointn() {}
|
virtual ~Create_func_pointn() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3735,8 +3733,8 @@ public:
|
|||||||
static Create_func_srid s_singleton;
|
static Create_func_srid s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_srid() {}
|
Create_func_srid() = default;
|
||||||
virtual ~Create_func_srid() {}
|
virtual ~Create_func_srid() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3752,8 +3750,8 @@ public:
|
|||||||
static Create_func_startpoint s_singleton;
|
static Create_func_startpoint s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_startpoint() {}
|
Create_func_startpoint() = default;
|
||||||
virtual ~Create_func_startpoint() {}
|
virtual ~Create_func_startpoint() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3770,8 +3768,8 @@ public:
|
|||||||
static Create_func_touches s_singleton;
|
static Create_func_touches s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_touches() {}
|
Create_func_touches() = default;
|
||||||
virtual ~Create_func_touches() {}
|
virtual ~Create_func_touches() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3787,8 +3785,8 @@ public:
|
|||||||
static Create_func_mbr_within s_singleton;
|
static Create_func_mbr_within s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_mbr_within() {}
|
Create_func_mbr_within() = default;
|
||||||
virtual ~Create_func_mbr_within() {}
|
virtual ~Create_func_mbr_within() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3804,8 +3802,8 @@ public:
|
|||||||
static Create_func_within s_singleton;
|
static Create_func_within s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_within() {}
|
Create_func_within() = default;
|
||||||
virtual ~Create_func_within() {}
|
virtual ~Create_func_within() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3820,8 +3818,8 @@ public:
|
|||||||
static Create_func_x s_singleton;
|
static Create_func_x s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_x() {}
|
Create_func_x() = default;
|
||||||
virtual ~Create_func_x() {}
|
virtual ~Create_func_x() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -3836,8 +3834,8 @@ public:
|
|||||||
static Create_func_y s_singleton;
|
static Create_func_y s_singleton;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Create_func_y() {}
|
Create_func_y() = default;
|
||||||
virtual ~Create_func_y() {}
|
virtual ~Create_func_y() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -4239,7 +4239,7 @@ bool Item_func_json_objectagg::add()
|
|||||||
result.append(STRING_WITH_LEN(", "));
|
result.append(STRING_WITH_LEN(", "));
|
||||||
|
|
||||||
result.append('"');
|
result.append('"');
|
||||||
result.append(*key);
|
st_append_escaped(&result,key);
|
||||||
result.append(STRING_WITH_LEN("\":"));
|
result.append(STRING_WITH_LEN("\":"));
|
||||||
|
|
||||||
buf.length(0);
|
buf.length(0);
|
||||||
|
@@ -2906,7 +2906,9 @@ bool Item_exists_subselect::select_prepare_to_be_in()
|
|||||||
bool trans_res= FALSE;
|
bool trans_res= FALSE;
|
||||||
DBUG_ENTER("Item_exists_subselect::select_prepare_to_be_in");
|
DBUG_ENTER("Item_exists_subselect::select_prepare_to_be_in");
|
||||||
if (!optimizer &&
|
if (!optimizer &&
|
||||||
thd->lex->sql_command == SQLCOM_SELECT &&
|
(thd->lex->sql_command == SQLCOM_SELECT ||
|
||||||
|
thd->lex->sql_command == SQLCOM_UPDATE_MULTI ||
|
||||||
|
thd->lex->sql_command == SQLCOM_DELETE_MULTI) &&
|
||||||
!unit->first_select()->is_part_of_union() &&
|
!unit->first_select()->is_part_of_union() &&
|
||||||
optimizer_flag(thd, OPTIMIZER_SWITCH_EXISTS_TO_IN) &&
|
optimizer_flag(thd, OPTIMIZER_SWITCH_EXISTS_TO_IN) &&
|
||||||
(is_top_level_item() ||
|
(is_top_level_item() ||
|
||||||
|
@@ -831,7 +831,7 @@ public:
|
|||||||
item= si;
|
item= si;
|
||||||
maybe_null= 0;
|
maybe_null= 0;
|
||||||
}
|
}
|
||||||
virtual ~subselect_engine() {}; // to satisfy compiler
|
virtual ~subselect_engine() = default;; // to satisfy compiler
|
||||||
virtual void cleanup()= 0;
|
virtual void cleanup()= 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -59,7 +59,7 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Aggregator (Item_sum *arg): item_sum(arg) {}
|
Aggregator (Item_sum *arg): item_sum(arg) {}
|
||||||
virtual ~Aggregator () {} /* Keep gcc happy */
|
virtual ~Aggregator () = default; /* Keep gcc happy */
|
||||||
|
|
||||||
enum Aggregator_type { SIMPLE_AGGREGATOR, DISTINCT_AGGREGATOR };
|
enum Aggregator_type { SIMPLE_AGGREGATOR, DISTINCT_AGGREGATOR };
|
||||||
virtual Aggregator_type Aggrtype() = 0;
|
virtual Aggregator_type Aggrtype() = 0;
|
||||||
|
10
sql/log.cc
10
sql/log.cc
@@ -215,7 +215,7 @@ public:
|
|||||||
m_message[0]= '\0';
|
m_message[0]= '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~Silence_log_table_errors() {}
|
virtual ~Silence_log_table_errors() = default;
|
||||||
|
|
||||||
virtual bool handle_condition(THD *thd,
|
virtual bool handle_condition(THD *thd,
|
||||||
uint sql_errno,
|
uint sql_errno,
|
||||||
@@ -772,14 +772,10 @@ end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Log_to_csv_event_handler::Log_to_csv_event_handler()
|
Log_to_csv_event_handler::Log_to_csv_event_handler() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Log_to_csv_event_handler::~Log_to_csv_event_handler()
|
Log_to_csv_event_handler::~Log_to_csv_event_handler() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Log_to_csv_event_handler::cleanup()
|
void Log_to_csv_event_handler::cleanup()
|
||||||
|
12
sql/log.h
12
sql/log.h
@@ -42,8 +42,8 @@ class TC_LOG
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int using_heuristic_recover();
|
int using_heuristic_recover();
|
||||||
TC_LOG() {}
|
TC_LOG() = default;
|
||||||
virtual ~TC_LOG() {}
|
virtual ~TC_LOG() = default;
|
||||||
|
|
||||||
virtual int open(const char *opt_name)=0;
|
virtual int open(const char *opt_name)=0;
|
||||||
virtual void close()=0;
|
virtual void close()=0;
|
||||||
@@ -100,7 +100,7 @@ extern PSI_cond_key key_COND_prepare_ordered;
|
|||||||
class TC_LOG_DUMMY: public TC_LOG // use it to disable the logging
|
class TC_LOG_DUMMY: public TC_LOG // use it to disable the logging
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TC_LOG_DUMMY() {}
|
TC_LOG_DUMMY() = default;
|
||||||
int open(const char *opt_name) { return 0; }
|
int open(const char *opt_name) { return 0; }
|
||||||
void close() { }
|
void close() { }
|
||||||
/*
|
/*
|
||||||
@@ -308,7 +308,7 @@ class MYSQL_LOG
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MYSQL_LOG();
|
MYSQL_LOG();
|
||||||
virtual ~MYSQL_LOG() {}
|
virtual ~MYSQL_LOG() = default;
|
||||||
void init_pthread_objects();
|
void init_pthread_objects();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
bool open(
|
bool open(
|
||||||
@@ -983,7 +983,7 @@ public:
|
|||||||
class Log_event_handler
|
class Log_event_handler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Log_event_handler() {}
|
Log_event_handler() = default;
|
||||||
virtual bool init()= 0;
|
virtual bool init()= 0;
|
||||||
virtual void cleanup()= 0;
|
virtual void cleanup()= 0;
|
||||||
|
|
||||||
@@ -997,7 +997,7 @@ public:
|
|||||||
const char *command_type, size_t command_type_len,
|
const char *command_type, size_t command_type_len,
|
||||||
const char *sql_text, size_t sql_text_len,
|
const char *sql_text, size_t sql_text_len,
|
||||||
CHARSET_INFO *client_cs)= 0;
|
CHARSET_INFO *client_cs)= 0;
|
||||||
virtual ~Log_event_handler() {}
|
virtual ~Log_event_handler() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -154,7 +154,7 @@ public:
|
|||||||
reinit_io_cache(m_cache, WRITE_CACHE, 0L, FALSE, TRUE);
|
reinit_io_cache(m_cache, WRITE_CACHE, 0L, FALSE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
~Write_on_release_cache() {}
|
~Write_on_release_cache() = default;
|
||||||
|
|
||||||
bool flush_data()
|
bool flush_data()
|
||||||
{
|
{
|
||||||
@@ -4159,9 +4159,7 @@ Ignorable_log_event::Ignorable_log_event(const uchar *buf,
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ignorable_log_event::~Ignorable_log_event()
|
Ignorable_log_event::~Ignorable_log_event() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool copy_event_cache_to_file_and_reinit(IO_CACHE *cache, FILE *file)
|
bool copy_event_cache_to_file_and_reinit(IO_CACHE *cache, FILE *file)
|
||||||
{
|
{
|
||||||
|
@@ -2615,8 +2615,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Load_log_event(const uchar *buf, uint event_len,
|
Load_log_event(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event* description_event);
|
const Format_description_log_event* description_event);
|
||||||
~Load_log_event()
|
~Load_log_event() = default;
|
||||||
{}
|
|
||||||
Log_event_type get_type_code()
|
Log_event_type get_type_code()
|
||||||
{
|
{
|
||||||
return sql_ex.new_format() ? NEW_LOAD_EVENT: LOAD_EVENT;
|
return sql_ex.new_format() ? NEW_LOAD_EVENT: LOAD_EVENT;
|
||||||
@@ -2700,13 +2699,13 @@ public:
|
|||||||
void pack_info(Protocol* protocol);
|
void pack_info(Protocol* protocol);
|
||||||
#endif /* HAVE_REPLICATION */
|
#endif /* HAVE_REPLICATION */
|
||||||
#else
|
#else
|
||||||
Start_log_event_v3() {}
|
Start_log_event_v3() = default;
|
||||||
bool print(FILE* file, PRINT_EVENT_INFO* print_event_info);
|
bool print(FILE* file, PRINT_EVENT_INFO* print_event_info);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Start_log_event_v3(const uchar *buf, uint event_len,
|
Start_log_event_v3(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event* description_event);
|
const Format_description_log_event* description_event);
|
||||||
~Start_log_event_v3() {}
|
~Start_log_event_v3() = default;
|
||||||
Log_event_type get_type_code() { return START_EVENT_V3;}
|
Log_event_type get_type_code() { return START_EVENT_V3;}
|
||||||
my_off_t get_header_len(my_off_t l __attribute__((unused)))
|
my_off_t get_header_len(my_off_t l __attribute__((unused)))
|
||||||
{ return LOG_EVENT_MINIMAL_HEADER_LEN; }
|
{ return LOG_EVENT_MINIMAL_HEADER_LEN; }
|
||||||
@@ -2996,7 +2995,7 @@ Intvar_log_event(THD* thd_arg,uchar type_arg, ulonglong val_arg,
|
|||||||
|
|
||||||
Intvar_log_event(const uchar *buf,
|
Intvar_log_event(const uchar *buf,
|
||||||
const Format_description_log_event *description_event);
|
const Format_description_log_event *description_event);
|
||||||
~Intvar_log_event() {}
|
~Intvar_log_event() = default;
|
||||||
Log_event_type get_type_code() { return INTVAR_EVENT;}
|
Log_event_type get_type_code() { return INTVAR_EVENT;}
|
||||||
const char* get_var_type_name();
|
const char* get_var_type_name();
|
||||||
int get_data_size() { return 9; /* sizeof(type) + sizeof(val) */;}
|
int get_data_size() { return 9; /* sizeof(type) + sizeof(val) */;}
|
||||||
@@ -3077,7 +3076,7 @@ class Rand_log_event: public Log_event
|
|||||||
|
|
||||||
Rand_log_event(const uchar *buf,
|
Rand_log_event(const uchar *buf,
|
||||||
const Format_description_log_event *description_event);
|
const Format_description_log_event *description_event);
|
||||||
~Rand_log_event() {}
|
~Rand_log_event() = default;
|
||||||
Log_event_type get_type_code() { return RAND_EVENT;}
|
Log_event_type get_type_code() { return RAND_EVENT;}
|
||||||
int get_data_size() { return 16; /* sizeof(ulonglong) * 2*/ }
|
int get_data_size() { return 16; /* sizeof(ulonglong) * 2*/ }
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
@@ -3157,7 +3156,7 @@ public:
|
|||||||
|
|
||||||
Xid_log_event(const uchar *buf,
|
Xid_log_event(const uchar *buf,
|
||||||
const Format_description_log_event *description_event);
|
const Format_description_log_event *description_event);
|
||||||
~Xid_log_event() {}
|
~Xid_log_event() = default;
|
||||||
Log_event_type get_type_code() { return XID_EVENT;}
|
Log_event_type get_type_code() { return XID_EVENT;}
|
||||||
int get_data_size() { return sizeof(xid); }
|
int get_data_size() { return sizeof(xid); }
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
@@ -3377,7 +3376,7 @@ public:
|
|||||||
|
|
||||||
User_var_log_event(const uchar *buf, uint event_len,
|
User_var_log_event(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event *description_event);
|
const Format_description_log_event *description_event);
|
||||||
~User_var_log_event() {}
|
~User_var_log_event() = default;
|
||||||
Log_event_type get_type_code() { return USER_VAR_EVENT;}
|
Log_event_type get_type_code() { return USER_VAR_EVENT;}
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
bool write();
|
bool write();
|
||||||
@@ -3427,7 +3426,7 @@ public:
|
|||||||
const Format_description_log_event *description_event):
|
const Format_description_log_event *description_event):
|
||||||
Log_event(buf, description_event)
|
Log_event(buf, description_event)
|
||||||
{}
|
{}
|
||||||
~Stop_log_event() {}
|
~Stop_log_event() = default;
|
||||||
Log_event_type get_type_code() { return STOP_EVENT;}
|
Log_event_type get_type_code() { return STOP_EVENT;}
|
||||||
bool is_valid() const { return 1; }
|
bool is_valid() const { return 1; }
|
||||||
|
|
||||||
@@ -3722,7 +3721,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
Gtid_log_event(const uchar *buf, uint event_len,
|
Gtid_log_event(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event *description_event);
|
const Format_description_log_event *description_event);
|
||||||
~Gtid_log_event() { }
|
~Gtid_log_event() = default;
|
||||||
Log_event_type get_type_code() { return GTID_EVENT; }
|
Log_event_type get_type_code() { return GTID_EVENT; }
|
||||||
enum_logged_status logged_status() { return LOGGED_NO_DATA; }
|
enum_logged_status logged_status() { return LOGGED_NO_DATA; }
|
||||||
int get_data_size()
|
int get_data_size()
|
||||||
@@ -3975,7 +3974,7 @@ public:
|
|||||||
Append_block_log_event(const uchar *buf, uint event_len,
|
Append_block_log_event(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event
|
const Format_description_log_event
|
||||||
*description_event);
|
*description_event);
|
||||||
~Append_block_log_event() {}
|
~Append_block_log_event() = default;
|
||||||
Log_event_type get_type_code() { return APPEND_BLOCK_EVENT;}
|
Log_event_type get_type_code() { return APPEND_BLOCK_EVENT;}
|
||||||
int get_data_size() { return block_len + APPEND_BLOCK_HEADER_LEN ;}
|
int get_data_size() { return block_len + APPEND_BLOCK_HEADER_LEN ;}
|
||||||
bool is_valid() const { return block != 0; }
|
bool is_valid() const { return block != 0; }
|
||||||
@@ -4016,7 +4015,7 @@ public:
|
|||||||
|
|
||||||
Delete_file_log_event(const uchar *buf, uint event_len,
|
Delete_file_log_event(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event* description_event);
|
const Format_description_log_event* description_event);
|
||||||
~Delete_file_log_event() {}
|
~Delete_file_log_event() = default;
|
||||||
Log_event_type get_type_code() { return DELETE_FILE_EVENT;}
|
Log_event_type get_type_code() { return DELETE_FILE_EVENT;}
|
||||||
int get_data_size() { return DELETE_FILE_HEADER_LEN ;}
|
int get_data_size() { return DELETE_FILE_HEADER_LEN ;}
|
||||||
bool is_valid() const { return file_id != 0; }
|
bool is_valid() const { return file_id != 0; }
|
||||||
@@ -4056,7 +4055,7 @@ public:
|
|||||||
Execute_load_log_event(const uchar *buf, uint event_len,
|
Execute_load_log_event(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event
|
const Format_description_log_event
|
||||||
*description_event);
|
*description_event);
|
||||||
~Execute_load_log_event() {}
|
~Execute_load_log_event() = default;
|
||||||
Log_event_type get_type_code() { return EXEC_LOAD_EVENT;}
|
Log_event_type get_type_code() { return EXEC_LOAD_EVENT;}
|
||||||
int get_data_size() { return EXEC_LOAD_HEADER_LEN ;}
|
int get_data_size() { return EXEC_LOAD_HEADER_LEN ;}
|
||||||
bool is_valid() const { return file_id != 0; }
|
bool is_valid() const { return file_id != 0; }
|
||||||
@@ -4096,7 +4095,7 @@ public:
|
|||||||
Begin_load_query_log_event(const uchar *buf, uint event_len,
|
Begin_load_query_log_event(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event
|
const Format_description_log_event
|
||||||
*description_event);
|
*description_event);
|
||||||
~Begin_load_query_log_event() {}
|
~Begin_load_query_log_event() = default;
|
||||||
Log_event_type get_type_code() { return BEGIN_LOAD_QUERY_EVENT; }
|
Log_event_type get_type_code() { return BEGIN_LOAD_QUERY_EVENT; }
|
||||||
private:
|
private:
|
||||||
#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION)
|
#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION)
|
||||||
@@ -4154,7 +4153,7 @@ public:
|
|||||||
Execute_load_query_log_event(const uchar *buf, uint event_len,
|
Execute_load_query_log_event(const uchar *buf, uint event_len,
|
||||||
const Format_description_log_event
|
const Format_description_log_event
|
||||||
*description_event);
|
*description_event);
|
||||||
~Execute_load_query_log_event() {}
|
~Execute_load_query_log_event() = default;
|
||||||
|
|
||||||
Log_event_type get_type_code() { return EXECUTE_LOAD_QUERY_EVENT; }
|
Log_event_type get_type_code() { return EXECUTE_LOAD_QUERY_EVENT; }
|
||||||
bool is_valid() const { return Query_log_event::is_valid() && file_id != 0; }
|
bool is_valid() const { return Query_log_event::is_valid() && file_id != 0; }
|
||||||
@@ -4192,7 +4191,7 @@ public:
|
|||||||
{}
|
{}
|
||||||
/* constructor for hopelessly corrupted events */
|
/* constructor for hopelessly corrupted events */
|
||||||
Unknown_log_event(): Log_event(), what(ENCRYPTED) {}
|
Unknown_log_event(): Log_event(), what(ENCRYPTED) {}
|
||||||
~Unknown_log_event() {}
|
~Unknown_log_event() = default;
|
||||||
bool print(FILE* file, PRINT_EVENT_INFO* print_event_info);
|
bool print(FILE* file, PRINT_EVENT_INFO* print_event_info);
|
||||||
Log_event_type get_type_code() { return UNKNOWN_EVENT;}
|
Log_event_type get_type_code() { return UNKNOWN_EVENT;}
|
||||||
bool is_valid() const { return 1; }
|
bool is_valid() const { return 1; }
|
||||||
|
14
sql/mdl.cc
14
sql/mdl.cc
@@ -415,7 +415,7 @@ public:
|
|||||||
virtual bool needs_notification(const MDL_ticket *ticket) const = 0;
|
virtual bool needs_notification(const MDL_ticket *ticket) const = 0;
|
||||||
virtual bool conflicting_locks(const MDL_ticket *ticket) const = 0;
|
virtual bool conflicting_locks(const MDL_ticket *ticket) const = 0;
|
||||||
virtual bitmap_t hog_lock_types_bitmap() const = 0;
|
virtual bitmap_t hog_lock_types_bitmap() const = 0;
|
||||||
virtual ~MDL_lock_strategy() {}
|
virtual ~MDL_lock_strategy() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -426,7 +426,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
struct MDL_scoped_lock : public MDL_lock_strategy
|
struct MDL_scoped_lock : public MDL_lock_strategy
|
||||||
{
|
{
|
||||||
MDL_scoped_lock() {}
|
MDL_scoped_lock() = default;
|
||||||
virtual const bitmap_t *incompatible_granted_types_bitmap() const
|
virtual const bitmap_t *incompatible_granted_types_bitmap() const
|
||||||
{ return m_granted_incompatible; }
|
{ return m_granted_incompatible; }
|
||||||
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
|
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
|
||||||
@@ -463,7 +463,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
struct MDL_object_lock : public MDL_lock_strategy
|
struct MDL_object_lock : public MDL_lock_strategy
|
||||||
{
|
{
|
||||||
MDL_object_lock() {}
|
MDL_object_lock() = default;
|
||||||
virtual const bitmap_t *incompatible_granted_types_bitmap() const
|
virtual const bitmap_t *incompatible_granted_types_bitmap() const
|
||||||
{ return m_granted_incompatible; }
|
{ return m_granted_incompatible; }
|
||||||
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
|
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
|
||||||
@@ -507,7 +507,7 @@ public:
|
|||||||
|
|
||||||
struct MDL_backup_lock: public MDL_lock_strategy
|
struct MDL_backup_lock: public MDL_lock_strategy
|
||||||
{
|
{
|
||||||
MDL_backup_lock() {}
|
MDL_backup_lock() = default;
|
||||||
virtual const bitmap_t *incompatible_granted_types_bitmap() const
|
virtual const bitmap_t *incompatible_granted_types_bitmap() const
|
||||||
{ return m_granted_incompatible; }
|
{ return m_granted_incompatible; }
|
||||||
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
|
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
|
||||||
@@ -1875,13 +1875,11 @@ bool MDL_lock::has_pending_conflicting_lock(enum_mdl_type type)
|
|||||||
|
|
||||||
|
|
||||||
MDL_wait_for_graph_visitor::~MDL_wait_for_graph_visitor()
|
MDL_wait_for_graph_visitor::~MDL_wait_for_graph_visitor()
|
||||||
{
|
= default;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MDL_wait_for_subgraph::~MDL_wait_for_subgraph()
|
MDL_wait_for_subgraph::~MDL_wait_for_subgraph()
|
||||||
{
|
= default;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check if ticket represents metadata lock of "stronger" or equal type
|
Check if ticket represents metadata lock of "stronger" or equal type
|
||||||
|
@@ -60,7 +60,7 @@ typedef unsigned short mdl_bitmap_t;
|
|||||||
class MDL_context_owner
|
class MDL_context_owner
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~MDL_context_owner() {}
|
virtual ~MDL_context_owner() = default;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Enter a condition wait.
|
Enter a condition wait.
|
||||||
@@ -471,7 +471,7 @@ public:
|
|||||||
{
|
{
|
||||||
mdl_key_init(namespace_arg, db_arg, name_arg);
|
mdl_key_init(namespace_arg, db_arg, name_arg);
|
||||||
}
|
}
|
||||||
MDL_key() {} /* To use when part of MDL_request. */
|
MDL_key() = default; /* To use when part of MDL_request. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get thread state name to be used in case when we have to
|
Get thread state name to be used in case when we have to
|
||||||
@@ -640,7 +640,7 @@ public:
|
|||||||
|
|
||||||
virtual bool inspect_edge(MDL_context *dest) = 0;
|
virtual bool inspect_edge(MDL_context *dest) = 0;
|
||||||
virtual ~MDL_wait_for_graph_visitor();
|
virtual ~MDL_wait_for_graph_visitor();
|
||||||
MDL_wait_for_graph_visitor() {}
|
MDL_wait_for_graph_visitor() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -799,7 +799,7 @@ private:
|
|||||||
class MDL_savepoint
|
class MDL_savepoint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MDL_savepoint() {};
|
MDL_savepoint() = default;;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MDL_savepoint(MDL_ticket *stmt_ticket, MDL_ticket *trans_ticket)
|
MDL_savepoint(MDL_ticket *stmt_ticket, MDL_ticket *trans_ticket)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user