diff options
author | Alexander Barkov <bar@mariadb.com> | 2018-07-24 18:44:49 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2018-07-24 18:44:49 +0400 |
commit | 294a426088bd7167f42388e7e76ff8d42df7d6be (patch) | |
tree | b6608f7651c83c858cfed3686f8053773511fa99 | |
parent | f74d2a9faa4b4233433dfcb0d2d14a6b269c48ba (diff) | |
parent | a8227a154306a818685ab291f1715c3971d03099 (diff) | |
download | mariadb-git-294a426088bd7167f42388e7e76ff8d42df7d6be.tar.gz |
Merge remote-tracking branch 'origin/10.2' into 10.3
-rw-r--r-- | mysql-test/main/func_json.result | 15 | ||||
-rw-r--r-- | mysql-test/main/func_json.test | 10 | ||||
-rw-r--r-- | sql/item_jsonfunc.cc | 2 |
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; } |