diff options
author | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2021-11-22 22:59:30 +0530 |
---|---|---|
committer | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2022-04-13 21:16:32 +0530 |
commit | dfcbb30a92c2f1d33ceefb56a1d3fa13f8d0ce67 (patch) | |
tree | 6014f93bf6585a548054bf3a06e3d26b86b17e47 /unittest | |
parent | e98013cb5c3695729114a56e1181b23c69801ae0 (diff) | |
download | mariadb-git-dfcbb30a92c2f1d33ceefb56a1d3fa13f8d0ce67.tar.gz |
MDEV-22224: Support JSON Path negative index
This patch can be viewed as combination of two parts:
1) Enabling '-' in the path so that the parser does not give out a warning.
2) Setting the negative index to a correct value and returning the
appropriate value.
1) To enable using the negative index in the path:
To make the parser not return warning when negative index is used in path
'-' needs to be allowed in json path characters. P_NEG is added
to enable this and is made recognizable by setting the 45th index of
json_path_chr_map[] to P_NEG (instead of previous P_ETC)
because 45 corresponds to '-' in unicode.
When the path is being parsed and '-' is encountered, the parser should
recognize it as parsing '-' sign, so a new json state PS_NEG is required.
When the state is PS_NEG, it means that a negative integer is
going to be parsed so set is_negative_index of current step to 1 and
n_item is set accordingly when integer is encountered after '-'.
Next proceed with parsing rest of the path and get the correct path.
Next thing is parsing the json and returning correct value.
2) Setting the negative index to a correct value and returning the value:
While parsing json if we encounter array and the path step for the array
is a negative index (n_item < 0), then we can count the number of elements
in the array and set n_item to correct corresponding value. This is done in
json_skip_array_and_count.
Diffstat (limited to 'unittest')
-rw-r--r-- | unittest/json_lib/json_lib-t.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/unittest/json_lib/json_lib-t.c b/unittest/json_lib/json_lib-t.c index 378ebe201f5..c5a6df54e1d 100644 --- a/unittest/json_lib/json_lib-t.c +++ b/unittest/json_lib/json_lib-t.c @@ -140,7 +140,7 @@ test_search() json_path_t p; json_path_step_t *cur_step; int n_matches, scal_values; - uint array_counters[JSON_DEPTH_LIMIT]; + int array_counters[JSON_DEPTH_LIMIT]; if (json_scan_start(&je, ci, s_e(fj0)) || json_path_setup(&p, ci, s_e(fp0))) |