diff options
author | Jan Lindström <jan.lindstrom@mariadb.com> | 2022-01-04 12:01:31 +0200 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2022-01-11 09:43:59 +0200 |
commit | ce415be29426024474f218bcd9f4be7e45abcf01 (patch) | |
tree | 8c4cee3c24bb9f77ffc36215703f3b212fe17fb2 | |
parent | c430f612ebf93e0cd2cdcbeaccb3ff06254eb77d (diff) | |
download | mariadb-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.cc | 23 |
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); } |