korlov42 commented on a change in pull request #8869:
URL: https://github.com/apache/ignite/pull/8869#discussion_r595249220
##########
File path:
modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/HashAggregateConverterRule.java
##########
@@ -26,29 +26,85 @@
import org.apache.calcite.rel.logical.LogicalAggregate;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
import
org.apache.ignite.internal.processors.query.calcite.rel.IgniteConvention;
-import
org.apache.ignite.internal.processors.query.calcite.rel.IgniteHashAggregate;
+import
org.apache.ignite.internal.processors.query.calcite.rel.agg.IgniteMapHashAggregate;
+import
org.apache.ignite.internal.processors.query.calcite.rel.agg.IgniteReduceHashAggregate;
+import
org.apache.ignite.internal.processors.query.calcite.rel.agg.IgniteSingleHashAggregate;
+import
org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions;
/**
*
*/
-public class HashAggregateConverterRule extends
AbstractIgniteConverterRule<LogicalAggregate> {
+public class HashAggregateConverterRule {
/** */
- public static final RelOptRule INSTANCE = new HashAggregateConverterRule();
+ public static final RelOptRule SINGLE = new
HashSingleAggregateConverterRule();
/** */
- public HashAggregateConverterRule() {
- super(LogicalAggregate.class, "HashAggregateConverterRule");
+ public static final RelOptRule MAP_REDUCE = new
HashMapReduceAggregateConverterRule();
+
+ /** */
+ private HashAggregateConverterRule() {
+ // No-op.
+ }
+
+ /** */
+ private static class HashSingleAggregateConverterRule extends
AbstractIgniteConverterRule<LogicalAggregate> {
+ /** */
+ HashSingleAggregateConverterRule() {
+ super(LogicalAggregate.class, "HashSingleAggregateConverterRule");
+ }
+
+ /** {@inheritDoc} */
+ @Override protected PhysicalNode convert(RelOptPlanner planner,
RelMetadataQuery mq,
+ LogicalAggregate agg) {
+ RelOptCluster cluster = agg.getCluster();
+ RelTraitSet inTrait =
cluster.traitSetOf(IgniteConvention.INSTANCE).replace(IgniteDistributions.single());
+ RelTraitSet outTrait =
cluster.traitSetOf(IgniteConvention.INSTANCE).replace(IgniteDistributions.single());
+ RelNode input = convert(agg.getInput(), inTrait);
+
+ return new IgniteSingleHashAggregate(
+ cluster,
+ outTrait,
+ convert(input, inTrait),
+ agg.getGroupSet(),
+ agg.getGroupSets(),
+ agg.getAggCallList()
+ );
+ }
}
- /** {@inheritDoc} */
- @Override protected PhysicalNode convert(RelOptPlanner planner,
RelMetadataQuery mq,
- LogicalAggregate rel) {
- RelOptCluster cluster = rel.getCluster();
- RelTraitSet inTrait = cluster.traitSetOf(IgniteConvention.INSTANCE);
- RelTraitSet outTrait = cluster.traitSetOf(IgniteConvention.INSTANCE);
- RelNode input = convert(rel.getInput(), inTrait);
+ /** */
+ private static class HashMapReduceAggregateConverterRule extends
AbstractIgniteConverterRule<LogicalAggregate> {
+ /** */
+ HashMapReduceAggregateConverterRule() {
+ super(LogicalAggregate.class,
"HashMapReduceAggregateConverterRule");
+ }
+
+ /** {@inheritDoc} */
+ @Override protected PhysicalNode convert(RelOptPlanner planner,
RelMetadataQuery mq,
+ LogicalAggregate agg) {
+ RelOptCluster cluster = agg.getCluster();
+ RelTraitSet inTrait =
cluster.traitSetOf(IgniteConvention.INSTANCE);
+ RelTraitSet outTrait =
cluster.traitSetOf(IgniteConvention.INSTANCE);
+ RelNode input = convert(agg.getInput(), inTrait);
+
+ RelNode map = new IgniteMapHashAggregate(
+ cluster,
+ outTrait,
+ convert(input, inTrait),
+ agg.getGroupSet(),
+ agg.getGroupSets(),
+ agg.getAggCallList()
+ );
- return new IgniteHashAggregate(cluster, outTrait, input,
- rel.getGroupSet(), rel.getGroupSets(), rel.getAggCallList());
+ return new IgniteReduceHashAggregate(
+ cluster,
+ outTrait.replace(IgniteDistributions.single()),
+ convert(map, inTrait.replace(IgniteDistributions.single())),
Review comment:
please create `map` with a required traits and don't use `convert` here
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]