summaryrefslogtreecommitdiff
path: root/strings/json_lib.c
diff options
context:
space:
mode:
authorAlexey Botchkov <holyfoot@askmonty.org>2018-09-11 14:37:45 +0400
committerAlexey Botchkov <holyfoot@askmonty.org>2018-09-11 14:37:45 +0400
commitc8bb43a9385cdb7a27f0702742a8d1e08a85befd (patch)
treef4375293244135af1f4fd9cfcdbf30f1961749fb /strings/json_lib.c
parent4d9ec7cb6c83c571115bde59d72f02b494764755 (diff)
downloadmariadb-git-c8bb43a9385cdb7a27f0702742a8d1e08a85befd.tar.gz
MDEV-17121 JSON_ARRAY_APPEND.
Extra comma added to the result when an json array is empty.
Diffstat (limited to 'strings/json_lib.c')
-rw-r--r--strings/json_lib.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/strings/json_lib.c b/strings/json_lib.c
index f6b4f15732d..1c0ff4b5345 100644
--- a/strings/json_lib.c
+++ b/strings/json_lib.c
@@ -1197,6 +1197,31 @@ int json_skip_to_level(json_engine_t *j, int level)
}
+#define json_skip_level(json_engine) \
+ json_skip_to_level((json_engine), (json_engine)->stack_p)
+
+
+/*
+ works as json_skip_level() but also counts items on the current
+ level skipped.
+*/
+int json_skip_level_and_count(json_engine_t *j, int *n_items_skipped)
+{
+ int level= j->stack_p;
+
+ *n_items_skipped= 0;
+ while (json_scan_next(j) == 0)
+ {
+ if (j->stack_p < level)
+ return 0;
+ if (j->stack_p == level && j->state == JST_VALUE)
+ (*n_items_skipped)++;
+ }
+
+ return 1;
+}
+
+
int json_skip_key(json_engine_t *j)
{
if (json_read_value(j))