From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Vladimir Davydov Subject: [PATCH 00/12] vinyl: do not fill secondary tuples with nulls Date: Thu, 21 Feb 2019 13:26:00 +0300 Message-Id: To: kostja@tarantool.org Cc: tarantool-patches@freelists.org List-ID: The goal of this patch set is to teach vinyl operate on key statements like on regular tuples so that we can avoid filling tuples read from secondary index runs with nulls (aka tuple surrogate). This is required to implement multikey indexes in vinyl. The first seven patches are preparatory - they do some cleanup that stand on the way and can probably be applied even if the rest of the patch set is rejected. The real work is done by the last 5 patches, which should be reviewed with scrutiny. I'm far not sure this is the right way to go, but I've failed to find a better solution so far. https://github.com/tarantool/tarantool/commits/dv/vy-dont-store-nulls-in-sk Vladimir Davydov (12): vinyl: use vy_lsm_env::empty_key where appropriate vinyl: make vy_tuple_delete static key_def: cleanup virtual function initialization key_def: move cmp and hash functions declarations to key_def.h vinyl: move vy_tuple_key_contains_null to generic code vinyl: move vy_key_dup to generic code vinyl: sanitize full/empty key stmt detection vinyl: remove optimized comparators vinyl: introduce statement environment vinyl: rename key stmt construction routine vinyl: don't use IPROTO_SELECT type for key statements vinyl: do not fill secondary tuples with nulls when decoded src/box/key_def.c | 52 ++++++-- src/box/key_def.h | 97 ++++++++++++++ src/box/memtx_hash.c | 1 - src/box/sql/analyze.c | 1 - src/box/tuple.c | 15 +++ src/box/tuple.h | 9 ++ src/box/tuple_bloom.c | 65 +++++++--- src/box/tuple_bloom.h | 15 +++ src/box/tuple_compare.cc | 35 ++++- src/box/tuple_compare.h | 34 +---- src/box/tuple_extract_key.cc | 18 ++- src/box/tuple_extract_key.h | 2 +- src/box/tuple_hash.cc | 1 + src/box/tuple_hash.h | 58 +-------- src/box/vinyl.c | 118 ++++++++--------- src/box/vy_cache.c | 22 ++-- src/box/vy_cache.h | 2 +- src/box/vy_lsm.c | 80 ++++++------ src/box/vy_lsm.h | 8 +- src/box/vy_mem.c | 17 ++- src/box/vy_mem.h | 2 +- src/box/vy_point_lookup.c | 5 +- src/box/vy_range.c | 18 ++- src/box/vy_read_iterator.c | 28 ++-- src/box/vy_read_set.c | 18 +-- src/box/vy_run.c | 135 +++++++++++--------- src/box/vy_scheduler.c | 6 +- src/box/vy_stmt.c | 121 +++++++++--------- src/box/vy_stmt.h | 277 ++++++++++++++++------------------------ src/box/vy_tx.c | 20 ++- src/box/vy_tx.h | 4 +- src/box/vy_upsert.c | 2 +- src/box/vy_write_iterator.c | 2 +- test/unit/vy_iterators_helper.c | 23 +--- test/unit/vy_iterators_helper.h | 3 +- test/unit/vy_mem.c | 8 +- test/unit/vy_point_lookup.c | 9 +- 37 files changed, 730 insertions(+), 601 deletions(-) -- 2.11.0