summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2022-01-11 13:53:34 +0200
committerJan Lindström <jan.lindstrom@mariadb.com>2022-01-18 07:10:48 +0200
commitcf3adaaa9e045e57e0460e48ea77c4f6a700c9ba (patch)
treeed009682e57ff6e8debc090aac0c42270c072eca
parent7b555ff2c5cd5e7436cf9151790889aa9bcd6a70 (diff)
downloadmariadb-git-cf3adaaa9e045e57e0460e48ea77c4f6a700c9ba.tar.gz
MDEV-25494 : Assertion `tl->table == __null' failed in bool THD::open_temporary_table(TABLE_LIST*)
There is no need to open or process temporary tables at wsrep_append_fk_parent_table.
-rw-r--r--mysql-test/suite/galera/r/MDEV-25494.result14
-rw-r--r--mysql-test/suite/galera/t/MDEV-25494.test7
-rw-r--r--sql/wsrep_mysqld.cc15
3 files changed, 33 insertions, 3 deletions
diff --git a/mysql-test/suite/galera/r/MDEV-25494.result b/mysql-test/suite/galera/r/MDEV-25494.result
new file mode 100644
index 00000000000..e889fecc42e
--- /dev/null
+++ b/mysql-test/suite/galera/r/MDEV-25494.result
@@ -0,0 +1,14 @@
+connection node_2;
+connection node_1;
+SET SESSION binlog_format=STATEMENT;
+Warnings:
+Warning 1105 MariaDB Galera and flashback do not support binlog format: STATEMENT
+CREATE TEMPORARY TABLE t (i INT) UNION=(t);
+ALTER TABLE t ADD extrac CHAR(1);
+SHOW CREATE TABLE t;
+Table Create Table
+t CREATE TEMPORARY TABLE `t` (
+ `i` int(11) DEFAULT NULL,
+ `extrac` char(1) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t;
diff --git a/mysql-test/suite/galera/t/MDEV-25494.test b/mysql-test/suite/galera/t/MDEV-25494.test
new file mode 100644
index 00000000000..a6a70145469
--- /dev/null
+++ b/mysql-test/suite/galera/t/MDEV-25494.test
@@ -0,0 +1,7 @@
+--source include/galera_cluster.inc
+
+SET SESSION binlog_format=STATEMENT;
+CREATE TEMPORARY TABLE t (i INT) UNION=(t);
+ALTER TABLE t ADD extrac CHAR(1);
+SHOW CREATE TABLE t;
+DROP TABLE t;
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index f2b04393340..7d682f6e997 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -1201,14 +1201,23 @@ wsrep_append_fk_parent_table(THD* thd, TABLE_LIST* tables, wsrep::key_array* key
bool fail= false;
TABLE_LIST *table;
+ for (table= tables; table; table= table->next_local)
+ {
+ if (is_temporary_table(table))
+ {
+ WSREP_DEBUG("Temporary table %s.%s already opened query=%s", table->db.str,
+ table->table_name.str, wsrep_thd_query(thd));
+ return false;
+ }
+ }
+
thd->release_transactional_locks();
uint counter;
MDL_savepoint mdl_savepoint= thd->mdl_context.mdl_savepoint();
- if (thd->open_temporary_tables(tables) ||
- open_tables(thd, &tables, &counter, MYSQL_OPEN_FORCE_SHARED_HIGH_PRIO_MDL))
+ if (open_tables(thd, &tables, &counter, MYSQL_OPEN_FORCE_SHARED_HIGH_PRIO_MDL))
{
- WSREP_DEBUG("unable to open table for FK checks for %s", thd->query());
+ WSREP_DEBUG("Unable to open table for FK checks for %s", wsrep_thd_query(thd));
fail= true;
goto exit;
}