summaryrefslogtreecommitdiff
path: root/storage/spider
diff options
context:
space:
mode:
Diffstat (limited to 'storage/spider')
-rw-r--r--storage/spider/ha_spider.cc10
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/mdev_29562.result47
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/mdev_29562.cnf3
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/mdev_29562.test54
4 files changed, 114 insertions, 0 deletions
diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc
index 7f283560af5..27daa205fc7 100644
--- a/storage/spider/ha_spider.cc
+++ b/storage/spider/ha_spider.cc
@@ -11450,6 +11450,15 @@ int ha_spider::create(
sql_command == SQLCOM_DROP_INDEX
)
DBUG_RETURN(0);
+ if (!is_supported_parser_charset(info->default_table_charset))
+ {
+ String charset_option;
+ charset_option.append("CHARSET ");
+ charset_option.append(info->default_table_charset->csname);
+ my_error(ER_ILLEGAL_HA_CREATE_OPTION, MYF(0), "SPIDER", charset_option.c_ptr());
+ error_num = ER_ILLEGAL_HA_CREATE_OPTION;
+ goto error_charset;
+ }
if (!(trx = spider_get_trx(thd, TRUE, &error_num)))
goto error_get_trx;
if (
@@ -11624,6 +11633,7 @@ error:
spider_free_share_alloc(&tmp_share);
error_alter_before_unlock:
error_get_trx:
+error_charset:
DBUG_RETURN(error_num);
}
diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_29562.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_29562.result
new file mode 100644
index 00000000000..561ce18a603
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_29562.result
@@ -0,0 +1,47 @@
+#
+# MDEV-29562 Spider table with charset utf32/utf16/ucs2 tries to set client charset to unsupported value
+#
+for master_1
+for child2
+child2_1
+child2_2
+child2_3
+for child3
+connection child2_1;
+CREATE DATABASE auto_test_remote;
+USE auto_test_remote;
+CREATE TABLE tbl_a (
+a INT
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+connection master_1;
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+CREATE TABLE tbl_a (
+a INT
+) ENGINE=Spider CHARSET utf32 COMMENT='table "tbl_a", srv "s_2_1"';
+ERROR HY000: Table storage engine 'SPIDER' does not support the create option 'CHARSET utf32'
+ALTER DATABASE auto_test_local CHARSET="ucs2";
+CREATE TABLE tbl_a (
+a INT
+) ENGINE=Spider COMMENT='table "tbl_a", srv "s_2_1"';
+ERROR HY000: Table storage engine 'SPIDER' does not support the create option 'CHARSET ucs2'
+CREATE TABLE tbl_a (
+a INT
+) ENGINE=Spider CHARSET utf8 COMMENT='table "tbl_a", srv "s_2_1"';
+SELECT * FROM tbl_a;
+a
+ALTER TABLE tbl_a CONVERT TO CHARACTER SET utf16;
+ERROR HY000: Table storage engine 'SPIDER' does not support the create option 'CHARSET utf16'
+ALTER TABLE tbl_a CONVERT TO CHARACTER SET utf16le;
+ERROR HY000: Table storage engine 'SPIDER' does not support the create option 'CHARSET utf16le'
+ALTER TABLE tbl_a CONVERT TO CHARACTER SET latin1;
+connection master_1;
+DROP DATABASE IF EXISTS auto_test_local;
+connection child2_1;
+DROP DATABASE IF EXISTS auto_test_remote;
+for master_1
+for child2
+child2_1
+child2_2
+child2_3
+for child3
diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_29562.cnf b/storage/spider/mysql-test/spider/bugfix/t/mdev_29562.cnf
new file mode 100644
index 00000000000..05dfd8a0bce
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_29562.cnf
@@ -0,0 +1,3 @@
+!include include/default_mysqld.cnf
+!include ../my_1_1.cnf
+!include ../my_2_1.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_29562.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_29562.test
new file mode 100644
index 00000000000..5ddb2cef492
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_29562.test
@@ -0,0 +1,54 @@
+--echo #
+--echo # MDEV-29562 Spider table with charset utf32/utf16/ucs2 tries to set client charset to unsupported value
+--echo #
+
+--disable_query_log
+--disable_result_log
+--source ../../t/test_init.inc
+--enable_result_log
+--enable_query_log
+
+--connection child2_1
+CREATE DATABASE auto_test_remote;
+USE auto_test_remote;
+eval CREATE TABLE tbl_a (
+ a INT
+) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
+
+--connection master_1
+CREATE DATABASE auto_test_local;
+USE auto_test_local;
+--error ER_ILLEGAL_HA_CREATE_OPTION
+eval CREATE TABLE tbl_a (
+ a INT
+) $MASTER_1_ENGINE CHARSET utf32 COMMENT='table "tbl_a", srv "s_2_1"';
+
+ALTER DATABASE auto_test_local CHARSET="ucs2";
+--error ER_ILLEGAL_HA_CREATE_OPTION
+eval CREATE TABLE tbl_a (
+ a INT
+) $MASTER_1_ENGINE COMMENT='table "tbl_a", srv "s_2_1"';
+
+eval CREATE TABLE tbl_a (
+ a INT
+) $MASTER_1_ENGINE CHARSET utf8 COMMENT='table "tbl_a", srv "s_2_1"';
+SELECT * FROM tbl_a;
+
+--error ER_ILLEGAL_HA_CREATE_OPTION
+ALTER TABLE tbl_a CONVERT TO CHARACTER SET utf16;
+--error ER_ILLEGAL_HA_CREATE_OPTION
+ALTER TABLE tbl_a CONVERT TO CHARACTER SET utf16le;
+
+ALTER TABLE tbl_a CONVERT TO CHARACTER SET latin1;
+
+--connection master_1
+DROP DATABASE IF EXISTS auto_test_local;
+
+--connection child2_1
+DROP DATABASE IF EXISTS auto_test_remote;
+
+--disable_query_log
+--disable_result_log
+--source ../t/test_deinit.inc
+--enable_query_log
+--enable_result_log