diff --git a/src/ivfbuild.c b/src/ivfbuild.c index b9e97c8..3c52278 100644 --- a/src/ivfbuild.c +++ b/src/ivfbuild.c @@ -562,6 +562,20 @@ PrintKmeansMetrics(IvfflatBuildState * buildstate) } #endif +/* + * Initialize build sort state + */ +static Tuplesortstate * +InitBuildSortState(TupleDesc tupdesc, int memory, SortCoordinate coordinate) +{ + AttrNumber attNums[] = {1}; + Oid sortOperators[] = {Int4LessOperator}; + Oid sortCollations[] = {InvalidOid}; + bool nullsFirstFlags[] = {false}; + + return tuplesort_begin_heap(tupdesc, 1, attNums, sortOperators, sortCollations, nullsFirstFlags, memory, coordinate, false); +} + /* * Within leader, wait for end of heap scan */ @@ -609,12 +623,6 @@ IvfflatParallelScanAndSort(IvfflatSpool * ivfspool, IvfflatShared * ivfshared, S double reltuples; IndexInfo *indexInfo; - /* Sort options, which must match AssignTuples */ - AttrNumber attNums[] = {1}; - Oid sortOperators[] = {Int4LessOperator}; - Oid sortCollations[] = {InvalidOid}; - bool nullsFirstFlags[] = {false}; - /* Initialize local tuplesort coordination state */ coordinate = palloc0(sizeof(SortCoordinateData)); coordinate->isWorker = true; @@ -627,7 +635,7 @@ IvfflatParallelScanAndSort(IvfflatSpool * ivfspool, IvfflatShared * ivfshared, S InitBuildState(&buildstate, ivfspool->heap, ivfspool->index, indexInfo); memcpy(buildstate.centers->items, ivfcenters, buildstate.centers->itemsize * buildstate.centers->maxlen); buildstate.centers->length = buildstate.centers->maxlen; - ivfspool->sortstate = tuplesort_begin_heap(buildstate.tupdesc, 1, attNums, sortOperators, sortCollations, nullsFirstFlags, sortmem, coordinate, false); + ivfspool->sortstate = InitBuildSortState(buildstate.tupdesc, sortmem, coordinate); buildstate.sortstate = ivfspool->sortstate; scan = table_beginscan_parallel(ivfspool->heap, ParallelTableScanFromIvfflatShared(ivfshared)); @@ -924,12 +932,6 @@ AssignTuples(IvfflatBuildState * buildstate) int parallel_workers = 0; SortCoordinate coordinate = NULL; - /* Sort options, which must match IvfflatParallelScanAndSort */ - AttrNumber attNums[] = {1}; - Oid sortOperators[] = {Int4LessOperator}; - Oid sortCollations[] = {InvalidOid}; - bool nullsFirstFlags[] = {false}; - pgstat_progress_update_param(PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_IVFFLAT_PHASE_ASSIGN); /* Calculate parallel workers */ @@ -950,7 +952,7 @@ AssignTuples(IvfflatBuildState * buildstate) } /* Begin serial/leader tuplesort */ - buildstate->sortstate = tuplesort_begin_heap(buildstate->tupdesc, 1, attNums, sortOperators, sortCollations, nullsFirstFlags, maintenance_work_mem, coordinate, false); + buildstate->sortstate = InitBuildSortState(buildstate->tupdesc, maintenance_work_mem, coordinate); /* Add tuples to sort */ if (buildstate->heap != NULL)