mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-11571 JSON_EXTRACT returns wrong results.
Array counter didn't increment after an item was found.
This commit is contained in:
@ -209,6 +209,9 @@ json_extract('[10, 20, [{"a":3}, 30, 40]]', '$[2][*]')
|
|||||||
select json_extract('1', '$');
|
select json_extract('1', '$');
|
||||||
json_extract('1', '$')
|
json_extract('1', '$')
|
||||||
1
|
1
|
||||||
|
select json_extract('[10, 20, [30, 40], 1, 10]', '$[1]');
|
||||||
|
json_extract('[10, 20, [30, 40], 1, 10]', '$[1]')
|
||||||
|
20
|
||||||
select json_insert('{"a":1, "b":{"c":1}, "d":[1, 2]}', '$.b.k1', 'word');
|
select json_insert('{"a":1, "b":{"c":1}, "d":[1, 2]}', '$.b.k1', 'word');
|
||||||
json_insert('{"a":1, "b":{"c":1}, "d":[1, 2]}', '$.b.k1', 'word')
|
json_insert('{"a":1, "b":{"c":1}, "d":[1, 2]}', '$.b.k1', 'word')
|
||||||
{"a":1, "b":{"c":1, "k1":"word"}, "d":[1, 2]}
|
{"a":1, "b":{"c":1, "k1":"word"}, "d":[1, 2]}
|
||||||
|
@ -77,6 +77,7 @@ select json_extract(json_object('foo', 'foobar'),'$');
|
|||||||
select json_extract('[10, 20, [30, 40]]', '$[2][*]');
|
select json_extract('[10, 20, [30, 40]]', '$[2][*]');
|
||||||
select json_extract('[10, 20, [{"a":3}, 30, 40]]', '$[2][*]');
|
select json_extract('[10, 20, [{"a":3}, 30, 40]]', '$[2][*]');
|
||||||
select json_extract('1', '$');
|
select json_extract('1', '$');
|
||||||
|
select json_extract('[10, 20, [30, 40], 1, 10]', '$[1]');
|
||||||
|
|
||||||
select json_insert('{"a":1, "b":{"c":1}, "d":[1, 2]}', '$.b.k1', 'word');
|
select json_insert('{"a":1, "b":{"c":1}, "d":[1, 2]}', '$.b.k1', 'word');
|
||||||
select json_insert('{"a":1, "b":{"c":1}, "d":[1, 2]}', '$.d[3]', 3);
|
select json_insert('{"a":1, "b":{"c":1}, "d":[1, 2]}', '$.d[3]', 3);
|
||||||
|
@ -1270,7 +1270,7 @@ int json_find_path(json_engine_t *je,
|
|||||||
case JST_VALUE:
|
case JST_VALUE:
|
||||||
DBUG_ASSERT(cur_step->type & JSON_PATH_ARRAY);
|
DBUG_ASSERT(cur_step->type & JSON_PATH_ARRAY);
|
||||||
if (cur_step->type & JSON_PATH_WILD ||
|
if (cur_step->type & JSON_PATH_WILD ||
|
||||||
cur_step->n_item == array_counters[cur_step - p->steps])
|
cur_step->n_item == array_counters[cur_step - p->steps]++)
|
||||||
{
|
{
|
||||||
/* Array item matches. */
|
/* Array item matches. */
|
||||||
if (cur_step == p->last_step ||
|
if (cur_step == p->last_step ||
|
||||||
@ -1278,10 +1278,7 @@ int json_find_path(json_engine_t *je,
|
|||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
json_skip_array_item(je);
|
json_skip_array_item(je);
|
||||||
array_counters[cur_step - p->steps]++;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case JST_OBJ_END:
|
case JST_OBJ_END:
|
||||||
case JST_ARRAY_END:
|
case JST_ARRAY_END:
|
||||||
|
Reference in New Issue
Block a user