1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-26242: Assertion `i >= 0' failed on setting default_tmp_storage_engine to 'DEFAULT' in 10.7

Locking / unlocking plugins is already handled by Sys_var_plugin::check
method. No need to do that in the specialized checking code, use
var->save_value instead to get the plugin handle.
This commit is contained in:
Vicențiu Ciorbaru
2021-07-26 22:43:16 +02:00
committed by Vicențiu Ciorbaru
parent d7af7bfc2b
commit 12eb8ad7b9
3 changed files with 87 additions and 8 deletions

View File

@@ -49,3 +49,54 @@ DROP TABLE t2;
CREATE TEMPORARY TABLE t2 LIKE t1;
ERROR HY000: Table storage engine 'ROCKSDB' does not support the create option 'TEMPORARY'
DROP TABLE t1;
#
# MDEV-26242: Assertion `i >= 0' failed on setting
# default_tmp_storage_engine to 'DEFAULT' in 10.7
#
SHOW VARIABLES like '%storage_engine';
Variable_name Value
default_storage_engine ROCKSDB
default_tmp_storage_engine Aria
enforce_storage_engine
storage_engine ROCKSDB
SELECT @@GLOBAL.default_tmp_storage_engine, @@GLOBAL.default_storage_engine, @@GLOBAL.storage_engine, @@SESSION.default_tmp_storage_engine, @@SESSION.default_storage_engine, @@SESSION.storage_engine;
@@GLOBAL.default_tmp_storage_engine @@GLOBAL.default_storage_engine @@GLOBAL.storage_engine @@SESSION.default_tmp_storage_engine @@SESSION.default_storage_engine @@SESSION.storage_engine
NULL MyISAM MyISAM Aria ROCKSDB ROCKSDB
SELECT @@GLOBAL.table_type;
ERROR HY000: Unknown system variable 'table_type'
SET default_storage_engine=DEFAULT;
SET default_tmp_storage_engine=innodb;
SELECT @@GLOBAL.default_tmp_storage_engine, @@GLOBAL.default_storage_engine, @@GLOBAL.storage_engine, @@SESSION.default_tmp_storage_engine, @@SESSION.default_storage_engine, @@SESSION.storage_engine;
@@GLOBAL.default_tmp_storage_engine @@GLOBAL.default_storage_engine @@GLOBAL.storage_engine @@SESSION.default_tmp_storage_engine @@SESSION.default_storage_engine @@SESSION.storage_engine
NULL MyISAM MyISAM InnoDB MyISAM MyISAM
CREATE TABLE t (t int);
CREATE TEMPORARY TABLE t1 (t int);
SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`t` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TEMPORARY TABLE `t1` (
`t` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE t1, t;
SET GLOBAL default_tmp_storage_engine='default';
SELECT @@GLOBAL.default_tmp_storage_engine, @@GLOBAL.default_storage_engine, @@GLOBAL.storage_engine, @@SESSION.default_tmp_storage_engine, @@SESSION.default_storage_engine, @@SESSION.storage_engine;
@@GLOBAL.default_tmp_storage_engine @@GLOBAL.default_storage_engine @@GLOBAL.storage_engine @@SESSION.default_tmp_storage_engine @@SESSION.default_storage_engine @@SESSION.storage_engine
MyISAM MyISAM MyISAM InnoDB MyISAM MyISAM
CREATE TABLE t (t int);
CREATE TEMPORARY TABLE t1 (t int);
SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`t` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TEMPORARY TABLE `t1` (
`t` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE t1, t;
SET GLOBAL default_tmp_storage_engine=NULL;

View File

@@ -4,6 +4,8 @@
--source include/have_rocksdb.inc
--source include/not_embedded.inc
--source include/have_innodb.inc
--error ER_UNKNOWN_STORAGE_ENGINE
SET default_tmp_storage_engine = engine_doesnt_exist;
--error ER_ILLEGAL_HA_CREATE_OPTION
@@ -50,3 +52,35 @@ DROP TABLE t2;
CREATE TEMPORARY TABLE t2 LIKE t1;
DROP TABLE t1;
--echo #
--echo # MDEV-26242: Assertion `i >= 0' failed on setting
--echo # default_tmp_storage_engine to 'DEFAULT' in 10.7
--echo #
SHOW VARIABLES like '%storage_engine';
SELECT @@GLOBAL.default_tmp_storage_engine, @@GLOBAL.default_storage_engine, @@GLOBAL.storage_engine, @@SESSION.default_tmp_storage_engine, @@SESSION.default_storage_engine, @@SESSION.storage_engine;
--error ER_UNKNOWN_SYSTEM_VARIABLE
SELECT @@GLOBAL.table_type;
SET default_storage_engine=DEFAULT;
SET default_tmp_storage_engine=innodb;
SELECT @@GLOBAL.default_tmp_storage_engine, @@GLOBAL.default_storage_engine, @@GLOBAL.storage_engine, @@SESSION.default_tmp_storage_engine, @@SESSION.default_storage_engine, @@SESSION.storage_engine;
CREATE TABLE t (t int);
CREATE TEMPORARY TABLE t1 (t int);
SHOW CREATE TABLE t;
SHOW CREATE TABLE t1;
DROP TABLE t1, t;
SET GLOBAL default_tmp_storage_engine='default';
SELECT @@GLOBAL.default_tmp_storage_engine, @@GLOBAL.default_storage_engine, @@GLOBAL.storage_engine, @@SESSION.default_tmp_storage_engine, @@SESSION.default_storage_engine, @@SESSION.storage_engine;
CREATE TABLE t (t int);
CREATE TEMPORARY TABLE t1 (t int);
SHOW CREATE TABLE t;
SHOW CREATE TABLE t1;
DROP TABLE t1, t;
SET GLOBAL default_tmp_storage_engine=NULL;

View File

@@ -742,13 +742,9 @@ static Sys_var_charptr_fscs Sys_character_sets_dir(
static bool check_engine_supports_temporary(sys_var *self, THD *thd, set_var *var)
{
String str, *res;
LEX_CSTRING name;
if (!var->value || var->value->is_null())
plugin_ref plugin= var->save_result.plugin;
if (!plugin)
return false;
res= var->value->val_str(&str);
res->get_value(&name);
plugin_ref plugin= ha_resolve_by_name(thd, &name, true);
DBUG_ASSERT(plugin);
handlerton *hton= plugin_hton(plugin);
DBUG_ASSERT(hton);
@@ -756,10 +752,8 @@ static bool check_engine_supports_temporary(sys_var *self, THD *thd, set_var *va
{
my_error(ER_ILLEGAL_HA_CREATE_OPTION, MYF(0), hton_name(hton)->str,
"TEMPORARY");
plugin_unlock(thd, plugin);
return true;
}
plugin_unlock(thd, plugin);
return false;
}