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:
None 
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

[18 Dec 2013 21:51] Sveta Smirnova
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
[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