#[cfg(feature = "parallel")]
use rayon::slice::ParallelSliceMut;
#[cfg(feature = "parallel")]
use crate::select::parallel::ParallelConfig;
use super::comparison::compare_rows_by_sort_keys;
use super::RowWithSortKeys;
pub(super) fn sort_rows(rows: &mut [RowWithSortKeys]) {
let comparison_fn = |(row_a, keys_a): &RowWithSortKeys, (row_b, keys_b): &RowWithSortKeys| {
let keys_a = keys_a.as_ref().unwrap();
let keys_b = keys_b.as_ref().unwrap();
let sort_cmp = compare_rows_by_sort_keys(keys_a, keys_b);
if sort_cmp != std::cmp::Ordering::Equal {
return sort_cmp;
}
row_a.row_id.cmp(&row_b.row_id)
};
#[cfg(feature = "parallel")]
{
let config = ParallelConfig::global();
if config.should_parallelize_sort(rows.len()) {
rows.par_sort_by(comparison_fn);
} else {
rows.sort_by(comparison_fn);
}
}
#[cfg(not(feature = "parallel"))]
{
rows.sort_by(comparison_fn);
}
}