[PATCH v4 01/14] box: refactor key_def_find routine
Kirill Shcherbatov
kshcherbatov at tarantool.org
Thu Oct 11 10:58:41 MSK 2018
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
More information about the Tarantool-patches
mailing list