Return-Path:
For example, {@link BuiltInMetadata.Selectivity} has a method
- * {@link BuiltInMetadata.Selectivity#getSelectivity(org.eigenbase.rex.RexNode)}.
+ * {@link BuiltInMetadata.Selectivity#getSelectivity(org.apache.calcite.rex.RexNode)}.
* A class provides implementations of selectivity for relational expressions
- * that extend {@link UnionRel} or {@link FilterRel}.
*
*
* class RelMdSelectivity {
- * public Double getSelectivity(UnionRel rel, RexNode predicate) { ... }
- * public Double getSelectivity(FilterRel rel, RexNode predicate) { ... }
+ * public Double getSelectivity(Union rel, RexNode predicate) { }
+ * public Double getSelectivity(LogicalFilter rel, RexNode predicate) { }
*
This is currently used by
- * {@link org.eigenbase.rel.rules.TransitivePredicatesOnJoinRule} to
+ * {@link org.apache.calcite.rel.rules.JoinPushTransitivePredicatesRule} to
* infer Predicates that can be inferred from one side of a Join
* to the other.
*
@@ -111,7 +109,7 @@ import com.google.common.collect.Lists;
*/
public class RelMdPredicates {
public static final RelMetadataProvider SOURCE = ReflectiveRelMetadataProvider
- .reflectiveSource(BuiltinMethod.PREDICATES.method, new RelMdPredicates());
+ .reflectiveSource(BuiltInMethod.PREDICATES.method, new RelMdPredicates());
private static final List Pulls up predicates that only contains references to columns in the
* GroupSet. For e.g.
@@ -230,8 +228,8 @@ public class RelMdPredicates {
* pulledUpExprs : { a > 7}
*
*/
- public RelOptPredicateList getPredicates(AggregateRelBase agg) {
- RelNode child = agg.getChild();
+ public RelOptPredicateList getPredicates(Aggregate agg) {
+ RelNode child = agg.getInput();
RelOptPredicateList childInfo =
RelMetadataQuery.getPulledUpPredicates(child);
@@ -257,11 +255,11 @@ public class RelMdPredicates {
}
/**
- * Infers predicates for a UnionRelBase.
+ * Infers predicates for a Union.
*
* The pulled up expression is a disjunction of its children's predicates.
*/
- public RelOptPredicateList getPredicates(UnionRelBase union) {
+ public RelOptPredicateList getPredicates(Union union) {
RexBuilder rB = union.getCluster().getRexBuilder();
List Contract is:
- * So for:
+ *
+ * So for:
* To add a new standard query How this is done depends upon the arguments to the function. If all
+ * functions have the same argument
+ * (e.g. {@code COUNT(DISTINCT x), SUM(DISTINCT x)} both have the argument
+ * {@code x}) then one extra {@link org.apache.calcite.rel.core.Aggregate} is
+ * sufficient.
+ *
+ * If there are multiple arguments
+ * (e.g. {@code COUNT(DISTINCT x), COUNT(DISTINCT y)})
+ * the rule creates separate {@code Aggregate}s and combines using a
+ * {@link org.apache.calcite.rel.core.Join}.
*/
-public final class RemoveDistinctAggregateRule extends RelOptRule {
+public final class AggregateExpandDistinctAggregatesRule extends RelOptRule {
//~ Static fields/initializers ---------------------------------------------
/** The default instance of the rule; operates only on logical expressions. */
- public static final RemoveDistinctAggregateRule INSTANCE =
- new RemoveDistinctAggregateRule(AggregateRel.class,
+ public static final AggregateExpandDistinctAggregatesRule INSTANCE =
+ new AggregateExpandDistinctAggregatesRule(LogicalAggregate.class,
RelFactories.DEFAULT_JOIN_FACTORY);
private final RelFactories.JoinFactory joinFactory;
//~ Constructors -----------------------------------------------------------
- public RemoveDistinctAggregateRule(Class extends AggregateRel> clazz,
+ public AggregateExpandDistinctAggregatesRule(
+ Class extends LogicalAggregate> clazz,
RelFactories.JoinFactory joinFactory) {
super(operand(clazz, any()));
this.joinFactory = joinFactory;
@@ -55,7 +85,7 @@ public final class RemoveDistinctAggregateRule extends RelOptRule {
//~ Methods ----------------------------------------------------------------
public void onMatch(RelOptRuleCall call) {
- final AggregateRelBase aggregate = call.rel(0);
+ final Aggregate aggregate = call.rel(0);
if (!aggregate.containsDistinctCall()) {
return;
}
@@ -125,9 +155,9 @@ public final class RemoveDistinctAggregateRule extends RelOptRule {
rel = null;
} else {
rel =
- new AggregateRel(
+ new LogicalAggregate(
aggregate.getCluster(),
- aggregate.getChild(),
+ aggregate.getInput(),
groupSet,
newAggCallList);
}
@@ -149,7 +179,7 @@ public final class RemoveDistinctAggregateRule extends RelOptRule {
* and no non-distinct aggregate functions.
*/
private RelNode convertMonopole(
- AggregateRelBase aggregate,
+ Aggregate aggregate,
List In some cases, it is necessary to split the aggregate.
@@ -52,7 +51,7 @@ import com.google.common.collect.Lists;
* evaluate. The main use of the rule is to match a query that has a filter
* under an aggregate to an existing aggregate table.
*
- * @see org.eigenbase.rel.rules.FilterAggregateTransposeRule
+ * @see org.apache.calcite.rel.rules.FilterAggregateTransposeRule
*/
public class AggregateFilterTransposeRule extends RelOptRule {
public static final AggregateFilterTransposeRule INSTANCE =
@@ -60,20 +59,20 @@ public class AggregateFilterTransposeRule extends RelOptRule {
private AggregateFilterTransposeRule() {
super(
- operand(AggregateRelBase.class,
- operand(FilterRelBase.class, any())));
+ operand(Aggregate.class,
+ operand(Filter.class, any())));
}
public void onMatch(RelOptRuleCall call) {
- final AggregateRelBase aggregate = call.rel(0);
- final FilterRelBase filter = call.rel(1);
+ final Aggregate aggregate = call.rel(0);
+ final Filter filter = call.rel(1);
// Do the columns used by the filter appear in the output of the aggregate?
final BitSet filterColumns =
RelOptUtil.InputFinder.bits(filter.getCondition());
final BitSet newGroupSet =
BitSets.union(aggregate.getGroupSet(), filterColumns);
- final RelNode input = filter.getChild();
+ final RelNode input = filter.getInput();
final Boolean unique =
RelMetadataQuery.areColumnsUnique(input, newGroupSet);
if (unique != null && unique) {
@@ -82,7 +81,7 @@ public class AggregateFilterTransposeRule extends RelOptRule {
// the rule fires forever: A-F => A-F-A => A-A-F-A => A-A-A-F-A => ...
return;
}
- final AggregateRelBase newAggregate =
+ final Aggregate newAggregate =
aggregate.copy(aggregate.getTraitSet(), input, newGroupSet,
aggregate.getAggCallList());
final Mappings.TargetMapping mapping = Mappings.target(
@@ -95,7 +94,7 @@ public class AggregateFilterTransposeRule extends RelOptRule {
newGroupSet.cardinality());
final RexNode newCondition =
RexUtil.apply(mapping, filter.getCondition());
- final FilterRelBase newFilter = filter.copy(filter.getTraitSet(),
+ final Filter newFilter = filter.copy(filter.getTraitSet(),
newAggregate, newCondition);
if (BitSets.contains(aggregate.getGroupSet(), filterColumns)) {
// Everything needed by the filter is returned by the aggregate.
@@ -111,7 +110,7 @@ public class AggregateFilterTransposeRule extends RelOptRule {
final List This is only possible when the grouping expressions and arguments to
@@ -53,21 +52,21 @@ public class AggregateProjectMergeRule extends RelOptRule {
/** Private constructor. */
private AggregateProjectMergeRule() {
super(
- operand(AggregateRelBase.class,
- operand(ProjectRelBase.class, any())));
+ operand(Aggregate.class,
+ operand(Project.class, any())));
}
public void onMatch(RelOptRuleCall call) {
- final AggregateRelBase aggregate = call.rel(0);
- final ProjectRelBase project = call.rel(1);
+ final Aggregate aggregate = call.rel(0);
+ final Project project = call.rel(1);
RelNode x = apply(aggregate, project);
if (x != null) {
call.transformTo(x);
}
}
- public static RelNode apply(AggregateRelBase aggregate,
- ProjectRelBase project) {
+ public static RelNode apply(Aggregate aggregate,
+ Project project) {
final List
+ *
+ *
+ *
+ *
*
*/
static class JoinConditionBasedPredicateInference {
- final JoinRelBase joinRel;
+ final Join joinRel;
final int nSysFields;
final int nFieldsLeft;
final int nFieldsRight;
@@ -320,7 +326,7 @@ public class RelMdPredicates {
final RexNode leftChildPredicates;
final RexNode rightChildPredicates;
- public JoinConditionBasedPredicateInference(JoinRelBase joinRel,
+ public JoinConditionBasedPredicateInference(Join joinRel,
RexNode lPreds, RexNode rPreds) {
super();
this.joinRel = joinRel;
@@ -535,8 +541,7 @@ public class RelMdPredicates {
super(true);
}
- @Override
- public Void visitCall(RexCall call) {
+ @Override public Void visitCall(RexCall call) {
if (call.getOperator().getKind() == SqlKind.EQUALS) {
int lPos = pos(call.getOperands().get(0));
int rPos = pos(call.getOperands().get(1));
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/RelMdRowCount.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdRowCount.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdRowCount.java
index 01df90e..2549570 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdRowCount.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdRowCount.java
@@ -14,29 +14,33 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
-import java.util.*;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Aggregate;
+import org.apache.calcite.rel.core.Filter;
+import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.SemiJoin;
+import org.apache.calcite.rel.core.Sort;
+import org.apache.calcite.rel.core.Union;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.util.BuiltInMethod;
+import org.apache.calcite.util.NumberUtil;
-import org.eigenbase.rel.*;
-import org.eigenbase.rel.rules.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.util14.*;
-
-import net.hydromatic.optiq.BuiltinMethod;
+import java.util.BitSet;
/**
- * RelMdRowCount supplies a default implementation of {@link
- * RelMetadataQuery#getRowCount} for the standard logical algebra.
+ * RelMdRowCount supplies a default implementation of
+ * {@link RelMetadataQuery#getRowCount} for the standard logical algebra.
*/
public class RelMdRowCount {
public static final RelMetadataProvider SOURCE =
ReflectiveRelMetadataProvider.reflectiveSource(
- BuiltinMethod.ROW_COUNT.method, new RelMdRowCount());
+ BuiltInMethod.ROW_COUNT.method, new RelMdRowCount());
//~ Methods ----------------------------------------------------------------
- public Double getRowCount(UnionRelBase rel) {
+ public Double getRowCount(Union rel) {
double nRows = 0.0;
for (RelNode input : rel.getInputs()) {
@@ -49,23 +53,23 @@ public class RelMdRowCount {
return nRows;
}
- public Double getRowCount(FilterRelBase rel) {
+ public Double getRowCount(Filter rel) {
return NumberUtil.multiply(
RelMetadataQuery.getSelectivity(
- rel.getChild(),
+ rel.getInput(),
rel.getCondition()),
- RelMetadataQuery.getRowCount(rel.getChild()));
+ RelMetadataQuery.getRowCount(rel.getInput()));
}
- public Double getRowCount(ProjectRelBase rel) {
- return RelMetadataQuery.getRowCount(rel.getChild());
+ public Double getRowCount(Project rel) {
+ return RelMetadataQuery.getRowCount(rel.getInput());
}
- public Double getRowCount(SortRel rel) {
- return RelMetadataQuery.getRowCount(rel.getChild());
+ public Double getRowCount(Sort rel) {
+ return RelMetadataQuery.getRowCount(rel.getInput());
}
- public Double getRowCount(SemiJoinRel rel) {
+ public Double getRowCount(SemiJoin rel) {
// create a RexNode representing the selectivity of the
// semijoin filter and pass it to getSelectivity
RexNode semiJoinSelectivity =
@@ -78,7 +82,7 @@ public class RelMdRowCount {
RelMetadataQuery.getRowCount(rel.getLeft()));
}
- public Double getRowCount(AggregateRelBase rel) {
+ public Double getRowCount(Aggregate rel) {
BitSet groupKey = new BitSet();
for (int i = 0; i < rel.getGroupCount(); i++) {
groupKey.set(i);
@@ -87,11 +91,11 @@ public class RelMdRowCount {
// rowcount is the cardinality of the group by columns
Double distinctRowCount =
RelMetadataQuery.getDistinctRowCount(
- rel.getChild(),
+ rel.getInput(),
groupKey,
null);
if (distinctRowCount == null) {
- return RelMetadataQuery.getRowCount(rel.getChild()) / 10;
+ return RelMetadataQuery.getRowCount(rel.getInput()) / 10;
} else {
return distinctRowCount;
}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/RelMdSelectivity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdSelectivity.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdSelectivity.java
index 9cfbf1b..1706e13 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdSelectivity.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdSelectivity.java
@@ -14,27 +14,34 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel.metadata;
-
-import java.util.*;
-
-import org.eigenbase.rel.*;
-import org.eigenbase.rel.rules.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.fun.*;
-
-import net.hydromatic.optiq.BuiltinMethod;
-import net.hydromatic.optiq.util.BitSets;
+package org.apache.calcite.rel.metadata;
+
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Aggregate;
+import org.apache.calcite.rel.core.Filter;
+import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.SemiJoin;
+import org.apache.calcite.rel.core.Sort;
+import org.apache.calcite.rel.core.Union;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.BuiltInMethod;
+
+import java.util.ArrayList;
+import java.util.List;
/**
- * RelMdSelectivity supplies a default implementation of {@link
- * RelMetadataQuery#getSelectivity} for the standard logical algebra.
+ * RelMdSelectivity supplies a default implementation of
+ * {@link RelMetadataQuery#getSelectivity} for the standard logical algebra.
*/
public class RelMdSelectivity {
public static final RelMetadataProvider SOURCE =
ReflectiveRelMetadataProvider.reflectiveSource(
- BuiltinMethod.SELECTIVITY.method, new RelMdSelectivity());
+ BuiltInMethod.SELECTIVITY.method, new RelMdSelectivity());
//~ Constructors -----------------------------------------------------------
@@ -43,7 +50,7 @@ public class RelMdSelectivity {
//~ Methods ----------------------------------------------------------------
- public Double getSelectivity(UnionRelBase rel, RexNode predicate) {
+ public Double getSelectivity(Union rel, RexNode predicate) {
if ((rel.getInputs().size() == 0) || (predicate == null)) {
return 1.0;
}
@@ -78,32 +85,32 @@ public class RelMdSelectivity {
return sumSelectedRows / sumRows;
}
- public Double getSelectivity(SortRel rel, RexNode predicate) {
+ public Double getSelectivity(Sort rel, RexNode predicate) {
return RelMetadataQuery.getSelectivity(
- rel.getChild(),
+ rel.getInput(),
predicate);
}
- public Double getSelectivity(FilterRelBase rel, RexNode predicate) {
+ public Double getSelectivity(Filter rel, RexNode predicate) {
// Take the difference between the predicate passed in and the
// predicate in the filter's condition, so we don't apply the
// selectivity of the filter twice. If no predicate is passed in,
// use the filter's condition.
if (predicate != null) {
return RelMetadataQuery.getSelectivity(
- rel.getChild(),
+ rel.getInput(),
RelMdUtil.minusPreds(
rel.getCluster().getRexBuilder(),
predicate,
rel.getCondition()));
} else {
return RelMetadataQuery.getSelectivity(
- rel.getChild(),
+ rel.getInput(),
rel.getCondition());
}
}
- public Double getSelectivity(SemiJoinRel rel, RexNode predicate) {
+ public Double getSelectivity(SemiJoin rel, RexNode predicate) {
// create a RexNode representing the selectivity of the
// semijoin filter and pass it to getSelectivity
RexBuilder rexBuilder = rel.getCluster().getRexBuilder();
@@ -121,7 +128,7 @@ public class RelMdSelectivity {
newPred);
}
- public Double getSelectivity(AggregateRelBase rel, RexNode predicate) {
+ public Double getSelectivity(Aggregate rel, RexNode predicate) {
ListR1(x) join R2(y) on x = y
' a call for
* equivalentPredicates on 'x > 7
' will return '
@@ -306,7 +312,7 @@ public class RelMdPredicates {
*
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java
index ed5ed48..4d86f79 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMetadataQuery.java
@@ -14,30 +14,32 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
-import java.util.*;
-
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.*;
-import org.eigenbase.stat.*;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPredicateList;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.sql.SqlExplainLevel;
import com.google.common.collect.Iterables;
+import java.util.BitSet;
+import java.util.Set;
+
/**
- * RelMetadataQuery provides a strongly-typed facade on top of {@link
- * RelMetadataProvider} for the set of relational expression metadata queries
- * defined as standard within Eigenbase. The Javadoc on these methods serves as
- * their primary specification.
+ * RelMetadataQuery provides a strongly-typed facade on top of
+ * {@link RelMetadataProvider} for the set of relational expression metadata
+ * queries defined as standard within Calcite. The Javadoc on these methods
+ * serves as their primary specification.
*
*
* RelMetadataProvider provider;
- * FilterRel filter;
+ * LogicalFilter filter;
* RexNode predicate;
* Function<RelNode, Metadata> function =
- * provider.apply(FilterRel.class, Selectivity.class};
+ * provider.apply(LogicalFilter.class, Selectivity.class};
* Selectivity selectivity = function.apply(filter);
* Double d = selectivity.selectivity(predicate);
*
Xyz
to this interface, follow
* these steps:
*
*
*
getXyz
specification to this class.
- * RelMdXyz
in this package. Follow
* the pattern from an existing class such as {@link RelMdColumnOrigins},
* overloading on all of the logical relational expressions to which the query
@@ -65,22 +67,6 @@ public abstract class RelMetadataQuery {
//~ Methods ----------------------------------------------------------------
/**
- * Returns statistics for a relational expression. These statistics include
- * features such as row counts, or column distributions. Stats are typically
- * collected by sampling a table. They might also be inferred from a rel's
- * history. Certain rels, such as filters, might generate stats from their
- * inputs.
- *
- * @param rel the relational expression.
- * @return a statistics object, if statistics are available, or null
- * otherwise
- */
- @Deprecated
- public static RelStatSource getStatistics(RelNode rel) {
- throw new UnsupportedOperationException();
- }
-
- /**
* Returns the
* {@link BuiltInMetadata.RowCount#getRowCount()}
* statistic.
@@ -162,7 +148,7 @@ public abstract class RelMetadataQuery {
* Determines the origin of a column, provided the column maps to a single
* column that isn't derived.
*
- * @see #getColumnOrigins(org.eigenbase.rel.RelNode, int)
+ * @see #getColumnOrigins(org.apache.calcite.rel.RelNode, int)
*
* @param rel the RelNode of the column
* @param column the offset of the column whose origin we are trying to
@@ -329,7 +315,7 @@ public abstract class RelMetadataQuery {
/**
* Returns the
- * {@link org.eigenbase.rel.metadata.BuiltInMetadata.Predicates#getPredicates()}
+ * {@link org.apache.calcite.rel.metadata.BuiltInMetadata.Predicates#getPredicates()}
* statistic.
*
* @param rel the relational expression
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/package-info.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/package-info.java b/core/src/main/java/org/apache/calcite/rel/metadata/package-info.java
index 6d865ff..ed98035 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/package-info.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/package-info.java
@@ -19,6 +19,6 @@
* Defines metadata interfaces and utilities for relational
* expressions.
*/
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
// End package-info.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/package-info.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/package-info.java b/core/src/main/java/org/apache/calcite/rel/package-info.java
index da6776e..fdbfd3b 100644
--- a/core/src/main/java/org/apache/calcite/rel/package-info.java
+++ b/core/src/main/java/org/apache/calcite/rel/package-info.java
@@ -20,20 +20,21 @@
*
* Related packages and classes
*
- *
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel;
// End package-info.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java
index 39928cd..915ae87 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java
@@ -14,39 +14,69 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel.rules;
-
-import java.util.*;
-
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.fun.*;
-import org.eigenbase.util.*;
-
-import net.hydromatic.optiq.util.BitSets;
+package org.apache.calcite.rel.rules;
+
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Aggregate;
+import org.apache.calcite.rel.core.AggregateCall;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rel.logical.LogicalAggregate;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.Pair;
+import org.apache.calcite.util.Util;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
/**
- * Rule to remove distinct aggregates from a {@link AggregateRel}.
+ * Planner rule that expands distinct aggregates
+ * (such as {@code COUNT(DISTINCT x)}) from a
+ * {@link org.apache.calcite.rel.logical.LogicalAggregate}.
+ *
+ * org.eigenbase.sql
- * is an object model for SQL expressions
- * org.eigenbase.rex
- * is an object model for relational row expressions
- *
- * org.eigenbase.relopt
- * provides an optimizer interface.
- *
+ * org.apache.calcite.sql
+ * is an object model for SQL expressions
+ *
+ *
+ * org.apache.calcite.rex
+ * is an object model for relational row expressions
+ *
+ *
+ * org.apache.calcite.plan
+ * provides an optimizer interface.
+ *
*