From 95eded091fb4881b1d3a234cb2c650b92ff83318 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Sun, 30 Jul 2023 21:00:00 -0700 Subject: [PATCH] DRY code [skip ci] --- src/hnsw.h | 1 + src/hnswbuild.c | 11 +---------- src/hnswinsert.c | 7 +------ src/hnswutils.c | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/hnsw.h b/src/hnsw.h index 28b9f38..61f8acf 100644 --- a/src/hnsw.h +++ b/src/hnsw.h @@ -248,6 +248,7 @@ void HnswAddHeapTid(HnswElement element, ItemPointer heaptid); void HnswInitNeighbors(HnswElement element, int m); bool HnswInsertTuple(Relation index, Datum *values, bool *isnull, ItemPointer heap_tid, Relation heapRel); void HnswLoadElement(HnswElement element, float *distance, Datum *q, Relation index, FmgrInfo *procinfo, Oid collation, bool loadvec); +void HnswSetElementTuple(HnswElementTuple etup, HnswElement element); /* Index access methods */ IndexBuildResult *hnswbuild(Relation heap, Relation index, IndexInfo *indexInfo); diff --git a/src/hnswbuild.c b/src/hnswbuild.c index 2463e29..76e9334 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -109,17 +109,8 @@ CreateElementPages(HnswBuildState * buildstate) e->neighborPage = neighborPage++; /* Set item data */ - for (int i = 0; i < HNSW_HEAPTIDS; i++) - { - if (i < list_length(e->heaptids)) - element->heaptids[i] = *((ItemPointer) list_nth(e->heaptids, i)); - else - ItemPointerSetInvalid(&element->heaptids[i]); - } - element->level = e->level; - element->deleted = 0; + HnswSetElementTuple(element, e); element->neighborPage = e->neighborPage; - memcpy(&element->vec, e->vec, VECTOR_SIZE(dimensions)); /* Ensure free space */ if (PageGetFreeSpace(page) < elementsz) diff --git a/src/hnswinsert.c b/src/hnswinsert.c index 8fa9664..9eeb3a1 100644 --- a/src/hnswinsert.c +++ b/src/hnswinsert.c @@ -80,12 +80,7 @@ WriteNewElementPages(Relation index, HnswElement e, int m) /* Prepare tuple */ etup = palloc0(esize); - etup->heaptids[0] = *((ItemPointer) linitial(e->heaptids)); - for (int i = 1; i < HNSW_HEAPTIDS; i++) - ItemPointerSetInvalid(&etup->heaptids[i]); - etup->level = e->level; - etup->deleted = 0; - memcpy(&etup->vec, e->vec, VECTOR_SIZE(dimensions)); + HnswSetElementTuple(etup, e); /* Find a page to insert the item */ for (;;) diff --git a/src/hnswutils.c b/src/hnswutils.c index 8eaec74..81efea5 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -602,6 +602,24 @@ HnswFreeElement(HnswElement element) pfree(element); } +/* + * Set element tuple, except for neighbor page + */ +void +HnswSetElementTuple(HnswElementTuple etup, HnswElement element) +{ + for (int i = 0; i < HNSW_HEAPTIDS; i++) + { + if (i < list_length(element->heaptids)) + etup->heaptids[i] = *((ItemPointer) list_nth(element->heaptids, i)); + else + ItemPointerSetInvalid(&etup->heaptids[i]); + } + etup->level = element->level; + etup->deleted = 0; + memcpy(&etup->vec, element->vec, VECTOR_SIZE(element->vec->dim)); +} + /* * Get the distance for a candidate */