@@ -562,6 +562,20 @@ PrintKmeansMetrics(IvfflatBuildState * buildstate)
562
562
}
563
563
#endif
564
564
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
+
565
579
/*
566
580
* Within leader, wait for end of heap scan
567
581
*/
@@ -609,12 +623,6 @@ IvfflatParallelScanAndSort(IvfflatSpool * ivfspool, IvfflatShared * ivfshared, S
609
623
double reltuples ;
610
624
IndexInfo * indexInfo ;
611
625
612
- /* Sort options, which must match AssignTuples */
613
- AttrNumber attNums [] = {1 };
614
- Oid sortOperators [] = {Int4LessOperator };
615
- Oid sortCollations [] = {InvalidOid };
616
- bool nullsFirstFlags [] = {false};
617
-
618
626
/* Initialize local tuplesort coordination state */
619
627
coordinate = palloc0 (sizeof (SortCoordinateData ));
620
628
coordinate -> isWorker = true;
@@ -627,7 +635,7 @@ IvfflatParallelScanAndSort(IvfflatSpool * ivfspool, IvfflatShared * ivfshared, S
627
635
InitBuildState (& buildstate , ivfspool -> heap , ivfspool -> index , indexInfo );
628
636
memcpy (buildstate .centers -> items , ivfcenters , buildstate .centers -> itemsize * buildstate .centers -> maxlen );
629
637
buildstate .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 );
631
639
buildstate .sortstate = ivfspool -> sortstate ;
632
640
scan = table_beginscan_parallel (ivfspool -> heap ,
633
641
ParallelTableScanFromIvfflatShared (ivfshared ));
@@ -924,12 +932,6 @@ AssignTuples(IvfflatBuildState * buildstate)
924
932
int parallel_workers = 0 ;
925
933
SortCoordinate coordinate = NULL ;
926
934
927
- /* Sort options, which must match IvfflatParallelScanAndSort */
928
- AttrNumber attNums [] = {1 };
929
- Oid sortOperators [] = {Int4LessOperator };
930
- Oid sortCollations [] = {InvalidOid };
931
- bool nullsFirstFlags [] = {false};
932
-
933
935
pgstat_progress_update_param (PROGRESS_CREATEIDX_SUBPHASE , PROGRESS_IVFFLAT_PHASE_ASSIGN );
934
936
935
937
/* Calculate parallel workers */
@@ -950,7 +952,7 @@ AssignTuples(IvfflatBuildState * buildstate)
950
952
}
951
953
952
954
/* 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 );
954
956
955
957
/* Add tuples to sort */
956
958
if (buildstate -> heap != NULL )
0 commit comments