[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