diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2022-07-27 17:52:37 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-07-27 17:52:37 +0300 |
commit | 30914389fe9ca13cf29470dd033a5cf6997a3931 (patch) | |
tree | fac7ab85411e556db4759a9a2c063ef27b851f87 /strings | |
parent | 772e3f61eb2956143bbdb1d85490bd5aad73d43c (diff) | |
parent | 098c0f2634a35e24e9eb0f06d3fba69d0d097657 (diff) | |
download | mariadb-git-30914389fe9ca13cf29470dd033a5cf6997a3931.tar.gz |
Merge 10.5 into 10.6
Diffstat (limited to 'strings')
-rw-r--r-- | strings/json_lib.c | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/strings/json_lib.c b/strings/json_lib.c index e55394bbeb8..19af1a6ede6 100644 --- a/strings/json_lib.c +++ b/strings/json_lib.c @@ -1770,107 +1770,6 @@ int json_get_path_next(json_engine_t *je, json_path_t *p) } -int json_path_parts_compare( - const json_path_step_t *a, const json_path_step_t *a_end, - const json_path_step_t *b, const json_path_step_t *b_end, - enum json_value_types vt) -{ - int res, res2; - - while (a <= a_end) - { - if (b > b_end) - { - while (vt != JSON_VALUE_ARRAY && - (a->type & JSON_PATH_ARRAY_WILD) == JSON_PATH_ARRAY && - a->n_item == 0) - { - if (++a > a_end) - return 0; - } - return -2; - } - - DBUG_ASSERT((b->type & (JSON_PATH_WILD | JSON_PATH_DOUBLE_WILD)) == 0); - - - if (a->type & JSON_PATH_ARRAY) - { - if (b->type & JSON_PATH_ARRAY) - { - if ((a->type & JSON_PATH_WILD) || a->n_item == b->n_item) - goto step_fits; - goto step_failed; - } - if ((a->type & JSON_PATH_WILD) == 0 && a->n_item == 0) - goto step_fits_autowrap; - goto step_failed; - } - else /* JSON_PATH_KEY */ - { - if (!(b->type & JSON_PATH_KEY)) - goto step_failed; - - if (!(a->type & JSON_PATH_WILD) && - (a->key_end - a->key != b->key_end - b->key || - memcmp(a->key, b->key, a->key_end - a->key) != 0)) - goto step_failed; - - goto step_fits; - } -step_failed: - if (!(a->type & JSON_PATH_DOUBLE_WILD)) - return -1; - b++; - continue; - -step_fits: - b++; - if (!(a->type & JSON_PATH_DOUBLE_WILD)) - { - a++; - continue; - } - - /* Double wild handling needs recursions. */ - res= json_path_parts_compare(a+1, a_end, b, b_end, vt); - if (res == 0) - return 0; - - res2= json_path_parts_compare(a, a_end, b, b_end, vt); - - return (res2 >= 0) ? res2 : res; - -step_fits_autowrap: - if (!(a->type & JSON_PATH_DOUBLE_WILD)) - { - a++; - continue; - } - - /* Double wild handling needs recursions. */ - res= json_path_parts_compare(a+1, a_end, b+1, b_end, vt); - if (res == 0) - return 0; - - res2= json_path_parts_compare(a, a_end, b+1, b_end, vt); - - return (res2 >= 0) ? res2 : res; - - } - - return b <= b_end; -} - - -int json_path_compare(const json_path_t *a, const json_path_t *b, - enum json_value_types vt) -{ - return json_path_parts_compare(a->steps+1, a->last_step, - b->steps+1, b->last_step, vt); -} - - static enum json_types smart_read_value(json_engine_t *je, const char **value, int *value_len) { |