MDEV-11437 JSON_QUOTE function does not quote and uses wrong character set.
json_quote fixed.
This commit is contained in:
parent
b4cbaf0b7c
commit
12897a5bba
@ -186,7 +186,17 @@ json_exists('{"key1":"xxxx", "key2":[1, 2, 3]}', "$.key2[10]")
|
|||||||
0
|
0
|
||||||
select json_quote('"string"');
|
select json_quote('"string"');
|
||||||
json_quote('"string"')
|
json_quote('"string"')
|
||||||
\"string\"
|
"\"string\""
|
||||||
|
create table t1 as select json_quote('foo');
|
||||||
|
select * from t1;
|
||||||
|
json_quote('foo')
|
||||||
|
"foo"
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`json_quote('foo')` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
drop table t1;
|
||||||
select json_merge('string', 123);
|
select json_merge('string', 123);
|
||||||
json_merge('string', 123)
|
json_merge('string', 123)
|
||||||
["string", 123]
|
["string", 123]
|
||||||
|
@ -78,6 +78,10 @@ select json_exists('{"key1":"xxxx", "key2":[1, 2, 3]}', "$.key2[1]");
|
|||||||
select json_exists('{"key1":"xxxx", "key2":[1, 2, 3]}', "$.key2[10]");
|
select json_exists('{"key1":"xxxx", "key2":[1, 2, 3]}', "$.key2[10]");
|
||||||
|
|
||||||
select json_quote('"string"');
|
select json_quote('"string"');
|
||||||
|
create table t1 as select json_quote('foo');
|
||||||
|
select * from t1;
|
||||||
|
show create table t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
select json_merge('string', 123);
|
select json_merge('string', 123);
|
||||||
|
|
||||||
|
@ -287,12 +287,12 @@ bool Item_func_json_query::check_and_get_value(json_engine_t *je, String *res,
|
|||||||
|
|
||||||
void Item_func_json_quote::fix_length_and_dec()
|
void Item_func_json_quote::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
collation.set(args[0]->collation);
|
collation.set(&my_charset_utf8mb4_bin);
|
||||||
/*
|
/*
|
||||||
Odd but realistic worst case is when all characters
|
Odd but realistic worst case is when all characters
|
||||||
of the argument turn into '\uXXXX\uXXXX', which is 12.
|
of the argument turn into '\uXXXX\uXXXX', which is 12.
|
||||||
*/
|
*/
|
||||||
max_length= args[0]->max_length * 12;
|
max_length= args[0]->max_length * 12 + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -300,13 +300,16 @@ String *Item_func_json_quote::val_str(String *str)
|
|||||||
{
|
{
|
||||||
String *s= args[0]->val_str(&tmp_s);
|
String *s= args[0]->val_str(&tmp_s);
|
||||||
|
|
||||||
if ((null_value= args[0]->null_value))
|
if ((null_value= (args[0]->null_value ||
|
||||||
|
args[0]->result_type() != STRING_RESULT)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
str->length(0);
|
str->length(0);
|
||||||
str->set_charset(s->charset());
|
str->set_charset(&my_charset_utf8mb4_bin);
|
||||||
|
|
||||||
if (st_append_escaped(str, s))
|
if (str->append("\"", 1) ||
|
||||||
|
st_append_escaped(str, s) ||
|
||||||
|
str->append("\"", 1))
|
||||||
{
|
{
|
||||||
/* Report an error. */
|
/* Report an error. */
|
||||||
null_value= 1;
|
null_value= 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user