From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Kirill Shcherbatov Subject: [PATCH v5 0/9] box: indexes by JSON path Date: Mon, 26 Nov 2018 13:49:34 +0300 Message-Id: To: tarantool-patches@freelists.org, vdavydov.dev@gmail.com Cc: kostja@tarantool.org, Kirill Shcherbatov List-ID: http://github.com/tarantool/tarantool/tree/kshch/gh-1012-json-indexes https://github.com/tarantool/tarantool/issues/1012 Sometimes field data could have complex document structure. When this structure is consistent across whole document, you are able to create an index by JSON path. New JSON tree class is used to manage tuple_field(s) defined for format. This allows to work with fields in unified way. To speed-up data access by JSON index key_part structure extended with offset_slot cache that points to field_map item containing data offset for current tuple. Initialization of the field map is done by traversing the tree to detect vertices that are missing in the msgpack. Introduced offset_slot_cache in key_part to tune data access for typical scenario of using tuples that have same format. Kirill Shcherbatov (9): box: refactor json_path_parser class lib: implement JSON tree class for json library box: manage format fields with JSON tree class lib: introduce json_path_cmp routine box: introduce JSON indexes box: introduce has_json_paths flag in templates box: tune tuple_field_raw_by_path for indexed data box: introduce offset slot cache in key_part box: specify indexes in user-friendly form src/box/alter.cc | 7 +- src/box/blackhole.c | 5 +- src/box/engine.h | 11 +- src/box/errcode.h | 2 +- src/box/index_def.c | 8 +- src/box/key_def.c | 171 +++++++++-- src/box/key_def.h | 31 +- src/box/lua/index.c | 66 +++++ src/box/lua/schema.lua | 22 +- src/box/lua/space.cc | 5 + src/box/lua/tuple.c | 2 +- src/box/memtx_engine.c | 7 +- src/box/memtx_space.c | 5 +- src/box/memtx_space.h | 2 +- src/box/schema.cc | 4 +- src/box/space.c | 6 +- src/box/space.h | 8 +- src/box/sql.c | 17 +- src/box/sql/build.c | 6 +- src/box/sql/select.c | 6 +- src/box/sql/where.c | 1 + src/box/sysview.c | 3 +- src/box/tuple.c | 40 +-- src/box/tuple_compare.cc | 125 +++++--- src/box/tuple_extract_key.cc | 121 +++++--- src/box/tuple_format.c | 633 ++++++++++++++++++++++++++++++++-------- src/box/tuple_format.h | 80 ++++- src/box/tuple_hash.cc | 47 ++- src/box/vinyl.c | 10 +- src/box/vy_log.c | 3 +- src/box/vy_lsm.c | 5 +- src/box/vy_point_lookup.c | 2 - src/box/vy_stmt.c | 168 +++++++++-- src/lib/json/CMakeLists.txt | 3 +- src/lib/json/json.c | 537 ++++++++++++++++++++++++++++++++++ src/lib/json/json.h | 296 +++++++++++++++++++ src/lib/json/path.c | 244 ---------------- src/lib/json/path.h | 112 ------- test/box/misc.result | 1 + test/engine/tuple.result | 462 +++++++++++++++++++++++++++++ test/engine/tuple.test.lua | 135 +++++++++ test/unit/json_path.c | 281 ++++++++++++++++-- test/unit/json_path.result | 51 +++- test/unit/vy_iterators_helper.c | 6 +- test/unit/vy_mem.c | 2 +- test/unit/vy_point_lookup.c | 2 +- 46 files changed, 3006 insertions(+), 755 deletions(-) create mode 100644 src/lib/json/json.c create mode 100644 src/lib/json/json.h delete mode 100644 src/lib/json/path.c delete mode 100644 src/lib/json/path.h -- 2.7.4