From f2bffff4604c80c1183167a6f13f8ffc20ff99ca Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Thu, 11 Apr 2024 21:14:48 -0700 Subject: [PATCH] Improved code for item size [skip ci] --- src/ivfbuild.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/ivfbuild.c b/src/ivfbuild.c index f9533f1..8cd54b6 100644 --- a/src/ivfbuild.c +++ b/src/ivfbuild.c @@ -328,6 +328,20 @@ GetMaxDimensions(IvfflatType type) return maxDimensions; } +/* + * Get item size + */ +static Size +GetItemSize(IvfflatType type, int dimensions) +{ + if (type == IVFFLAT_TYPE_VECTOR) + return VECTOR_SIZE(dimensions); + else if (type == IVFFLAT_TYPE_HALFVEC) + return HALFVEC_SIZE(dimensions); + else + elog(ERROR, "Unsupported type"); +} + /* * Initialize the build state */ @@ -374,7 +388,7 @@ InitBuildState(IvfflatBuildState * buildstate, Relation heap, Relation index, In buildstate->slot = MakeSingleTupleTableSlot(buildstate->tupdesc, &TTSOpsVirtual); - buildstate->centers = VectorArrayInit(buildstate->lists, buildstate->dimensions, buildstate->type == IVFFLAT_TYPE_HALFVEC ? HALFVEC_SIZE(buildstate->dimensions) : VECTOR_SIZE(buildstate->dimensions)); + buildstate->centers = VectorArrayInit(buildstate->lists, buildstate->dimensions, GetItemSize(buildstate->type, buildstate->dimensions)); buildstate->listInfo = palloc(sizeof(ListInfo) * buildstate->lists); buildstate->tmpCtx = AllocSetContextCreate(CurrentMemoryContext,