mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-14402 JSON_VALUE doesn't escape quote.
Result unescaping added.
This commit is contained in:
@ -28,6 +28,9 @@ NULL
|
|||||||
select json_value('{"key1": [1,2,3], "key1":123}', '$.key1');
|
select json_value('{"key1": [1,2,3], "key1":123}', '$.key1');
|
||||||
json_value('{"key1": [1,2,3], "key1":123}', '$.key1')
|
json_value('{"key1": [1,2,3], "key1":123}', '$.key1')
|
||||||
123
|
123
|
||||||
|
select JSON_VALUE('{ "x": [0,1], "y": "[0,1]", "z": "Mon\\\"t\\\"y" }','$.z');
|
||||||
|
JSON_VALUE('{ "x": [0,1], "y": "[0,1]", "z": "Mon\\\"t\\\"y" }','$.z')
|
||||||
|
Mon"t"y
|
||||||
select json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key2');
|
select json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key2');
|
||||||
json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key2')
|
json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key2')
|
||||||
NULL
|
NULL
|
||||||
|
@ -9,6 +9,7 @@ select json_value('{"key1":123}', '$.key2');
|
|||||||
select json_value('{"key1":123}', '$.key1');
|
select json_value('{"key1":123}', '$.key1');
|
||||||
select json_value('{"key1":[1,2,3]}', '$.key1');
|
select json_value('{"key1":[1,2,3]}', '$.key1');
|
||||||
select json_value('{"key1": [1,2,3], "key1":123}', '$.key1');
|
select json_value('{"key1": [1,2,3], "key1":123}', '$.key1');
|
||||||
|
select JSON_VALUE('{ "x": [0,1], "y": "[0,1]", "z": "Mon\\\"t\\\"y" }','$.z');
|
||||||
|
|
||||||
select json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key2');
|
select json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key2');
|
||||||
select json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key1');
|
select json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key1');
|
||||||
|
@ -69,6 +69,7 @@ static inline bool append_simple(String *s, const uchar *a, size_t a_len)
|
|||||||
/*
|
/*
|
||||||
Appends JSON string to the String object taking charsets in
|
Appends JSON string to the String object taking charsets in
|
||||||
consideration.
|
consideration.
|
||||||
|
*/
|
||||||
static int st_append_json(String *s,
|
static int st_append_json(String *s,
|
||||||
CHARSET_INFO *json_cs, const uchar *js, uint js_len)
|
CHARSET_INFO *json_cs, const uchar *js, uint js_len)
|
||||||
{
|
{
|
||||||
@ -82,9 +83,8 @@ static int st_append_json(String *s,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return js_len;
|
return str_len;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -475,6 +475,9 @@ String *Item_func_json_value::val_str(String *str)
|
|||||||
json_scan_start(&je, js->charset(),(const uchar *) js->ptr(),
|
json_scan_start(&je, js->charset(),(const uchar *) js->ptr(),
|
||||||
(const uchar *) js->ptr() + js->length());
|
(const uchar *) js->ptr() + js->length());
|
||||||
|
|
||||||
|
str->length(0);
|
||||||
|
str->set_charset(&my_charset_utf8mb4_bin);
|
||||||
|
|
||||||
path.cur_step= path.p.steps;
|
path.cur_step= path.p.steps;
|
||||||
continue_search:
|
continue_search:
|
||||||
if (json_find_path(&je, &path.p, &path.cur_step, array_counters))
|
if (json_find_path(&je, &path.p, &path.cur_step, array_counters))
|
||||||
@ -515,8 +518,7 @@ bool Item_func_json_value::check_and_get_value(json_engine_t *je, String *res,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
res->set((const char *) je->value, je->value_len, je->s.cs);
|
return st_append_json(res, je->s.cs, je->value, je->value_len);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user