| Bug #71180 | JSON_CONTAINS_KEY founds not existent key in the array element | ||
|---|---|---|---|
| Submitted: | 18 Dec 2013 21:51 | Modified: | 25 Dec 2013 13:25 |
| Reporter: | Sveta Smirnova | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: JSON User-defined function ( UDF ) | Severity: | S3 (Non-critical) |
| Version: | 0.2.1, 0.3.0 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[20 Dec 2013 17:43]
Sveta Smirnova
Same happens for following test case:
set @doc = '{"foo": {"foo": "bar"}, "baz": "bar"}';
select json_contains_key(@doc, 'baz', 'foo');
json_contains_key(@doc, 'baz', 'foo')
1
[25 Dec 2013 13:25]
Sveta Smirnova
Posted by developer: Fixed in versions 0.2.2 and 0.3.0
[25 Dec 2013 13:29]
Sveta Smirnova
Also fixed for JSON_EXTRACT, JSON_REMOVE, JSON_APPEND, JSON_REPLACE, JSON_SET

Description: If an array element contains object, JSON_CONTAINS_KEY and companions search for the object elements as this object belongs to each of the array elements. How to repeat: set @doc = '{"foo": [{"foo": "bar"}, "baz"]}'; select json_contains_key(@doc, 'foo', 0, 'foo'); select json_contains_key(@doc, 'foo', 1, 'foo'); Result: select json_contains_key(@doc, 'foo', 0, 'foo'); json_contains_key(@doc, 'foo', 0, 'foo') 1 select json_contains_key(@doc, 'foo', 1, 'foo'); json_contains_key(@doc, 'foo', 1, 'foo') 1 Suggested fix: Expected result: select json_contains_key(@doc, 'foo', 0, 'foo'); json_contains_key(@doc, 'foo', 0, 'foo') 1 select json_contains_key(@doc, 'foo', 1, 'foo'); json_contains_key(@doc, 'foo', 1, 'foo') 0