Commit 8711adb7 authored by Sergei Golubchik's avatar Sergei Golubchik

fix JSON_ARRAYAGG not to over-quote json in joins

use metadata (in particular is_json() property) of the original
argument item, even if the actual argument was later replaced
with an Item_temptable_field
parent c8fb911e
...@@ -1376,9 +1376,9 @@ SELECT t1.id, JSON_ARRAYAGG(JSON_OBJECT('id',t2.id)) as materials ...@@ -1376,9 +1376,9 @@ SELECT t1.id, JSON_ARRAYAGG(JSON_OBJECT('id',t2.id)) as materials
from t1 LEFT JOIN t2 on t1.id = t2.owner_id from t1 LEFT JOIN t2 on t1.id = t2.owner_id
GROUP BY t1.id ORDER BY id; GROUP BY t1.id ORDER BY id;
id materials id materials
1 ["{\"id\": 1}","{\"id\": 2}"] 1 [{"id": 1},{"id": 2}]
2 ["{\"id\": 3}"] 2 [{"id": 3}]
3 ["{\"id\": 4}"] 3 [{"id": 4}]
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
# #
......
...@@ -3723,12 +3723,12 @@ String *Item_func_json_arrayagg::get_str_from_item(Item *i, String *tmp) ...@@ -3723,12 +3723,12 @@ String *Item_func_json_arrayagg::get_str_from_item(Item *i, String *tmp)
} }
String *Item_func_json_arrayagg::get_str_from_field(Item *i,Field *f, String *Item_func_json_arrayagg::get_str_from_field(Item *, Field *f,
String *tmp, const uchar *key, size_t offset) String *tmp, const uchar *key, size_t offset)
{ {
m_tmp_json.length(0); m_tmp_json.length(0);
if (append_json_value_from_field(&m_tmp_json, i, f, key, offset, tmp)) if (append_json_value_from_field(&m_tmp_json, *orig_args, f, key, offset, tmp))
return NULL; return NULL;
return &m_tmp_json; return &m_tmp_json;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment