diff options
author | Anel Husakovic <anel@mariadb.org> | 2022-01-17 16:26:47 +0100 |
---|---|---|
committer | Anel Husakovic <anel@mariadb.org> | 2022-01-19 09:29:02 +0100 |
commit | 9cd6ecfe501bcbee04d2d203baa81c927664c9e2 (patch) | |
tree | 1a74b4c10ed107c1d8a10a71d81e3cb08bffd451 | |
parent | 410c4edef30b3ac061f21aa712020a51337cff56 (diff) | |
download | mariadb-git-9cd6ecfe501bcbee04d2d203baa81c927664c9e2.tar.gz |
MDEV-18284: JSON casting using JSON_COMPACT doesn't always work with values from subqueries
- Cherry-pick 2fcff310d024cc2201586c568391ba8b039f0bf3 (MDEV-21902)
- Closed PR #1145
Reviewed by: holyfoot@mariadb.com
-rw-r--r-- | mysql-test/r/func_json.result | 18 | ||||
-rw-r--r-- | mysql-test/t/func_json.test | 15 | ||||
-rw-r--r-- | sql/item.h | 1 |
3 files changed, 34 insertions, 0 deletions
diff --git a/mysql-test/r/func_json.result b/mysql-test/r/func_json.result index f8e78c79f5d..b0005b13e45 100644 --- a/mysql-test/r/func_json.result +++ b/mysql-test/r/func_json.result @@ -940,5 +940,23 @@ SELECT JSON_REPLACE( JSON_DETAILED('["x"]'), '$.a', 'xx' ); JSON_REPLACE( JSON_DETAILED('["x"]'), '$.a', 'xx' ) ["x"] # +# MDEV-18284 JSON casting using JSON_COMPACT doesn't always work +# with values from subqueries +# +CREATE TABLE json_test(a JSON, b JSON); +INSERT INTO json_test VALUES ("[1,2,3]", '{"a":"foo"}'); +SELECT * FROM json_test; +a b +[1,2,3] {"a":"foo"} +SELECT json_object("a", json_compact(a), "b", b) +FROM (SELECT * FROM json_test) AS json_test_values; +json_object("a", json_compact(a), "b", b) +{"a": [1,2,3], "b": "{\"a\":\"foo\"}"} +SELECT json_object("a", json_compact(a), "b", json_compact(b)) +FROM (SELECT * FROM json_test) AS json_test_values; +json_object("a", json_compact(a), "b", json_compact(b)) +{"a": [1,2,3], "b": {"a":"foo"}} +DROP TABLE json_test; +# # End of 10.2 tests # diff --git a/mysql-test/t/func_json.test b/mysql-test/t/func_json.test index e4e093225f8..aaba3c21315 100644 --- a/mysql-test/t/func_json.test +++ b/mysql-test/t/func_json.test @@ -561,5 +561,20 @@ SELECT SELECT JSON_REPLACE( JSON_DETAILED('["x"]'), '$.a', 'xx' ); --echo # +--echo # MDEV-18284 JSON casting using JSON_COMPACT doesn't always work +--echo # with values from subqueries +--echo # + +CREATE TABLE json_test(a JSON, b JSON); +INSERT INTO json_test VALUES ("[1,2,3]", '{"a":"foo"}'); +SELECT * FROM json_test; + +SELECT json_object("a", json_compact(a), "b", b) + FROM (SELECT * FROM json_test) AS json_test_values; +SELECT json_object("a", json_compact(a), "b", json_compact(b)) + FROM (SELECT * FROM json_test) AS json_test_values; +DROP TABLE json_test; + +--echo # --echo # End of 10.2 tests --echo # diff --git a/sql/item.h b/sql/item.h index 086d85e989f..290ff11a0f8 100644 --- a/sql/item.h +++ b/sql/item.h @@ -4564,6 +4564,7 @@ public: { return ref ? (*ref)->real_item() : this; } + bool is_json_type() { return (*ref)->is_json_type(); } bool walk(Item_processor processor, bool walk_subquery, void *arg) { if (ref && *ref) |