diff --git pom.xml pom.xml index 1abf738..40919a1 100644 --- pom.xml +++ pom.xml @@ -102,7 +102,7 @@ 3.4 1.7.7 0.8.0.RELEASE - 1.3.0-incubating + 1.4.0-incubating-SNAPSHOT 3.2.6 3.2.10 3.2.9 diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSort.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSort.java index 18d2838..1df6542 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSort.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveSort.java @@ -22,6 +22,7 @@ import org.apache.calcite.plan.RelOptCluster; import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelCollation; +import org.apache.calcite.rel.RelCollationTraitDef; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.core.RelFactories; import org.apache.calcite.rel.core.Sort; @@ -49,6 +50,24 @@ public HiveSort(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, offset, fetch); } + /** + * Creates a HiveSort. + * + * @param input Input relational expression + * @param collation array of sort specifications + * @param offset Expression for number of rows to discard before returning + * first row + * @param fetch Expression for number of rows to fetch + */ + public static HiveSort create(RelNode input, RelCollation collation, + RexNode offset, RexNode fetch) { + RelOptCluster cluster = input.getCluster(); + collation = RelCollationTraitDef.INSTANCE.canonize(collation); + RelTraitSet traitSet = + TraitsUtil.getSortTraitSet(cluster, input.getTraitSet(), collation); + return new HiveSort(cluster, traitSet, input, collation, offset, fetch); + } + @Override public HiveSort copy(RelTraitSet traitSet, RelNode newInput, RelCollation newCollation, RexNode offset, RexNode fetch) { @@ -77,9 +96,15 @@ public void implement(Implementor implementor) { private static class HiveSortRelFactory implements RelFactories.SortFactory { @Override - public RelNode createSort(RelTraitSet traits, RelNode child, RelCollation collation, + public RelNode createSort(RelTraitSet traits, RelNode input, RelCollation collation, RexNode offset, RexNode fetch) { - return new HiveSort(child.getCluster(), traits, child, collation, offset, fetch); + return createSort(input, collation, offset, fetch); + } + + @Override + public RelNode createSort(RelNode input, RelCollation collation, RexNode offset, + RexNode fetch) { + return create(input, collation, offset, fetch); } } }