Commit b62672af authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field

Revert "fix JSON_ARRAYAGG not to over-quote json in joins"
This removes 8711adb7 but keeps the test case.
A different fix is coming up.

Because args can be Item_field's that are later
replaced by Item_direct_view_ref to the actual field.
While Item_field preserved in orig_args will stay unfixed
with item->field==NULL and no metadata
parent 83684fc9
...@@ -1382,5 +1382,16 @@ id materials ...@@ -1382,5 +1382,16 @@ id materials
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
# #
# MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
#
CREATE TABLE t (a VARCHAR(8));
CREATE VIEW v AS SELECT * FROM t;
INSERT INTO t VALUES ('foo'),('bar');
SELECT JSON_ARRAYAGG(a) AS f FROM v;
f
["foo","bar"]
DROP VIEW v;
DROP TABLE t;
#
# End of 10.5 tests # End of 10.5 tests
# #
...@@ -873,6 +873,17 @@ SELECT t1.id, JSON_ARRAYAGG(JSON_OBJECT('id',t2.id) ORDER BY t2.id) as materials ...@@ -873,6 +873,17 @@ SELECT t1.id, JSON_ARRAYAGG(JSON_OBJECT('id',t2.id) ORDER BY t2.id) as materials
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
--echo #
--echo # MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
--echo #
CREATE TABLE t (a VARCHAR(8));
CREATE VIEW v AS SELECT * FROM t;
INSERT INTO t VALUES ('foo'),('bar');
SELECT JSON_ARRAYAGG(a) AS f FROM v;
DROP VIEW v;
DROP TABLE t;
--echo # --echo #
--echo # End of 10.5 tests --echo # End of 10.5 tests
--echo # --echo #
......
...@@ -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 *, Field *f, String *Item_func_json_arrayagg::get_str_from_field(Item *i,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, *orig_args, f, key, offset, tmp)) if (append_json_value_from_field(&m_tmp_json, i, 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