/** * Coalesce sort groups that have compatible partition-by exprs and have a prefix relationship. */ private void mergeSortGroups(List<SortGroup> sortGroups) { boolean hasMerged = false; do { hasMerged = false; for (SortGroup sg1 : sortGroups) { for (SortGroup sg2 : sortGroups) { if (sg1 != sg2 && sg1.isPrefixOf(sg2)) { sg1.absorb(sg2); sortGroups.remove(sg2); hasMerged = true; break; } } if (hasMerged) break; } } while (hasMerged); }