@@ -562,6 +562,20 @@ PrintKmeansMetrics(IvfflatBuildState * buildstate)
562562}
563563#endif
564564
565+ /*
566+ * Initialize build sort state
567+ */
568+ static Tuplesortstate *
569+ InitBuildSortState (TupleDesc tupdesc ,int memory ,SortCoordinate coordinate )
570+ {
571+ AttrNumber attNums []= {1 };
572+ Oid sortOperators []= {Int4LessOperator };
573+ Oid sortCollations []= {InvalidOid };
574+ bool nullsFirstFlags []= {false};
575+
576+ return tuplesort_begin_heap (tupdesc ,1 ,attNums ,sortOperators ,sortCollations ,nullsFirstFlags ,memory ,coordinate , false);
577+ }
578+
565579/*
566580 * Within leader, wait for end of heap scan
567581 */
@@ -609,12 +623,6 @@ IvfflatParallelScanAndSort(IvfflatSpool * ivfspool, IvfflatShared * ivfshared, S
609623double reltuples ;
610624IndexInfo * indexInfo ;
611625
612- /* Sort options, which must match AssignTuples */
613- AttrNumber attNums []= {1 };
614- Oid sortOperators []= {Int4LessOperator };
615- Oid sortCollations []= {InvalidOid };
616- bool nullsFirstFlags []= {false};
617-
618626/* Initialize local tuplesort coordination state */
619627coordinate = palloc0 (sizeof (SortCoordinateData ));
620628coordinate -> isWorker = true;
@@ -627,7 +635,7 @@ IvfflatParallelScanAndSort(IvfflatSpool * ivfspool, IvfflatShared * ivfshared, S
627635InitBuildState (& buildstate ,ivfspool -> heap ,ivfspool -> index ,indexInfo );
628636memcpy (buildstate .centers -> items ,ivfcenters ,buildstate .centers -> itemsize * buildstate .centers -> maxlen );
629637buildstate .centers -> length = buildstate .centers -> maxlen ;
630- ivfspool -> sortstate = tuplesort_begin_heap (buildstate .tupdesc ,1 , attNums , sortOperators , sortCollations , nullsFirstFlags , sortmem ,coordinate , false );
638+ ivfspool -> sortstate = InitBuildSortState (buildstate .tupdesc ,sortmem ,coordinate );
631639buildstate .sortstate = ivfspool -> sortstate ;
632640scan = table_beginscan_parallel (ivfspool -> heap ,
633641ParallelTableScanFromIvfflatShared (ivfshared ));
@@ -924,12 +932,6 @@ AssignTuples(IvfflatBuildState * buildstate)
924932int parallel_workers = 0 ;
925933SortCoordinate coordinate = NULL ;
926934
927- /* Sort options, which must match IvfflatParallelScanAndSort */
928- AttrNumber attNums []= {1 };
929- Oid sortOperators []= {Int4LessOperator };
930- Oid sortCollations []= {InvalidOid };
931- bool nullsFirstFlags []= {false};
932-
933935pgstat_progress_update_param (PROGRESS_CREATEIDX_SUBPHASE ,PROGRESS_IVFFLAT_PHASE_ASSIGN );
934936
935937/* Calculate parallel workers */
@@ -950,7 +952,7 @@ AssignTuples(IvfflatBuildState * buildstate)
950952}
951953
952954/* Begin serial/leader tuplesort */
953- buildstate -> sortstate = tuplesort_begin_heap (buildstate -> tupdesc ,1 , attNums , sortOperators , sortCollations , nullsFirstFlags , maintenance_work_mem ,coordinate , false );
955+ buildstate -> sortstate = InitBuildSortState (buildstate -> tupdesc ,maintenance_work_mem ,coordinate );
954956
955957/* Add tuples to sort */
956958if (buildstate -> heap != NULL )