From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Kirill Shcherbatov Subject: [PATCH v4 01/14] box: refactor key_def_find routine Date: Thu, 11 Oct 2018 10:58:41 +0300 Message-Id: <603e181a38f0c1e6bb7fe9b4d5ddced9cba09855.1539244271.git.kshcherbatov@tarantool.org> In-Reply-To: References: In-Reply-To: References: To: tarantool-patches@freelists.org Cc: vdavydov.dev@gmail.com, Kirill Shcherbatov List-ID: Replaced key_def_find with a new key_def_contains_part routine that checks if key_def contains specified part. In all cases legacy key_def_find has been used for such purpose. New API is more convenient for complex key_part that will appear with JSON paths introduction. Part of #1012. --- src/box/key_def.c | 17 +++++++++-------- src/box/key_def.h | 10 ++++------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/box/key_def.c b/src/box/key_def.c index 545b5da..67b517f 100644 --- a/src/box/key_def.c +++ b/src/box/key_def.c @@ -483,16 +483,17 @@ key_def_decode_parts_160(struct key_part_def *parts, uint32_t part_count, return 0; } -const struct key_part * -key_def_find(const struct key_def *key_def, uint32_t fieldno) +bool +key_def_contains_part(const struct key_def *key_def, + const struct key_part *to_find) { const struct key_part *part = key_def->parts; const struct key_part *end = part + key_def->part_count; for (; part != end; part++) { - if (part->fieldno == fieldno) - return part; + if (part->fieldno == to_find->fieldno) + return true; } - return NULL; + return false; } bool @@ -501,7 +502,7 @@ key_def_contains(const struct key_def *first, const struct key_def *second) const struct key_part *part = second->parts; const struct key_part *end = part + second->part_count; for (; part != end; part++) { - if (key_def_find(first, part->fieldno) == NULL) + if (!key_def_contains_part(first, part)) return false; } return true; @@ -518,7 +519,7 @@ key_def_merge(const struct key_def *first, const struct key_def *second) const struct key_part *part = second->parts; const struct key_part *end = part + second->part_count; for (; part != end; part++) { - if (key_def_find(first, part->fieldno)) + if (key_def_contains_part(first, part)) --new_part_count; } @@ -548,7 +549,7 @@ key_def_merge(const struct key_def *first, const struct key_def *second) part = second->parts; end = part + second->part_count; for (; part != end; part++) { - if (key_def_find(first, part->fieldno)) + if (key_def_contains_part(first, part)) continue; key_def_set_part(new_def, pos++, part->fieldno, part->type, part->is_nullable, part->coll, part->coll_id); diff --git a/src/box/key_def.h b/src/box/key_def.h index df85321..37b9045 100644 --- a/src/box/key_def.h +++ b/src/box/key_def.h @@ -301,12 +301,10 @@ key_def_decode_parts_160(struct key_part_def *parts, uint32_t part_count, const char **data, const struct field_def *fields, uint32_t field_count); -/** - * Returns the part in index_def->parts for the specified fieldno. - * If fieldno is not in index_def->parts returns NULL. - */ -const struct key_part * -key_def_find(const struct key_def *key_def, uint32_t fieldno); +/** Check if @a key_def contains @a to_find part. */ +bool +key_def_contains_part(const struct key_def *key_def, + const struct key_part *to_find); /** * Check if key definition @a first contains all parts of -- 2.7.4