DRY code [skip ci]

This commit is contained in:
Andrew Kane
2023-07-30 21:00:00 -07:00
parent 9e115c629f
commit 95eded091f
4 changed files with 21 additions and 16 deletions

View File

@@ -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);

View File

@@ -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)

View File

@@ -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 (;;)

View File

@@ -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
*/