@@ -185,9 +185,12 @@ void ExternalPattern::groupByHelper(){
185185 grouped_variables.clear ();
186186 for (auto & g: vec.first ) grouped_variables.push_back (g);
187187 // Sort the matched files by the group_by parameter
188- sort (vec.second .begin (), vec.second .end (), [&group_by = as_const (group_by)](Tuple& p1, Tuple& p2){
189- return get<0 >(p1)[group_by] < get<0 >(p2)[group_by];
190- });
188+
189+ if (isSorted ()) {
190+ sort (vec.second .begin (), vec.second .end (), [&group_by = as_const (group_by)](Tuple& p1, Tuple& p2){
191+ return get<0 >(p1)[group_by] < get<0 >(p2)[group_by];
192+ });
193+ }
191194
192195 Types current_value = get<0 >(vec.second [0 ])[group_by]; // get the value of variable
193196 vector<Tuple> empty_vec;
@@ -207,9 +210,12 @@ void ExternalPattern::groupByHelper(){
207210
208211 grouped_variables.push_back (make_pair (group_by, current_value));
209212 temp_group.push_back (make_pair (grouped_variables, temp_vec));
210- sort (temp_group[group_ptr].second .begin (), temp_group[group_ptr].second .end (), [](Tuple& m1, Tuple& m2){
211- return get<1 >(m1)[0 ] < get<1 >(m2)[0 ];
212- });
213+
214+ if (isSorted ()) {
215+ sort (temp_group[group_ptr].second .begin (), temp_group[group_ptr].second .end (), [](Tuple& m1, Tuple& m2){
216+ return get<1 >(m1)[0 ] < get<1 >(m2)[0 ];
217+ });
218+ }
213219 temp_vec.clear ();
214220
215221 if (i < vec.second .size ()){
@@ -290,10 +296,12 @@ void ExternalPattern::nextGroup(){
290296 } else {
291297
292298 // update variable value and end loop on variable value change
293- // sort block by basename
294- sort (this ->current_group_ [0 ].second .begin (), this ->current_group_ [0 ].second .end (), [](Tuple& m1, Tuple& m2){
295- return get<1 >(m1)[0 ] < get<1 >(m2)[0 ];
296- });
299+ // sort block by basename
300+ if (isSorted ()) {
301+ sort (this ->current_group_ [0 ].second .begin (), this ->current_group_ [0 ].second .end (), [](Tuple& m1, Tuple& m2){
302+ return get<1 >(m1)[0 ] < get<1 >(m2)[0 ];
303+ });
304+ }
297305 this ->current_value_ = get<0 >(this ->temp_ )[this ->group_ [0 ]];
298306 value_added = false ;
299307
@@ -302,9 +310,12 @@ void ExternalPattern::nextGroup(){
302310 };
303311 }
304312 }
305- sort (this ->current_group_ [0 ].second .begin (), this ->current_group_ [0 ].second .end (), [](Tuple& m1, Tuple& m2){
306- return get<1 >(m1)[0 ] < get<1 >(m2)[0 ];
307- });
313+
314+ if (isSorted ()) {
315+ sort (this ->current_group_ [0 ].second .begin (), this ->current_group_ [0 ].second .end (), [](Tuple& m1, Tuple& m2){
316+ return get<1 >(m1)[0 ] < get<1 >(m2)[0 ];
317+ });
318+ }
308319 this ->groupByHelper ();
309320}
310321
@@ -334,12 +345,15 @@ void ExternalPattern::groupBy(vector<string>& group_by) {
334345 // sort valid files externally
335346 string path = this ->stream_ .getValidFilesPath ();
336347 this ->tmp_directories_ .push_back (path);
337- ExternalMergeSort sort = ExternalMergeSort (std_map,
338- path,
339- path,
340- this ->stream_ .getBlockSizeStr (),
341- group_by[0 ],
342- this ->stream_ .map_size_ );
348+
349+ if (isSorted ()) {
350+ ExternalMergeSort sort = ExternalMergeSort (std_map,
351+ path,
352+ path,
353+ this ->stream_ .getBlockSizeStr (),
354+ group_by[0 ],
355+ this ->stream_ .map_size_ );
356+ }
343357}
344358
345359string ExternalPattern::externalOutPutName (){
0 commit comments