summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.com>2018-07-24 18:44:49 +0400
committerAlexander Barkov <bar@mariadb.com>2018-07-24 18:44:49 +0400
commit294a426088bd7167f42388e7e76ff8d42df7d6be (patch)
treeb6608f7651c83c858cfed3686f8053773511fa99
parentf74d2a9faa4b4233433dfcb0d2d14a6b269c48ba (diff)
parenta8227a154306a818685ab291f1715c3971d03099 (diff)
downloadmariadb-git-294a426088bd7167f42388e7e76ff8d42df7d6be.tar.gz
Merge remote-tracking branch 'origin/10.2' into 10.3
-rw-r--r--mysql-test/main/func_json.result15
-rw-r--r--mysql-test/main/func_json.test10
-rw-r--r--sql/item_jsonfunc.cc2
3 files changed, 25 insertions, 2 deletions
diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result
index 5fa5d7c628c..84aee70663e 100644
--- a/mysql-test/main/func_json.result
+++ b/mysql-test/main/func_json.result
@@ -297,7 +297,7 @@ json_quote('foo')
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `json_quote('foo')` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
+ `json_quote('foo')` varchar(38) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
select json_merge('string');
@@ -748,6 +748,19 @@ SELECT * FROM t1 WHERE c IN (JSON_EXTRACT('{"a":"b"}', '$.*'));
c
DROP TABLE t1;
#
+# MDEV-16814 CREATE TABLE SELECT JSON_QUOTE(multibyte_charset_expr) makes a field of a wrong length
+#
+CREATE TABLE t1 AS SELECT
+JSON_QUOTE(_latin1'foo') AS c1,
+JSON_QUOTE(_utf8'foo') AS c2;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(38) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+ `c2` varchar(38) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+DROP TABLE t1;
+#
# End of 10.2 tests
#
#
diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test
index 4f05d4f23c4..eddf64a0052 100644
--- a/mysql-test/main/func_json.test
+++ b/mysql-test/main/func_json.test
@@ -413,6 +413,16 @@ SELECT * FROM t1 WHERE c IN (JSON_EXTRACT('{"a":"b"}', '$.*'));
DROP TABLE t1;
--echo #
+--echo # MDEV-16814 CREATE TABLE SELECT JSON_QUOTE(multibyte_charset_expr) makes a field of a wrong length
+--echo #
+
+CREATE TABLE t1 AS SELECT
+ JSON_QUOTE(_latin1'foo') AS c1,
+ JSON_QUOTE(_utf8'foo') AS c2;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+--echo #
--echo # End of 10.2 tests
--echo #
diff --git a/sql/item_jsonfunc.cc b/sql/item_jsonfunc.cc
index afcba91d57f..d1c15a0126e 100644
--- a/sql/item_jsonfunc.cc
+++ b/sql/item_jsonfunc.cc
@@ -575,7 +575,7 @@ bool Item_func_json_quote::fix_length_and_dec()
Odd but realistic worst case is when all characters
of the argument turn into '\uXXXX\uXXXX', which is 12.
*/
- max_length= args[0]->max_length * 12 + 2;
+ fix_char_length_ulonglong((ulonglong) args[0]->max_char_length() * 12 + 2);
return FALSE;
}