1
0
mirror of https://github.com/MariaDB/server.git synced 2025-09-11 05:52:26 +03:00

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 8711adb786 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
This commit is contained in:
Sergei Golubchik
2021-06-30 21:17:57 +02:00
parent 83684fc9a4
commit b62672af72
3 changed files with 24 additions and 2 deletions

View File

@@ -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
# #

View File

@@ -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 #

View File

@@ -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;