diff --git a/src/hnsw.h b/src/hnsw.h index fed281e..6f96cc3 100644 --- a/src/hnsw.h +++ b/src/hnsw.h @@ -262,7 +262,6 @@ typedef struct HnswBuildState HnswGraph *graph; double ml; int maxLevel; - Vector *normvec; /* Memory */ MemoryContext graphCtx; @@ -367,7 +366,7 @@ typedef struct HnswVacuumState int HnswGetM(Relation index); int HnswGetEfConstruction(Relation index); FmgrInfo *HnswOptionalProcInfo(Relation index, uint16 procnum); -bool HnswNormValue(FmgrInfo *procinfo, Oid collation, Datum *value, Vector * result); +bool HnswNormValue(FmgrInfo *procinfo, Oid collation, Datum *value); Buffer HnswNewBuffer(Relation index, ForkNumber forkNum); void HnswInitPage(Buffer buf, Page page); void HnswInit(void); diff --git a/src/hnswbuild.c b/src/hnswbuild.c index a9c737c..036b5de 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -489,7 +489,7 @@ InsertTuple(Relation index, Datum *values, bool *isnull, ItemPointer heaptid, Hn /* Normalize if needed */ if (buildstate->normprocinfo != NULL) { - if (!HnswNormValue(buildstate->normprocinfo, buildstate->collation, &value, buildstate->normvec)) + if (!HnswNormValue(buildstate->normprocinfo, buildstate->collation, &value)) return false; } @@ -703,9 +703,6 @@ InitBuildState(HnswBuildState * buildstate, Relation heap, Relation index, Index buildstate->ml = HnswGetMl(buildstate->m); buildstate->maxLevel = HnswGetMaxLevel(buildstate->m); - /* Reuse for each tuple */ - buildstate->normvec = InitVector(buildstate->dimensions); - buildstate->graphCtx = GenerationContextCreate(CurrentMemoryContext, "Hnsw build graph context", #if PG_VERSION_NUM >= 150000 @@ -729,7 +726,6 @@ InitBuildState(HnswBuildState * buildstate, Relation heap, Relation index, Index static void FreeBuildState(HnswBuildState * buildstate) { - pfree(buildstate->normvec); MemoryContextDelete(buildstate->graphCtx); MemoryContextDelete(buildstate->tmpCtx); } diff --git a/src/hnswinsert.c b/src/hnswinsert.c index c3c2885..cf67518 100644 --- a/src/hnswinsert.c +++ b/src/hnswinsert.c @@ -622,7 +622,7 @@ HnswInsertTuple(Relation index, Datum *values, bool *isnull, ItemPointer heap_ti normprocinfo = HnswOptionalProcInfo(index, HNSW_NORM_PROC); if (normprocinfo != NULL) { - if (!HnswNormValue(normprocinfo, collation, &value, NULL)) + if (!HnswNormValue(normprocinfo, collation, &value)) return; } diff --git a/src/hnswscan.c b/src/hnswscan.c index eaf0519..63e960b 100644 --- a/src/hnswscan.c +++ b/src/hnswscan.c @@ -84,7 +84,7 @@ GetScanValue(IndexScanDesc scan) /* Fine if normalization fails */ if (so->normprocinfo != NULL) - HnswNormValue(so->normprocinfo, so->collation, &value, NULL); + HnswNormValue(so->normprocinfo, so->collation, &value); } return value; diff --git a/src/hnswutils.c b/src/hnswutils.c index 983fd11..5ecfda0 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -158,16 +158,14 @@ HnswOptionalProcInfo(Relation index, uint16 procnum) * if it's different than the original value */ bool -HnswNormValue(FmgrInfo *procinfo, Oid collation, Datum *value, Vector * result) +HnswNormValue(FmgrInfo *procinfo, Oid collation, Datum *value) { double norm = DatumGetFloat8(FunctionCall1Coll(procinfo, collation, *value)); if (norm > 0) { Vector *v = DatumGetVector(*value); - - if (result == NULL) - result = InitVector(v->dim); + Vector *result = InitVector(v->dim); for (int i = 0; i < v->dim; i++) result->x[i] = v->x[i] / norm;