1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

MDEV-13703 Illegal mix of collations for operation 'json_object' on

using JSON_UNQUOTE as an argument.

        The coercibility and repertoire should be set properly for the
        JSON_UNQUOTE.
This commit is contained in:
Alexey Botchkov
2017-10-06 09:28:33 +04:00
parent 41e581b30b
commit a3ba8c3660
3 changed files with 19 additions and 2 deletions

View File

@@ -405,6 +405,13 @@ abc
select json_unquote('abc');
json_unquote('abc')
abc
create table t1 (c VARCHAR(8)) DEFAULT CHARSET=latin1;
insert into t1 values ('abc'),('def');
select json_object('foo', json_unquote(json_object('bar', c)),'qux', c) as fld from t1;
fld
{"foo": "{\"bar\": \"abc\"}", "qux": "abc"}
{"foo": "{\"bar\": \"def\"}", "qux": "def"}
drop table t1;
select json_object("a", json_object("b", "abcd"));
json_object("a", json_object("b", "abcd"))
{"a": {"b": "abcd"}}

View File

@@ -164,6 +164,14 @@ drop table t1;
select json_unquote('"abc"');
select json_unquote('abc');
#
# MDEV-13703 Illegal mix of collations for operation 'json_object' on using JSON_UNQUOTE as an argument.
#
create table t1 (c VARCHAR(8)) DEFAULT CHARSET=latin1;
insert into t1 values ('abc'),('def');
select json_object('foo', json_unquote(json_object('bar', c)),'qux', c) as fld from t1;
drop table t1;
select json_object("a", json_object("b", "abcd"));
select json_object("a", '{"b": "abcd"}');

View File

@@ -581,7 +581,8 @@ String *Item_func_json_quote::val_str(String *str)
void Item_func_json_unquote::fix_length_and_dec()
{
collation.set(&my_charset_utf8_general_ci);
collation.set(&my_charset_utf8_general_ci,
DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
max_length= args[0]->max_length;
maybe_null= 1;
}
@@ -1458,7 +1459,8 @@ void Item_func_json_array::fix_length_and_dec()
if (arg_count == 0)
{
collation.set(&my_charset_utf8_general_ci);
collation.set(&my_charset_utf8_general_ci,
DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII);
tmp_val.set_charset(&my_charset_utf8_general_ci);
max_length= 2;
return;