diff --git a/src/hnswinsert.c b/src/hnswinsert.c index f7cd51f..8394f9b 100644 --- a/src/hnswinsert.c +++ b/src/hnswinsert.c @@ -405,8 +405,9 @@ HnswAddDuplicate(Relation index, HnswElement element, HnswElement dup) Buffer buf; Page page; GenericXLogState *state; - Size etupSize = HNSW_ELEMENT_TUPLE_SIZE(dup->vec->dim); + ItemId itemid; HnswElementTuple etup; + Size etupSize; int i; /* Read page */ @@ -416,7 +417,9 @@ HnswAddDuplicate(Relation index, HnswElement element, HnswElement dup) page = GenericXLogRegisterBuffer(state, buf, 0); /* Find space */ - etup = (HnswElementTuple) PageGetItem(page, PageGetItemId(page, dup->offno)); + itemid = PageGetItemId(page, dup->offno); + etup = (HnswElementTuple) PageGetItem(page, itemid); + etupSize = ItemIdGetLength(itemid); for (i = 0; i < HNSW_HEAPTIDS; i++) { if (!ItemPointerIsValid(&etup->heaptids[i])) diff --git a/src/hnswvacuum.c b/src/hnswvacuum.c index 29b675f..b2f361d 100644 --- a/src/hnswvacuum.c +++ b/src/hnswvacuum.c @@ -62,7 +62,8 @@ RemoveHeapTids(HnswVacuumState * vacuumstate) /* Iterate over nodes */ for (offno = FirstOffsetNumber; offno <= maxoffno; offno = OffsetNumberNext(offno)) { - HnswElementTuple etup = (HnswElementTuple) PageGetItem(page, PageGetItemId(page, offno)); + ItemId itemid = PageGetItemId(page, offno); + HnswElementTuple etup = (HnswElementTuple) PageGetItem(page, itemid); int idx = 0; bool itemUpdated = false; @@ -93,7 +94,7 @@ RemoveHeapTids(HnswVacuumState * vacuumstate) if (itemUpdated) { - Size etupSize = HNSW_ELEMENT_TUPLE_SIZE(etup->vec.dim); + Size etupSize = ItemIdGetLength(itemid); /* Mark rest as invalid */ for (int i = idx; i < HNSW_HEAPTIDS; i++) @@ -477,7 +478,8 @@ MarkDeleted(HnswVacuumState * vacuumstate) /* Update element and neighbors together */ for (offno = FirstOffsetNumber; offno <= maxoffno; offno = OffsetNumberNext(offno)) { - HnswElementTuple etup = (HnswElementTuple) PageGetItem(page, PageGetItemId(page, offno)); + ItemId itemid = PageGetItemId(page, offno); + HnswElementTuple etup = (HnswElementTuple) PageGetItem(page, itemid); HnswNeighborTuple ntup; Size etupSize; Size ntupSize; @@ -505,7 +507,7 @@ MarkDeleted(HnswVacuumState * vacuumstate) continue; /* Calculate sizes */ - etupSize = HNSW_ELEMENT_TUPLE_SIZE(etup->vec.dim); + etupSize = ItemIdGetLength(itemid); ntupSize = HNSW_NEIGHBOR_TUPLE_SIZE(etup->level, vacuumstate->m); /* Get neighbor page */