Skip to content

Commit

Permalink
Fix planning error with duplicate columns in ORDER BY clause
Browse files Browse the repository at this point in the history
  • Loading branch information
yuananf authored and martint committed Jun 8, 2015
1 parent 90267ea commit d66165b
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
Expand Up @@ -688,20 +688,23 @@ private PlanBuilder sort(PlanBuilder subPlan, List<SortItem> orderBy, Optional<S
Iterator<SortItem> sortItems = orderBy.iterator();

ImmutableList.Builder<Symbol> orderBySymbols = ImmutableList.builder();
ImmutableMap.Builder<Symbol, SortOrder> orderings = ImmutableMap.builder();
Map<Symbol, SortOrder> orderings = new HashMap<Symbol, SortOrder>();
for (FieldOrExpression fieldOrExpression : orderByExpressions) {
Symbol symbol = subPlan.translate(fieldOrExpression);
orderBySymbols.add(symbol);

orderings.put(symbol, toSortOrder(sortItems.next()));
SortItem sortItem = sortItems.next();
if (!orderings.containsKey(symbol)) {
orderBySymbols.add(symbol);
orderings.put(symbol, toSortOrder(sortItem));
}
}

PlanNode planNode;
if (limit.isPresent()) {
planNode = new TopNNode(idAllocator.getNextId(), subPlan.getRoot(), Long.parseLong(limit.get()), orderBySymbols.build(), orderings.build(), false);
planNode = new TopNNode(idAllocator.getNextId(), subPlan.getRoot(), Long.parseLong(limit.get()), orderBySymbols.build(), orderings, false);
}
else {
planNode = new SortNode(idAllocator.getNextId(), subPlan.getRoot(), orderBySymbols.build(), orderings.build());
planNode = new SortNode(idAllocator.getNextId(), subPlan.getRoot(), orderBySymbols.build(), orderings);
}

return new PlanBuilder(subPlan.getTranslations(), planNode, subPlan.getSampleWeight());
Expand Down
Expand Up @@ -1753,6 +1753,14 @@ public void testOrderByMultipleFields()
assertQueryOrdered("SELECT custkey, orderstatus FROM orders ORDER BY custkey DESC, orderstatus");
}

@Test
public void testOrderByDuplicateFields()
throws Exception
{
assertQueryOrdered("SELECT custkey, custkey FROM orders ORDER BY custkey, custkey");
assertQueryOrdered("SELECT custkey, custkey FROM orders ORDER BY custkey ASC, custkey DESC");
}

@Test
public void testOrderByWithNulls()
throws Exception
Expand Down

0 comments on commit d66165b

Please sign in to comment.