summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-11-09 09:52:56 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2021-11-09 09:52:56 +0200
commitbc57ff7cf79504a198d4752b4748340a4afd886c (patch)
tree1749be5ddee22a3fa1ea4e5524069627db659a4a
parente54a4060b6343fede25d5d1027baac384ff237c1 (diff)
parent06988bdcaa2d1af2c178c199b7f65dbafda45a2c (diff)
downloadmariadb-git-bc57ff7cf79504a198d4752b4748340a4afd886c.tar.gz
Merge 10.7 into 10.8
-rw-r--r--client/mysql.cc14
-rw-r--r--cmake/cpack_rpm.cmake73
-rw-r--r--cmake/pcre.cmake2
-rw-r--r--extra/mariabackup/ds_compress.cc8
-rw-r--r--extra/mariabackup/xtrabackup.cc20
m---------extra/wolfssl/wolfssl0
-rw-r--r--mysql-test/lib/My/Debugger.pm3
-rw-r--r--mysql-test/main/alter_table.result42
-rw-r--r--mysql-test/main/alter_table.test94
-rw-r--r--mysql-test/main/ctype_cp850.result1050
-rw-r--r--mysql-test/main/ctype_cp850.test32
-rw-r--r--mysql-test/main/ctype_cp866.result12
-rw-r--r--mysql-test/main/ctype_cp866.test14
-rw-r--r--mysql-test/main/ctype_tis620.result11
-rw-r--r--mysql-test/main/ctype_tis620.test7
-rw-r--r--mysql-test/main/ctype_ucs.result19
-rw-r--r--mysql-test/main/ctype_ucs.test13
-rw-r--r--mysql-test/main/ctype_utf8.result11
-rw-r--r--mysql-test/main/ctype_utf8.test9
-rw-r--r--mysql-test/main/ctype_utf8mb4.result18
-rw-r--r--mysql-test/main/ctype_utf8mb4.test19
-rw-r--r--mysql-test/main/long_unique.result7
-rw-r--r--mysql-test/main/long_unique.test1
-rw-r--r--mysql-test/main/long_unique_bugs.result15
-rw-r--r--mysql-test/main/long_unique_bugs.test18
-rw-r--r--mysql-test/main/opt_trace.result6
-rw-r--r--mysql-test/main/opt_trace.test2
-rw-r--r--mysql-test/main/opt_trace_default.result8
-rw-r--r--mysql-test/main/opt_trace_default.test11
-rw-r--r--mysql-test/main/sp-no-valgrind.result25
-rw-r--r--mysql-test/main/sp-no-valgrind.test26
-rw-r--r--mysql-test/main/sp.result19
-rw-r--r--mysql-test/main/sp.test18
-rw-r--r--mysql-test/suite/encryption/r/encrypt_and_grep.result9
-rw-r--r--mysql-test/suite/encryption/t/encrypt_and_grep.test16
-rw-r--r--mysql-test/suite/galera/r/galera_ssl_upgrade.result10
-rw-r--r--mysql-test/suite/galera/t/galera_ssl_upgrade.test10
-rw-r--r--mysql-test/suite/innodb/r/alter_crash.result33
-rw-r--r--mysql-test/suite/innodb/r/innodb_ctype_tis620.result28
-rw-r--r--mysql-test/suite/innodb/t/alter_crash.test31
-rw-r--r--mysql-test/suite/innodb/t/innodb_ctype_tis620.test29
-rw-r--r--mysql-test/suite/maria/maria.result11
-rw-r--r--mysql-test/suite/maria/maria.test13
-rw-r--r--mysql-test/suite/rpl/include/rpl_drop_create_temp_table.inc2
-rw-r--r--mysql-test/suite/rpl/include/rpl_drop_create_temp_table.test62
-rw-r--r--mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result368
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result386
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result382
-rw-r--r--mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_big_table_id.test1
-rw-r--r--mysql-test/suite/versioning/r/create.result25
-rw-r--r--mysql-test/suite/versioning/r/partition.result3
-rw-r--r--mysql-test/suite/versioning/t/create.test17
-rw-r--r--sql/field.h3
-rw-r--r--sql/ha_partition.cc8
-rw-r--r--sql/handler.cc10
-rw-r--r--sql/handler.h20
-rw-r--r--sql/item.h13
-rw-r--r--sql/item_cmpfunc.cc4
-rw-r--r--sql/item_strfunc.cc8
-rw-r--r--sql/log.cc37
-rw-r--r--sql/mysqld.cc1
-rw-r--r--sql/sp_head.cc8
-rw-r--r--sql/sql_alter.cc21
-rw-r--r--sql/sql_alter.h17
-rw-r--r--sql/sql_class.h3
-rw-r--r--sql/sql_cursor.h4
-rw-r--r--sql/sql_prepare.h4
-rw-r--r--sql/sql_table.cc59
-rw-r--r--sql/table.cc5
-rw-r--r--sql/threadpool_generic.cc4
m---------storage/columnstore/columnstore0
-rw-r--r--storage/connect/colblk.h2
-rw-r--r--storage/connect/ha_connect.cc3
-rw-r--r--storage/connect/mysql-test/connect/t/mongo.inc12
-rw-r--r--storage/connect/odbconn.cpp9
-rw-r--r--storage/connect/tabbson.cpp21
-rw-r--r--storage/connect/tabbson.h2
-rw-r--r--storage/innobase/buf/buf0buddy.cc1
-rw-r--r--storage/innobase/buf/buf0buf.cc4
-rw-r--r--storage/innobase/buf/buf0lru.cc1
-rw-r--r--storage/innobase/handler/ha_innodb.cc7
-rw-r--r--storage/innobase/handler/handler0alter.cc5
-rw-r--r--storage/innobase/pars/pars0grm.cc2
-rw-r--r--storage/innobase/pars/pars0grm.y2
-rw-r--r--storage/innobase/row/row0umod.cc10
-rw-r--r--storage/maria/ha_maria.cc5
-rw-r--r--storage/maria/ma_extra.c8
-rw-r--r--storage/myisam/mi_create.c6
-rw-r--r--storage/rocksdb/ha_rocksdb.cc1
-rw-r--r--strings/ctype-mb.c6
-rw-r--r--strings/ctype-tis620.c8
92 files changed, 3185 insertions, 223 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 0ca0f08a687..ee963b9220d 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2018, Oracle and/or its affiliates.
- Copyright (c) 2009, 2020, MariaDB Corporation.
+ Copyright (c) 2009, 2021, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -91,10 +91,14 @@ extern "C" {
#if defined(_WIN32)
#include <conio.h>
#else
-#include <readline.h>
-#if !defined(USE_LIBEDIT_INTERFACE)
-#include <history.h>
-#endif
+# ifdef __APPLE__
+# include <editline/readline.h>
+# else
+# include <readline.h>
+# if !defined(USE_LIBEDIT_INTERFACE)
+# include <history.h>
+# endif
+# endif
#define HAVE_READLINE
#define USE_POPEN
#endif
diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake
index ec83d4b1265..dbdb30afe30 100644
--- a/cmake/cpack_rpm.cmake
+++ b/cmake/cpack_rpm.cmake
@@ -51,21 +51,82 @@ SET(CPACK_RPM_PACKAGE_RELOCATABLE FALSE)
SET(CPACK_PACKAGE_RELOCATABLE FALSE)
SET(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
SET(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_URL})
-SET(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}")
SET(CPACK_RPM_shared_PACKAGE_VENDOR "MariaDB Corporation Ab")
SET(CPACK_RPM_shared_PACKAGE_LICENSE "LGPLv2.1")
-SET(CPACK_RPM_shared_PACKAGE_SUMMARY "LGPL MariaDB client library")
-SET(CPACK_RPM_shared_PACKAGE_DESCRIPTION "
-This is LGPL MariaDB client library that can be used to connect to MySQL
+
+# Set default description for packages
+SET(CPACK_RPM_PACKAGE_DESCRIPTION "MariaDB: a very fast and robust SQL database server
+
+It is GPL v2 licensed, which means you can use the it free of charge under the
+conditions of the GNU General Public License Version 2 (http://www.gnu.org/licenses/).
+
+MariaDB documentation can be found at https://mariadb.com/kb
+MariaDB bug reports should be submitted through https://jira.mariadb.org")
+
+# Packages with default description
+SET(CPACK_RPM_client_PACKAGE_SUMMARY "MariaDB database client binaries")
+SET(CPACK_RPM_common_PACKAGE_SUMMARY "MariaDB database common files (e.g. /etc/mysql/conf.d/mariadb.cnf)")
+SET(CPACK_RPM_compat_PACKAGE_SUMMARY "MariaDB database client library MySQL compat package")
+SET(CPACK_RPM_devel_PACKAGE_SUMMARY "MariaDB database development files")
+SET(CPACK_RPM_server_PACKAGE_SUMMARY "MariaDB database server binaries")
+SET(CPACK_RPM_test_PACKAGE_SUMMARY "MariaDB database regression test suite")
+
+# libmariadb3
+SET(CPACK_RPM_shared_PACKAGE_SUMMARY "LGPL MariaDB database client library")
+SET(CPACK_RPM_shared_PACKAGE_DESCRIPTION "This is LGPL MariaDB client library that can be used to connect to MySQL
or MariaDB.
This code is based on the LGPL libmysql client library from MySQL 3.23
and PHP's mysqlnd extension.
This product includes PHP software, freely available from
-<http://www.php.net/software/>
-")
+http://www.php.net/software/")
+
+# Summary and descriptions per package
+SET(CPACK_RPM_backup_PACKAGE_SUMMARY "Backup tool for MariaDB server")
+SET(CPACK_RPM_backup_PACKAGE_DESCRIPTION "Mariabackup is an open source tool provided by MariaDB
+for performing physical online backups of InnoDB, Aria and MyISAM tables.
+For InnoDB, “hot online” backups are possible.
+It was originally forked from Percona XtraBackup 2.3.8.")
+
+SET(CPACK_RPM_cassandra-engine_PACKAGE_SUMMARY "Cassandra storage engine for MariaDB")
+SET(CPACK_RPM_cassandra-engine_PACKAGE_DESCRIPTION "The Cassandra Storage Engine allows access to data in a Cassandra cluster from
+MariaDB, combining the best of SQL and no-SQL worlds. Cassandra SE (storage
+engine) makes Cassandra's column family appear as a table in MariaDB that you
+can insert to, update, and select from. You can write joins against this table,
+it is possible to join data that's stored in MariaDB with data that's stored in
+Cassandra.")
+
+SET(CPACK_RPM_connect-engine_PACKAGE_SUMMARY "Connect storage engine for MariaDB")
+SET(CPACK_RPM_connect-engine_PACKAGE_DESCRIPTION "Connect engine supports a number of file formats (dbf, xml, txt, bin, etc),
+connections to ODBC tables and remote MySQL tables, as well as a number of
+other interesting features.")
+
+SET(CPACK_RPM_cracklib-password-check_PACKAGE_SUMMARY "CrackLib Password Validation Plugin for MariaDB")
+SET(CPACK_RPM_cracklib-password-check_PACKAGE_DESCRIPTION "This password validation plugin uses cracklib to allow only
+sufficiently secure (as defined by cracklib) user passwords in MariaDB.")
+
+SET(CPACK_RPM_gssapi-server_PACKAGE_SUMMARY "GSSAPI authentication plugin for MariaDB server")
+SET(CPACK_RPM_gssapi-server_PACKAGE_DESCRIPTION "The gssapi authentication plugin allows the user to authenticate with services
+that use the Generic Security Services Application Program Interface (GSSAPI).
+The gssapi authentication plugin is most often used for authenticating with Microsoft Active Directory.")
+
+SET(CPACK_RPM_oqgraph-engine_PACKAGE_SUMMARY "OQGraph storage engine for MariaDB")
+SET(CPACK_RPM_oqgraph-engine_PACKAGE_DESCRIPTION "The Open Query GRAPH computation engine, or OQGRAPH as the engine itself is called,
+allows you to handle hierarchies (tree structures) and complex graphs
+(nodes having many connections in several directions).
+It is intended to be used for retrieving hierarchical information, such as those used for graphs,
+routes or social relationships, in plain SQL.")
+
+SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB")
+SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed
+at maximising storage efficiency while maintaining InnoDB-like performance.")
+
+SET(CPACK_RPM_tokudb-engine_PACKAGE_SUMMARY "TokuDB storage engine for MariaDB")
+SET(CPACK_RPM_tokudb-engine_PACKAGE_DESCRIPTION "The TokuDB storage engine is for use in high-performance and write-intensive
+environments, offering increased compression and better performance based
+on fractal indexes.")
SET(CPACK_RPM_SPEC_MORE_DEFINE "
%define mysql_vendor ${CPACK_PACKAGE_VENDOR}
diff --git a/cmake/pcre.cmake b/cmake/pcre.cmake
index 5ea81f53828..42f22d9fe19 100644
--- a/cmake/pcre.cmake
+++ b/cmake/pcre.cmake
@@ -44,7 +44,7 @@ MACRO(BUNDLE_PCRE2)
ExternalProject_Add(
pcre2
PREFIX "${dir}"
- URL "http://ftp.pcre.org/pub/pcre/pcre2-10.37.zip"
+ URL "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.37/pcre2-10.37.zip"
URL_MD5 8c1699a725d4b28410adf4b964ebbcb7
INSTALL_COMMAND ""
CMAKE_ARGS
diff --git a/extra/mariabackup/ds_compress.cc b/extra/mariabackup/ds_compress.cc
index 960bc766b1e..40566a1a8b1 100644
--- a/extra/mariabackup/ds_compress.cc
+++ b/extra/mariabackup/ds_compress.cc
@@ -367,6 +367,7 @@ create_worker_threads(uint n)
thd)) {
msg("compress: pthread_create() failed: "
"errno = %d", errno);
+ pthread_mutex_unlock(&thd->ctrl_mutex);
goto err;
}
}
@@ -383,6 +384,13 @@ create_worker_threads(uint n)
return threads;
err:
+ while (i > 0) {
+ comp_thread_ctxt_t *thd;
+ i--;
+ thd = threads + i;
+ pthread_mutex_unlock(&thd->ctrl_mutex);
+ }
+
my_free(threads);
return NULL;
}
diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc
index 8233c6122ee..c89c3188b0e 100644
--- a/extra/mariabackup/xtrabackup.cc
+++ b/extra/mariabackup/xtrabackup.cc
@@ -1392,6 +1392,11 @@ uint xb_client_options_count = array_elements(xb_client_options);
static const char *dbug_option;
#endif
+#ifdef HAVE_URING
+extern const char *io_uring_may_be_unsafe;
+bool innodb_use_native_aio_default();
+#endif
+
struct my_option xb_server_options[] =
{
{"datadir", 'h', "Path to the database root.", (G_PTR*) &mysql_data_home,
@@ -1508,7 +1513,12 @@ struct my_option xb_server_options[] =
"Use native AIO if supported on this platform.",
(G_PTR*) &srv_use_native_aio,
(G_PTR*) &srv_use_native_aio, 0, GET_BOOL, NO_ARG,
- TRUE, 0, 0, 0, 0, 0},
+#ifdef HAVE_URING
+ innodb_use_native_aio_default(),
+#else
+ TRUE,
+#endif
+ 0, 0, 0, 0, 0},
{"innodb_page_size", OPT_INNODB_PAGE_SIZE,
"The universal page size of the database.",
(G_PTR*) &innobase_page_size, (G_PTR*) &innobase_page_size, 0,
@@ -2071,8 +2081,12 @@ static bool innodb_init_param()
msg("InnoDB: Using Linux native AIO");
}
#elif defined(HAVE_URING)
-
- if (srv_use_native_aio) {
+ if (!srv_use_native_aio) {
+ } else if (io_uring_may_be_unsafe) {
+ msg("InnoDB: Using liburing on this kernel %s may cause hangs;"
+ " see https://jira.mariadb.org/browse/MDEV-26674",
+ io_uring_may_be_unsafe);
+ } else {
msg("InnoDB: Using liburing");
}
#else
diff --git a/extra/wolfssl/wolfssl b/extra/wolfssl/wolfssl
-Subproject add4a68465bcdad238bcf3e5f2771d8da05e628
+Subproject 723ed009ae5dc68acc14cd7664f93503d64cd51
diff --git a/mysql-test/lib/My/Debugger.pm b/mysql-test/lib/My/Debugger.pm
index a115da92e7e..4235abd7887 100644
--- a/mysql-test/lib/My/Debugger.pm
+++ b/mysql-test/lib/My/Debugger.pm
@@ -150,7 +150,8 @@ sub do_args($$$$$) {
my %vars = (
vardir => $::opt_vardir,
exe => $$exe,
- args => join(' ', map { quote_from_mtr $_ } @$$args, '--loose-gdb'),
+ args => join(' ', map { quote_from_mtr $_ } @$$args,
+ '--loose-debug-gdb', '--loose-skip-stack-trace'),
input => $input,
script => "$::opt_vardir/tmp/${k}init.$type",
log => "$::opt_vardir/log/$type.$k",
diff --git a/mysql-test/main/alter_table.result b/mysql-test/main/alter_table.result
index bef7f393d1d..ceeebd52978 100644
--- a/mysql-test/main/alter_table.result
+++ b/mysql-test/main/alter_table.result
@@ -2588,6 +2588,22 @@ set max_statement_time= 0;
drop table t1;
drop view v1;
#
+# MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed
+#
+set @save_default_engine= @@default_storage_engine;
+create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam;
+alter table t1 change x xx int, algorithm=inplace;
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x));
+alter table t1 change x xx int, algorithm=inplace;
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+drop table t1;
+set @@default_storage_engine= @save_default_engine;
+#
# End of 10.3 tests
#
#
@@ -3373,6 +3389,32 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
#
+# MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed
+#
+set @save_default_engine= @@default_storage_engine;
+create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam;
+alter table t1 change x xx int, algorithm=inplace;
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x));
+alter table t1 change x xx int, algorithm=inplace;
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+drop table t1;
+set @@default_storage_engine= @save_default_engine;
+#
+# MDEV-25555 Server crashes in tree_record_pos after INPLACE-recreating index on HEAP table
+#
+create table t1 (a int, key idx1(a), key idx2 using btree(a)) engine=memory;
+alter table t1 rename index idx1 to idx3, algorithm=inplace;
+delete from t1 where a = 10;
+alter table t1 drop key idx3, add key idx1(a), algorithm=inplace;
+ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
+delete from t1 where a = 11;
+drop table t1;
+#
# End of 10.5 tests
#
#
diff --git a/mysql-test/main/alter_table.test b/mysql-test/main/alter_table.test
index 4bf5eed5a43..6dcb77c650e 100644
--- a/mysql-test/main/alter_table.test
+++ b/mysql-test/main/alter_table.test
@@ -2100,6 +2100,47 @@ drop table t1;
drop view v1;
--echo #
+--echo # MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed
+--echo #
+set @save_default_engine= @@default_storage_engine;
+--disable_query_log
+if ($MTR_COMBINATION_INNODB)
+{
+ set default_storage_engine= innodb;
+}
+if ($MTR_COMBINATION_ARIA)
+{
+ set default_storage_engine= aria;
+}
+--enable_query_log
+
+if (!$MTR_COMBINATION_INNODB)
+{
+ --disable_query_log
+ --disable_result_log
+ # There is no inplace ADD INDEX for MyISAM/Aria:
+ create or replace table t1 (x int);
+ --error ER_ALTER_OPERATION_NOT_SUPPORTED
+ alter table t1 add unique (x), algorithm=inplace;
+ --error ER_ALTER_OPERATION_NOT_SUPPORTED
+ alter table t1 add primary key(x), algorithm=inplace;
+ --error ER_ALTER_OPERATION_NOT_SUPPORTED
+ alter table t1 add index(x), algorithm=inplace;
+ --enable_query_log
+ --enable_result_log
+}
+
+create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam;
+alter table t1 change x xx int, algorithm=inplace;
+check table t1;
+create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x));
+alter table t1 change x xx int, algorithm=inplace;
+check table t1;
+# cleanup
+drop table t1;
+set @@default_storage_engine= @save_default_engine;
+
+--echo #
--echo # End of 10.3 tests
--echo #
@@ -2568,6 +2609,59 @@ show create table t1;
drop table t1;
--echo #
+--echo # MDEV-25803 Inplace ALTER breaks MyISAM/Aria tables when order of keys is changed
+--echo #
+set @save_default_engine= @@default_storage_engine;
+--disable_query_log
+if ($MTR_COMBINATION_INNODB)
+{
+ set default_storage_engine= innodb;
+}
+if ($MTR_COMBINATION_ARIA)
+{
+ set default_storage_engine= aria;
+}
+--enable_query_log
+
+if (!$MTR_COMBINATION_INNODB)
+{
+ --disable_query_log
+ --disable_result_log
+ # There is no inplace ADD INDEX for MyISAM/Aria:
+ create or replace table t1 (x int);
+ --error ER_ALTER_OPERATION_NOT_SUPPORTED
+ alter table t1 add unique (x), algorithm=inplace;
+ --error ER_ALTER_OPERATION_NOT_SUPPORTED
+ alter table t1 add primary key(x), algorithm=inplace;
+ --error ER_ALTER_OPERATION_NOT_SUPPORTED
+ alter table t1 add index(x), algorithm=inplace;
+ --enable_query_log
+ --enable_result_log
+}
+
+create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x)) engine myisam;
+alter table t1 change x xx int, algorithm=inplace;
+check table t1;
+create or replace table t1 (x int, y int, unique (y), unique (x), primary key(x));
+alter table t1 change x xx int, algorithm=inplace;
+check table t1;
+# cleanup
+drop table t1;
+set @@default_storage_engine= @save_default_engine;
+
+--echo #
+--echo # MDEV-25555 Server crashes in tree_record_pos after INPLACE-recreating index on HEAP table
+--echo #
+create table t1 (a int, key idx1(a), key idx2 using btree(a)) engine=memory;
+alter table t1 rename index idx1 to idx3, algorithm=inplace;
+delete from t1 where a = 10;
+--error ER_ALTER_OPERATION_NOT_SUPPORTED
+alter table t1 drop key idx3, add key idx1(a), algorithm=inplace;
+delete from t1 where a = 11;
+# cleanup
+drop table t1;
+
+--echo #
--echo # End of 10.5 tests
--echo #
diff --git a/mysql-test/main/ctype_cp850.result b/mysql-test/main/ctype_cp850.result
index c028f72b58a..c6aba9d3f4e 100644
--- a/mysql-test/main/ctype_cp850.result
+++ b/mysql-test/main/ctype_cp850.result
@@ -12,3 +12,1053 @@ DROP TABLE t1;
#
# End of 5.5 tests
#
+#
+# Start of 10.2 tests
+#
+#
+# MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int
+#
+SET NAMES cp850;
+SELECT '' LIKE '' ESCAPE _cp850 0xFF;
+'' LIKE '' ESCAPE _cp850 0xFF
+1
+BEGIN NOT ATOMIC
+DECLARE ch INT DEFAULT 0x00;
+DECLARE query TEXT DEFAULT 'SELECT _cp850'''' LIKE _cp850'''' ESCAPE _cp850 0xFF';
+WHILE ch <= 0xFF DO
+SET @query= REPLACE(query, 'FF', CONV(ch, 10, 16));
+SELECT @query;
+PREPARE stmt FROM @query;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+SET ch=ch+1;
+END WHILE;
+END;
+$$
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x0
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x0
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x10
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x10
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x11
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x11
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x12
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x12
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x13
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x13
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x14
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x14
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x15
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x15
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x16
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x16
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x17
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x17
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x18
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x18
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x19
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x19
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x1F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x1F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x20
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x20
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x21
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x21
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x22
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x22
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x23
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x23
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x24
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x24
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x25
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x25
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x26
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x26
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x27
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x27
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x28
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x28
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x29
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x29
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x2F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x2F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x30
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x30
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x31
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x31
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x32
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x32
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x33
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x33
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x34
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x34
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x35
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x35
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x36
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x36
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x37
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x37
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x38
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x38
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x39
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x39
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x3F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x3F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x40
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x40
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x41
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x41
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x42
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x42
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x43
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x43
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x44
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x44
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x45
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x45
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x46
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x46
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x47
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x47
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x48
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x48
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x49
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x49
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x4F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x4F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x50
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x50
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x51
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x51
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x52
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x52
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x53
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x53
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x54
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x54
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x55
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x55
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x56
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x56
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x57
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x57
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x58
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x58
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x59
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x59
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x5F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x5F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x60
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x60
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x61
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x61
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x62
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x62
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x63
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x63
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x64
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x64
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x65
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x65
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x66
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x66
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x67
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x67
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x68
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x68
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x69
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x69
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x6F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x6F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x70
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x70
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x71
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x71
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x72
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x72
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x73
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x73
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x74
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x74
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x75
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x75
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x76
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x76
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x77
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x77
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x78
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x78
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x79
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x79
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x7F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x7F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x80
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x80
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x81
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x81
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x82
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x82
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x83
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x83
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x84
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x84
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x85
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x85
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x86
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x86
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x87
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x87
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x88
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x88
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x89
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x89
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x8F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x8F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x90
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x90
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x91
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x91
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x92
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x92
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x93
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x93
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x94
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x94
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x95
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x95
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x96
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x96
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x97
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x97
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x98
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x98
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x99
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x99
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9A
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9A
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9B
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9B
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9C
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9C
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9D
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9D
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9E
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9E
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0x9F
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0x9F
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA0
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA0
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA1
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA1
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA2
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA2
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA3
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA3
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA4
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA4
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA5
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA5
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA6
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA6
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA7
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA7
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA8
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA8
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xA9
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xA9
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAA
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAA
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAB
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAB
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAC
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAC
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAD
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAD
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAE
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAE
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xAF
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xAF
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB0
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB0
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB1
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB1
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB2
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB2
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB3
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB3
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB4
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB4
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB5
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB5
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB6
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB6
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB7
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB7
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB8
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB8
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xB9
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xB9
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBA
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBA
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBB
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBB
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBC
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBC
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBD
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBD
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBE
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBE
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xBF
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xBF
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC0
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC0
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC1
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC1
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC2
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC2
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC3
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC3
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC4
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC4
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC5
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC5
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC6
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC6
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC7
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC7
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC8
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC8
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xC9
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xC9
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCA
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCA
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCB
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCB
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCC
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCC
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCD
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCD
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCE
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCE
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xCF
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xCF
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD0
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD0
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD1
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD1
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD2
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD2
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD3
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD3
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD4
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD4
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD5
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD5
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD6
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD6
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD7
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD7
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD8
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD8
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xD9
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xD9
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDA
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDA
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDB
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDB
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDC
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDC
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDD
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDD
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDE
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDE
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xDF
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xDF
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE0
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE0
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE1
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE1
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE2
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE2
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE3
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE3
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE4
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE4
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE5
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE5
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE6
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE6
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE7
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE7
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE8
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE8
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xE9
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xE9
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEA
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEA
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEB
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEB
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEC
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEC
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xED
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xED
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEE
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEE
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xEF
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xEF
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF0
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF0
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF1
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF1
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF2
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF2
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF3
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF3
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF4
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF4
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF5
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF5
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF6
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF6
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF7
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF7
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF8
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF8
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xF9
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xF9
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFA
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFA
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFB
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFB
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFC
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFC
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFD
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFD
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFE
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFE
+1
+@query
+SELECT _cp850'' LIKE _cp850'' ESCAPE _cp850 0xFF
+_cp850'' LIKE _cp850'' ESCAPE _cp850 0xFF
+1
+#
+# End of 10.2 tests
+#
diff --git a/mysql-test/main/ctype_cp850.test b/mysql-test/main/ctype_cp850.test
index 358829eb351..d2fac6f3646 100644
--- a/mysql-test/main/ctype_cp850.test
+++ b/mysql-test/main/ctype_cp850.test
@@ -14,3 +14,35 @@ DROP TABLE t1;
--echo #
--echo # End of 5.5 tests
--echo #
+
+--echo #
+--echo # Start of 10.2 tests
+--echo #
+
+--echo #
+--echo # MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int
+--echo #
+
+SET NAMES cp850;
+SELECT '' LIKE '' ESCAPE _cp850 0xFF;
+
+DELIMITER $$;
+BEGIN NOT ATOMIC
+ DECLARE ch INT DEFAULT 0x00;
+ DECLARE query TEXT DEFAULT 'SELECT _cp850'''' LIKE _cp850'''' ESCAPE _cp850 0xFF';
+ WHILE ch <= 0xFF DO
+ SET @query= REPLACE(query, 'FF', CONV(ch, 10, 16));
+ SELECT @query;
+ PREPARE stmt FROM @query;
+ EXECUTE stmt;
+ DEALLOCATE PREPARE stmt;
+ SET ch=ch+1;
+ END WHILE;
+END;
+$$
+DELIMITER ;$$
+
+
+--echo #
+--echo # End of 10.2 tests
+--echo #
diff --git a/mysql-test/main/ctype_cp866.result b/mysql-test/main/ctype_cp866.result
new file mode 100644
index 00000000000..008f94f3c79
--- /dev/null
+++ b/mysql-test/main/ctype_cp866.result
@@ -0,0 +1,12 @@
+#
+# Start of 10.2 tests
+#
+#
+# MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int
+#
+SELECT _cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF;
+_cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF
+1
+#
+# End of 10.2 tests
+#
diff --git a/mysql-test/main/ctype_cp866.test b/mysql-test/main/ctype_cp866.test
new file mode 100644
index 00000000000..cdc694d2fc7
--- /dev/null
+++ b/mysql-test/main/ctype_cp866.test
@@ -0,0 +1,14 @@
+--echo #
+--echo # Start of 10.2 tests
+--echo #
+
+--echo #
+--echo # MDEV-25610 Assertion `escape != -1' failed in Item_func_like::val_int
+--echo #
+
+SELECT _cp866'' LIKE _cp866'' ESCAPE _cp866 0xFF;
+
+
+--echo #
+--echo # End of 10.2 tests
+--echo #
diff --git a/mysql-test/main/ctype_tis620.result b/mysql-test/main/ctype_tis620.result
index ff1d5927651..a6f2db38319 100644
--- a/mysql-test/main/ctype_tis620.result
+++ b/mysql-test/main/ctype_tis620.result
@@ -3057,6 +3057,7 @@ c1 tis620_thai_ci
name tis620_thai_ci
SELECT GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR ''), GROUP_CONCAT(hex(c1) ORDER BY BINARY c1) FROM v1 GROUP BY c1;
GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY BINARY c1)
+<00> 00
<01> 01
<02> 02
<03> 03
@@ -3089,7 +3090,6 @@ GROUP_CONCAT(name ORDER BY binary c1 SEPARATOR '') GROUP_CONCAT(hex(c1) ORDER BY
<1E> 1E
<1F> 1F
20
-<00> 00
! 21
" 22
# 23
@@ -4461,5 +4461,14 @@ DROP TABLE t1;
#
SET DEFAULT_STORAGE_ENGINE=Default;
#
+# MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing
+#
+SELECT HEX(WEIGHT_STRING(_tis620 'a\0b'));
+HEX(WEIGHT_STRING(_tis620 'a\0b'))
+610062
+SELECT HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci));
+HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci))
+610062
+#
# End of 10.2 tests
#
diff --git a/mysql-test/main/ctype_tis620.test b/mysql-test/main/ctype_tis620.test
index 7bc248aec2b..7f6382fe7bc 100644
--- a/mysql-test/main/ctype_tis620.test
+++ b/mysql-test/main/ctype_tis620.test
@@ -210,5 +210,12 @@ let $coll_pad='tis620_bin';
--source include/ctype_pad_all_engines.inc
--echo #
+--echo # MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing
+--echo #
+
+SELECT HEX(WEIGHT_STRING(_tis620 'a\0b'));
+SELECT HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci));
+
+--echo #
--echo # End of 10.2 tests
--echo #
diff --git a/mysql-test/main/ctype_ucs.result b/mysql-test/main/ctype_ucs.result
index dc3ed0cf7a9..6c14ca3ab66 100644
--- a/mysql-test/main/ctype_ucs.result
+++ b/mysql-test/main/ctype_ucs.result
@@ -6473,5 +6473,24 @@ CAST(_ucs2 0x0061E0030062 AS INT)
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'ab'
#
+# MDEV-24584 Selecting INT column with COLLATE utf8mb4_general_ci throws an error
+#
+SET NAMES utf8, collation_connection=ucs2_general_ci;
+SELECT 1 COLLATE ucs2_general_ci;
+1 COLLATE ucs2_general_ci
+1
+SELECT 1 COLLATE ucs2_bin;
+1 COLLATE ucs2_bin
+1
+SELECT HEX(1 COLLATE ucs2_general_ci);
+HEX(1 COLLATE ucs2_general_ci)
+0031
+SELECT HEX(1 COLLATE ucs2_bin);
+HEX(1 COLLATE ucs2_bin)
+0031
+SELECT 1 COLLATE latin1_swedish_ci;
+ERROR 42000: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'ucs2'
+SET NAMES utf8;
+#
# End of 10.5 tests
#
diff --git a/mysql-test/main/ctype_ucs.test b/mysql-test/main/ctype_ucs.test
index 7c798e0a201..da970c124c2 100644
--- a/mysql-test/main/ctype_ucs.test
+++ b/mysql-test/main/ctype_ucs.test
@@ -1151,5 +1151,18 @@ SELECT CAST(_ucs2 0x0061D7000062 AS INT);
SELECT CAST(_ucs2 0x0061E0030062 AS INT);
--echo #
+--echo # MDEV-24584 Selecting INT column with COLLATE utf8mb4_general_ci throws an error
+--echo #
+
+SET NAMES utf8, collation_connection=ucs2_general_ci;
+SELECT 1 COLLATE ucs2_general_ci;
+SELECT 1 COLLATE ucs2_bin;
+SELECT HEX(1 COLLATE ucs2_general_ci);
+SELECT HEX(1 COLLATE ucs2_bin);
+--error ER_COLLATION_CHARSET_MISMATCH
+SELECT 1 COLLATE latin1_swedish_ci;
+SET NAMES utf8;
+
+--echo #
--echo # End of 10.5 tests
--echo #
diff --git a/mysql-test/main/ctype_utf8.result b/mysql-test/main/ctype_utf8.result
index b6cd1fff6fd..6eebc8f4cf2 100644
--- a/mysql-test/main/ctype_utf8.result
+++ b/mysql-test/main/ctype_utf8.result
@@ -11261,6 +11261,17 @@ DROP TABLE kv;
DROP VIEW v1;
SET NAMES utf8;
#
+# MDEV-24335 Unexpected question mark in the end of a TINYTEXT column
+#
+CREATE TABLE t1 (a TINYTEXT character set utf8);
+INSERT IGNORE INTO t1 VALUES (REPEAT(_utf8 0xD184, 250));
+Warnings:
+Warning 1366 Incorrect string value: '\xD1\x84\xD1\x84\xD1\x84...' for column `test`.`t1`.`a` at row 1
+SELECT LENGTH(a), CHAR_LENGTH(a), RIGHT(a,3) FROM t1;
+LENGTH(a) CHAR_LENGTH(a) RIGHT(a,3)
+254 127 ффф
+DROP TABLE t1;
+#
# End of 10.2 tests
#
#
diff --git a/mysql-test/main/ctype_utf8.test b/mysql-test/main/ctype_utf8.test
index daef581fa02..63b75d8e263 100644
--- a/mysql-test/main/ctype_utf8.test
+++ b/mysql-test/main/ctype_utf8.test
@@ -2185,6 +2185,15 @@ DROP VIEW v1;
SET NAMES utf8;
--echo #
+--echo # MDEV-24335 Unexpected question mark in the end of a TINYTEXT column
+--echo #
+
+CREATE TABLE t1 (a TINYTEXT character set utf8);
+INSERT IGNORE INTO t1 VALUES (REPEAT(_utf8 0xD184, 250));
+SELECT LENGTH(a), CHAR_LENGTH(a), RIGHT(a,3) FROM t1;
+DROP TABLE t1;
+
+--echo #
--echo # End of 10.2 tests
--echo #
diff --git a/mysql-test/main/ctype_utf8mb4.result b/mysql-test/main/ctype_utf8mb4.result
index ee98791a88e..97d28f6b765 100644
--- a/mysql-test/main/ctype_utf8mb4.result
+++ b/mysql-test/main/ctype_utf8mb4.result
@@ -4149,3 +4149,21 @@ c
#
# End of 10.2 tests
#
+#
+# Start of 10.5 tests
+#
+#
+# MDEV-24584 Selecting INT column with COLLATE utf8mb4_general_ci throws an error
+#
+SET NAMES utf8mb4;
+SELECT 1 COLLATE utf8mb4_general_ci;
+1 COLLATE utf8mb4_general_ci
+1
+SELECT 1 COLLATE utf8mb4_bin;
+1 COLLATE utf8mb4_bin
+1
+SELECT 1 COLLATE latin1_swedish_ci;
+ERROR 42000: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
+#
+# End of 10.5 tests
+#
diff --git a/mysql-test/main/ctype_utf8mb4.test b/mysql-test/main/ctype_utf8mb4.test
index 8fbbee872ce..5640bc45ed1 100644
--- a/mysql-test/main/ctype_utf8mb4.test
+++ b/mysql-test/main/ctype_utf8mb4.test
@@ -2043,3 +2043,22 @@ EXECUTE IMMEDIATE 'SELECT ''😎'' AS c';
--echo #
--echo # End of 10.2 tests
--echo #
+
+
+--echo #
+--echo # Start of 10.5 tests
+--echo #
+
+--echo #
+--echo # MDEV-24584 Selecting INT column with COLLATE utf8mb4_general_ci throws an error
+--echo #
+
+SET NAMES utf8mb4;
+SELECT 1 COLLATE utf8mb4_general_ci;
+SELECT 1 COLLATE utf8mb4_bin;
+--error ER_COLLATION_CHARSET_MISMATCH
+SELECT 1 COLLATE latin1_swedish_ci;
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
diff --git a/mysql-test/main/long_unique.result b/mysql-test/main/long_unique.result
index 744e303b198..4521eaa11d0 100644
--- a/mysql-test/main/long_unique.result
+++ b/mysql-test/main/long_unique.result
@@ -597,17 +597,17 @@ t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
UNIQUE KEY `db_row_hash_1` (`db_row_hash_1`),
UNIQUE KEY `db_row_hash_2` (`db_row_hash_2`),
+ UNIQUE KEY `d` (`d`) USING HASH,
UNIQUE KEY `e` (`e`),
- UNIQUE KEY `a` (`a`),
- UNIQUE KEY `d` (`d`) USING HASH
+ UNIQUE KEY `a` (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
show keys from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Ignored
t1 0 db_row_hash_1 1 db_row_hash_1 A NULL NULL NULL YES BTREE NO
t1 0 db_row_hash_2 1 db_row_hash_2 A NULL NULL NULL YES BTREE NO
+t1 0 d 1 d A NULL NULL NULL YES HASH NO
t1 0 e 1 e A NULL NULL NULL YES BTREE NO
t1 0 a 1 a A NULL NULL NULL YES BTREE NO
-t1 0 d 1 d A NULL NULL NULL YES HASH NO
alter table t1 add column clm1 blob unique,add column clm2 blob unique;
#try changing the name;
alter table t1 change column clm1 clm_changed1 blob, change column clm2 clm_changed2 blob;
@@ -1494,3 +1494,4 @@ DROP TABLE t1, t2;
CREATE TABLE t1 (pk INT, a TEXT NOT NULL DEFAULT '', PRIMARY KEY (pk), b INT AUTO_INCREMENT, UNIQUE(b), UNIQUE (a,b)) ENGINE=myisam;
ERROR HY000: AUTO_INCREMENT column `b` cannot be used in the UNIQUE index `a`
set @@GLOBAL.max_allowed_packet= @allowed_packet;
+# End of 10.4 tests
diff --git a/mysql-test/main/long_unique.test b/mysql-test/main/long_unique.test
index 2146b4b4638..c2cf3f635ce 100644
--- a/mysql-test/main/long_unique.test
+++ b/mysql-test/main/long_unique.test
@@ -575,3 +575,4 @@ CREATE TABLE t1 (pk INT, a TEXT NOT NULL DEFAULT '', PRIMARY KEY (pk), b INT AUT
# Cleanup
set @@GLOBAL.max_allowed_packet= @allowed_packet;
+--echo # End of 10.4 tests
diff --git a/mysql-test/main/long_unique_bugs.result b/mysql-test/main/long_unique_bugs.result
index 043361f77f8..ae736d625b2 100644
--- a/mysql-test/main/long_unique_bugs.result
+++ b/mysql-test/main/long_unique_bugs.result
@@ -291,6 +291,21 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par
t2 0 a 1 a A NULL NULL NULL YES HASH NO
t2 0 a 2 b A NULL NULL NULL YES HASH NO
DROP TABLE t1,t2;
+#
+# MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption
+#
+CREATE TABLE t (c INT AUTO_INCREMENT KEY, UNIQUE USING HASH(c));
+ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `c`
+CREATE TABLE t (c INT AUTO_INCREMENT KEY);
+CREATE UNIQUE INDEX i USING HASH ON t (c);
+ERROR HY000: Function or expression 'AUTO_INCREMENT' cannot be used in the USING HASH clause of `c`
+INSERT INTO t VALUES (0);
+SELECT * FROM t;
+c
+1
+DELETE FROM t;
+DROP TABLE t;
+# End of 10.4 tests
create temporary table tmp ( a int, b int, c blob not null, d int, e int default 0, f int, unique key (c)) engine=innodb;
create table t2 (x int);
lock table t2 write;
diff --git a/mysql-test/main/long_unique_bugs.test b/mysql-test/main/long_unique_bugs.test
index 5d88e535164..18bad7deac9 100644
--- a/mysql-test/main/long_unique_bugs.test
+++ b/mysql-test/main/long_unique_bugs.test
@@ -370,6 +370,24 @@ show index from t2;
# Cleanup
DROP TABLE t1,t2;
+--echo #
+--echo # MDEV-26453 Assertion `0' failed in row_upd_sec_index_entry & corruption
+--echo #
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t (c INT AUTO_INCREMENT KEY, UNIQUE USING HASH(c));
+
+CREATE TABLE t (c INT AUTO_INCREMENT KEY);
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE UNIQUE INDEX i USING HASH ON t (c);
+INSERT INTO t VALUES (0);
+SELECT * FROM t;
+DELETE FROM t;
+
+DROP TABLE t;
+
+--echo # End of 10.4 tests
+
#
# MDEV-22113 SIGSEGV, ASAN use-after-poison, Assertion `next_insert_id == 0' in handler::ha_external_lock
#
diff --git a/mysql-test/main/opt_trace.result b/mysql-test/main/opt_trace.result
index ed977bbf416..b0c2a9ca4d9 100644
--- a/mysql-test/main/opt_trace.result
+++ b/mysql-test/main/opt_trace.result
@@ -4,14 +4,14 @@ OPTIMIZER_TRACE QUERY
OPTIMIZER_TRACE TRACE
OPTIMIZER_TRACE MISSING_BYTES_BEYOND_MAX_MEM_SIZE
OPTIMIZER_TRACE INSUFFICIENT_PRIVILEGES
-show variables like 'optimizer_trace';
-Variable_name Value
-optimizer_trace enabled=off
set optimizer_trace="enabled=on";
show variables like 'optimizer_trace';
Variable_name Value
optimizer_trace enabled=on
set optimizer_trace="enabled=off";
+show variables like 'optimizer_trace';
+Variable_name Value
+optimizer_trace enabled=off
create table t1 (a int, b int);
insert into t1 values (1,2),(2,3);
create table t2 (b int);
diff --git a/mysql-test/main/opt_trace.test b/mysql-test/main/opt_trace.test
index 9ce6671d345..70223560187 100644
--- a/mysql-test/main/opt_trace.test
+++ b/mysql-test/main/opt_trace.test
@@ -2,10 +2,10 @@
--source include/have_sequence.inc
--source include/protocol.inc
SELECT table_name, column_name FROM information_schema.columns where table_name="OPTIMIZER_TRACE";
-show variables like 'optimizer_trace';
set optimizer_trace="enabled=on";
show variables like 'optimizer_trace';
set optimizer_trace="enabled=off";
+show variables like 'optimizer_trace';
create table t1 (a int, b int);
insert into t1 values (1,2),(2,3);
diff --git a/mysql-test/main/opt_trace_default.result b/mysql-test/main/opt_trace_default.result
new file mode 100644
index 00000000000..4d99128675c
--- /dev/null
+++ b/mysql-test/main/opt_trace_default.result
@@ -0,0 +1,8 @@
+# Verify that compile-time default for optimizer trace is OFF (enabled=off).
+select
+global_value_origin,
+default_value
+from
+INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace';
+global_value_origin default_value
+COMPILE-TIME enabled=off
diff --git a/mysql-test/main/opt_trace_default.test b/mysql-test/main/opt_trace_default.test
new file mode 100644
index 00000000000..221b68a626c
--- /dev/null
+++ b/mysql-test/main/opt_trace_default.test
@@ -0,0 +1,11 @@
+
+if (`SELECT 'COMPILE-TIME'<>GLOBAL_VALUE_ORIGIN from INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace'`) {
+--Skip Needs optimizer_trace default to be the compile-time default
+}
+
+--echo # Verify that compile-time default for optimizer trace is OFF (enabled=off).
+select
+ global_value_origin,
+ default_value
+from
+ INFORMATION_SCHEMA.SYSTEM_VARIABLES where variable_name='optimizer_trace';
diff --git a/mysql-test/main/sp-no-valgrind.result b/mysql-test/main/sp-no-valgrind.result
new file mode 100644
index 00000000000..bc5809ba79e
--- /dev/null
+++ b/mysql-test/main/sp-no-valgrind.result
@@ -0,0 +1,25 @@
+# MDEV-20699 do not cache SP in SHOW CREATE
+# Warmup round, this might allocate some memory for session variable
+# and the output
+SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+CREATE PROCEDURE sp0() SELECT 1;
+SHOW CREATE PROCEDURE sp0;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp0 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp0`()
+SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci
+DROP PROCEDURE sp0;
+SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+CREATE PROCEDURE sp1() SELECT 1;
+SHOW CREATE PROCEDURE sp1;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp1 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`()
+SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT VARIABLE_VALUE-@local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+VARIABLE_VALUE-@local_mem_used
+0
+DROP PROCEDURE sp1;
+#
+# End of 10.3 tests
+#
diff --git a/mysql-test/main/sp-no-valgrind.test b/mysql-test/main/sp-no-valgrind.test
new file mode 100644
index 00000000000..89f8250bf72
--- /dev/null
+++ b/mysql-test/main/sp-no-valgrind.test
@@ -0,0 +1,26 @@
+
+--source include/not_valgrind.inc
+
+--echo # MDEV-20699 do not cache SP in SHOW CREATE
+--echo # Warmup round, this might allocate some memory for session variable
+--echo # and the output
+
+SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+CREATE PROCEDURE sp0() SELECT 1;
+SHOW CREATE PROCEDURE sp0;
+DROP PROCEDURE sp0;
+
+#Check that CREATE/SHOW does not use memory in caches.
+SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+CREATE PROCEDURE sp1() SELECT 1;
+SHOW CREATE PROCEDURE sp1;
+SELECT VARIABLE_VALUE-@local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+# FIXME: MDEV-26754 main.sp test fails for embedded server
+#SELECT VARIABLE_VALUE-@global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
+DROP PROCEDURE sp1;
+
+--echo #
+--echo # End of 10.3 tests
+--echo #
diff --git a/mysql-test/main/sp.result b/mysql-test/main/sp.result
index df8cc323148..21cc7c7b78f 100644
--- a/mysql-test/main/sp.result
+++ b/mysql-test/main/sp.result
@@ -8869,25 +8869,6 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
BEGIN
RETURN '';
END' at line 2
-SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-CREATE PROCEDURE sp0() SELECT 1;
-SHOW CREATE PROCEDURE sp0;
-Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
-sp0 STRICT_ALL_TABLES CREATE DEFINER=`root`@`localhost` PROCEDURE `sp0`()
-SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci
-DROP PROCEDURE sp0;
-SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-CREATE PROCEDURE sp1() SELECT 1;
-SHOW CREATE PROCEDURE sp1;
-Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
-sp1 STRICT_ALL_TABLES CREATE DEFINER=`root`@`localhost` PROCEDURE `sp1`()
-SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci
-SELECT VARIABLE_VALUE-@local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-VARIABLE_VALUE-@local_mem_used
-0
-DROP PROCEDURE sp1;
# End of 10.3 tests
#
# Start of 10.4 tests
diff --git a/mysql-test/main/sp.test b/mysql-test/main/sp.test
index 6abe23fb0f8..9265b97e7c9 100644
--- a/mysql-test/main/sp.test
+++ b/mysql-test/main/sp.test
@@ -10418,24 +10418,6 @@ END;
$$
DELIMITER ;$$
-# MDEV-20699 do not cache SP in SHOW CREATE
-# Warmup round, this might allocate some memory for session variable
-# and the output
-SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-CREATE PROCEDURE sp0() SELECT 1;
-SHOW CREATE PROCEDURE sp0;
-DROP PROCEDURE sp0;
-
-#Check that CREATE/SHOW does not use memory in caches.
-SELECT VARIABLE_VALUE into @global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-SELECT VARIABLE_VALUE into @local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-CREATE PROCEDURE sp1() SELECT 1;
-SHOW CREATE PROCEDURE sp1;
-SELECT VARIABLE_VALUE-@local_mem_used FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-# FIXME: MDEV-26754 main.sp test fails for embedded server
-#SELECT VARIABLE_VALUE-@global_mem_used FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='MEMORY_USED';
-DROP PROCEDURE sp1;
--echo # End of 10.3 tests
diff --git a/mysql-test/suite/encryption/r/encrypt_and_grep.result b/mysql-test/suite/encryption/r/encrypt_and_grep.result
index 635dca14868..72d612eeac8 100644
--- a/mysql-test/suite/encryption/r/encrypt_and_grep.result
+++ b/mysql-test/suite/encryption/r/encrypt_and_grep.result
@@ -19,6 +19,7 @@ mysql/innodb_table_stats
mysql/transaction_registry
test/t1
test/t2
+FLUSH TABLES t1,t2,t3 FOR EXPORT;
# t1 yes on expecting NOT FOUND
NOT FOUND /foobarsecret/ in t1.ibd
# t2 ... on expecting NOT FOUND
@@ -27,7 +28,7 @@ NOT FOUND /tempsecret/ in t2.ibd
FOUND 12 /dummysecret/ in t3.ibd
# ibdata1 expecting NOT FOUND
NOT FOUND /foobarsecret/ in ibdata1
-# restart
+UNLOCK TABLES;
# Now turn off encryption and wait for threads to decrypt everything
SET GLOBAL innodb_encrypt_tables = off;
# Wait max 10 min for key encryption threads to decrypt all spaces
@@ -42,6 +43,7 @@ test/t3
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0;
NAME
test/t1
+FLUSH TABLES t1,t2,t3 FOR EXPORT;
# t1 yes on expecting NOT FOUND
NOT FOUND /foobarsecret/ in t1.ibd
# t2 ... default expecting FOUND
@@ -50,7 +52,7 @@ FOUND 12 /tempsecret/ in t2.ibd
FOUND 12 /dummysecret/ in t3.ibd
# ibdata1 expecting NOT FOUND
NOT FOUND /foobarsecret/ in ibdata1
-# restart
+UNLOCK TABLES;
# Now turn on encryption and wait for threads to encrypt all spaces
SET GLOBAL innodb_encrypt_tables = on;
# Wait max 10 min for key encryption threads to encrypt all spaces
@@ -65,6 +67,7 @@ mysql/innodb_table_stats
mysql/transaction_registry
test/t1
test/t2
+FLUSH TABLES t1,t2,t3 FOR EXPORT;
# t1 yes on expecting NOT FOUND
NOT FOUND /foobarsecret/ in t1.ibd
# t2 ... on expecting NOT FOUND
@@ -73,5 +76,5 @@ NOT FOUND /tempsecret/ in t2.ibd
FOUND 12 /dummysecret/ in t3.ibd
# ibdata1 expecting NOT FOUND
NOT FOUND /foobarsecret/ in ibdata1
-# restart
+UNLOCK TABLES;
drop table t1, t2, t3;
diff --git a/mysql-test/suite/encryption/t/encrypt_and_grep.test b/mysql-test/suite/encryption/t/encrypt_and_grep.test
index 5fec86304b4..03f67db83f9 100644
--- a/mysql-test/suite/encryption/t/encrypt_and_grep.test
+++ b/mysql-test/suite/encryption/t/encrypt_and_grep.test
@@ -1,9 +1,6 @@
-- source include/have_innodb.inc
-- source include/have_file_key_management_plugin.inc
-# embedded does not support restart
--- source include/not_embedded.inc
-
#
# MDEV-8138: strange results from encrypt-and-grep test
#
@@ -35,7 +32,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
--sorted_result
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0;
---source include/shutdown_mysqld.inc
+FLUSH TABLES t1,t2,t3 FOR EXPORT;
--let SEARCH_PATTERN=foobarsecret
--echo # t1 yes on expecting NOT FOUND
@@ -54,7 +51,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
-- let SEARCH_FILE=$ib1_IBD
-- source include/search_pattern_in_file.inc
--- source include/start_mysqld.inc
+UNLOCK TABLES;
--echo # Now turn off encryption and wait for threads to decrypt everything
@@ -71,7 +68,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
--sorted_result
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0;
---source include/shutdown_mysqld.inc
+FLUSH TABLES t1,t2,t3 FOR EXPORT;
--let SEARCH_PATTERN=foobarsecret
--echo # t1 yes on expecting NOT FOUND
@@ -90,8 +87,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
-- let SEARCH_FILE=$ib1_IBD
-- source include/search_pattern_in_file.inc
-
--- source include/start_mysqld.inc
+UNLOCK TABLES;
--echo # Now turn on encryption and wait for threads to encrypt all spaces
SET GLOBAL innodb_encrypt_tables = on;
@@ -106,7 +102,7 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
--sorted_result
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0;
---source include/shutdown_mysqld.inc
+FLUSH TABLES t1,t2,t3 FOR EXPORT;
--let SEARCH_PATTERN=foobarsecret
--echo # t1 yes on expecting NOT FOUND
@@ -125,6 +121,6 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
-- let SEARCH_FILE=$ib1_IBD
-- source include/search_pattern_in_file.inc
--- source include/start_mysqld.inc
+UNLOCK TABLES;
drop table t1, t2, t3;
diff --git a/mysql-test/suite/galera/r/galera_ssl_upgrade.result b/mysql-test/suite/galera/r/galera_ssl_upgrade.result
index 134d1d1b605..9993b86e0e9 100644
--- a/mysql-test/suite/galera/r/galera_ssl_upgrade.result
+++ b/mysql-test/suite/galera/r/galera_ssl_upgrade.result
@@ -1,9 +1,9 @@
connection node_2;
connection node_1;
connection node_1;
-call mtr.add_suppression("WSREP: write_handler(): protocol is shutdown.*");
+call mtr.add_suppression("WSREP: write_handler().*");
connection node_2;
-call mtr.add_suppression("WSREP: write_handler(): protocol is shutdown.*");
+call mtr.add_suppression("WSREP: write_handler():.*");
connection node_1;
connection node_2;
connection node_1;
@@ -27,5 +27,7 @@ SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_N
VARIABLE_VALUE = 2
1
connection node_2;
-disconnect node_2;
-disconnect node_1;
+connection node_1;
+call mtr.add_suppression("WSREP: write_handler().*");
+connection node_2;
+call mtr.add_suppression("WSREP: write_handler():.*");
diff --git a/mysql-test/suite/galera/t/galera_ssl_upgrade.test b/mysql-test/suite/galera/t/galera_ssl_upgrade.test
index c4ad652a482..2c55238809f 100644
--- a/mysql-test/suite/galera/t/galera_ssl_upgrade.test
+++ b/mysql-test/suite/galera/t/galera_ssl_upgrade.test
@@ -9,9 +9,9 @@
--source include/have_ssl_communication.inc
--connection node_1
-call mtr.add_suppression("WSREP: write_handler(): protocol is shutdown.*");
+call mtr.add_suppression("WSREP: write_handler().*");
--connection node_2
-call mtr.add_suppression("WSREP: write_handler(): protocol is shutdown.*");
+call mtr.add_suppression("WSREP: write_handler():.*");
# Save original auto_increment_offset values.
--let $node_1=node_1
@@ -76,4 +76,8 @@ SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_N
# Restore original auto_increment_offset values.
--source include/auto_increment_offset_restore.inc
---source include/galera_end.inc
+--connection node_1
+call mtr.add_suppression("WSREP: write_handler().*");
+--connection node_2
+call mtr.add_suppression("WSREP: write_handler():.*");
+
diff --git a/mysql-test/suite/innodb/r/alter_crash.result b/mysql-test/suite/innodb/r/alter_crash.result
index 7572c911581..46ea85d3e1e 100644
--- a/mysql-test/suite/innodb/r/alter_crash.result
+++ b/mysql-test/suite/innodb/r/alter_crash.result
@@ -189,3 +189,36 @@ disconnect con1;
DROP TABLE t1;
SET DEBUG_SYNC = 'RESET';
SET SQL_MODE=DEFAULT;
+#
+# MDEV-26936 Recovery crash on rolling back DELETE FROM SYS_INDEXES
+#
+CREATE TABLE t1(a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
+INSERT INTO t1 VALUES(1,1);
+connect ddl, localhost, root;
+SET DEBUG_SYNC = 'row_merge_after_scan SIGNAL scanned WAIT_FOR commit';
+SET DEBUG_SYNC = 'before_commit_rollback_inplace SIGNAL c WAIT_FOR ever';
+ALTER TABLE t1 ADD UNIQUE INDEX(b), ALGORITHM=INPLACE;
+connection default;
+SET DEBUG_SYNC = 'now WAIT_FOR scanned';
+BEGIN;
+INSERT INTO t1 VALUES(2,1);
+SET DEBUG_SYNC = 'now SIGNAL commit';
+SET DEBUG_SYNC = 'now WAIT_FOR c';
+SET GLOBAL innodb_fil_make_page_dirty_debug=0;
+# Kill the server
+disconnect ddl;
+# restart
+CHECK TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) NOT NULL,
+ `b` int(11) DEFAULT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t1;
+a b
+1 1
+DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/r/innodb_ctype_tis620.result b/mysql-test/suite/innodb/r/innodb_ctype_tis620.result
new file mode 100644
index 00000000000..0dc71fec719
--- /dev/null
+++ b/mysql-test/suite/innodb/r/innodb_ctype_tis620.result
@@ -0,0 +1,28 @@
+SET DEFAULT_STORAGE_ENGINE=InnoDB;
+#
+# Start of 10.2 tests
+#
+#
+# MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing Export
+#
+CREATE TABLE t1(c TEXT CHARACTER SET tis620);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` text CHARACTER SET tis620 DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES('100');
+ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE;
+DROP TABLE t1;
+CREATE TABLE t1(c TEXT CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` text CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES('100');
+ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE;
+DROP TABLE t1;
+#
+# End of 10.2 tests
+#
diff --git a/mysql-test/suite/innodb/t/alter_crash.test b/mysql-test/suite/innodb/t/alter_crash.test
index ea2716b9111..1049efd3e12 100644
--- a/mysql-test/suite/innodb/t/alter_crash.test
+++ b/mysql-test/suite/innodb/t/alter_crash.test
@@ -4,6 +4,7 @@
--source include/not_embedded.inc
--source include/have_innodb.inc
--source include/have_debug.inc
+--source include/have_debug_sync.inc
--source include/not_crashrep.inc
--disable_query_log
@@ -195,3 +196,33 @@ disconnect con1;
DROP TABLE t1;
SET DEBUG_SYNC = 'RESET';
SET SQL_MODE=DEFAULT;
+
+--echo #
+--echo # MDEV-26936 Recovery crash on rolling back DELETE FROM SYS_INDEXES
+--echo #
+
+CREATE TABLE t1(a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
+INSERT INTO t1 VALUES(1,1);
+
+connect ddl, localhost, root;
+SET DEBUG_SYNC = 'row_merge_after_scan SIGNAL scanned WAIT_FOR commit';
+SET DEBUG_SYNC = 'before_commit_rollback_inplace SIGNAL c WAIT_FOR ever';
+send ALTER TABLE t1 ADD UNIQUE INDEX(b), ALGORITHM=INPLACE;
+
+connection default;
+SET DEBUG_SYNC = 'now WAIT_FOR scanned';
+BEGIN;
+INSERT INTO t1 VALUES(2,1);
+SET DEBUG_SYNC = 'now SIGNAL commit';
+SET DEBUG_SYNC = 'now WAIT_FOR c';
+# Make all pending changes durable for recovery.
+SET GLOBAL innodb_fil_make_page_dirty_debug=0;
+
+--source include/kill_mysqld.inc
+disconnect ddl;
+--source include/start_mysqld.inc
+
+CHECK TABLE t1;
+SHOW CREATE TABLE t1;
+SELECT * FROM t1;
+DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/t/innodb_ctype_tis620.test b/mysql-test/suite/innodb/t/innodb_ctype_tis620.test
new file mode 100644
index 00000000000..4bab0fe9561
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb_ctype_tis620.test
@@ -0,0 +1,29 @@
+--source include/have_innodb.inc
+--source include/have_tis620.inc
+
+SET DEFAULT_STORAGE_ENGINE=InnoDB;
+
+--echo #
+--echo # Start of 10.2 tests
+--echo #
+
+--echo #
+--echo # MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing Export
+--echo #
+
+CREATE TABLE t1(c TEXT CHARACTER SET tis620);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES('100');
+ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE;
+DROP TABLE t1;
+
+CREATE TABLE t1(c TEXT CHARACTER SET tis620 COLLATE tis620_thai_nopad_ci);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES('100');
+ALTER TABLE t1 ADD FULLTEXT INDEX(c), ALGORITHM=INPLACE;
+DROP TABLE t1;
+
+
+--echo #
+--echo # End of 10.2 tests
+--echo #
diff --git a/mysql-test/suite/maria/maria.result b/mysql-test/suite/maria/maria.result
index c51e4996fa4..ad714f26fb6 100644
--- a/mysql-test/suite/maria/maria.result
+++ b/mysql-test/suite/maria/maria.result
@@ -2882,3 +2882,14 @@ insert into t1 values (8,'0');
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
unlock tables;
drop table t1;
+#
+# MDEV-22284 Aria table key read crash because wrong index used
+#
+create table t1 (
+a int auto_increment,
+b int, c int,
+key(c, a), unique(b)
+) engine aria
+partition by hash (b);
+replace into t1 values (1, 0, 0), (2, 0, 0), (0, 0, 0);
+drop table t1;
diff --git a/mysql-test/suite/maria/maria.test b/mysql-test/suite/maria/maria.test
index 123996bed05..8e617eebc62 100644
--- a/mysql-test/suite/maria/maria.test
+++ b/mysql-test/suite/maria/maria.test
@@ -2099,3 +2099,16 @@ aria_page_checksum=$default_checksum,
aria_log_file_size=$default_log_file_size;
--enable_result_log
--enable_query_log
+
+--echo #
+--echo # MDEV-22284 Aria table key read crash because wrong index used
+--echo #
+create table t1 (
+ a int auto_increment,
+ b int, c int,
+ key(c, a), unique(b)
+) engine aria
+partition by hash (b);
+replace into t1 values (1, 0, 0), (2, 0, 0), (0, 0, 0);
+# cleanup
+drop table t1;
diff --git a/mysql-test/suite/rpl/include/rpl_drop_create_temp_table.inc b/mysql-test/suite/rpl/include/rpl_drop_create_temp_table.inc
index a7ee54658f8..bbc7209e57f 100644
--- a/mysql-test/suite/rpl/include/rpl_drop_create_temp_table.inc
+++ b/mysql-test/suite/rpl/include/rpl_drop_create_temp_table.inc
@@ -58,7 +58,7 @@ if (`SELECT HEX(@commands) = HEX('configure')`)
--eval CREATE TEMPORARY TABLE nt_tmp_xx_1 ( id INT ) ENGINE = MyIsam
#
- # Creates a Temporary N-table that is never dropped.
+ # Creates a Temporary T-table that is never dropped.
#
--eval CREATE TEMPORARY TABLE tt_tmp_xx_1 ( id INT ) ENGINE = Innodb
diff --git a/mysql-test/suite/rpl/include/rpl_drop_create_temp_table.test b/mysql-test/suite/rpl/include/rpl_drop_create_temp_table.test
index 456419803db..6eb725d469c 100644
--- a/mysql-test/suite/rpl/include/rpl_drop_create_temp_table.test
+++ b/mysql-test/suite/rpl/include/rpl_drop_create_temp_table.test
@@ -483,6 +483,65 @@ SET @commands= 'B N N-Temp T-SELECT-T-Temp N-Temp Te R';
SET @commands= 'B N N-Temp T-SELECT-T-Temp N-Temp NeT-trig R';
--source suite/rpl/include/rpl_drop_create_temp_table.inc
+--echo # > MDEV-26833
+--echo # Errored out and rolled back Te statement should not produce any event to binlog
+--echo # in the following cases:
+
+SET @sav_var = @@session.binlog_direct_non_transactional_updates;
+
+SET @@session.binlog_direct_non_transactional_updates = ON;
+SET @commands= 'B T Drop-Temp-TT-Temp Te C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T Drop-Temp-TN-Temp Te C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T N-Temp Te C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+
+SET @commands= 'B T Drop-Temp-TT-Temp Te R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T Drop-Temp-TN-Temp Te R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T N-Temp Te R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+
+--echo # Non-transactional side effects.
+SET @commands= 'B T N-Temp Te Ne C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T N-Temp Te Ne R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+
+SET @@session.binlog_direct_non_transactional_updates = OFF;
+SET @commands= 'B T Drop-Temp-TT-Temp Te C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T Drop-Temp-TN-Temp Te C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T N-Temp Te C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+
+SET @commands= 'B T Drop-Temp-TT-Temp Te R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T Drop-Temp-TN-Temp Te R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T N-Temp Te R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+
+--echo # Non-transactional side effects.
+SET @commands= 'B T N-Temp Te Ne C';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+SET @commands= 'B T N-Temp Te Ne R';
+--source suite/rpl/include/rpl_drop_create_temp_table.inc
+
+SET @@session.binlog_direct_non_transactional_updates = @sav_var;
+--echo # < MDEV-26833
+
--echo ###################################################################################
--echo # CHECK CONSISTENCY
--echo ###################################################################################
@@ -495,8 +554,7 @@ if (`select @@session.binlog_format != 'STATEMENT'`)
{
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLD_DATADIR/test-temporary-master.sql
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLD_DATADIR/test-temporary-slave.sql
- # uncomment when anders.song@greatopensource.com-20110105052107-zoab0bsf5a6xxk2y from mysql-5.6 is merged
- #--diff_files $MYSQLD_DATADIR/test-temporary-master.sql $MYSQLD_DATADIR/test-temporary-slave.sql
+ --diff_files $MYSQLD_DATADIR/test-temporary-master.sql $MYSQLD_DATADIR/test-temporary-slave.sql
}
--echo #########################################################################
diff --git a/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result b/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result
index d2f590ad136..f8af2d439eb 100644
--- a/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result
+++ b/mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result
@@ -2119,6 +2119,374 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT
-e-e-e-e-e-e-e-e-e-e-e- >> B N N-Temp T-SELECT-T-Temp N-Temp NeT-trig R << -e-e-e-e-e-e-e-e-e-e-e-
+# > MDEV-26833
+# Errored out and rolled back Te statement should not produce any event to binlog
+# in the following cases:
+SET @sav_var = @@session.binlog_direct_non_transactional_updates;
+SET @@session.binlog_direct_non_transactional_updates = ON;
+SET @commands= 'B T Drop-Temp-TT-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (7), (7);
+ERROR 23000: Duplicate entry '7' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (8), (8);
+ERROR 23000: Duplicate entry '8' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (9), (9);
+ERROR 23000: Duplicate entry '9' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (10), (10);
+ERROR 23000: Duplicate entry '10' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TT-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (11), (11);
+ERROR 23000: Duplicate entry '11' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (12), (12);
+ERROR 23000: Duplicate entry '12' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (13), (13);
+ERROR 23000: Duplicate entry '13' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (14), (14);
+ERROR 23000: Duplicate entry '14' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+# Non-transactional side effects.
+SET @commands= 'B T N-Temp Te Ne C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (15), (15);
+ERROR 23000: Duplicate entry '15' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (13), (13);
+ERROR 23000: Duplicate entry '13' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (13), (13)
+master-bin.000001 # Table_map # # table_id: # (test.nt_error_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te Ne R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (16), (16);
+ERROR 23000: Duplicate entry '16' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (14), (14);
+ERROR 23000: Duplicate entry '14' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (14), (14)
+master-bin.000001 # Table_map # # table_id: # (test.nt_error_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @@session.binlog_direct_non_transactional_updates = OFF;
+SET @commands= 'B T Drop-Temp-TT-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (17), (17);
+ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (18), (18);
+ERROR 23000: Duplicate entry '18' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (19), (19);
+ERROR 23000: Duplicate entry '19' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (20), (20);
+ERROR 23000: Duplicate entry '20' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TT-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (21), (21);
+ERROR 23000: Duplicate entry '21' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (22), (22);
+ERROR 23000: Duplicate entry '22' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (23), (23);
+ERROR 23000: Duplicate entry '23' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (24), (24);
+ERROR 23000: Duplicate entry '24' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+# Non-transactional side effects.
+SET @commands= 'B T N-Temp Te Ne C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (25), (25);
+ERROR 23000: Duplicate entry '25' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (15), (15);
+ERROR 23000: Duplicate entry '15' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (15), (15)
+master-bin.000001 # Table_map # # table_id: # (test.nt_error_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te Ne R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (26), (26);
+ERROR 23000: Duplicate entry '26' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (16), (16);
+ERROR 23000: Duplicate entry '16' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (16), (16)
+master-bin.000001 # Table_map # # table_id: # (test.nt_error_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @@session.binlog_direct_non_transactional_updates = @sav_var;
+# < MDEV-26833
###################################################################################
# CHECK CONSISTENCY
###################################################################################
diff --git a/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result b/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result
index f6e04b950d8..3be043eb8af 100644
--- a/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result
+++ b/mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result
@@ -619,9 +619,6 @@ master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
-master-bin.000001 # Annotate_rows # # INSERT INTO tt_error_1() VALUES (1), (1)
-master-bin.000001 # Table_map # # table_id: # (test.tt_error_1)
-master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-NN-Temp N Drop-Temp-NN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
@@ -1163,9 +1160,6 @@ master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
-master-bin.000001 # Annotate_rows # # INSERT INTO tt_error_1() VALUES (2), (2)
-master-bin.000001 # Table_map # # table_id: # (test.tt_error_1)
-master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # ROLLBACK
-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-NN-Temp N Drop-Temp-NN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
@@ -1633,12 +1627,6 @@ ERROR 23000: Duplicate entry '3' for key 'PRIMARY'
COMMIT;
-b-b-b-b-b-b-b-b-b-b-b- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
include/show_binlog_events.inc
-Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 # Gtid # # BEGIN GTID #-#-#
-master-bin.000001 # Annotate_rows # # INSERT INTO tt_error_1() VALUES (3), (3)
-master-bin.000001 # Table_map # # table_id: # (test.tt_error_1)
-master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
-master-bin.000001 # Query # # COMMIT
-e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
SET @commands= 'B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp NeT-trig C';
@@ -1725,12 +1713,6 @@ ERROR 23000: Duplicate entry '4' for key 'PRIMARY'
ROLLBACK;
-b-b-b-b-b-b-b-b-b-b-b- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
include/show_binlog_events.inc
-Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 # Gtid # # BEGIN GTID #-#-#
-master-bin.000001 # Annotate_rows # # INSERT INTO tt_error_1() VALUES (4), (4)
-master-bin.000001 # Table_map # # table_id: # (test.tt_error_1)
-master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
-master-bin.000001 # Query # # ROLLBACK
-e-e-e-e-e-e-e-e-e-e-e- >> B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
SET @commands= 'B Drop-Temp-T-Temp Create-T-Temp Drop-Temp-T-Temp Drop-Temp-T-Temp NeT-trig R';
@@ -2066,6 +2048,374 @@ master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT
-e-e-e-e-e-e-e-e-e-e-e- >> B N N-Temp T-SELECT-T-Temp N-Temp NeT-trig R << -e-e-e-e-e-e-e-e-e-e-e-
+# > MDEV-26833
+# Errored out and rolled back Te statement should not produce any event to binlog
+# in the following cases:
+SET @sav_var = @@session.binlog_direct_non_transactional_updates;
+SET @@session.binlog_direct_non_transactional_updates = ON;
+SET @commands= 'B T Drop-Temp-TT-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (7), (7);
+ERROR 23000: Duplicate entry '7' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (8), (8);
+ERROR 23000: Duplicate entry '8' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (9), (9);
+ERROR 23000: Duplicate entry '9' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (10), (10);
+ERROR 23000: Duplicate entry '10' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TT-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (11), (11);
+ERROR 23000: Duplicate entry '11' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (12), (12);
+ERROR 23000: Duplicate entry '12' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (13), (13);
+ERROR 23000: Duplicate entry '13' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (14), (14);
+ERROR 23000: Duplicate entry '14' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+# Non-transactional side effects.
+SET @commands= 'B T N-Temp Te Ne C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (15), (15);
+ERROR 23000: Duplicate entry '15' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (13), (13);
+ERROR 23000: Duplicate entry '13' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (13), (13)
+master-bin.000001 # Table_map # # table_id: # (test.nt_error_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te Ne R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (16), (16);
+ERROR 23000: Duplicate entry '16' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (14), (14);
+ERROR 23000: Duplicate entry '14' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (14), (14)
+master-bin.000001 # Table_map # # table_id: # (test.nt_error_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @@session.binlog_direct_non_transactional_updates = OFF;
+SET @commands= 'B T Drop-Temp-TT-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (17), (17);
+ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (18), (18);
+ERROR 23000: Duplicate entry '18' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (19), (19);
+ERROR 23000: Duplicate entry '19' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (20), (20);
+ERROR 23000: Duplicate entry '20' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TT-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (21), (21);
+ERROR 23000: Duplicate entry '21' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (22), (22);
+ERROR 23000: Duplicate entry '22' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (23), (23);
+ERROR 23000: Duplicate entry '23' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (24), (24);
+ERROR 23000: Duplicate entry '24' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+# Non-transactional side effects.
+SET @commands= 'B T N-Temp Te Ne C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (25), (25);
+ERROR 23000: Duplicate entry '25' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (15), (15);
+ERROR 23000: Duplicate entry '15' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (15), (15)
+master-bin.000001 # Table_map # # table_id: # (test.nt_error_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Table_map # # table_id: # (test.tt_xx_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te Ne R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (26), (26);
+ERROR 23000: Duplicate entry '26' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (16), (16);
+ERROR 23000: Duplicate entry '16' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Annotate_rows # # INSERT INTO nt_error_1() VALUES (16), (16)
+master-bin.000001 # Table_map # # table_id: # (test.nt_error_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @@session.binlog_direct_non_transactional_updates = @sav_var;
+# < MDEV-26833
###################################################################################
# CHECK CONSISTENCY
###################################################################################
diff --git a/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result b/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result
index d4250159866..976097fb4ec 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result
@@ -2195,6 +2195,388 @@ master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1 SELECT * FROM tt_t
master-bin.000001 # Query # # ROLLBACK
-e-e-e-e-e-e-e-e-e-e-e- >> B N N-Temp T-SELECT-T-Temp N-Temp NeT-trig R << -e-e-e-e-e-e-e-e-e-e-e-
+# > MDEV-26833
+# Errored out and rolled back Te statement should not produce any event to binlog
+# in the following cases:
+SET @sav_var = @@session.binlog_direct_non_transactional_updates;
+SET @@session.binlog_direct_non_transactional_updates = ON;
+SET @commands= 'B T Drop-Temp-TT-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (7), (7);
+ERROR 23000: Duplicate entry '7' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_1`,`tt_tmp_2` /* generated by server */
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (8), (8);
+ERROR 23000: Duplicate entry '8' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (9), (9);
+ERROR 23000: Duplicate entry '9' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `nt_tmp_2` /* generated by server */
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (10), (10);
+ERROR 23000: Duplicate entry '10' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TT-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (11), (11);
+ERROR 23000: Duplicate entry '11' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_1`,`tt_tmp_2` /* generated by server */
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (12), (12);
+ERROR 23000: Duplicate entry '12' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (13), (13);
+ERROR 23000: Duplicate entry '13' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `nt_tmp_2` /* generated by server */
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (14), (14);
+ERROR 23000: Duplicate entry '14' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+# Non-transactional side effects.
+SET @commands= 'B T N-Temp Te Ne C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (15), (15);
+ERROR 23000: Duplicate entry '15' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (13), (13);
+ERROR 23000: Duplicate entry '13' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_error_1() VALUES (13), (13)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te Ne R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (16), (16);
+ERROR 23000: Duplicate entry '16' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (14), (14);
+ERROR 23000: Duplicate entry '14' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_error_1() VALUES (14), (14)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @@session.binlog_direct_non_transactional_updates = OFF;
+SET @commands= 'B T Drop-Temp-TT-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (17), (17);
+ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_1`,`tt_tmp_2` /* generated by server */
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te C';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (18), (18);
+ERROR 23000: Duplicate entry '18' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (19), (19);
+ERROR 23000: Duplicate entry '19' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `nt_tmp_2` /* generated by server */
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (20), (20);
+ERROR 23000: Duplicate entry '20' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TT-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_1, tt_tmp_2;
+INSERT INTO tt_error_1() VALUES (21), (21);
+ERROR 23000: Duplicate entry '21' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TT-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_1`,`tt_tmp_2` /* generated by server */
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TT-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'Drop-Temp-T-Temp B T Create-T-Temp Te R';
+DROP TEMPORARY TABLE tt_tmp_2;
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb;
+INSERT INTO tt_error_1() VALUES (22), (22);
+ERROR 23000: Duplicate entry '22' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE tt_tmp_2 ( id INT ) engine= Innodb
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> Drop-Temp-T-Temp B T Create-T-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T Drop-Temp-TN-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+DROP TEMPORARY TABLE tt_tmp_2, nt_tmp_2;
+INSERT INTO tt_error_1() VALUES (23), (23);
+ERROR 23000: Duplicate entry '23' for key 'PRIMARY'
+ROLLBACK;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T Drop-Temp-TN-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `nt_tmp_2` /* generated by server */
+master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt_tmp_2` /* generated by server */
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T Drop-Temp-TN-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (24), (24);
+ERROR 23000: Duplicate entry '24' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te R << -e-e-e-e-e-e-e-e-e-e-e-
+
+# Non-transactional side effects.
+SET @commands= 'B T N-Temp Te Ne C';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (25), (25);
+ERROR 23000: Duplicate entry '25' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (15), (15);
+ERROR 23000: Duplicate entry '15' for key 'PRIMARY'
+COMMIT;
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_error_1() VALUES (15), (15)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne C << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @commands= 'B T N-Temp Te Ne R';
+BEGIN;
+INSERT INTO tt_xx_1() VALUES (1);
+INSERT INTO nt_tmp_xx_1() VALUES (1);
+INSERT INTO tt_error_1() VALUES (26), (26);
+ERROR 23000: Duplicate entry '26' for key 'PRIMARY'
+INSERT INTO nt_error_1() VALUES (16), (16);
+ERROR 23000: Duplicate entry '16' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+-b-b-b-b-b-b-b-b-b-b-b- >> B T N-Temp Te Ne R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_tmp_xx_1() VALUES (1)
+master-bin.000001 # Query # # use `test`; INSERT INTO nt_error_1() VALUES (16), (16)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B T N-Temp Te Ne R << -e-e-e-e-e-e-e-e-e-e-e-
+
+SET @@session.binlog_direct_non_transactional_updates = @sav_var;
+# < MDEV-26833
###################################################################################
# CHECK CONSISTENCY
###################################################################################
diff --git a/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test b/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
index d850202af33..e3d049f0cde 100644
--- a/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
+++ b/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
@@ -8,6 +8,7 @@
# Finish the following tests by calling its common test script:
# include/rpl_get_master_version_and_clock.test.
+source include/not_valgrind.inc;
source include/have_debug.inc;
source include/have_debug_sync.inc;
source include/master-slave.inc;
diff --git a/mysql-test/suite/rpl/t/rpl_row_big_table_id.test b/mysql-test/suite/rpl/t/rpl_row_big_table_id.test
index 4bfdceef297..15eadedba51 100644
--- a/mysql-test/suite/rpl/t/rpl_row_big_table_id.test
+++ b/mysql-test/suite/rpl/t/rpl_row_big_table_id.test
@@ -9,6 +9,7 @@
# Verify row-based events applying when table map id value is about and greater
# than 1 << 32.
##################################################################
+--source include/not_valgrind.inc
--source include/word_size.inc
--source include/have_debug.inc
--source include/have_binlog_format_row.inc
diff --git a/mysql-test/suite/versioning/r/create.result b/mysql-test/suite/versioning/r/create.result
index 1017db78a4b..cd0551abf98 100644
--- a/mysql-test/suite/versioning/r/create.result
+++ b/mysql-test/suite/versioning/r/create.result
@@ -611,3 +611,28 @@ t1 CREATE TABLE `t1` (
PRIMARY KEY (`id`)
) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
drop table t1;
+#
+# MDEV-26928 Column-inclusive WITH SYSTEM VERSIONING doesn't work with explicit system fields
+#
+create or replace table t1 (x int, y int with system versioning);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `x` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING,
+ `y` int(11) DEFAULT NULL
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
+create or replace table t1 (
+x int, y int with system versioning,
+row_start timestamp(6) as row start,
+row_end timestamp(6) as row end,
+period for system_time(row_start, row_end));
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `x` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING,
+ `y` int(11) DEFAULT NULL,
+ `row_start` timestamp(6) GENERATED ALWAYS AS ROW START WITHOUT SYSTEM VERSIONING,
+ `row_end` timestamp(6) GENERATED ALWAYS AS ROW END WITHOUT SYSTEM VERSIONING,
+ PERIOD FOR SYSTEM_TIME (`row_start`, `row_end`)
+) ENGINE=DEFAULT_ENGINE DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING
+drop table t1;
diff --git a/mysql-test/suite/versioning/r/partition.result b/mysql-test/suite/versioning/r/partition.result
index 87af899b1b3..c8d95ac0063 100644
--- a/mysql-test/suite/versioning/r/partition.result
+++ b/mysql-test/suite/versioning/r/partition.result
@@ -998,8 +998,7 @@ delete from t1;
delete from t1;
check table t1;
Table Op Msg_type Msg_text
-test.t1 check note Not supported for non-INTERVAL history partitions
-test.t1 check note The storage engine for the table doesn't support check
+test.t1 check status OK
drop table t1;
#
# MDEV-21233 Assertion `m_extra_cache' failed in ha_partition::late_extra_cache
diff --git a/mysql-test/suite/versioning/t/create.test b/mysql-test/suite/versioning/t/create.test
index abd82998dc5..f79d38d029b 100644
--- a/mysql-test/suite/versioning/t/create.test
+++ b/mysql-test/suite/versioning/t/create.test
@@ -454,3 +454,20 @@ show index from t1;
--replace_result $default_engine DEFAULT_ENGINE
show create table t1;
drop table t1;
+
+--echo #
+--echo # MDEV-26928 Column-inclusive WITH SYSTEM VERSIONING doesn't work with explicit system fields
+--echo #
+create or replace table t1 (x int, y int with system versioning);
+--replace_result $default_engine DEFAULT_ENGINE
+show create table t1;
+
+create or replace table t1 (
+ x int, y int with system versioning,
+ row_start timestamp(6) as row start,
+ row_end timestamp(6) as row end,
+ period for system_time(row_start, row_end));
+--replace_result $default_engine DEFAULT_ENGINE
+show create table t1;
+
+drop table t1;
diff --git a/sql/field.h b/sql/field.h
index 0b8f317b5b8..7be16a1457e 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -517,6 +517,7 @@ enum enum_vcol_info_type
{
VCOL_GENERATED_VIRTUAL, VCOL_GENERATED_STORED,
VCOL_DEFAULT, VCOL_CHECK_FIELD, VCOL_CHECK_TABLE,
+ VCOL_USING_HASH,
/* Additional types should be added here */
/* Following is the highest value last */
VCOL_TYPE_NONE = 127 // Since the 0 value is already in use
@@ -534,6 +535,8 @@ static inline const char *vcol_type_name(enum_vcol_info_type type)
case VCOL_CHECK_FIELD:
case VCOL_CHECK_TABLE:
return "CHECK";
+ case VCOL_USING_HASH:
+ return "USING HASH";
case VCOL_TYPE_NONE:
return "UNTYPED";
}
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 8259c26087a..f17abed82ff 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -1203,7 +1203,6 @@ static const LEX_CSTRING opt_op_name[]=
};
-static const LEX_CSTRING msg_note= { STRING_WITH_LEN("note") };
static const LEX_CSTRING msg_warning= { STRING_WITH_LEN("warning") };
#define msg_error error_clex_str
@@ -11068,11 +11067,8 @@ int ha_partition::check_misplaced_rows(uint read_part_id, bool do_repair)
read_part_id != m_part_info->vers_info->now_part->id &&
!m_part_info->vers_info->interval.is_set())
{
- print_admin_msg(ha_thd(), MYSQL_ERRMSG_SIZE, &msg_note,
- table_share->db.str, table->alias,
- &opt_op_name[CHECK_PARTS],
- "Not supported for non-INTERVAL history partitions");
- DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
+ /* Skip this check as it is not supported for non-INTERVAL history partitions. */
+ DBUG_RETURN(HA_ADMIN_OK);
}
if (do_repair)
diff --git a/sql/handler.cc b/sql/handler.cc
index 8c9bb983d4f..57992d98c04 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -8282,15 +8282,16 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
if (!vers_info.need_check(alter_info))
return false;
- if (!vers_info.versioned_fields && vers_info.unversioned_fields &&
- !(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING))
+ const bool add_versioning= alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING;
+
+ if (!vers_info.versioned_fields && vers_info.unversioned_fields && !add_versioning)
{
// All is correct but this table is not versioned.
options&= ~HA_VERSIONED_TABLE;
return false;
}
- if (!(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING) && vers_info)
+ if (!add_versioning && vers_info && !vers_info.versioned_fields)
{
my_error(ER_MISSING, MYF(0), create_table.table_name.str,
"WITH SYSTEM VERSIONING");
@@ -8300,8 +8301,7 @@ bool Table_scope_and_contents_source_st::vers_fix_system_fields(
List_iterator<Create_field> it(alter_info->create_list);
while (Create_field *f= it++)
{
- if ((f->versioning == Column_definition::VERSIONING_NOT_SET &&
- !(alter_info->flags & ALTER_ADD_SYSTEM_VERSIONING)) ||
+ if ((f->versioning == Column_definition::VERSIONING_NOT_SET && !add_versioning) ||
f->versioning == Column_definition::WITHOUT_VERSIONING)
{
f->flags|= VERS_UPDATE_UNVERSIONED_FLAG;
diff --git a/sql/handler.h b/sql/handler.h
index 07b62a2e177..3303b8fe9e0 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -483,6 +483,7 @@ enum chf_create_flags {
#define HA_CREATE_TMP_ALTER 8U
#define HA_LEX_CREATE_SEQUENCE 16U
#define HA_VERSIONED_TABLE 32U
+#define HA_SKIP_KEY_SORT 64U
#define HA_MAX_REC_LENGTH 65535
@@ -789,11 +790,16 @@ typedef bool Log_func(THD*, TABLE*, bool, const uchar*, const uchar*);
*/
#define ALTER_COLUMN_INDEX_LENGTH (1ULL << 60)
+/**
+ Indicate that index order might have been changed. Disables inplace algorithm
+ by default (not for InnoDB).
+*/
+#define ALTER_INDEX_ORDER (1ULL << 61)
/**
Means that the ignorability of an index is changed.
*/
-#define ALTER_INDEX_IGNORABILITY (1ULL << 61)
+#define ALTER_INDEX_IGNORABILITY (1ULL << 62)
/*
Flags set in partition_flags when altering partitions
@@ -1871,9 +1877,13 @@ struct THD_TRANS
/*
Define the type of statements which cannot be rolled back safely.
Each type occupies one bit in m_unsafe_rollback_flags.
+ MODIFIED_NON_TRANS_TABLE is limited to mark only the temporary
+ non-transactional table *when* it's cached along with the transactional
+ events; the regular table is covered by the "namesake" bool var.
*/
enum unsafe_statement_types
{
+ MODIFIED_NON_TRANS_TABLE= 1,
CREATED_TEMP_TABLE= 2,
DROPPED_TEMP_TABLE= 4,
DID_WAIT= 8,
@@ -1881,6 +1891,14 @@ struct THD_TRANS
EXECUTED_TABLE_ADMIN_CMD= 0x20
};
+ void mark_modified_non_trans_temp_table()
+ {
+ m_unsafe_rollback_flags|= MODIFIED_NON_TRANS_TABLE;
+ }
+ bool has_modified_non_trans_temp_table() const
+ {
+ return (m_unsafe_rollback_flags & MODIFIED_NON_TRANS_TABLE) != 0;
+ }
void mark_executed_table_admin_cmd()
{
DBUG_PRINT("debug", ("mark_executed_table_admin_cmd"));
diff --git a/sql/item.h b/sql/item.h
index 947e46532e4..636ec47b43e 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -7701,6 +7701,19 @@ public:
/*
+ fix_escape_item() sets the out "escape" parameter to:
+ - native code in case of an 8bit character set
+ - Unicode code point in case of a multi-byte character set
+
+ The value meaning a not-initialized ESCAPE character must not be equal to
+ any valid value, so must be outside of these ranges:
+ - -128..+127, not to conflict with a valid 8bit charcter
+ - 0..0x10FFFF, not to conflict with a valid Unicode code point
+ The exact value does not matter.
+*/
+#define ESCAPE_NOT_INITIALIZED -1000
+
+/*
It's used in ::fix_fields() methods of LIKE and JSON_SEARCH
functions to handle the ESCAPE parameter.
This parameter is quite non-standard so the specific function.
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index 22756d543cb..0d22465af6b 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -5608,7 +5608,7 @@ void Item_func_like::print(String *str, enum_query_type query_type)
longlong Item_func_like::val_int()
{
DBUG_ASSERT(fixed());
- DBUG_ASSERT(escape != -1);
+ DBUG_ASSERT(escape != ESCAPE_NOT_INITIALIZED);
String* res= args[0]->val_str(&cmp_value1);
if (args[0]->null_value)
{
@@ -5712,7 +5712,7 @@ bool fix_escape_item(THD *thd, Item *escape_item, String *tmp_str,
return TRUE;
}
- IF_DBUG(*escape= -1,);
+ IF_DBUG(*escape= ESCAPE_NOT_INITIALIZED,);
if (escape_item->const_item())
{
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 1129292deda..d4bf28a9c21 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2017, Oracle and/or its affiliates.
- Copyright (c) 2009, 2020, MariaDB Corporation.
+ Copyright (c) 2009, 2021, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -3716,11 +3716,13 @@ String *Item_func_set_collation::val_str(String *str)
bool Item_func_set_collation::fix_length_and_dec()
{
- if (!my_charset_same(args[0]->collation.collation, m_set_collation))
+ if (agg_arg_charsets_for_string_result(collation, args, 1))
+ return true;
+ if (!my_charset_same(collation.collation, m_set_collation))
{
my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0),
m_set_collation->coll_name.str,
- args[0]->collation.collation->cs_name.str);
+ collation.collation->cs_name.str);
return TRUE;
}
collation.set(m_set_collation, DERIVATION_EXPLICIT,
diff --git a/sql/log.cc b/sql/log.cc
index 969e2820975..70ceecc66f8 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -275,7 +275,7 @@ class binlog_cache_data
public:
binlog_cache_data(): m_pending(0), status(0),
before_stmt_pos(MY_OFF_T_UNDEF),
- incident(FALSE), changes_to_non_trans_temp_table_flag(FALSE),
+ incident(FALSE),
saved_max_binlog_cache_size(0), ptr_binlog_cache_use(0),
ptr_binlog_cache_disk_use(0)
{ }
@@ -324,16 +324,6 @@ public:
return(incident);
}
- void set_changes_to_non_trans_temp_table()
- {
- changes_to_non_trans_temp_table_flag= TRUE;
- }
-
- bool changes_to_non_trans_temp_table()
- {
- return (changes_to_non_trans_temp_table_flag);
- }
-
void reset()
{
bool cache_was_empty= empty();
@@ -345,7 +335,6 @@ public:
if (truncate_file)
my_chsize(cache_log.file, 0, 0, MYF(MY_WME));
- changes_to_non_trans_temp_table_flag= FALSE;
status= 0;
incident= FALSE;
before_stmt_pos= MY_OFF_T_UNDEF;
@@ -444,12 +433,6 @@ private:
*/
bool incident;
- /*
- This flag indicates if the cache has changes to temporary tables.
- @TODO This a temporary fix and should be removed after BUG#54562.
- */
- bool changes_to_non_trans_temp_table_flag;
-
/**
This function computes binlog cache and disk usage.
*/
@@ -2062,13 +2045,12 @@ inline bool is_prepared_xa(THD *thd)
*/
static bool trans_cannot_safely_rollback(THD *thd, bool all)
{
- binlog_cache_mngr *const cache_mngr=
- (binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
+ DBUG_ASSERT(ending_trans(thd, all));
return ((thd->variables.option_bits & OPTION_KEEP_LOG) ||
(trans_has_updated_non_trans_table(thd) &&
thd->wsrep_binlog_format() == BINLOG_FORMAT_STMT) ||
- (cache_mngr->trx_cache.changes_to_non_trans_temp_table() &&
+ (thd->transaction->all.has_modified_non_trans_temp_table() &&
thd->wsrep_binlog_format() == BINLOG_FORMAT_MIXED) ||
(trans_has_updated_non_trans_table(thd) &&
ending_single_stmt_trans(thd,all) &&
@@ -2287,17 +2269,19 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
/*
Truncate the cache if:
. aborting a single or multi-statement transaction or;
- . the OPTION_KEEP_LOG is not active and;
+ . the current statement created or dropped a temporary table
+ while having actual STATEMENT format;
. the format is not STMT or no non-trans table was
updated and;
. the format is not MIXED or no temporary non-trans table
was updated.
*/
else if (ending_trans(thd, all) ||
- (!(thd->variables.option_bits & OPTION_KEEP_LOG) &&
+ (!(thd->transaction->stmt.has_created_dropped_temp_table() &&
+ !thd->is_current_stmt_binlog_format_row()) &&
(!stmt_has_updated_non_trans_table(thd) ||
thd->wsrep_binlog_format() != BINLOG_FORMAT_STMT) &&
- (!cache_mngr->trx_cache.changes_to_non_trans_temp_table() ||
+ (!thd->transaction->stmt.has_modified_non_trans_temp_table() ||
thd->wsrep_binlog_format() != BINLOG_FORMAT_MIXED)))
error= binlog_truncate_trx_cache(thd, cache_mngr, all);
}
@@ -6639,9 +6623,8 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
cache_data= cache_mngr->get_binlog_cache_data(is_trans_cache);
file= &cache_data->cache_log;
- if (thd->lex->stmt_accessed_non_trans_temp_table())
- cache_data->set_changes_to_non_trans_temp_table();
-
+ if (thd->lex->stmt_accessed_non_trans_temp_table() && is_trans_cache)
+ thd->transaction->stmt.mark_modified_non_trans_temp_table();
thd->binlog_start_trans_and_stmt();
}
DBUG_PRINT("info",("event type: %d",event_info->get_type_code()));
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index df64bb5e27d..93a548b476e 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -8564,7 +8564,6 @@ static int get_options(int *argc_ptr, char ***argv_ptr)
{
/* Allow break with SIGINT, no core or stack trace */
test_flags|= TEST_SIGINT;
- opt_stack_trace= 1;
test_flags&= ~TEST_CORE_ON_SIGNAL;
}
/* Set global MyISAM variables from delay_key_write_options */
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index d1cf5c2d9bd..641c88de826 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -3438,8 +3438,13 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
It's reset further in the common code part.
It's merged with the saved parent's value at the exit of this func.
*/
- bool parent_modified_non_trans_table= thd->transaction->stmt.modified_non_trans_table;
+ bool parent_modified_non_trans_table=
+ thd->transaction->stmt.modified_non_trans_table;
+ unsigned int parent_unsafe_rollback_flags=
+ thd->transaction->stmt.m_unsafe_rollback_flags;
thd->transaction->stmt.modified_non_trans_table= FALSE;
+ thd->transaction->stmt.m_unsafe_rollback_flags= 0;
+
DBUG_ASSERT(!thd->derived_tables);
DBUG_ASSERT(thd->Item_change_list::is_empty());
/*
@@ -3562,6 +3567,7 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
what is needed from the substatement gained
*/
thd->transaction->stmt.modified_non_trans_table |= parent_modified_non_trans_table;
+ thd->transaction->stmt.m_unsafe_rollback_flags |= parent_unsafe_rollback_flags;
TRANSACT_TRACKER(add_trx_state_from_thd(thd));
diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc
index 747449f9718..58902fc859f 100644
--- a/sql/sql_alter.cc
+++ b/sql/sql_alter.cc
@@ -254,16 +254,8 @@ Alter_info::algorithm(const THD *thd) const
Alter_table_ctx::Alter_table_ctx()
- : implicit_default_value_error_field(NULL),
- error_if_not_empty(false),
- tables_opened(0),
- db(null_clex_str), table_name(null_clex_str), alias(null_clex_str),
- new_db(null_clex_str), new_name(null_clex_str), new_alias(null_clex_str),
- storage_engine_partitioned(false),
- tmp_storage_engine_name_partitioned(false),
- fk_error_if_delete_row(false), fk_error_id(NULL),
- fk_error_table(NULL),
- tmp_table(false)
+ : db(null_clex_str), table_name(null_clex_str), alias(null_clex_str),
+ new_db(null_clex_str), new_name(null_clex_str), new_alias(null_clex_str)
{
}
@@ -276,13 +268,8 @@ Alter_table_ctx::Alter_table_ctx(THD *thd, TABLE_LIST *table_list,
uint tables_opened_arg,
const LEX_CSTRING *new_db_arg,
const LEX_CSTRING *new_name_arg)
- : implicit_default_value_error_field(NULL), error_if_not_empty(false),
- tables_opened(tables_opened_arg),
- new_db(*new_db_arg), new_name(*new_name_arg),
- tmp_storage_engine_name_partitioned(false),
- fk_error_if_delete_row(false), fk_error_id(NULL),
- fk_error_table(NULL),
- tmp_table(false)
+ : tables_opened(tables_opened_arg),
+ new_db(*new_db_arg), new_name(*new_name_arg)
{
/*
Assign members db, table_name, new_db and new_name
diff --git a/sql/sql_alter.h b/sql/sql_alter.h
index 5975aa9a101..bf1edd4c964 100644
--- a/sql/sql_alter.h
+++ b/sql/sql_alter.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, 2014, Oracle and/or its affiliates.
- Copyright (c) 2013, 2020, MariaDB Corporation.
+ Copyright (c) 2013, 2021, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -315,9 +315,9 @@ public:
void report_implicit_default_value_error(THD *thd, const TABLE_SHARE *) const;
public:
- Create_field *implicit_default_value_error_field;
- bool error_if_not_empty;
- uint tables_opened;
+ Create_field *implicit_default_value_error_field= nullptr;
+ bool error_if_not_empty= false;
+ uint tables_opened= 0;
LEX_CSTRING db;
LEX_CSTRING table_name;
LEX_CSTRING storage_engine_name;
@@ -339,13 +339,14 @@ public:
of table to the new version ER_FK_CANNOT_DELETE_PARENT error should be
emitted.
*/
- bool fk_error_if_delete_row;
+ bool fk_error_if_delete_row= false;
/** Name of foreign key for the above error. */
- const char *fk_error_id;
+ const char *fk_error_id= nullptr;
/** Name of table for the above error. */
- const char *fk_error_table;
+ const char *fk_error_table= nullptr;
+ bool modified_primary_key= false;
/** Indicates that we are altering temporary table */
- bool tmp_table;
+ bool tmp_table= false;
private:
char new_filename[FN_REFLEN + 1];
diff --git a/sql/sql_class.h b/sql/sql_class.h
index f35a2daaba5..0d02f74686f 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -5385,7 +5385,8 @@ public:
transaction->all.modified_non_trans_table= TRUE;
transaction->all.m_unsafe_rollback_flags|=
(transaction->stmt.m_unsafe_rollback_flags &
- (THD_TRANS::DID_WAIT | THD_TRANS::CREATED_TEMP_TABLE |
+ (THD_TRANS::MODIFIED_NON_TRANS_TABLE |
+ THD_TRANS::DID_WAIT | THD_TRANS::CREATED_TEMP_TABLE |
THD_TRANS::DROPPED_TEMP_TABLE | THD_TRANS::DID_DDL |
THD_TRANS::EXECUTED_TABLE_ADMIN_CMD));
}
diff --git a/sql/sql_cursor.h b/sql/sql_cursor.h
index 00b9cd4e67a..b9d0b41ea19 100644
--- a/sql/sql_cursor.h
+++ b/sql/sql_cursor.h
@@ -39,7 +39,7 @@ class JOIN;
its base class.
*/
-class Server_side_cursor: protected Query_arena, public Sql_alloc
+class Server_side_cursor: protected Query_arena
{
protected:
/** Row destination used for fetch */
@@ -61,6 +61,8 @@ public:
}
virtual ~Server_side_cursor();
+ static void *operator new(size_t size, MEM_ROOT *mem_root)
+ { return alloc_root(mem_root, size); }
static void operator delete(void *ptr, size_t size);
static void operator delete(void *, MEM_ROOT *){}
};
diff --git a/sql/sql_prepare.h b/sql/sql_prepare.h
index d4a03c433b2..1a96df85a19 100644
--- a/sql/sql_prepare.h
+++ b/sql/sql_prepare.h
@@ -115,7 +115,7 @@ class Ed_row;
automatic type conversion.
*/
-class Ed_result_set: public Sql_alloc
+class Ed_result_set
{
public:
operator List<Ed_row>&() { return *m_rows; }
@@ -129,6 +129,8 @@ public:
size_t get_field_count() const { return m_column_count; }
+ static void *operator new(size_t size, MEM_ROOT *mem_root)
+ { return alloc_root(mem_root, size); }
static void operator delete(void *ptr, size_t size) throw ();
static void operator delete(void *, MEM_ROOT *){}
private:
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 6f6d643e0cd..7a7a56c1336 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -3553,9 +3553,30 @@ without_overlaps_err:
my_message(ER_WRONG_AUTO_KEY, ER_THD(thd, ER_WRONG_AUTO_KEY), MYF(0));
DBUG_RETURN(TRUE);
}
- /* Sort keys in optimized order */
- my_qsort((uchar*) *key_info_buffer, *key_count, sizeof(KEY),
- (qsort_cmp) sort_keys);
+ /*
+ We cannot do qsort of key info if MyISAM/Aria does inplace. These engines
+ do not synchronise key info on inplace alter and that qsort is
+ indeterministic (MDEV-25803).
+
+ Yet we do not know whether we do inplace or not. That detection is done
+ after this create_table_impl() and that cannot be changed because of chicken
+ and egg problem (inplace processing requires key info made by
+ create_table_impl()).
+
+ MyISAM/Aria cannot add index inplace so we are safe to qsort key info in
+ that case. And if we don't add index then we do not need qsort at all.
+ */
+ if (!(create_info->options & HA_SKIP_KEY_SORT))
+ {
+ /*
+ Sort keys in optimized order.
+
+ Note: PK must be always first key, otherwise init_from_binary_frm_image()
+ can not understand it.
+ */
+ my_qsort((uchar*) *key_info_buffer, *key_count, sizeof(KEY),
+ (qsort_cmp) sort_keys);
+ }
create_info->null_bits= null_fields;
/* Check fields. */
@@ -7767,7 +7788,6 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
uint used_fields, dropped_sys_vers_fields= 0;
KEY *key_info=table->key_info;
bool rc= TRUE;
- bool modified_primary_key= FALSE;
bool vers_system_invisible= false;
Create_field *def;
Field **f_ptr,*field;
@@ -8191,6 +8211,12 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
if (key_info->flags & HA_INVISIBLE_KEY)
continue;
const char *key_name= key_info->name.str;
+ const bool primary_key= table->s->primary_key == i;
+ const bool explicit_pk= primary_key &&
+ !my_strcasecmp(system_charset_info, key_name,
+ primary_key_name.str);
+ const bool implicit_pk= primary_key && !explicit_pk;
+
Alter_drop *drop;
drop_it.rewind();
while ((drop=drop_it++))
@@ -8204,7 +8230,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
if (table->s->tmp_table == NO_TMP_TABLE)
{
(void) delete_statistics_for_index(thd, table, key_info, FALSE);
- if (i == table->s->primary_key)
+ if (primary_key)
{
KEY *tab_key_info= table->key_info;
for (uint j=0; j < table->s->keys; j++, tab_key_info++)
@@ -8303,13 +8329,19 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
}
if (!cfield)
{
- if (table->s->primary_key == i)
- modified_primary_key= TRUE;
+ if (primary_key)
+ alter_ctx->modified_primary_key= true;
delete_index_stat= TRUE;
if (!(kfield->flags & VERS_SYSTEM_FIELD))
dropped_key_part= key_part_name;
continue; // Field is removed
}
+
+ DBUG_ASSERT(!primary_key || kfield->flags & NOT_NULL_FLAG);
+ if (implicit_pk && !alter_ctx->modified_primary_key &&
+ !(cfield->flags & NOT_NULL_FLAG))
+ alter_ctx->modified_primary_key= true;
+
key_part_length= key_part->length;
if (cfield->field) // Not new field
{
@@ -8358,7 +8390,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
{
if (delete_index_stat)
(void) delete_statistics_for_index(thd, table, key_info, FALSE);
- else if (modified_primary_key &&
+ else if (alter_ctx->modified_primary_key &&
key_info->user_defined_key_parts != key_info->ext_key_parts)
(void) delete_statistics_for_index(thd, table, key_info, TRUE);
}
@@ -8403,7 +8435,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
key_type= Key::SPATIAL;
else if (key_info->flags & HA_NOSAME)
{
- if (! my_strcasecmp(system_charset_info, key_name, primary_key_name.str))
+ if (explicit_pk)
key_type= Key::PRIMARY;
else
key_type= Key::UNIQUE;
@@ -10135,6 +10167,10 @@ do_continue:;
tmp_disable_binlog(thd);
create_info->options|=HA_CREATE_TMP_ALTER;
+ if (!(alter_info->flags & ALTER_ADD_INDEX) && !alter_ctx.modified_primary_key)
+ create_info->options|= HA_SKIP_KEY_SORT;
+ else
+ alter_info->flags|= ALTER_INDEX_ORDER;
create_info->alias= alter_ctx.table_name;
/*
Create the .frm file for the new table. Storage engine table will not be
@@ -10193,7 +10229,7 @@ do_continue:;
*/
if (!(ha_alter_info.handler_flags &
- ~(ALTER_COLUMN_ORDER | ALTER_RENAME_COLUMN)))
+ ~(ALTER_COLUMN_ORDER | ALTER_RENAME_COLUMN | ALTER_INDEX_ORDER)))
{
/*
No-op ALTER, no need to call handler API functions.
@@ -10208,6 +10244,9 @@ do_continue:;
Also note that we ignore the LOCK clause here.
TODO don't create partitioning metadata in the first place
+
+ TODO: Now case-change index name is treated as noop which is not quite
+ correct.
*/
table->file->ha_create_partitioning_metadata(alter_ctx.get_tmp_path(),
NULL, CHF_DELETE_FLAG);
diff --git a/sql/table.cc b/sql/table.cc
index b183ebd3254..b1a7b6bfe2b 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -1119,6 +1119,8 @@ static void mysql57_calculate_null_position(TABLE_SHARE *share,
}
}
+static bool fix_and_check_vcol_expr(THD *thd, TABLE *table,
+ Virtual_column_info *vcol);
/** Parse TABLE_SHARE::vcol_defs
@@ -1304,6 +1306,9 @@ bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table,
Virtual_column_info *v= new (mem_root) Virtual_column_info();
field->vcol_info= v;
field->vcol_info->expr= hash_item;
+ field->vcol_info->set_vcol_type(VCOL_USING_HASH);
+ if (fix_and_check_vcol_expr(thd, table, v))
+ goto end;
key->user_defined_key_parts= key->ext_key_parts= key->usable_key_parts= 1;
key->key_part+= parts;
diff --git a/sql/threadpool_generic.cc b/sql/threadpool_generic.cc
index c265bc9de8a..eb08441a4d5 100644
--- a/sql/threadpool_generic.cc
+++ b/sql/threadpool_generic.cc
@@ -1746,9 +1746,9 @@ static void print_pool_blocked_message(bool max_threads_reached)
if (now > pool_block_start + BLOCK_MSG_DELAY && !msg_written)
{
if (max_threads_reached)
- sql_print_error(MAX_THREADS_REACHED_MSG);
+ sql_print_warning(MAX_THREADS_REACHED_MSG);
else
- sql_print_error(CREATE_THREAD_ERROR_MSG, my_errno);
+ sql_print_warning(CREATE_THREAD_ERROR_MSG, my_errno);
sql_print_information("Threadpool has been blocked for %u seconds\n",
(uint)((now- pool_block_start)/1000000));
diff --git a/storage/columnstore/columnstore b/storage/columnstore/columnstore
-Subproject c82fe75cc277f834cd2d0f1e482b7fabc70a002
+Subproject 4dc5d3af0579a50ac1b4d158d2ff0bcdf960ac0
diff --git a/storage/connect/colblk.h b/storage/connect/colblk.h
index 7f1af8b8368..c9712f516b5 100644
--- a/storage/connect/colblk.h
+++ b/storage/connect/colblk.h
@@ -1,7 +1,7 @@
/*************** Colblk H Declares Source Code File (.H) ***************/
/* Name: COLBLK.H Version 1.7 */
/* */
-/* (C) Copyright to the author Olivier BERTRAND 2005-2015 */
+/* (C) Copyright to the author Olivier BERTRAND 2005-2019 */
/* */
/* This file contains the COLBLK and derived classes declares. */
/***********************************************************************/
diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc
index f3e40afc3b0..17e50b5c56b 100644
--- a/storage/connect/ha_connect.cc
+++ b/storage/connect/ha_connect.cc
@@ -7208,7 +7208,8 @@ ha_connect::check_if_supported_inplace_alter(TABLE *altered_table,
ALTER_ADD_UNIQUE_INDEX |
ALTER_DROP_UNIQUE_INDEX |
ALTER_ADD_PK_INDEX |
- ALTER_DROP_PK_INDEX;
+ ALTER_DROP_PK_INDEX |
+ ALTER_INDEX_ORDER;
alter_table_operations inplace_offline_operations=
ALTER_COLUMN_TYPE_CHANGE_BY_ENGINE |
diff --git a/storage/connect/mysql-test/connect/t/mongo.inc b/storage/connect/mysql-test/connect/t/mongo.inc
index fab2ca84139..25c3f207696 100644
--- a/storage/connect/mysql-test/connect/t/mongo.inc
+++ b/storage/connect/mysql-test/connect/t/mongo.inc
@@ -1,3 +1,11 @@
-let $MONGO= C:/Applic/MongoDB/Server/3.6/bin/mongo;
-let $MONGOIMPORT= C:/Applic/MongoDB/Server/3.6/bin/mongoimport;
+#let $MONGO= C:/Applic/MongoDB/Server/3.6/bin/mongo;
+#let $MONGOIMPORT= C:/Applic/MongoDB/Server/3.6/bin/mongoimport;
+let $MONGO= mongo;
+let $MONGOIMPORT= mongoimport;
+
+
+
+
+
+
diff --git a/storage/connect/odbconn.cpp b/storage/connect/odbconn.cpp
index c7843dfe245..50069b7433b 100644
--- a/storage/connect/odbconn.cpp
+++ b/storage/connect/odbconn.cpp
@@ -1,7 +1,7 @@
/***********************************************************************/
-/* Name: ODBCONN.CPP Version 2.3 */
+/* Name: ODBCONN.CPP Version 2.4 */
/* */
-/* (C) Copyright to the author Olivier BERTRAND 1998-2017 */
+/* (C) Copyright to the author Olivier BERTRAND 1998-2021 */
/* */
/* This file contains the ODBC connection classes functions. */
/***********************************************************************/
@@ -1509,7 +1509,7 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols)
ThrowDBX(MSG(COL_NUM_MISM));
// Now bind the column buffers
- for (n = 1, colp = tocols; colp; colp = (PODBCCOL)colp->GetNext())
+ for (colp = tocols; colp; colp = (PODBCCOL)colp->GetNext())
if (!colp->IsSpecial()) {
buffer = colp->GetBuffer(m_RowsetSize);
len = colp->GetBuflen();
@@ -1525,12 +1525,11 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols)
htrc("Binding col=%u type=%d buf=%p len=%d slen=%p\n",
n, tp, buffer, len, colp->GetStrLen());
- rc = SQLBindCol(hstmt, n, tp, buffer, len, colp->GetStrLen());
+ rc = SQLBindCol(hstmt, colp->GetIndex(), tp, buffer, len, colp->GetStrLen());
if (!Check(rc))
ThrowDBX(rc, "SQLBindCol", hstmt);
- n++;
} // endif pcol
} catch(DBX *x) {
diff --git a/storage/connect/tabbson.cpp b/storage/connect/tabbson.cpp
index de272798e7c..871a54c8c94 100644
--- a/storage/connect/tabbson.cpp
+++ b/storage/connect/tabbson.cpp
@@ -376,7 +376,7 @@ int BSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt)
} // endswitch ReadDB
} else
- jsp = bp->GetArrayValue(bdp, i);
+ jsp = bp->GetNext(jsp);
if (!(row = (jsp) ? bp->GetObject(jsp) : NULL))
break;
@@ -2187,7 +2187,9 @@ void BSONCOL::WriteColumn(PGLOBAL g)
TDBBSON::TDBBSON(PGLOBAL g, PBDEF tdp, PTXF txfp) : TDBBSN(g, tdp, txfp)
{
Docp = NULL;
+ Docrow = NULL;
Multiple = tdp->Multiple;
+ Docsize = 0;
Done = Changed = false;
Bp->SetPretty(2);
} // end of TDBBSON standard constructor
@@ -2195,7 +2197,9 @@ TDBBSON::TDBBSON(PGLOBAL g, PBDEF tdp, PTXF txfp) : TDBBSN(g, tdp, txfp)
TDBBSON::TDBBSON(PBTDB tdbp) : TDBBSN(tdbp)
{
Docp = tdbp->Docp;
+ Docrow = tdbp->Docrow;
Multiple = tdbp->Multiple;
+ Docsize = tdbp->Docsize;
Done = tdbp->Done;
Changed = tdbp->Changed;
} // end of TDBBSON copy constructor
@@ -2376,6 +2380,7 @@ int TDBBSON::MakeDocument(PGLOBAL g)
} // endif jsp
+ Docsize = Bp->GetSize(Docp);
Done = true;
return RC_OK;
} // end of MakeDocument
@@ -2390,7 +2395,7 @@ int TDBBSON::Cardinality(PGLOBAL g)
else if (Cardinal < 0) {
if (!Multiple) {
if (MakeDocument(g) == RC_OK)
- Cardinal = Bp->GetSize(Docp);
+ Cardinal = Docsize;
} else
return 10;
@@ -2419,6 +2424,7 @@ void TDBBSON::ResetSize(void)
MaxSize = Cardinal = -1;
Fpos = -1;
N = 0;
+ Docrow = NULL;
Done = false;
} // end of ResetSize
@@ -2477,6 +2483,7 @@ bool TDBBSON::SetRecpos(PGLOBAL, int recpos)
#endif // 0
Fpos = recpos - 1;
+ Docrow = NULL;
return false;
} // end of SetRecpos
@@ -2492,6 +2499,7 @@ bool TDBBSON::OpenDB(PGLOBAL g)
Fpos = -1;
NextSame = false;
SameRow = 0;
+ Docrow = NULL;
return false;
} // endif use
@@ -2532,12 +2540,9 @@ int TDBBSON::ReadDB(PGLOBAL)
NextSame = false;
M++;
rc = RC_OK;
- } else if (++Fpos < (signed)Bp->GetSize(Docp)) {
- Row = Bp->GetArrayValue(Docp, Fpos);
-
- if (Row->Type == TYPE_JVAL)
- Row = Bp->GetBson(Row);
-
+ } else if (++Fpos < Docsize) {
+ Docrow = (Docrow) ? Bp->GetNext(Docrow) : Bp->GetArrayValue(Docp, Fpos);
+ Row = (Docrow->Type == TYPE_JVAL) ? Bp->GetBson(Docrow) : Docrow;
SameRow = 0;
M = 1;
rc = RC_OK;
diff --git a/storage/connect/tabbson.h b/storage/connect/tabbson.h
index 7f41bba6bd9..1696f4dfdbc 100644
--- a/storage/connect/tabbson.h
+++ b/storage/connect/tabbson.h
@@ -318,7 +318,9 @@ protected:
// Members
PBVAL Docp; // The document array
+ PBVAL Docrow; // Document row
int Multiple; // 0: No 1: DIR 2: Section 3: filelist
+ int Docsize; // The document size
bool Done; // True when document parsing is done
bool Changed; // After Update, Insert or Delete
}; // end of class TDBBSON
diff --git a/storage/innobase/buf/buf0buddy.cc b/storage/innobase/buf/buf0buddy.cc
index 6f4b4554518..125dac5333e 100644
--- a/storage/innobase/buf/buf0buddy.cc
+++ b/storage/innobase/buf/buf0buddy.cc
@@ -362,6 +362,7 @@ buf_buddy_block_free(void* buf)
ut_ad(bpage->in_zip_hash);
ut_d(bpage->in_zip_hash = false);
HASH_DELETE(buf_page_t, hash, &buf_pool.zip_hash, fold, bpage);
+ bpage->hash = nullptr;
ut_d(memset(buf, 0, srv_page_size));
MEM_UNDEFINED(buf, srv_page_size);
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc
index a13b252ffec..76eb7e0b5ce 100644
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -219,7 +219,7 @@ buf_pool.LRU.
The chains of free memory blocks (buf_pool.zip_free[]) are used by
the buddy allocator (buf0buddy.cc) to keep track of currently unused
-memory blocks of size sizeof(buf_page_t)..srv_page_size / 2. These
+memory blocks of size UNIV_PAGE_SIZE_MIN..srv_page_size / 2. These
blocks are inside the srv_page_size-sized memory blocks of type
BUF_BLOCK_MEMORY that the buddy allocator requests from the buffer
pool. The buddy allocator is solely used for allocating control
@@ -990,6 +990,8 @@ buf_block_init(buf_block_t* block, byte* frame)
page_zip_des_init(&block->page.zip);
+ MEM_MAKE_DEFINED(&block->page.hash, sizeof block->page.hash);
+ ut_ad(!block->page.hash);
MEM_MAKE_DEFINED(&block->lock, sizeof block->lock);
block->lock.init();
}
diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc
index 77d367074b0..250c12bea78 100644
--- a/storage/innobase/buf/buf0lru.cc
+++ b/storage/innobase/buf/buf0lru.cc
@@ -1010,6 +1010,7 @@ buf_LRU_block_free_non_file_page(
ut_ad(!block->page.in_free_list);
ut_ad(!block->page.oldest_modification());
ut_ad(!block->page.in_LRU_list);
+ ut_ad(!block->page.hash);
block->page.set_state(BUF_BLOCK_NOT_USED);
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 81ba7298e11..85a4ce90d90 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -158,7 +158,7 @@ void close_thread_tables(THD* thd);
#ifdef HAVE_URING
/** The Linux kernel version if io_uring() is considered unsafe */
-static const char *io_uring_may_be_unsafe;
+const char *io_uring_may_be_unsafe;
#endif
#define INSIDE_HA_INNOBASE_CC
@@ -19392,9 +19392,10 @@ static MYSQL_SYSVAR_STR(version, innodb_version_str,
#ifdef HAVE_URING
# include <sys/utsname.h>
static utsname uname_for_io_uring;
+#else
+static
#endif
-
-static bool innodb_use_native_aio_default()
+bool innodb_use_native_aio_default()
{
#ifdef HAVE_URING
utsname &u= uname_for_io_uring;
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index cee63c227d4..e4e84521e8d 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -113,6 +113,7 @@ static const alter_table_operations INNOBASE_INPLACE_IGNORE
| ALTER_VIRTUAL_GCOL_EXPR
| ALTER_DROP_CHECK_CONSTRAINT
| ALTER_RENAME
+ | ALTER_INDEX_ORDER
| ALTER_COLUMN_INDEX_LENGTH
| ALTER_CHANGE_INDEX_COMMENT
| ALTER_INDEX_IGNORABILITY;
@@ -2461,7 +2462,8 @@ next_column:
| ALTER_ADD_UNIQUE_INDEX
*/
| ALTER_ADD_NON_UNIQUE_NON_PRIM_INDEX
- | ALTER_DROP_NON_UNIQUE_NON_PRIM_INDEX);
+ | ALTER_DROP_NON_UNIQUE_NON_PRIM_INDEX
+ | ALTER_INDEX_ORDER);
if (supports_instant) {
flags &= ~(ALTER_DROP_STORED_COLUMN
#if 0 /* MDEV-17468: remove check_v_col_in_order() and fix the code */
@@ -8764,6 +8766,7 @@ inline bool rollback_inplace_alter_table(Alter_inplace_info *ha_alter_info,
ut_d(dict_table_check_for_dup_indexes(ctx->old_table, CHECK_ABORTED_OK));
}
+ DEBUG_SYNC(ctx->trx->mysql_thd, "before_commit_rollback_inplace");
commit_unlock_and_unlink(ctx->trx);
if (fts_exist)
purge_sys.resume_FTS();
diff --git a/storage/innobase/pars/pars0grm.cc b/storage/innobase/pars/pars0grm.cc
index e19bb3b1cfe..75d7089fb5e 100644
--- a/storage/innobase/pars/pars0grm.cc
+++ b/storage/innobase/pars/pars0grm.cc
@@ -80,7 +80,7 @@ que_node_t */
#include "que0que.h"
#include "row0sel.h"
-#ifdef __GNUC__
+#if defined __GNUC__ && (!defined __clang_major__ || __clang_major__ > 11)
#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
#endif
diff --git a/storage/innobase/pars/pars0grm.y b/storage/innobase/pars/pars0grm.y
index f205917043c..baa7100cfde 100644
--- a/storage/innobase/pars/pars0grm.y
+++ b/storage/innobase/pars/pars0grm.y
@@ -38,7 +38,7 @@ que_node_t */
#include "que0que.h"
#include "row0sel.h"
-#ifdef __GNUC__
+#if defined __GNUC__ && (!defined __clang_major__ || __clang_major__ > 11)
#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
#endif
diff --git a/storage/innobase/row/row0umod.cc b/storage/innobase/row/row0umod.cc
index 751c4e73401..5b8ec4c50ad 100644
--- a/storage/innobase/row/row0umod.cc
+++ b/storage/innobase/row/row0umod.cc
@@ -173,6 +173,16 @@ row_undo_mod_clust_low(
case DICT_INDEXES_ID:
if (node->trx != trx_roll_crash_recv_trx) {
break;
+ } else if (node->rec_type == TRX_UNDO_DEL_MARK_REC
+ && btr_cur_get_rec(btr_cur)
+ [8 + 8 + DATA_TRX_ID_LEN + DATA_ROLL_PTR_LEN]
+ == static_cast<byte>(*TEMP_INDEX_PREFIX_STR)) {
+ /* We are rolling back the DELETE of metadata
+ for a failed ADD INDEX operation. This does
+ not affect any cached table definition,
+ because we are filtering out such indexes in
+ dict_load_indexes(). */
+ break;
}
/* fall through */
case DICT_COLUMNS_ID:
diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc
index 0cec0f088dd..6ee0dd5af79 100644
--- a/storage/maria/ha_maria.cc
+++ b/storage/maria/ha_maria.cc
@@ -736,6 +736,11 @@ static int table2maria(TABLE *table_arg, data_file_type row_type,
- compare SPATIAL keys;
- compare FIELD_SKIP_ZERO which is converted to FIELD_NORMAL correctly
(should be correctly detected in table2maria).
+
+ FIXME:
+ maria_check_definition() is never used! CHECK TABLE does not detect the
+ corruption! Do maria_check_definition() like check_definition() is done
+ by MyISAM (related to MDEV-25803).
*/
int maria_check_definition(MARIA_KEYDEF *t1_keyinfo,
diff --git a/storage/maria/ma_extra.c b/storage/maria/ma_extra.c
index 59ee2e00356..94e5e448b09 100644
--- a/storage/maria/ma_extra.c
+++ b/storage/maria/ma_extra.c
@@ -210,7 +210,13 @@ int maria_extra(MARIA_HA *info, enum ha_extra_function function,
info->last_key.data + share->base.max_key_length*2,
info->save_lastkey_data_length + info->save_lastkey_ref_length);
info->update= info->save_update | HA_STATE_WRITTEN;
- info->lastinx= info->save_lastinx;
+ if (info->lastinx != info->save_lastinx) /* Index changed */
+ {
+ info->lastinx = info->save_lastinx;
+ info->last_key.keyinfo= info->s->keyinfo + info->lastinx;
+ info->last_key.flag= 0;
+ info->page_changed=1;
+ }
info->cur_row.lastpos= info->save_lastpos;
info->last_key.data_length= info->save_lastkey_data_length;
info->last_key.ref_length= info->save_lastkey_ref_length;
diff --git a/storage/myisam/mi_create.c b/storage/myisam/mi_create.c
index 140d8abe26f..c006cc0b9a7 100644
--- a/storage/myisam/mi_create.c
+++ b/storage/myisam/mi_create.c
@@ -713,7 +713,11 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
}
#endif
- /* Write key and keyseg definitions */
+ /* Write key and keyseg definitions
+
+ TODO: update key and keyseg definitions for inplace alter (grep sql layer by
+ MDEV-25803). Do the same for Aria.
+ */
DBUG_PRINT("info", ("write key and keyseg definitions"));
for (i=0 ; i < share.base.keys - uniques; i++)
{
diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc
index a56f47d4c1b..978fcc945ed 100644
--- a/storage/rocksdb/ha_rocksdb.cc
+++ b/storage/rocksdb/ha_rocksdb.cc
@@ -12435,6 +12435,7 @@ my_core::enum_alter_inplace_result ha_rocksdb::check_if_supported_inplace_alter(
ALTER_ADD_NON_UNIQUE_NON_PRIM_INDEX |
ALTER_PARTITIONED |
ALTER_ADD_UNIQUE_INDEX |
+ ALTER_INDEX_ORDER |
ALTER_CHANGE_CREATE_OPTION)) {
DBUG_RETURN(my_core::HA_ALTER_INPLACE_NOT_SUPPORTED);
}
diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c
index 66f82a1d09c..a5951e31906 100644
--- a/strings/ctype-mb.c
+++ b/strings/ctype-mb.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
- Copyright (c) 2009, 2020, MariaDB Corporation.
+ Copyright (c) 2009, 2021, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -402,9 +402,9 @@ my_copy_fix_mb(CHARSET_INFO *cs,
size_t well_formed_nchars;
size_t well_formed_length;
size_t fixed_length;
+ size_t min_length= MY_MIN(src_length, dst_length);
- set_if_smaller(src_length, dst_length);
- well_formed_nchars= my_ci_well_formed_char_length(cs, src, src + src_length,
+ well_formed_nchars= my_ci_well_formed_char_length(cs, src, src + min_length,
nchars, status);
DBUG_ASSERT(well_formed_nchars <= nchars);
well_formed_length= status->m_source_end_pos - src;
diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c
index dac44295f3c..389f6d910fa 100644
--- a/strings/ctype-tis620.c
+++ b/strings/ctype-tis620.c
@@ -609,8 +609,8 @@ my_strnxfrm_tis620(CHARSET_INFO *cs,
const uchar *src, size_t srclen, uint flags)
{
size_t len, dstlen0= dstlen;
- len= (uint) (strmake((char*) dst, (char*) src, MY_MIN(dstlen, srclen)) -
- (char*) dst);
+ len= MY_MIN(dstlen, srclen);
+ memcpy(dst, src, len);
len= thai2sortable(dst, len);
set_if_smaller(dstlen, nweights);
set_if_smaller(len, dstlen);
@@ -632,8 +632,8 @@ my_strnxfrm_tis620_nopad(CHARSET_INFO *cs,
const uchar *src, size_t srclen, uint flags)
{
size_t len, dstlen0= dstlen;
- len= (uint) (strmake((char*) dst, (char*) src, MY_MIN(dstlen, srclen)) -
- (char*) dst);
+ len= MY_MIN(dstlen, srclen);
+ memcpy(dst, src, len);
len= thai2sortable(dst, len);
set_if_smaller(dstlen, nweights);
set_if_smaller(len, dstlen);