diff --git a/src/hnsw.h b/src/hnsw.h index e3974c3..c58ced1 100644 --- a/src/hnsw.h +++ b/src/hnsw.h @@ -393,7 +393,7 @@ void HnswUpdateNeighborsOnDisk(Relation index, FmgrInfo *procinfo, Oid collatio void HnswLoadElementFromTuple(HnswElement element, HnswElementTuple etup, bool loadHeaptids, bool loadVec); void HnswLoadElement(HnswElement element, double *distance, Datum *q, Relation index, FmgrInfo *procinfo, Oid collation, bool loadVec, double *maxDistance); void HnswSetElementTuple(char *base, HnswElementTuple etup, HnswElement element); -void HnswUpdateConnection(char *base, HnswElement element, HnswCandidate * hc, HnswNeighborArray * neighbors, int lm, int *updateIdx, Relation index, FmgrInfo *procinfo, Oid collation); +void HnswUpdateConnection(char *base, HnswNeighborArray * neighbors, HnswElement newElement, float distance, int lm, int *updateIdx, Relation index, FmgrInfo *procinfo, Oid collation); bool HnswLoadNeighborTids(HnswElement element, ItemPointerData *indextids, Relation index, int m, int lm, int lc); void HnswInitLockTranche(void); const HnswTypeInfo *HnswGetTypeInfo(Relation index); diff --git a/src/hnswbuild.c b/src/hnswbuild.c index 10bda20..82c981b 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -388,7 +388,7 @@ UpdateNeighborsInMemory(char *base, FmgrInfo *procinfo, Oid collation, HnswEleme Assert(neighborElement); LWLockAcquire(&neighborElement->lock, LW_EXCLUSIVE); - HnswUpdateConnection(base, e, hc, HnswGetNeighbors(base, neighborElement, lc), lm, NULL, NULL, procinfo, collation); + HnswUpdateConnection(base, HnswGetNeighbors(base, neighborElement, lc), e, hc->distance, lm, NULL, NULL, procinfo, collation); LWLockRelease(&neighborElement->lock); } } diff --git a/src/hnswinsert.c b/src/hnswinsert.c index 106428b..3d73f2a 100644 --- a/src/hnswinsert.c +++ b/src/hnswinsert.c @@ -461,7 +461,7 @@ HnswUpdateNeighborsOnDisk(Relation index, FmgrInfo *procinfo, Oid collation, Hns LoadElementsForInsert(neighborNeighbors, q, &idx, index, procinfo, collation); if (idx == -1) - HnswUpdateConnection(base, e, hc, neighborNeighbors, lm, &idx, index, procinfo, collation); + HnswUpdateConnection(base, neighborNeighbors, e, hc->distance, lm, &idx, index, procinfo, collation); } /* New element was not selected as a neighbor */ diff --git a/src/hnswutils.c b/src/hnswutils.c index 8ac9c08..f8f627f 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -1078,12 +1078,12 @@ AddConnections(char *base, HnswElement element, List *neighbors, int lc) * Update connections */ void -HnswUpdateConnection(char *base, HnswElement newElement, HnswCandidate * hc, HnswNeighborArray * neighbors, int lm, int *updateIdx, Relation index, FmgrInfo *procinfo, Oid collation) +HnswUpdateConnection(char *base, HnswNeighborArray * neighbors, HnswElement newElement, float distance, int lm, int *updateIdx, Relation index, FmgrInfo *procinfo, Oid collation) { HnswCandidate newHc; HnswPtrStore(base, newHc.element, newElement); - newHc.distance = hc->distance; + newHc.distance = distance; if (neighbors->length < lm) {