Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladimir Davydov <vdavydov.dev@gmail.com>
To: Kirill Shcherbatov <kshcherbatov@tarantool.org>
Cc: tarantool-patches@freelists.org
Subject: Re: [PATCH v3 2/7] lib: introduce a new json_path_multikey_offset helper
Date: Wed, 3 Apr 2019 15:56:01 +0300	[thread overview]
Message-ID: <20190403125601.unoe7qjdl6clqd55@esperanza> (raw)
In-Reply-To: <b5db9e081712c8968c3f2e9f36b726031c76e8e0.1554218695.git.kshcherbatov@tarantool.org>

On Tue, Apr 02, 2019 at 06:49:33PM +0300, Kirill Shcherbatov wrote:
> Introduced a new procedure json_path_multikey_offset. This helper
> scans the JSON path string and returns the offset of the first character
> [*] (the array index placeholder).
> 
> We need this function in the scope of the multikey index patchset to
> extract the number of keys to be inserted into the index
> using JSON subpath that has json_path_multikey_offset() length.
> 
> Needed for #1257
> ---
>  src/lib/json/json.c   | 18 ++++++++++++++++++
>  src/lib/json/json.h   | 10 ++++++++++
>  test/unit/json.c      | 32 +++++++++++++++++++++++++++++++-
>  test/unit/json.result | 12 +++++++++++-
>  4 files changed, 70 insertions(+), 2 deletions(-)
> 
> diff --git a/src/lib/json/json.c b/src/lib/json/json.c
> index 854158f63..2d3c35f4b 100644
> --- a/src/lib/json/json.c
> +++ b/src/lib/json/json.c
> @@ -321,6 +321,24 @@ json_path_validate(const char *path, int path_len, int index_base)
>  	return rc;
>  }
>  
> +int
> +json_path_multikey_offset(const char *path, int path_len, int index_base)
> +{
> +	struct json_lexer lexer;
> +	json_lexer_create(&lexer, path, path_len, index_base);
> +	struct json_token token;
> +	int rc, last_lexer_offset = 0;
> +	while ((rc = json_lexer_next_token(&lexer, &token)) == 0) {
> +		if (token.type == JSON_TOKEN_ANY)
> +			return last_lexer_offset;
> +		else if (token.type == JSON_TOKEN_END)
> +			break;
> +		last_lexer_offset = lexer.offset;
> +	}
> +	assert(rc == 0);
> +	return -1;
> +}

IMO returning path_len if no multikey token is found would be more
common (think of STL methods, which return end() iterator if not found).
Doesn't really matter though.

Other than that looks good to me.

  reply	other threads:[~2019-04-03 12:56 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-02 15:49 [PATCH v3 0/7] box: introduce multikey indexes in memtx Kirill Shcherbatov
2019-04-02 15:49 ` [PATCH v3 1/7] box: cleanup key_def virtual extract_key setter Kirill Shcherbatov
2019-04-03 12:42   ` Vladimir Davydov
2019-04-03 16:22     ` [tarantool-patches] " Kirill Shcherbatov
2019-04-03 18:01       ` Vladimir Davydov
2019-04-02 15:49 ` [PATCH v3 2/7] lib: introduce a new json_path_multikey_offset helper Kirill Shcherbatov
2019-04-03 12:56   ` Vladimir Davydov [this message]
2019-04-03 16:22     ` [tarantool-patches] " Kirill Shcherbatov
2019-04-03 18:02       ` Vladimir Davydov
2019-04-04  6:17       ` Konstantin Osipov
2019-04-02 15:49 ` [PATCH v3 3/7] box: move offset_slot init to tuple_format_add_field Kirill Shcherbatov
2019-04-03 12:57   ` Vladimir Davydov
2019-04-03 18:02   ` Vladimir Davydov
2019-04-04  6:19   ` [tarantool-patches] " Konstantin Osipov
2019-04-05 17:17     ` [tarantool-patches] " Kirill Shcherbatov
2019-04-02 15:49 ` [PATCH v3 4/7] lib: update msgpuck library Kirill Shcherbatov
2019-04-03 17:49   ` [tarantool-patches] " Kirill Shcherbatov
2019-04-04 15:54     ` Vladimir Davydov
2019-04-05 17:17       ` [tarantool-patches] " Kirill Shcherbatov
2019-04-07 12:22         ` Vladimir Davydov
2019-04-02 15:49 ` [PATCH v3 5/7] box: introduce tuple_parse_iterator class Kirill Shcherbatov
2019-04-03 14:04   ` Vladimir Davydov
2019-04-05 17:17     ` [tarantool-patches] " Kirill Shcherbatov
2019-04-02 15:49 ` [PATCH v3 6/7] box: introduce field_map_builder class Kirill Shcherbatov
2019-04-03 14:38   ` Vladimir Davydov
2019-04-05 17:17     ` [tarantool-patches] " Kirill Shcherbatov
2019-04-03 16:30   ` Vladimir Davydov
2019-04-02 15:49 ` [PATCH v3 7/7] box: introduce multikey indexes in memtx Kirill Shcherbatov
2019-04-04 14:20   ` Vladimir Davydov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190403125601.unoe7qjdl6clqd55@esperanza \
    --to=vdavydov.dev@gmail.com \
    --cc=kshcherbatov@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='Re: [PATCH v3 2/7] lib: introduce a new json_path_multikey_offset helper' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox