summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2022-01-04 12:01:31 +0200
committerJan Lindström <jan.lindstrom@mariadb.com>2022-01-11 09:43:59 +0200
commitce415be29426024474f218bcd9f4be7e45abcf01 (patch)
tree8c4cee3c24bb9f77ffc36215703f3b212fe17fb2
parentc430f612ebf93e0cd2cdcbeaccb3ff06254eb77d (diff)
downloadmariadb-git-ce415be29426024474f218bcd9f4be7e45abcf01.tar.gz
MDEV-25549 : Assertion `*new_engine' failed in bool check_engine(THD*, const char*, const char*, HA_CREATE_INFO*)
In Galera case we call check_engine that could set create_info->db_type to NULL e.g. if TEMPORARY is not supported by storage engine. Thus, we need to restore it after that call because it is needed later on mysql_create_table that will also call check_engine.
-rw-r--r--sql/sql_table.cc23
1 files changed, 16 insertions, 7 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 9556cb9f136..33daa15b9b7 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2019, Oracle and/or its affiliates.
- Copyright (c) 2010, 2020, MariaDB
+ Copyright (c) 2010, 2022, MariaDB
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
@@ -11036,14 +11036,23 @@ bool Sql_cmd_create_table::execute(THD *thd)
tables, like mysql replication does. Also check if the requested
engine is allowed/supported.
*/
- if (WSREP(thd) &&
- !check_engine(thd, create_table->db, create_table->table_name,
- &create_info) &&
- (!thd->is_current_stmt_binlog_format_row() ||
- !create_info.tmp_table()))
+#ifdef WITH_WSREP
+ if (WSREP(thd))
{
- WSREP_TO_ISOLATION_BEGIN(create_table->db, create_table->table_name, NULL)
+ handlerton *orig_ht= create_info.db_type;
+ if (!check_engine(thd, create_table->db, create_table->table_name,
+ &create_info) &&
+ (!thd->is_current_stmt_binlog_format_row() ||
+ !create_info.tmp_table()))
+ {
+ WSREP_TO_ISOLATION_BEGIN(create_table->db, create_table->table_name, NULL)
+ }
+ // check_engine will set db_type to NULL if e.g. TEMPORARY is
+ // not supported by the storage engine, this case is checked
+ // again in mysql_create_table
+ create_info.db_type= orig_ht;
}
+#endif /* WITH_WSREP */
/* Regular CREATE TABLE */
res= mysql_create_table(thd, create_table, &create_info, &alter_info);
}