summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/enforce_storage_engine.result7
-rw-r--r--mysql-test/t/enforce_storage_engine.test15
-rw-r--r--sql/sql_table.cc19
3 files changed, 32 insertions, 9 deletions
diff --git a/mysql-test/r/enforce_storage_engine.result b/mysql-test/r/enforce_storage_engine.result
index 296ed405a72..b838af9cce9 100644
--- a/mysql-test/r/enforce_storage_engine.result
+++ b/mysql-test/r/enforce_storage_engine.result
@@ -158,5 +158,12 @@ t3 CREATE TABLE `t3` (
PRIMARY KEY (`c1`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
DROP TABLE t3;
+#
+# MDEV-21618 CREATE UNIQUE INDEX fails with "ERROR 1286 (42000): Unknown storage engine 'partition'"
+#
+SET SESSION enforce_storage_engine=MyISAM;
+CREATE TABLE t4 (a INT) ENGINE=MyISAM PARTITION BY HASH(a);
+CREATE INDEX x on t4 (a);
+DROP TABLE t4;
SET SESSION enforce_storage_engine=NULL;
SET GLOBAL enforce_storage_engine=NULL;
diff --git a/mysql-test/t/enforce_storage_engine.test b/mysql-test/t/enforce_storage_engine.test
index 6b422477fe6..7768ed1bf46 100644
--- a/mysql-test/t/enforce_storage_engine.test
+++ b/mysql-test/t/enforce_storage_engine.test
@@ -1,4 +1,5 @@
--- source include/not_embedded.inc
+--source include/not_embedded.inc
+--source include/have_partition.inc
set local sql_mode="";
set global sql_mode="";
@@ -107,5 +108,15 @@ ALTER TABLE t3 ADD COLUMN c3 INT;
SHOW CREATE TABLE t3;
DROP TABLE t3;
+--echo #
+--echo # MDEV-21618 CREATE UNIQUE INDEX fails with "ERROR 1286 (42000): Unknown storage engine 'partition'"
+--echo #
+SET SESSION enforce_storage_engine=MyISAM;
+
+CREATE TABLE t4 (a INT) ENGINE=MyISAM PARTITION BY HASH(a);
+CREATE INDEX x on t4 (a);
+
+DROP TABLE t4;
+
SET SESSION enforce_storage_engine=NULL;
-SET GLOBAL enforce_storage_engine=NULL; \ No newline at end of file
+SET GLOBAL enforce_storage_engine=NULL;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index a2dc5c97aeb..f3e8ebb98b3 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -10728,13 +10728,18 @@ bool check_engine(THD *thd, const char *db_name,
if (!*new_engine)
DBUG_RETURN(true);
- /* Enforced storage engine should not be used in
- ALTER TABLE that does not use explicit ENGINE = x to
- avoid unwanted unrelated changes.*/
- if (!(thd->lex->sql_command == SQLCOM_ALTER_TABLE &&
- !(create_info->used_fields & HA_CREATE_USED_ENGINE)))
- enf_engine= thd->variables.enforced_table_plugin ?
- plugin_hton(thd->variables.enforced_table_plugin) : NULL;
+ /*
+ Enforced storage engine should not be used in ALTER TABLE that does not
+ use explicit ENGINE = x to avoid unwanted unrelated changes. It should not
+ be used in CREATE INDEX too.
+ */
+ if (!((thd->lex->sql_command == SQLCOM_ALTER_TABLE &&
+ !(create_info->used_fields & HA_CREATE_USED_ENGINE)) ||
+ thd->lex->sql_command == SQLCOM_CREATE_INDEX))
+ {
+ plugin_ref enf_plugin= thd->variables.enforced_table_plugin;
+ enf_engine= enf_plugin ? plugin_hton(enf_plugin) : NULL;
+ }
if (enf_engine && enf_engine != *new_engine)
{