You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2014/11/14 22:32:45 UTC
[37/58] [abbrv] [partial] incubator-calcite git commit: [CALCITE-306]
Standardize code style for "import package.*; "
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Intersect.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Intersect.java b/core/src/main/java/org/apache/calcite/rel/core/Intersect.java
index 6f43441..472cd92 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Intersect.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Intersect.java
@@ -14,25 +14,30 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.sql.SqlKind;
import java.util.BitSet;
import java.util.List;
-import org.eigenbase.rel.metadata.RelMetadataQuery;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.sql.SqlKind;
-
/**
- * Abstract base class for implementations of
- * {@link IntersectRel}.
+ * Relational expression that returns the intersection of the rows of its
+ * inputs.
+ *
+ * <p>If "all" is true, performs then multiset intersection; otherwise,
+ * performs set set intersection (implying no duplicates in the results).
*/
-public abstract class IntersectRelBase extends SetOpRel {
+public abstract class Intersect extends SetOp {
/**
- * Creates an IntersectRelBase.
+ * Creates an Intersect.
*/
- public IntersectRelBase(
+ public Intersect(
RelOptCluster cluster,
RelTraitSet traits,
List<RelNode> inputs,
@@ -41,14 +46,13 @@ public abstract class IntersectRelBase extends SetOpRel {
}
/**
- * Creates an IntersectRelBase by parsing serialized output.
+ * Creates an Intersect by parsing serialized output.
*/
- protected IntersectRelBase(RelInput input) {
+ protected Intersect(RelInput input) {
super(input);
}
- @Override
- public double getRows() {
+ @Override public double getRows() {
// REVIEW jvs 30-May-2005: I just pulled this out of a hat.
double dRows = Double.MAX_VALUE;
for (RelNode input : inputs) {
@@ -59,8 +63,7 @@ public abstract class IntersectRelBase extends SetOpRel {
return dRows;
}
- @Override
- public boolean isKey(BitSet columns) {
+ @Override public boolean isKey(BitSet columns) {
for (RelNode input : inputs) {
if (input.isKey(columns)) {
return true;
@@ -70,4 +73,4 @@ public abstract class IntersectRelBase extends SetOpRel {
}
}
-// End IntersectRelBase.java
+// End Intersect.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Join.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Join.java b/core/src/main/java/org/apache/calcite/rel/core/Join.java
index e37c196..c3b2f11 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Join.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Join.java
@@ -14,27 +14,44 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
-
-import java.util.*;
-
-import org.eigenbase.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.type.SqlTypeName;
-import org.eigenbase.util.*;
-
-import net.hydromatic.optiq.runtime.FlatLists;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.AbstractRelNode;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelVisitor;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexChecker;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.runtime.FlatLists;
+import org.apache.calcite.sql.type.SqlTypeName;
+import org.apache.calcite.util.Util;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
/**
- * <code>JoinRelBase</code> is an abstract base class for implementations of
- * {@link JoinRel}.
+ * Relational expression that combines two relational expressions according to
+ * some condition.
+ *
+ * <p>Each output row has columns from the left and right inputs.
+ * The set of output rows is a subset of the cartesian product of the two
+ * inputs; precisely which subset depends on the join condition.
*/
-public abstract class JoinRelBase extends AbstractRelNode {
+public abstract class Join extends AbstractRelNode {
//~ Instance fields --------------------------------------------------------
protected final RexNode condition;
@@ -43,15 +60,15 @@ public abstract class JoinRelBase extends AbstractRelNode {
protected final ImmutableSet<String> variablesStopped;
/**
- * Values must be of enumeration {@link JoinRelType}, except that {@link
- * JoinRelType#RIGHT} is disallowed.
+ * Values must be of enumeration {@link JoinRelType}, except that
+ * {@link JoinRelType#RIGHT} is disallowed.
*/
protected JoinRelType joinType;
//~ Constructors -----------------------------------------------------------
/**
- * Creates a JoinRelBase.
+ * Creates a Join.
*
* @param cluster Cluster
* @param traits Traits
@@ -61,9 +78,9 @@ public abstract class JoinRelBase extends AbstractRelNode {
* @param joinType Join type
* @param variablesStopped Set of names of variables which are set by the
* LHS and used by the RHS and are not available to
- * nodes above this JoinRel in the tree
+ * nodes above this LogicalJoin in the tree
*/
- protected JoinRelBase(
+ protected Join(
RelOptCluster cluster,
RelTraitSet traits,
RelNode left,
@@ -83,8 +100,7 @@ public abstract class JoinRelBase extends AbstractRelNode {
//~ Methods ----------------------------------------------------------------
- @Override
- public List<RexNode> getChildExps() {
+ @Override public List<RexNode> getChildExps() {
return ImmutableList.of(condition);
}
@@ -157,7 +173,7 @@ public abstract class JoinRelBase extends AbstractRelNode {
}
public static double estimateJoinedRows(
- JoinRelBase joinRel,
+ Join joinRel,
RexNode condition) {
double product =
RelMetadataQuery.getRowCount(joinRel.getLeft())
@@ -219,9 +235,9 @@ public abstract class JoinRelBase extends AbstractRelNode {
}
/**
- * Returns whether this JoinRel has already spawned a
- * {@link org.eigenbase.rel.rules.SemiJoinRel} via
- * {@link org.eigenbase.rel.rules.AddRedundantSemiJoinRule}.
+ * Returns whether this LogicalJoin has already spawned a
+ * {@link SemiJoin} via
+ * {@link org.apache.calcite.rel.rules.JoinAddRedundantSemiJoinRule}.
*
* <p>The base implementation returns false.</p>
*
@@ -356,8 +372,7 @@ public abstract class JoinRelBase extends AbstractRelNode {
}
}
- @Override
- public final JoinRelBase copy(RelTraitSet traitSet, List<RelNode> inputs) {
+ @Override public final Join copy(RelTraitSet traitSet, List<RelNode> inputs) {
assert inputs.size() == 2;
return copy(traitSet, getCondition(), inputs.get(0), inputs.get(1),
joinType, isSemiJoinDone());
@@ -367,7 +382,7 @@ public abstract class JoinRelBase extends AbstractRelNode {
* Creates a copy of this join, overriding condition, system fields and
* inputs.
*
- * <p>General contract as {@link org.eigenbase.rel.RelNode#copy}.
+ * <p>General contract as {@link RelNode#copy}.
*
* @param conditionExpr Condition
* @param left Left input
@@ -377,7 +392,7 @@ public abstract class JoinRelBase extends AbstractRelNode {
* semi-join
* @return Copy of this join
*/
- public abstract JoinRelBase copy(RelTraitSet traitSet, RexNode conditionExpr,
+ public abstract Join copy(RelTraitSet traitSet, RexNode conditionExpr,
RelNode left, RelNode right, JoinRelType joinType, boolean semiJoinDone);
/** Analyzes the join condition. */
@@ -386,4 +401,4 @@ public abstract class JoinRelBase extends AbstractRelNode {
}
}
-// End JoinRelBase.java
+// End Join.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/JoinInfo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/JoinInfo.java b/core/src/main/java/org/apache/calcite/rel/core/JoinInfo.java
index f40374c..b1c8a18 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/JoinInfo.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/JoinInfo.java
@@ -14,32 +14,33 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.ImmutableIntList;
+import org.apache.calcite.util.mapping.IntPair;
+
+import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;
-import org.eigenbase.relopt.RelOptUtil;
-import org.eigenbase.rex.RexBuilder;
-import org.eigenbase.rex.RexNode;
-import org.eigenbase.util.ImmutableIntList;
-import org.eigenbase.util.mapping.IntPair;
-
-import net.hydromatic.optiq.util.BitSets;
-
-import com.google.common.base.Preconditions;
-
/** An analyzed join condition.
*
* <p>It is useful for the many algorithms that care whether a join is an
* equi-join.
*
- * <p>You can create one using {@link #of}, or call {@link JoinRelBase#analyzeCondition()};
- * many kinds of join cache their join info, especially those that are
- * equi-joins and sub-class {@link org.eigenbase.rel.rules.EquiJoinRel}.</p>
+ * <p>You can create one using {@link #of}, or call
+ * {@link Join#analyzeCondition()}; many kinds of join cache their
+ * join info, especially those that are equi-joins and sub-class
+ * {@link org.apache.calcite.rel.rules.EquiJoin}.</p>
*
- * @see JoinRelBase#analyzeCondition() */
+ * @see Join#analyzeCondition() */
public abstract class JoinInfo {
public final ImmutableIntList leftKeys;
public final ImmutableIntList rightKeys;
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/JoinRelType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/JoinRelType.java b/core/src/main/java/org/apache/calcite/rel/core/JoinRelType.java
index 8fac256..677021e 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/JoinRelType.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/JoinRelType.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
/**
* Enumeration of join types.
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Minus.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Minus.java b/core/src/main/java/org/apache/calcite/rel/core/Minus.java
index 06039f8..12feba8 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Minus.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Minus.java
@@ -14,38 +14,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.sql.SqlKind;
import java.util.BitSet;
import java.util.List;
-import org.eigenbase.rel.metadata.RelMetadataQuery;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.sql.SqlKind;
-
/**
- * Abstract base class for implementations of
- * {@link MinusRel}.
+ * Relational expression that returns the rows of its first input minus any
+ * matching rows from its other inputs.
+ *
+ * <p>Corresponds to the SQL {@code EXCEPT} operator.
+ *
+ * <p>If "all" is true, then multiset subtraction is
+ * performed; otherwise, set subtraction is performed (implying no duplicates in
+ * the results).
*/
-public abstract class MinusRelBase extends SetOpRel {
- public MinusRelBase(
- RelOptCluster cluster,
- RelTraitSet traits,
- List<RelNode> inputs,
+public abstract class Minus extends SetOp {
+ public Minus(RelOptCluster cluster, RelTraitSet traits, List<RelNode> inputs,
boolean all) {
super(cluster, traits, inputs, SqlKind.EXCEPT, all);
}
/**
- * Creates a MinusRelBase by parsing serialized output.
+ * Creates a Minus by parsing serialized output.
*/
- protected MinusRelBase(RelInput input) {
+ protected Minus(RelInput input) {
super(input);
}
- @Override
- public double getRows() {
+ @Override public double getRows() {
// REVIEW jvs 30-May-2005: I just pulled this out of a hat.
double dRows = RelMetadataQuery.getRowCount(inputs.get(0));
for (int i = 1; i < inputs.size(); i++) {
@@ -57,11 +61,10 @@ public abstract class MinusRelBase extends SetOpRel {
return dRows;
}
- @Override
- public boolean isKey(BitSet columns) {
+ @Override public boolean isKey(BitSet columns) {
return inputs.get(0).isKey(columns)
|| super.isKey(columns);
}
}
-// End MinusRelBase.java
+// End Minus.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/OneRow.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/OneRow.java b/core/src/main/java/org/apache/calcite/rel/core/OneRow.java
index 5ae37e6..a3ccc5b 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/OneRow.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/OneRow.java
@@ -14,34 +14,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.sql.type.*;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.AbstractRelNode;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory;
+import org.apache.calcite.sql.type.SqlTypeName;
/**
- * <code>OneRowRelBase</code> is an abstract base class for implementations of
- * {@link OneRowRel}.
+ * Relational expression that always returns one row.
+ *
+ * <p>It has one column, called "ZERO", containing the value 0.
+ *
+ * @see Values
*/
-public abstract class OneRowRelBase extends AbstractRelNode {
+public abstract class OneRow extends AbstractRelNode {
//~ Constructors -----------------------------------------------------------
/**
- * Creates a <code>OneRowRelBase</code> with specific traits.
+ * Creates a <code>OneRow</code>.
*
- * @param cluster {@link RelOptCluster} this relational expression belongs
- * to
- * @param traits for this rel
+ * @param cluster Cluster that this relational expression belongs to
+ * @param traits Traits
*/
- protected OneRowRelBase(RelOptCluster cluster, RelTraitSet traits) {
+ protected OneRow(RelOptCluster cluster, RelTraitSet traits) {
super(cluster, traits);
}
/**
- * Creates a OneRowRelBase by parsing serialized output.
+ * Creates a OneRow by parsing serialized output.
*/
- protected OneRowRelBase(RelInput input) {
+ protected OneRow(RelInput input) {
this(input.getCluster(), input.getTraitSet());
}
@@ -60,4 +68,4 @@ public abstract class OneRowRelBase extends AbstractRelNode {
}
}
-// End OneRowRelBase.java
+// End OneRow.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Project.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Project.java b/core/src/main/java/org/apache/calcite/rel/core/Project.java
index 68c40f9..7ff2cc4 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Project.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Project.java
@@ -14,32 +14,54 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
-
-import java.util.*;
-
-import org.eigenbase.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.*;
-import org.eigenbase.util.Pair;
-import org.eigenbase.util.Permutation;
-import org.eigenbase.util.Util;
-import org.eigenbase.util.mapping.MappingType;
-import org.eigenbase.util.mapping.Mappings;
-
-import net.hydromatic.linq4j.Ord;
-import net.hydromatic.linq4j.function.Function1;
-import net.hydromatic.linq4j.function.Functions;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.linq4j.Ord;
+import org.apache.calcite.linq4j.function.Function1;
+import org.apache.calcite.linq4j.function.Functions;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelCollationTraitDef;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.SingleRel;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexChecker;
+import org.apache.calcite.rex.RexFieldAccess;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexLocalRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.rex.RexVisitorImpl;
+import org.apache.calcite.sql.SqlExplainLevel;
+import org.apache.calcite.util.Pair;
+import org.apache.calcite.util.Permutation;
+import org.apache.calcite.util.Util;
+import org.apache.calcite.util.mapping.MappingType;
+import org.apache.calcite.util.mapping.Mappings;
import com.google.common.collect.ImmutableList;
+import java.util.List;
+
/**
- * <code>ProjectRelBase</code> is an abstract base class for implementations of
- * {@link ProjectRel}.
+ * Relational expression that computes a set of
+ * 'select expressions' from its input relational expression.
+ *
+ * <p>The result is usually 'boxed' as a record with one named field for each
+ * column; if there is precisely one expression, the result may be 'unboxed',
+ * and consist of the raw value type.
+ *
+ * @see org.apache.calcite.rel.logical.LogicalProject
*/
-public abstract class ProjectRelBase extends SingleRel {
+public abstract class Project extends SingleRel {
//~ Instance fields --------------------------------------------------------
protected final ImmutableList<RexNode> exps;
@@ -56,21 +78,22 @@ public abstract class ProjectRelBase extends SingleRel {
/**
* Creates a Project.
*
- * @param cluster Cluster this relational expression belongs to
+ * @param cluster Cluster that this relational expression belongs to
* @param traits traits of this rel
- * @param child input relational expression
+ * @param input input relational expression
* @param exps List of expressions for the input columns
* @param rowType output row type
- * @param flags values as in {@link Flags}
+ * @param flags Flags; values as in {@link Project.Flags},
+ * usually {@link Project.Flags#BOXED}
*/
- protected ProjectRelBase(
+ protected Project(
RelOptCluster cluster,
RelTraitSet traits,
- RelNode child,
+ RelNode input,
List<? extends RexNode> exps,
RelDataType rowType,
int flags) {
- super(cluster, traits, child);
+ super(cluster, traits, input);
assert rowType != null;
this.exps = ImmutableList.copyOf(exps);
this.rowType = rowType;
@@ -85,11 +108,10 @@ public abstract class ProjectRelBase extends SingleRel {
}
/**
- * Creates a ProjectRelBase by parsing serialized output.
+ * Creates a Project by parsing serialized output.
*/
- protected ProjectRelBase(RelInput input) {
- this(
- input.getCluster(), input.getTraitSet(), input.getInput(),
+ protected Project(RelInput input) {
+ this(input.getCluster(), input.getTraitSet(), input.getInput(),
input.getExpressionList("exprs"),
input.getRowType("exprs", "fields"), Flags.BOXED);
}
@@ -104,7 +126,7 @@ public abstract class ProjectRelBase extends SingleRel {
/** Copies a project.
*
* @see #copy(RelTraitSet, List) */
- public abstract ProjectRelBase copy(RelTraitSet traitSet, RelNode input,
+ public abstract Project copy(RelTraitSet traitSet, RelNode input,
List<RexNode> exps, RelDataType rowType);
public List<RelCollation> getCollationList() {
@@ -115,8 +137,7 @@ public abstract class ProjectRelBase extends SingleRel {
return (flags & Flags.BOXED) == Flags.BOXED;
}
- @Override
- public List<RexNode> getChildExps() {
+ @Override public List<RexNode> getChildExps() {
return exps;
}
@@ -153,7 +174,7 @@ public abstract class ProjectRelBase extends SingleRel {
}
RexChecker checker =
new RexChecker(
- getChild().getRowType(), fail);
+ getInput().getRowType(), fail);
for (RexNode exp : exps) {
exp.accept(checker);
}
@@ -203,7 +224,7 @@ public abstract class ProjectRelBase extends SingleRel {
}
public RelOptCost computeSelfCost(RelOptPlanner planner) {
- double dRows = RelMetadataQuery.getRowCount(getChild());
+ double dRows = RelMetadataQuery.getRowCount(getInput());
double dCpu = dRows * exps.size();
double dIo = 0;
return planner.getCostFactory().makeCost(dRows, dCpu, dIo);
@@ -241,7 +262,7 @@ public abstract class ProjectRelBase extends SingleRel {
* Returns a mapping, or null if this projection is not a mapping.
*/
public Mappings.TargetMapping getMapping() {
- return getMapping(getChild().getRowType().getFieldCount(), exps);
+ return getMapping(getInput().getRowType().getFieldCount(), exps);
}
/**
@@ -276,7 +297,7 @@ public abstract class ProjectRelBase extends SingleRel {
*/
public Permutation getPermutation() {
final int fieldCount = rowType.getFieldList().size();
- if (fieldCount != getChild().getRowType().getFieldList().size()) {
+ if (fieldCount != getInput().getRowType().getFieldList().size()) {
return null;
}
Permutation permutation = new Permutation(fieldCount);
@@ -398,4 +419,4 @@ public abstract class ProjectRelBase extends SingleRel {
}
}
-// End ProjectRelBase.java
+// End Project.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java b/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java
index b5d9634..fcc9a2d 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java
@@ -15,22 +15,29 @@
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.logical.LogicalAggregate;
+import org.apache.calcite.rel.logical.LogicalFilter;
+import org.apache.calcite.rel.logical.LogicalIntersect;
+import org.apache.calcite.rel.logical.LogicalJoin;
+import org.apache.calcite.rel.logical.LogicalMinus;
+import org.apache.calcite.rel.logical.LogicalUnion;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.sql.SqlKind;
+
+import com.google.common.collect.ImmutableList;
import java.util.BitSet;
import java.util.List;
import java.util.Set;
-import org.eigenbase.rel.rules.SemiJoinRel;
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.relopt.RelOptUtil;
-import org.eigenbase.relopt.RelTraitSet;
-import org.eigenbase.reltype.RelDataTypeField;
-import org.eigenbase.rex.RexNode;
-import org.eigenbase.sql.SqlKind;
-
-import com.google.common.collect.ImmutableList;
-
/**
* Contains factory interface and default implementation for creating various
* rel nodes.
@@ -60,8 +67,9 @@ public class RelFactories {
}
/**
- * Can create a {@link org.eigenbase.rel.ProjectRel} of the appropriate type
- * for this rule's calling convention.
+ * Can create a
+ * {@link org.apache.calcite.rel.logical.LogicalProject} of the
+ * appropriate type for this rule's calling convention.
*/
public interface ProjectFactory {
/** Creates a project. */
@@ -71,7 +79,7 @@ public class RelFactories {
/**
* Implementation of {@link ProjectFactory} that returns a vanilla
- * {@link ProjectRel}.
+ * {@link org.apache.calcite.rel.logical.LogicalProject}.
*/
private static class ProjectFactoryImpl implements ProjectFactory {
public RelNode createProject(RelNode child,
@@ -81,7 +89,7 @@ public class RelFactories {
}
/**
- * Can create a {@link org.eigenbase.rel.SortRel} of the appropriate type
+ * Can create a {@link Sort} of the appropriate type
* for this rule's calling convention.
*/
public interface SortFactory {
@@ -91,19 +99,19 @@ public class RelFactories {
}
/**
- * Implementation of {@link org.eigenbase.rel.RelFactories.SortFactory} that
- * returns a vanilla {@link SortRel}.
+ * Implementation of {@link RelFactories.SortFactory} that
+ * returns a vanilla {@link Sort}.
*/
private static class SortFactoryImpl implements SortFactory {
public RelNode createSort(RelTraitSet traits, RelNode child,
RelCollation collation, RexNode offset, RexNode fetch) {
- return new SortRel(child.getCluster(), traits, child, collation,
+ return new Sort(child.getCluster(), traits, child, collation,
offset, fetch);
}
}
/**
- * Can create a {@link org.eigenbase.rel.SetOpRel} for a particular kind of
+ * Can create a {@link SetOp} for a particular kind of
* set operation (UNION, EXCEPT, INTERSECT) and of the appropriate type
* for this rule's calling convention.
*/
@@ -113,8 +121,8 @@ public class RelFactories {
}
/**
- * Implementation of {@link org.eigenbase.rel.RelFactories.SetOpFactory} that
- * returns a vanilla {@link SetOpRel} for the particular kind of set
+ * Implementation of {@link RelFactories.SetOpFactory} that
+ * returns a vanilla {@link SetOp} for the particular kind of set
* operation (UNION, EXCEPT, INTERSECT).
*/
private static class SetOpFactoryImpl implements SetOpFactory {
@@ -123,11 +131,11 @@ public class RelFactories {
final RelOptCluster cluster = inputs.get(0).getCluster();
switch (kind) {
case UNION:
- return new UnionRel(cluster, inputs, all);
+ return new LogicalUnion(cluster, inputs, all);
case EXCEPT:
- return new MinusRel(cluster, inputs, all);
+ return new LogicalMinus(cluster, inputs, all);
case INTERSECT:
- return new IntersectRel(cluster, inputs, all);
+ return new LogicalIntersect(cluster, inputs, all);
default:
throw new AssertionError("not a set op: " + kind);
}
@@ -135,7 +143,7 @@ public class RelFactories {
}
/**
- * Can create a {@link org.eigenbase.rel.AggregateRel} of the appropriate type
+ * Can create a {@link LogicalAggregate} of the appropriate type
* for this rule's calling convention.
*/
public interface AggregateFactory {
@@ -145,18 +153,19 @@ public class RelFactories {
}
/**
- * Implementation of {@link org.eigenbase.rel.RelFactories.AggregateFactory}
- * that returns a vanilla {@link AggregateRel}.
+ * Implementation of {@link RelFactories.AggregateFactory}
+ * that returns a vanilla {@link LogicalAggregate}.
*/
private static class AggregateFactoryImpl implements AggregateFactory {
public RelNode createAggregate(RelNode child, BitSet groupSet,
List<AggregateCall> aggCalls) {
- return new AggregateRel(child.getCluster(), child, groupSet, aggCalls);
+ return new LogicalAggregate(child.getCluster(), child, groupSet,
+ aggCalls);
}
}
/**
- * Can create a {@link org.eigenbase.rel.FilterRel} of the appropriate type
+ * Can create a {@link LogicalFilter} of the appropriate type
* for this rule's calling convention.
*/
public interface FilterFactory {
@@ -165,19 +174,19 @@ public class RelFactories {
}
/**
- * Implementation of {@link org.eigenbase.rel.RelFactories.FilterFactory} that
- * returns a vanilla {@link FilterRel}.
+ * Implementation of {@link RelFactories.FilterFactory} that
+ * returns a vanilla {@link LogicalFilter}.
*/
private static class FilterFactoryImpl implements FilterFactory {
public RelNode createFilter(RelNode child, RexNode condition) {
- return new FilterRel(child.getCluster(), child, condition);
+ return new LogicalFilter(child.getCluster(), child, condition);
}
}
/**
* Can create a join of the appropriate type for a rule's calling convention.
*
- * <p>The result is typically a {@link org.eigenbase.rel.JoinRelBase}.
+ * <p>The result is typically a {@link Join}.
*/
public interface JoinFactory {
/**
@@ -189,7 +198,7 @@ public class RelFactories {
* @param joinType Join type
* @param variablesStopped Set of names of variables which are set by the
* LHS and used by the RHS and are not available to
- * nodes above this JoinRel in the tree
+ * nodes above this LogicalJoin in the tree
* @param semiJoinDone Whether this join has been translated to a
* semi-join
*/
@@ -200,14 +209,14 @@ public class RelFactories {
/**
* Implementation of {@link JoinFactory} that returns a vanilla
- * {@link JoinRel}.
+ * {@link org.apache.calcite.rel.logical.LogicalJoin}.
*/
private static class JoinFactoryImpl implements JoinFactory {
public RelNode createJoin(RelNode left, RelNode right,
RexNode condition, JoinRelType joinType,
Set<String> variablesStopped, boolean semiJoinDone) {
final RelOptCluster cluster = left.getCluster();
- return new JoinRel(cluster, left, right, condition, joinType,
+ return new LogicalJoin(cluster, left, right, condition, joinType,
variablesStopped, semiJoinDone, ImmutableList.<RelDataTypeField>of());
}
}
@@ -229,13 +238,13 @@ public class RelFactories {
/**
* Implementation of {@link SemiJoinFactory} that returns a vanilla
- * {@link SemiJoinRel}.
+ * {@link SemiJoin}.
*/
private static class SemiJoinFactoryImpl implements SemiJoinFactory {
public RelNode createSemiJoin(RelNode left, RelNode right,
RexNode condition) {
final JoinInfo joinInfo = JoinInfo.of(left, right, condition);
- return new SemiJoinRel(left.getCluster(), left.getTraitSet(), left, right,
+ return new SemiJoin(left.getCluster(), left.getTraitSet(), left, right,
condition, joinInfo.leftKeys, joinInfo.rightKeys);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Sample.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Sample.java b/core/src/main/java/org/apache/calcite/rel/core/Sample.java
index ee22849..e22e0de 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Sample.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Sample.java
@@ -14,40 +14,43 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
-import java.util.List;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptSamplingParameters;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.SingleRel;
-import org.eigenbase.relopt.*;
+import java.util.List;
/**
- * SamplingRel represents the TABLESAMPLE BERNOULLI or SYSTEM keyword applied to
- * a table, view or subquery.
+ * Relational expression that returns a sample of the rows from its input.
+ *
+ * <p>In SQL, a sample is expressed using the {@code TABLESAMPLE BERNOULLI} or
+ * {@code SYSTEM} keyword applied to a table, view or subquery.
*/
-public class SamplingRel extends SingleRel {
+public class Sample extends SingleRel {
//~ Instance fields --------------------------------------------------------
private final RelOptSamplingParameters params;
//~ Constructors -----------------------------------------------------------
- public SamplingRel(
- RelOptCluster cluster,
- RelNode child,
+ public Sample(RelOptCluster cluster, RelNode child,
RelOptSamplingParameters params) {
- super(
- cluster,
- cluster.traitSetOf(Convention.NONE),
- child);
+ super(cluster, cluster.traitSetOf(Convention.NONE), child);
this.params = params;
}
/**
- * Creates a SamplingRel by parsing serialized output.
+ * Creates a Sample by parsing serialized output.
*/
- public SamplingRel(RelInput input) {
- this(
- input.getCluster(), input.getInput(), getSamplingParameters(input));
+ public Sample(RelInput input) {
+ this(input.getCluster(), input.getInput(), getSamplingParameters(input));
}
//~ Methods ----------------------------------------------------------------
@@ -65,28 +68,23 @@ public class SamplingRel extends SingleRel {
public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
assert traitSet.containsIfApplicable(Convention.NONE);
- return new SamplingRel(
- getCluster(),
- sole(inputs),
- params);
+ return new Sample(getCluster(), sole(inputs), params);
}
/**
- * Retrieve the sampling parameters for this SamplingRel.
+ * Retrieve the sampling parameters for this Sample.
*/
public RelOptSamplingParameters getSamplingParameters() {
return params;
}
- // implement RelNode
- public RelWriter explainTerms(RelWriter pw) {
+ @Override public RelWriter explainTerms(RelWriter pw) {
return super.explainTerms(pw)
.item("mode", params.isBernoulli() ? "bernoulli" : "system")
.item("rate", params.getSamplingPercentage())
- .item(
- "repeatableSeed",
+ .item("repeatableSeed",
params.isRepeatable() ? params.getRepeatableSeed() : "-");
}
}
-// End SamplingRel.java
+// End Sample.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/SemiJoin.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/SemiJoin.java b/core/src/main/java/org/apache/calcite/rel/core/SemiJoin.java
index c78c343..17347bf 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/SemiJoin.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/SemiJoin.java
@@ -14,39 +14,46 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.core;
-import java.util.*;
-
-import org.eigenbase.rel.*;
-import org.eigenbase.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.util.ImmutableIntList;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rel.rules.EquiJoin;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.util.ImmutableIntList;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
/**
- * A SemiJoinRel represents two relational expressions joined according to some
- * condition, where the output only contains the columns from the left join
- * input.
+ * Relational expression that joins two relational expressions according to some
+ * condition, but outputs only columns from the left input, and eliminates
+ * duplicates.
+ *
+ * <p>The effect is something like the SQL {@code IN} operator.
*/
-public class SemiJoinRel extends EquiJoinRel {
+public class SemiJoin extends EquiJoin {
//~ Constructors -----------------------------------------------------------
/**
- * Creates a SemiJoinRel.
+ * Creates a SemiJoin.
*
* @param cluster cluster that join belongs to
- * @param traitSet Traits
+ * @param traitSet Trait set
* @param left left join input
* @param right right join input
* @param condition join condition
* @param leftKeys left keys of the semijoin
* @param rightKeys right keys of the semijoin
*/
- public SemiJoinRel(
+ public SemiJoin(
RelOptCluster cluster,
RelTraitSet traitSet,
RelNode left,
@@ -68,41 +75,41 @@ public class SemiJoinRel extends EquiJoinRel {
//~ Methods ----------------------------------------------------------------
- @Override
- public SemiJoinRel copy(RelTraitSet traitSet, RexNode condition,
+ @Override public SemiJoin copy(RelTraitSet traitSet, RexNode condition,
RelNode left, RelNode right, JoinRelType joinType, boolean semiJoinDone) {
assert joinType == JoinRelType.INNER;
final JoinInfo joinInfo = JoinInfo.of(left, right, condition);
assert joinInfo.isEqui();
- return new SemiJoinRel(getCluster(), traitSet, left, right, condition,
+ return new SemiJoin(getCluster(), traitSet, left, right, condition,
joinInfo.leftKeys, joinInfo.rightKeys);
}
- // implement RelNode
- public RelOptCost computeSelfCost(RelOptPlanner planner) {
+ @Override public RelOptCost computeSelfCost(RelOptPlanner planner) {
// REVIEW jvs 9-Apr-2006: Just for now...
return planner.getCostFactory().makeTinyCost();
}
- // implement RelNode
- public double getRows() {
+ @Override public double getRows() {
// TODO: correlation factor
return RelMetadataQuery.getRowCount(left)
* RexUtil.getSelectivity(condition);
}
/**
- * @return returns rowtype representing only the left join input
+ * {@inheritDoc}
+ *
+ * <p>In the case of semi-join, the row type consists of columns from left
+ * input only.
*/
- public RelDataType deriveRowType() {
+ @Override public RelDataType deriveRowType() {
return deriveJoinRowType(
left.getRowType(),
null,
JoinRelType.INNER,
getCluster().getTypeFactory(),
null,
- Collections.<RelDataTypeField>emptyList());
+ ImmutableList.<RelDataTypeField>of());
}
}
-// End SemiJoinRel.java
+// End SemiJoin.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/SetOp.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/SetOp.java b/core/src/main/java/org/apache/calcite/rel/core/SetOp.java
index 6a650e4..7b0187a 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/SetOp.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/SetOp.java
@@ -14,24 +14,32 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
-
-import java.util.*;
-
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.sql.SqlKind;
-
-import net.hydromatic.linq4j.Ord;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.linq4j.Ord;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.AbstractRelNode;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.sql.SqlKind;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.List;
+
/**
- * <code>SetOpRel</code> is an abstract base for relational set operators such
+ * <code>SetOp</code> is an abstract base for relational set operators such
* as UNION, MINUS (aka EXCEPT), and INTERSECT.
*/
-public abstract class SetOpRel extends AbstractRelNode {
+public abstract class SetOp extends AbstractRelNode {
//~ Instance fields --------------------------------------------------------
protected ImmutableList<RelNode> inputs;
@@ -41,14 +49,10 @@ public abstract class SetOpRel extends AbstractRelNode {
//~ Constructors -----------------------------------------------------------
/**
- * Creates a SetOpRel.
+ * Creates a SetOp.
*/
- protected SetOpRel(
- RelOptCluster cluster,
- RelTraitSet traits,
- List<RelNode> inputs,
- SqlKind kind,
- boolean all) {
+ protected SetOp(RelOptCluster cluster, RelTraitSet traits,
+ List<RelNode> inputs, SqlKind kind, boolean all) {
super(cluster, traits);
Preconditions.checkArgument(kind == SqlKind.UNION
|| kind == SqlKind.INTERSECT
@@ -59,49 +63,42 @@ public abstract class SetOpRel extends AbstractRelNode {
}
/**
- * Creates a SetOpRel by parsing serialized output.
+ * Creates a SetOp by parsing serialized output.
*/
- protected SetOpRel(RelInput input) {
+ protected SetOp(RelInput input) {
this(input.getCluster(), input.getTraitSet(), input.getInputs(),
SqlKind.UNION, input.getBoolean("all"));
}
//~ Methods ----------------------------------------------------------------
- public abstract SetOpRel copy(
+ public abstract SetOp copy(
RelTraitSet traitSet,
List<RelNode> inputs,
boolean all);
- @Override
- public SetOpRel copy(
- RelTraitSet traitSet,
- List<RelNode> inputs) {
+ @Override public SetOp copy(RelTraitSet traitSet, List<RelNode> inputs) {
return copy(traitSet, inputs, all);
}
- @Override
- public void replaceInput(int ordinalInParent, RelNode p) {
+ @Override public void replaceInput(int ordinalInParent, RelNode p) {
final List<RelNode> newInputs = new ArrayList<RelNode>(inputs);
newInputs.set(ordinalInParent, p);
inputs = ImmutableList.copyOf(newInputs);
recomputeDigest();
}
- @Override
- public boolean isKey(BitSet columns) {
+ @Override public boolean isKey(BitSet columns) {
// If not ALL then the rows are distinct.
// Therefore the set of all columns is a key.
return !all && columns.nextClearBit(0) >= getRowType().getFieldCount();
}
- @Override
- public List<RelNode> getInputs() {
+ @Override public List<RelNode> getInputs() {
return inputs;
}
- @Override
- public RelWriter explainTerms(RelWriter pw) {
+ @Override public RelWriter explainTerms(RelWriter pw) {
super.explainTerms(pw);
for (Ord<RelNode> ord : Ord.zip(inputs)) {
pw.input("input#" + ord.i, ord.e);
@@ -109,17 +106,14 @@ public abstract class SetOpRel extends AbstractRelNode {
return pw.item("all", all);
}
- @Override
- protected RelDataType deriveRowType() {
+ @Override protected RelDataType deriveRowType() {
return getCluster().getTypeFactory().leastRestrictive(
new AbstractList<RelDataType>() {
- @Override
- public RelDataType get(int index) {
+ @Override public RelDataType get(int index) {
return inputs.get(index).getRowType();
}
- @Override
- public int size() {
+ @Override public int size() {
return inputs.size();
}
});
@@ -129,7 +123,7 @@ public abstract class SetOpRel extends AbstractRelNode {
* Returns whether all the inputs of this set operator have the same row
* type as its output row.
*
- * @param compareNames whether or not column names are important in the
+ * @param compareNames Whether column names are important in the
* homogeneity comparison
*/
public boolean isHomogeneous(boolean compareNames) {
@@ -142,15 +136,6 @@ public abstract class SetOpRel extends AbstractRelNode {
}
return true;
}
-
- /**
- * Returns whether all the inputs of this set operator have the same row
- * type as its output row. Equivalent to {@link #isHomogeneous(boolean)
- * isHomogeneous(true)}.
- */
- public boolean isHomogeneous() {
- return isHomogeneous(true);
- }
}
-// End SetOpRel.java
+// End SetOp.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Sort.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Sort.java b/core/src/main/java/org/apache/calcite/rel/core/Sort.java
index 11ab22b..5c91666 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Sort.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Sort.java
@@ -14,25 +14,36 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.linq4j.Ord;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelCollationTraitDef;
+import org.apache.calcite.rel.RelFieldCollation;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelShuttle;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.SingleRel;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.util.Util;
+
+import com.google.common.collect.ImmutableList;
import java.util.Collections;
import java.util.List;
-import org.eigenbase.rel.metadata.RelMetadataQuery;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.util.Util;
-
-import net.hydromatic.linq4j.Ord;
-
-import com.google.common.collect.ImmutableList;
-
/**
- * Relational expression which imposes a particular sort order on its input
+ * Relational expression that imposes a particular sort order on its input
* without otherwise changing its content.
*/
-public class SortRel extends SingleRel {
+public class Sort extends SingleRel {
//~ Instance fields --------------------------------------------------------
protected final RelCollation collation;
@@ -43,14 +54,14 @@ public class SortRel extends SingleRel {
//~ Constructors -----------------------------------------------------------
/**
- * Creates a sorter.
+ * Creates a Sort.
*
* @param cluster Cluster this relational expression belongs to
* @param traits Traits
* @param child input relational expression
* @param collation array of sort specifications
*/
- public SortRel(
+ public Sort(
RelOptCluster cluster,
RelTraitSet traits,
RelNode child,
@@ -59,7 +70,7 @@ public class SortRel extends SingleRel {
}
/**
- * Creates a sorter.
+ * Creates a Sort.
*
* @param cluster Cluster this relational expression belongs to
* @param traits Traits
@@ -69,7 +80,7 @@ public class SortRel extends SingleRel {
* first row
* @param fetch Expression for number of rows to fetch
*/
- public SortRel(
+ public Sort(
RelOptCluster cluster,
RelTraitSet traits,
RelNode child,
@@ -96,11 +107,10 @@ public class SortRel extends SingleRel {
}
/**
- * Creates a SortRel by parsing serialized output.
+ * Creates a Sort by parsing serialized output.
*/
- public SortRel(RelInput input) {
- this(
- input.getCluster(), input.getTraitSet().plus(input.getCollation()),
+ public Sort(RelInput input) {
+ this(input.getCluster(), input.getTraitSet().plus(input.getCollation()),
input.getInput(),
RelCollationTraitDef.INSTANCE.canonize(input.getCollation()),
input.getExpression("offset"), input.getExpression("fetch"));
@@ -108,26 +118,25 @@ public class SortRel extends SingleRel {
//~ Methods ----------------------------------------------------------------
- @Override
- public SortRel copy(RelTraitSet traitSet, List<RelNode> inputs) {
+ @Override public Sort copy(RelTraitSet traitSet, List<RelNode> inputs) {
return copy(traitSet, sole(inputs), collation);
}
- public SortRel copy(
+ public Sort copy(
RelTraitSet traitSet,
RelNode newInput,
RelCollation newCollation) {
return copy(traitSet, newInput, newCollation, offset, fetch);
}
- public SortRel copy(
+ public Sort copy(
RelTraitSet traitSet,
RelNode newInput,
RelCollation newCollation,
RexNode offset,
RexNode fetch) {
assert traitSet.containsIfApplicable(Convention.NONE);
- return new SortRel(
+ return new Sort(
getCluster(),
traitSet,
newInput,
@@ -136,8 +145,7 @@ public class SortRel extends SingleRel {
fetch);
}
- @Override
- public RelOptCost computeSelfCost(RelOptPlanner planner) {
+ @Override public RelOptCost computeSelfCost(RelOptPlanner planner) {
// Higher cost if rows are wider discourages pushing a project through a
// sort.
double rowCount = RelMetadataQuery.getRowCount(this);
@@ -146,13 +154,11 @@ public class SortRel extends SingleRel {
Util.nLogN(rowCount) * bytesPerRow, rowCount, 0);
}
- @Override
- public RelNode accept(RelShuttle shuttle) {
+ @Override public RelNode accept(RelShuttle shuttle) {
return shuttle.visit(this);
}
- @Override
- public List<RexNode> getChildExps() {
+ @Override public List<RexNode> getChildExps() {
return fieldExps;
}
@@ -172,8 +178,7 @@ public class SortRel extends SingleRel {
return collation;
}
- @Override
- public List<RelCollation> getCollationList() {
+ @Override public List<RelCollation> getCollationList() {
// TODO: include each prefix of the collation, e.g [[x, y], [x], []]
return Collections.singletonList(getCollation());
}
@@ -198,4 +203,4 @@ public class SortRel extends SingleRel {
}
}
-// End SortRel.java
+// End Sort.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/TableFunctionScan.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/TableFunctionScan.java b/core/src/main/java/org/apache/calcite/rel/core/TableFunctionScan.java
index 9a31fc4..282b1f3 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/TableFunctionScan.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/TableFunctionScan.java
@@ -14,26 +14,38 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
-
-import java.lang.reflect.Type;
-import java.util.*;
-
-import org.eigenbase.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-
-import net.hydromatic.linq4j.Ord;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.linq4j.Ord;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.AbstractRelNode;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.metadata.RelColumnMapping;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexNode;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
/**
- * <code>TableFunctionRelBase</code> is an abstract base class for
- * implementations of {@link TableFunctionRel}.
+ * Relational expression that calls a table-valued function.
+ *
+ * <p>The function returns a result set.
+ * It can appear as a leaf in a query tree,
+ * or can be applied to relational inputs.
+ *
+ * @see org.apache.calcite.rel.logical.LogicalTableFunctionScan
*/
-public abstract class TableFunctionRelBase extends AbstractRelNode {
+public abstract class TableFunctionScan extends AbstractRelNode {
//~ Instance fields --------------------------------------------------------
private final RexNode rexCall;
@@ -47,7 +59,7 @@ public abstract class TableFunctionRelBase extends AbstractRelNode {
//~ Constructors -----------------------------------------------------------
/**
- * Creates a <code>TableFunctionRelBase</code>.
+ * Creates a <code>TableFunctionScan</code>.
*
* @param cluster Cluster that this relational expression belongs to
* @param inputs 0 or more relational inputs
@@ -57,7 +69,7 @@ public abstract class TableFunctionRelBase extends AbstractRelNode {
* @param rowType row type produced by function
* @param columnMappings column mappings associated with this function
*/
- protected TableFunctionRelBase(
+ protected TableFunctionScan(
RelOptCluster cluster,
RelTraitSet traits,
List<RelNode> inputs,
@@ -74,9 +86,9 @@ public abstract class TableFunctionRelBase extends AbstractRelNode {
}
/**
- * Creates a TableFunctionRelBase by parsing serialized output.
+ * Creates a TableFunctionScan by parsing serialized output.
*/
- protected TableFunctionRelBase(RelInput input) {
+ protected TableFunctionScan(RelInput input) {
this(
input.getCluster(), input.getTraitSet(), input.getInputs(),
input.getExpression("invocation"), (Type) input.get("elementType"),
@@ -86,26 +98,22 @@ public abstract class TableFunctionRelBase extends AbstractRelNode {
//~ Methods ----------------------------------------------------------------
- @Override
- public List<RelNode> getInputs() {
+ @Override public List<RelNode> getInputs() {
return inputs;
}
- @Override
- public List<RexNode> getChildExps() {
+ @Override public List<RexNode> getChildExps() {
return ImmutableList.of(rexCall);
}
- @Override
- public void replaceInput(int ordinalInParent, RelNode p) {
+ @Override public void replaceInput(int ordinalInParent, RelNode p) {
final List<RelNode> newInputs = new ArrayList<RelNode>(inputs);
newInputs.set(ordinalInParent, p);
inputs = ImmutableList.copyOf(newInputs);
recomputeDigest();
}
- @Override
- public double getRows() {
+ @Override public double getRows() {
// Calculate result as the sum of the input rowcount estimates,
// assuming there are any, otherwise use the superclass default. So
// for a no-input UDX, behave like an AbstractRelNode; for a one-input
@@ -161,4 +169,4 @@ public abstract class TableFunctionRelBase extends AbstractRelNode {
}
}
-// End TableFunctionRelBase.java
+// End TableFunctionScan.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/TableModify.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/TableModify.java b/core/src/main/java/org/apache/calcite/rel/core/TableModify.java
index 0f6dc26..fea3a5e 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/TableModify.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/TableModify.java
@@ -14,23 +14,40 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
-
-import java.util.*;
-
-import org.eigenbase.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.sql.SqlKind;
-import org.eigenbase.sql.type.*;
-
-import net.hydromatic.optiq.prepare.Prepare;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.prepare.Prepare;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.SingleRel;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.sql.SqlKind;
+import org.apache.calcite.sql.type.SqlTypeUtil;
+
+import java.util.Collections;
+import java.util.List;
/**
- * <code>TableModificationRelBase</code> is an abstract base class for
- * implementations of {@link TableModificationRel}.
+ * Relational expression that modifies a table.
+ *
+ * It is similar to {@link org.apache.calcite.rel.core.TableScan},
+ * but represents a request to modify a table rather than read from it.
+ * It takes one child which produces the modified rows. Those rows are:
+ *
+ * <ul>
+ * <li>For {@code INSERT}, those rows are the new values;
+ * <li>for {@code DELETE}, the old values;
+ * <li>for {@code UPDATE}, all old values plus updated new values.
+ * </ul>
*/
-public abstract class TableModificationRelBase extends SingleRel {
+public abstract class TableModify extends SingleRel {
//~ Enums ------------------------------------------------------------------
/**
@@ -58,7 +75,7 @@ public abstract class TableModificationRelBase extends SingleRel {
//~ Constructors -----------------------------------------------------------
- protected TableModificationRelBase(
+ protected TableModify(
RelOptCluster cluster,
RelTraitSet traits,
RelOptTable table,
@@ -181,4 +198,4 @@ public abstract class TableModificationRelBase extends SingleRel {
}
}
-// End TableModificationRelBase.java
+// End TableModify.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/TableScan.java b/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
index 7532080..9eaa931 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
@@ -14,22 +14,34 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
-
-import java.util.*;
-
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.RexBuilder;
-import org.eigenbase.rex.RexNode;
-
-import net.hydromatic.optiq.util.BitSets;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.AbstractRelNode;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelShuttle;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.util.BitSets;
+
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.List;
+import java.util.Set;
/**
- * <code>TableAccessRelBase</code> is an abstract base class for implementations
- * of {@link TableAccessRel}.
+ * Relational operator that returns the contents of a table.
*/
-public abstract class TableAccessRelBase extends AbstractRelNode {
+public abstract class TableScan extends AbstractRelNode {
//~ Instance fields --------------------------------------------------------
/**
@@ -39,7 +51,7 @@ public abstract class TableAccessRelBase extends AbstractRelNode {
//~ Constructors -----------------------------------------------------------
- protected TableAccessRelBase(
+ protected TableScan(
RelOptCluster cluster,
RelTraitSet traits,
RelOptTable table) {
@@ -51,9 +63,9 @@ public abstract class TableAccessRelBase extends AbstractRelNode {
}
/**
- * Creates a TableAccessRelBase by parsing serialized output.
+ * Creates a TableScan by parsing serialized output.
*/
- protected TableAccessRelBase(RelInput input) {
+ protected TableScan(RelInput input) {
this(input.getCluster(), input.getTraitSet(), input.getTable("table"));
}
@@ -96,7 +108,8 @@ public abstract class TableAccessRelBase extends AbstractRelNode {
* fields that were not included in the table's official type.
*
* <p>The default implementation assumes that tables cannot do either of
- * these operations, therefore it adds a {@link ProjectRel}, projecting
+ * these operations, therefore it adds a
+ * {@link org.apache.calcite.rel.logical.LogicalProject}, projecting
* {@code NULL} values for the extra fields.</p>
*
* <p>Sub-classes, representing table types that have these capabilities,
@@ -140,10 +153,9 @@ public abstract class TableAccessRelBase extends AbstractRelNode {
return projectFactory.createProject(this, exprList, nameList);
}
- @Override
- public RelNode accept(RelShuttle shuttle) {
+ @Override public RelNode accept(RelShuttle shuttle) {
return shuttle.visit(this);
}
}
-// End TableAccessRelBase.java
+// End TableScan.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Uncollect.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Uncollect.java b/core/src/main/java/org/apache/calcite/rel/core/Uncollect.java
index 3f8c61c..b31700b 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Uncollect.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Uncollect.java
@@ -14,26 +14,32 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
-import java.util.List;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.SingleRel;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.sql.SqlUtil;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.sql.*;
+import java.util.List;
/**
- * A relational expression which unnests its input's sole column into a
+ * Relational expression that unnests its input's sole column into a
* relation.
*
- * <p>Like its inverse operation {@link CollectRel}, UncollectRel is generally
- * invoked in a nested loop, driven by {@link CorrelatorRel} or similar.
+ * <p>Like its inverse operation {@link Collect}, Uncollect is generally
+ * invoked in a nested loop, driven by {@link Correlator} or similar.
*/
-public class UncollectRel extends SingleRel {
+public class Uncollect extends SingleRel {
//~ Constructors -----------------------------------------------------------
/**
- * Creates an UncollectRel.
+ * Creates an Uncollect.
*
* <p>The row type of the child relational expression must contain precisely
* one column, that column must be a multiset of records.
@@ -42,16 +48,16 @@ public class UncollectRel extends SingleRel {
* @param traitSet Traits
* @param child Child relational expression
*/
- public UncollectRel(RelOptCluster cluster, RelTraitSet traitSet,
+ public Uncollect(RelOptCluster cluster, RelTraitSet traitSet,
RelNode child) {
super(cluster, traitSet, child);
assert deriveRowType() != null : "invalid child rowtype";
}
/**
- * Creates an UncollectRel by parsing serialized output.
+ * Creates an Uncollect by parsing serialized output.
*/
- public UncollectRel(RelInput input) {
+ public Uncollect(RelInput input) {
this(input.getCluster(), input.getTraitSet(), input.getInput());
}
@@ -64,11 +70,11 @@ public class UncollectRel extends SingleRel {
public RelNode copy(RelTraitSet traitSet, RelNode input) {
assert traitSet.containsIfApplicable(Convention.NONE);
- return new UncollectRel(getCluster(), traitSet, input);
+ return new Uncollect(getCluster(), traitSet, input);
}
protected RelDataType deriveRowType() {
- return deriveUncollectRowType(getChild());
+ return deriveUncollectRowType(getInput());
}
/**
@@ -96,4 +102,4 @@ public class UncollectRel extends SingleRel {
}
}
-// End UncollectRel.java
+// End Uncollect.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Union.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Union.java b/core/src/main/java/org/apache/calcite/rel/core/Union.java
index 4d31b71..1907199 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Union.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Union.java
@@ -14,22 +14,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
-import java.util.List;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.sql.SqlKind;
-import org.eigenbase.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.sql.SqlKind;
+import java.util.List;
/**
- * <code>UnionRelBase</code> is an abstract base class for implementations of
- * {@link UnionRel}.
+ * Relational expression that returns the union of the rows of its inputs,
+ * optionally eliminating duplicates.
+ *
+ * <p>Corresponds to SQL {@code UNION} and {@code UNION ALL}.
*/
-public abstract class UnionRelBase extends SetOpRel {
+public abstract class Union extends SetOp {
//~ Constructors -----------------------------------------------------------
- protected UnionRelBase(
+ protected Union(
RelOptCluster cluster,
RelTraitSet traits,
List<RelNode> inputs,
@@ -38,9 +43,9 @@ public abstract class UnionRelBase extends SetOpRel {
}
/**
- * Creates a UnionRelBase by parsing serialized output.
+ * Creates a Union by parsing serialized output.
*/
- protected UnionRelBase(RelInput input) {
+ protected Union(RelInput input) {
super(input);
}
@@ -70,4 +75,4 @@ public abstract class UnionRelBase extends SetOpRel {
}
}
-// End UnionRelBase.java
+// End Union.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Values.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Values.java b/core/src/main/java/org/apache/calcite/rel/core/Values.java
index 4312bab..6f1458e 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Values.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Values.java
@@ -14,26 +14,32 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
-
-import java.util.*;
-
-import org.eigenbase.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.*;
-import org.eigenbase.sql.type.*;
-import org.eigenbase.util.Pair;
-
-import net.hydromatic.linq4j.function.Function1;
-import net.hydromatic.linq4j.function.Functions;
+package org.apache.calcite.rel.core;
+
+import org.apache.calcite.linq4j.function.Function1;
+import org.apache.calcite.linq4j.function.Functions;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.AbstractRelNode;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.sql.SqlExplainLevel;
+import org.apache.calcite.sql.type.SqlTypeUtil;
+import org.apache.calcite.util.Pair;
+
+import java.util.List;
/**
- * <code>ValuesRelBase</code> is an abstract base class for implementations of
- * {@link ValuesRel}.
+ * Relational expression whose value is a sequence of zero or more literal row
+ * values.
*/
-public abstract class ValuesRelBase extends AbstractRelNode {
+public abstract class Values extends AbstractRelNode {
/**
* Lambda that helps render tuples as strings.
*/
@@ -54,17 +60,19 @@ public abstract class ValuesRelBase extends AbstractRelNode {
//~ Constructors -----------------------------------------------------------
/**
- * Creates a new ValuesRelBase. Note that tuples passed in become owned by
+ * Creates a new Values.
+ *
+ * <p>Note that tuples passed in become owned by
* this rel (without a deep copy), so caller must not modify them after this
* call, otherwise bad things will happen.
*
- * @param cluster .
- * @param rowType row type for tuples produced by this rel
+ * @param cluster Cluster that this relational expression belongs to
+ * @param rowType Row type for tuples produced by this rel
* @param tuples 2-dimensional array of tuple values to be produced; outer
* list contains tuples; each inner list is one tuple; all
* tuples must be of same length, conforming to rowType
*/
- protected ValuesRelBase(
+ protected Values(
RelOptCluster cluster,
RelDataType rowType,
List<List<RexLiteral>> tuples,
@@ -76,11 +84,10 @@ public abstract class ValuesRelBase extends AbstractRelNode {
}
/**
- * Creates a ValuesRelBase by parsing serialized output.
+ * Creates a Values by parsing serialized output.
*/
- public ValuesRelBase(RelInput input) {
- this(
- input.getCluster(), input.getRowType("type"),
+ public Values(RelInput input) {
+ this(input.getCluster(), input.getRowType("type"),
input.getTuples("tuples"), input.getTraitSet());
}
@@ -159,4 +166,4 @@ public abstract class ValuesRelBase extends AbstractRelNode {
}
}
-// End ValuesRelBase.java
+// End Values.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/Window.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Window.java b/core/src/main/java/org/apache/calcite/rel/core/Window.java
index e696749..043da29 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Window.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Window.java
@@ -14,37 +14,52 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.eigenbase.rel;
+package org.apache.calcite.rel.core;
-import java.util.*;
-
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.RelDataType;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.SqlAggFunction;
-import org.eigenbase.util.ImmutableIntList;
-import org.eigenbase.util.Util;
-
-import net.hydromatic.linq4j.Ord;
+import org.apache.calcite.linq4j.Ord;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelCollationImpl;
+import org.apache.calcite.rel.RelFieldCollation;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.SingleRel;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexCall;
+import org.apache.calcite.rex.RexChecker;
+import org.apache.calcite.rex.RexFieldCollation;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexLocalRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexSlot;
+import org.apache.calcite.rex.RexWindowBound;
+import org.apache.calcite.sql.SqlAggFunction;
+import org.apache.calcite.util.ImmutableIntList;
+import org.apache.calcite.util.Util;
import com.google.common.collect.ImmutableList;
+import java.util.AbstractList;
+import java.util.BitSet;
+import java.util.List;
+
/**
* A relational expression representing a set of window aggregates.
*
- * <p>A window rel can handle several window aggregate functions, over several
+ * <p>A Window can handle several window aggregate functions, over several
* partitions, with pre- and post-expressions, and an optional post-filter.
* Each of the partitions is defined by a partition key (zero or more columns)
* and a range (logical or physical). The partitions expect the data to be
* sorted correctly on input to the relational expression.
*
- * <p>Each {@link org.eigenbase.rel.WindowRelBase.Window} has a set of
- * {@link org.eigenbase.rex.RexOver} objects.
+ * <p>Each {@link Window.Group} has a set of
+ * {@link org.apache.calcite.rex.RexOver} objects.
*
- * <p>Created by {@link org.eigenbase.rel.rules.WindowedAggSplitterRule}.
+ * <p>Created by {@link org.apache.calcite.rel.rules.ProjectToWindowRule}.
*/
-public abstract class WindowRelBase extends SingleRel {
- public final ImmutableList<Window> windows;
+public abstract class Window extends SingleRel {
+ public final ImmutableList<Group> groups;
public final List<RexLiteral> constants;
/**
@@ -54,38 +69,35 @@ public abstract class WindowRelBase extends SingleRel {
* @param child Input relational expression
* @param constants List of constants that are additional inputs
* @param rowType Output row type
- * @param windows Windows
+ * @param groups Windows
*/
- public WindowRelBase(
+ public Window(
RelOptCluster cluster, RelTraitSet traits, RelNode child,
- List<RexLiteral> constants, RelDataType rowType, List<Window> windows) {
+ List<RexLiteral> constants, RelDataType rowType, List<Group> groups) {
super(cluster, traits, child);
this.constants = ImmutableList.copyOf(constants);
assert rowType != null;
this.rowType = rowType;
- this.windows = ImmutableList.copyOf(windows);
+ this.groups = ImmutableList.copyOf(groups);
}
- @Override
- public boolean isValid(boolean fail) {
+ @Override public boolean isValid(boolean fail) {
// In the window specifications, an aggregate call such as
// 'SUM(RexInputRef #10)' refers to expression #10 of inputProgram.
// (Not its projections.)
- final RelDataType childRowType = getChild().getRowType();
+ final RelDataType childRowType = getInput().getRowType();
final int childFieldCount = childRowType.getFieldCount();
final int inputSize = childFieldCount + constants.size();
final List<RelDataType> inputTypes =
new AbstractList<RelDataType>() {
- @Override
- public RelDataType get(int index) {
+ @Override public RelDataType get(int index) {
return index < childFieldCount
? childRowType.getFieldList().get(index).getType()
: constants.get(index - childFieldCount).getType();
}
- @Override
- public int size() {
+ @Override public int size() {
return inputSize;
}
};
@@ -93,8 +105,8 @@ public abstract class WindowRelBase extends SingleRel {
final RexChecker checker =
new RexChecker(inputTypes, fail);
int count = 0;
- for (Window window : windows) {
- for (RexWinAggCall over : window.aggCalls) {
+ for (Group group : groups) {
+ for (RexWinAggCall over : group.aggCalls) {
++count;
if (!checker.isValid(over)) {
return false;
@@ -110,13 +122,13 @@ public abstract class WindowRelBase extends SingleRel {
public RelWriter explainTerms(RelWriter pw) {
super.explainTerms(pw);
- for (Ord<Window> window : Ord.zip(windows)) {
+ for (Ord<Group> window : Ord.zip(groups)) {
pw.item("window#" + window.i, window.e.toString());
}
return pw;
}
- static ImmutableIntList getProjectOrdinals(final List<RexNode> exprs) {
+ public static ImmutableIntList getProjectOrdinals(final List<RexNode> exprs) {
return ImmutableIntList.copyOf(
new AbstractList<Integer>() {
public Integer get(int index) {
@@ -129,7 +141,8 @@ public abstract class WindowRelBase extends SingleRel {
});
}
- static RelCollation getCollation(final List<RexFieldCollation> collations) {
+ public static RelCollation getCollation(
+ final List<RexFieldCollation> collations) {
return RelCollationImpl.of(
new AbstractList<RelFieldCollation>() {
public RelFieldCollation get(int index) {
@@ -155,8 +168,10 @@ public abstract class WindowRelBase extends SingleRel {
}
/**
- * A Window is a range of input rows, defined by an upper and lower bound.
- * It also has zero or more partitioning columns.
+ * Group of windowed aggregate calls that have the same window specification.
+ *
+ * <p>The specification is defined by an upper and lower bound, and
+ * also has zero or more partitioning columns.
*
* <p>A window is either logical or physical. A physical window is measured
* in terms of row count. A logical window is measured in terms of rows
@@ -174,8 +189,8 @@ public abstract class WindowRelBase extends SingleRel {
* CURRENT ROW</code>) is a logical window with an upper and lower bound.
* </ul>
*/
- public static class Window {
- public final BitSet groupSet;
+ public static class Group {
+ public final BitSet keys;
public final boolean isRows;
public final RexWindowBound lowerBound;
public final RexWindowBound upperBound;
@@ -183,22 +198,22 @@ public abstract class WindowRelBase extends SingleRel {
private final String digest;
/**
- * List of {@link org.eigenbase.rel.WindowRelBase.RexWinAggCall}
+ * List of {@link Window.RexWinAggCall}
* objects, each of which is a call to a
- * {@link org.eigenbase.sql.SqlAggFunction}.
+ * {@link org.apache.calcite.sql.SqlAggFunction}.
*/
public final ImmutableList<RexWinAggCall> aggCalls;
- public Window(
- BitSet groupSet,
+ public Group(
+ BitSet keys,
boolean isRows,
RexWindowBound lowerBound,
RexWindowBound upperBound,
RelCollation orderKeys,
List<RexWinAggCall> aggCalls) {
assert orderKeys != null : "precondition: ordinals != null";
- assert groupSet != null;
- this.groupSet = groupSet;
+ assert keys != null;
+ this.keys = keys;
this.isRows = isRows;
this.lowerBound = lowerBound;
this.upperBound = upperBound;
@@ -214,7 +229,7 @@ public abstract class WindowRelBase extends SingleRel {
private String computeString() {
final StringBuilder buf = new StringBuilder();
buf.append("window(partition ");
- buf.append(groupSet);
+ buf.append(keys);
buf.append(" order by ");
buf.append(orderKeys);
buf.append(isRows ? " rows " : " range ");
@@ -236,15 +251,13 @@ public abstract class WindowRelBase extends SingleRel {
return buf.toString();
}
- @Override
- public boolean equals(Object obj) {
+ @Override public boolean equals(Object obj) {
return this == obj
- || obj instanceof Window
- && this.digest.equals(((Window) obj).digest);
+ || obj instanceof Group
+ && this.digest.equals(((Group) obj).digest);
}
- @Override
- public int hashCode() {
+ @Override public int hashCode() {
return digest.hashCode();
}
@@ -257,9 +270,9 @@ public abstract class WindowRelBase extends SingleRel {
* This is useful to refine data type of window aggregates.
* For instance sum(non-nullable) over (empty window) is NULL.
* @return true when the window is non-empty
- * @see org.eigenbase.sql.SqlWindow#isAlwaysNonEmpty()
- * @see org.eigenbase.sql.SqlOperatorBinding#getGroupCount()
- * @see org.eigenbase.sql.validate.SqlValidatorImpl#resolveWindow(org.eigenbase.sql.SqlNode, org.eigenbase.sql.validate.SqlValidatorScope, boolean)
+ * @see org.apache.calcite.sql.SqlWindow#isAlwaysNonEmpty()
+ * @see org.apache.calcite.sql.SqlOperatorBinding#getGroupCount()
+ * @see org.apache.calcite.sql.validate.SqlValidatorImpl#resolveWindow(org.apache.calcite.sql.SqlNode, org.apache.calcite.sql.validate.SqlValidatorScope, boolean)
*/
public boolean isAlwaysNonEmpty() {
int lowerKey = lowerBound.getOrderKey();
@@ -271,10 +284,10 @@ public abstract class WindowRelBase extends SingleRel {
* Presents a view of the {@link RexWinAggCall} list as a list of
* {@link AggregateCall}.
*/
- public List<AggregateCall> getAggregateCalls(WindowRelBase windowRel) {
+ public List<AggregateCall> getAggregateCalls(Window windowRel) {
final List<String> fieldNames =
Util.skip(windowRel.getRowType().getFieldNames(),
- windowRel.getChild().getRowType().getFieldCount());
+ windowRel.getInput().getRowType().getFieldCount());
return new AbstractList<AggregateCall>() {
public int size() {
return aggCalls.size();
@@ -283,7 +296,7 @@ public abstract class WindowRelBase extends SingleRel {
public AggregateCall get(int index) {
final RexWinAggCall aggCall = aggCalls.get(index);
return new AggregateCall(
- (Aggregation) aggCall.getOperator(),
+ (SqlAggFunction) aggCall.getOperator(),
false,
getProjectOrdinals(aggCall.getOperands()),
aggCall.getType(),
@@ -296,10 +309,10 @@ public abstract class WindowRelBase extends SingleRel {
/**
* A call to a windowed aggregate function.
*
- * <p>Belongs to a {@link org.eigenbase.rel.WindowRelBase.Window}.
+ * <p>Belongs to a {@link Window.Group}.
*
- * <p>It's a bastard son of a {@link org.eigenbase.rex.RexCall}; similar
- * enough that it gets visited by a {@link org.eigenbase.rex.RexVisitor},
+ * <p>It's a bastard son of a {@link org.apache.calcite.rex.RexCall}; similar
+ * enough that it gets visited by a {@link org.apache.calcite.rex.RexVisitor},
* but it also has some extra data members.
*/
public static class RexWinAggCall extends RexCall {
@@ -325,11 +338,10 @@ public abstract class WindowRelBase extends SingleRel {
this.ordinal = ordinal;
}
- @Override
- public RexCall clone(RelDataType type, List<RexNode> operands) {
+ @Override public RexCall clone(RelDataType type, List<RexNode> operands) {
throw new UnsupportedOperationException();
}
}
}
-// End WindowRelBase.java
+// End Window.java
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/core/package-info.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/package-info.java b/core/src/main/java/org/apache/calcite/rel/core/package-info.java
new file mode 100644
index 0000000..2e547fb
--- /dev/null
+++ b/core/src/main/java/org/apache/calcite/rel/core/package-info.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Defines core relational expressions.
+ *
+ * <h2>Related packages and classes</h2>
+ * <ul>
+ *
+ * <li>Package <code>
+ * <a href="../logical/package-summary.html">org.apache.calcite.rel.logical</a></code>
+ * contains logical relational expressions
+ *
+ * <li>Package <code>
+ * <a href="../package-summary.html">org.apache.calcite.rex</a></code>
+ * defines the relational expression API
+ *
+ * </ul>
+ */
+package org.apache.calcite.rel.core;
+
+// End package-info.java