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:40 UTC

[32/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/rules/LoptJoinTree.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/LoptJoinTree.java b/core/src/main/java/org/apache/calcite/rel/rules/LoptJoinTree.java
index 0ac7197..55e41c7 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/LoptJoinTree.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/LoptJoinTree.java
@@ -14,18 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import java.util.*;
-
-import org.eigenbase.rel.*;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Join;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 
+import java.util.List;
+
 /**
- * Utility class used to store a {@link JoinRelBase} tree and the factors that
- * make up the tree.
+ * Utility class used to store a {@link org.apache.calcite.rel.core.Join} tree
+ * and the factors that make up the tree.
  *
  * <p>Because {@link RelNode}s can be duplicated in a query
  * when you have a self-join, factor ids are needed to distinguish between the
@@ -115,7 +116,7 @@ public class LoptJoinTree {
   public LoptJoinTree getLeft() {
     final Node node = (Node) factorTree;
     return new LoptJoinTree(
-        ((JoinRelBase) joinTree).getLeft(),
+        ((Join) joinTree).getLeft(),
         node.getLeft(),
         node.getLeft().getParent().isRemovableSelfJoin());
   }
@@ -123,7 +124,7 @@ public class LoptJoinTree {
   public LoptJoinTree getRight() {
     final Node node = (Node) factorTree;
     return new LoptJoinTree(
-        ((JoinRelBase) joinTree).getRight(),
+        ((Join) joinTree).getRight(),
         node.getRight(),
         node.getRight().getParent().isRemovableSelfJoin());
   }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/LoptMultiJoin.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/LoptMultiJoin.java b/core/src/main/java/org/apache/calcite/rel/rules/LoptMultiJoin.java
index 8410894..071dbc1 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/LoptMultiJoin.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/LoptMultiJoin.java
@@ -14,59 +14,71 @@
  * 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.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.SqlKind;
-import org.eigenbase.util.IntList;
-
-import net.hydromatic.optiq.util.BitSets;
+package org.apache.calcite.rel.rules;
+
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.SemiJoin;
+import org.apache.calcite.rel.metadata.RelColumnOrigin;
+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.RexCall;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.sql.SqlKind;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.IntList;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * Utility class that keeps track of the join factors that
- * make up a {@link MultiJoinRel}.
+ * make up a {@link MultiJoin}.
  */
 public class LoptMultiJoin {
   //~ Instance fields --------------------------------------------------------
 
   /**
-   * The MultiJoinRel being optimized
+   * The MultiJoin being optimized
    */
-  MultiJoinRel multiJoin;
+  MultiJoin multiJoin;
 
   /**
-   * Join filters associated with the MultiJoinRel, decomposed into a list.
+   * Join filters associated with the MultiJoin, decomposed into a list.
    * Excludes left/right outer join filters.
    */
   private List<RexNode> joinFilters;
 
   /**
-   * All join filters associated with the MultiJoinRel, decomposed into a
+   * All join filters associated with the MultiJoin, decomposed into a
    * list. Includes left/right outer join filters.
    */
   private List<RexNode> allJoinFilters;
 
   /**
-   * Number of factors into the MultiJoinRel
+   * Number of factors into the MultiJoin
    */
   private final int nJoinFactors;
 
   /**
-   * Total number of fields in the MultiJoinRel
+   * Total number of fields in the MultiJoin
    */
   private int nTotalFields;
 
   /**
-   * Original inputs into the MultiJoinRel
+   * Original inputs into the MultiJoin
    */
   private final ImmutableList<RelNode> joinFactors;
 
@@ -150,7 +162,7 @@ public class LoptMultiJoin {
   /**
    * The semijoins that allow the join of a dimension table to be removed
    */
-  SemiJoinRel [] joinRemovalSemiJoins;
+  SemiJoin[] joinRemovalSemiJoins;
 
   /**
    * Set of null-generating factors whose corresponding outer join can be
@@ -168,7 +180,7 @@ public class LoptMultiJoin {
 
   //~ Constructors -----------------------------------------------------------
 
-  public LoptMultiJoin(MultiJoinRel multiJoin) {
+  public LoptMultiJoin(MultiJoin multiJoin) {
     this.multiJoin = multiJoin;
     joinFactors = ImmutableList.copyOf(multiJoin.getInputs());
     nJoinFactors = joinFactors.size();
@@ -219,7 +231,7 @@ public class LoptMultiJoin {
     factory = multiJoin.getCluster().getTypeFactory();
 
     joinRemovalFactors = new Integer[nJoinFactors];
-    joinRemovalSemiJoins = new SemiJoinRel[nJoinFactors];
+    joinRemovalSemiJoins = new SemiJoin[nJoinFactors];
 
     removableOuterJoinFactors = new HashSet<Integer>();
     removableSelfJoinPairs = new HashMap<Integer, RemovableSelfJoin>();
@@ -228,9 +240,9 @@ public class LoptMultiJoin {
   //~ Methods ----------------------------------------------------------------
 
   /**
-   * @return the MultiJoinRel corresponding to this multijoin
+   * @return the MultiJoin corresponding to this multijoin
    */
-  public MultiJoinRel getMultiJoinRel() {
+  public MultiJoin getMultiJoinRel() {
     return multiJoin;
   }
 
@@ -391,7 +403,7 @@ public class LoptMultiJoin {
    * @return the semijoin that allows the join of a dimension table to be
    * removed
    */
-  public SemiJoinRel getJoinRemovalSemiJoin(int dimIdx) {
+  public SemiJoin getJoinRemovalSemiJoin(int dimIdx) {
     return joinRemovalSemiJoins[dimIdx];
   }
 
@@ -413,7 +425,7 @@ public class LoptMultiJoin {
    * @param dimIdx id of the dimension factor
    * @param semiJoin the semijoin
    */
-  public void setJoinRemovalSemiJoin(int dimIdx, SemiJoinRel semiJoin) {
+  public void setJoinRemovalSemiJoin(int dimIdx, SemiJoin semiJoin) {
     joinRemovalSemiJoins[dimIdx] = semiJoin;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/LoptOptimizeJoinRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/LoptOptimizeJoinRule.java b/core/src/main/java/org/apache/calcite/rel/rules/LoptOptimizeJoinRule.java
index f26c817..2f5643b 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/LoptOptimizeJoinRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/LoptOptimizeJoinRule.java
@@ -14,30 +14,57 @@
  * 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.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.fun.*;
-import org.eigenbase.util.ImmutableIntList;
-import org.eigenbase.util.Pair;
-import org.eigenbase.util.mapping.IntPair;
-
-import net.hydromatic.optiq.util.BitSets;
+package org.apache.calcite.rel.rules;
+
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Join;
+import org.apache.calcite.rel.core.JoinInfo;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rel.core.SemiJoin;
+import org.apache.calcite.rel.metadata.RelColumnOrigin;
+import org.apache.calcite.rel.metadata.RelMdUtil;
+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.RexBuilder;
+import org.apache.calcite.rex.RexCall;
+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.ImmutableIntList;
+import org.apache.calcite.util.Pair;
+import org.apache.calcite.util.mapping.IntPair;
 
 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.HashSet;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
 /**
  * Planner rule that implements the heuristic planner for determining optimal
  * join orderings.
  *
- * <p>It is triggered by the pattern {@link ProjectRel} ({@link MultiJoinRel}).
+ * <p>It is triggered by the pattern
+ * {@link org.apache.calcite.rel.logical.LogicalProject}
+ * ({@link MultiJoin}).
  */
 public class LoptOptimizeJoinRule extends RelOptRule {
   public static final LoptOptimizeJoinRule INSTANCE =
@@ -55,7 +82,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
       RelFactories.JoinFactory joinFactory,
       RelFactories.ProjectFactory projectFactory,
       RelFactories.FilterFactory filterFactory) {
-    super(operand(MultiJoinRel.class, any()));
+    super(operand(MultiJoin.class, any()));
     this.joinFactory = joinFactory;
     this.projectFactory = projectFactory;
     this.filterFactory = filterFactory;
@@ -65,7 +92,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
 
   // implement RelOptRule
   public void onMatch(RelOptRuleCall call) {
-    final MultiJoinRel multiJoinRel = call.rel(0);
+    final MultiJoin multiJoinRel = call.rel(0);
     final LoptMultiJoin multiJoin = new LoptMultiJoin(multiJoinRel);
 
     findRemovableOuterJoins(multiJoin);
@@ -509,8 +536,8 @@ public class LoptOptimizeJoinRule extends RelOptRule {
                 newOffset));
       }
     }
-    ProjectRelBase newProject =
-        (ProjectRelBase) projectFactory.createProject(
+    Project newProject =
+        (Project) projectFactory.createProject(
             joinTree.getJoinTree(),
             newProjExprs,
             fieldNames);
@@ -798,15 +825,15 @@ public class LoptOptimizeJoinRule extends RelOptRule {
   }
 
   /**
-   * Returns true if a relnode corresponds to a JoinRel that wasn't one of the
-   * original MultiJoinRel input factors
+   * Returns whether a RelNode corresponds to a Join that wasn't one of the
+   * original MultiJoin input factors.
    */
   private boolean isJoinTree(RelNode rel) {
     // full outer joins were already optimized in a prior instantiation
     // of this rule; therefore we should never see a join input that's
     // a full outer join
-    if (rel instanceof JoinRelBase) {
-      assert ((JoinRelBase) rel).getJoinType() != JoinRelType.FULL;
+    if (rel instanceof Join) {
+      assert ((Join) rel).getJoinType() != JoinRelType.FULL;
       return true;
     } else {
       return false;
@@ -949,10 +976,10 @@ public class LoptOptimizeJoinRule extends RelOptRule {
     // The width cost is the width of the tree itself plus the widths
     // of its children.  Hence, skinnier rows are better when they're
     // lower in the tree since the width of a RelNode contributes to
-    // the cost of each JoinRel that appears above that RelNode.
+    // the cost of each LogicalJoin that appears above that RelNode.
     int width = tree.getRowType().getFieldCount();
     if (isJoinTree(tree)) {
-      JoinRelBase joinRel = (JoinRelBase) tree;
+      Join joinRel = (Join) tree;
       width +=
           rowWidthCost(joinRel.getLeft())
               + rowWidthCost(joinRel.getRight());
@@ -993,7 +1020,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
     int childNo = -1;
     LoptJoinTree left = joinTree.getLeft();
     LoptJoinTree right = joinTree.getRight();
-    JoinRelBase joinRel = (JoinRelBase) joinTree.getJoinTree();
+    Join joinRel = (Join) joinTree.getJoinTree();
     JoinRelType joinType = joinRel.getJoinType();
 
     // can't push factors pass self-joins because in order to later remove
@@ -1065,7 +1092,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
     // pushdown of the new factor as well as any swapping that may have
     // been done during the pushdown
     RexNode newCondition =
-        ((JoinRelBase) joinTree.getJoinTree()).getCondition();
+        ((Join) joinTree.getJoinTree()).getCondition();
     newCondition =
         adjustFilter(
             multiJoin,
@@ -1142,7 +1169,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
     // as a left outer join since it's being added to the RHS side of
     // the join; createJoinSubTree may swap the inputs and therefore
     // convert the left outer join to a right outer join; if the original
-    // MultiJoinRel was a full outer join, these should be the only
+    // MultiJoin was a full outer join, these should be the only
     // factors in the join, so create the join as a full outer join
     JoinRelType joinType;
     if (multiJoin.getMultiJoinRel().isFullOuterJoin()) {
@@ -1510,7 +1537,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
         multiJoin.getJoinFactor(dimIdx).getRowType().getFieldList();
     int nDimFields = dimFields.size();
     Integer [] replacementKeys = new Integer[nDimFields];
-    SemiJoinRel semiJoin = multiJoin.getJoinRemovalSemiJoin(dimIdx);
+    SemiJoin semiJoin = multiJoin.getJoinRemovalSemiJoin(dimIdx);
     ImmutableIntList dimKeys = semiJoin.getRightKeys();
     ImmutableIntList factKeys = semiJoin.getLeftKeys();
     for (int i = 0; i < dimKeys.size(); i++) {
@@ -1614,8 +1641,8 @@ public class LoptOptimizeJoinRule extends RelOptRule {
       }
       projects.add(Pair.of(projExpr, newFields.get(i).getName()));
     }
-    ProjectRelBase projRel =
-        (ProjectRelBase) projectFactory.createProject(
+    Project projRel =
+        (Project) projectFactory.createProject(
             currJoinRel,
             Pair.left(projects),
             Pair.right(projects));
@@ -1637,7 +1664,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
 
     // Filters referencing factors other than leftIdx and factorToAdd
     // still do need to be applied.  So, add them into a separate
-    // FilterRel placed on top off the projection created above.
+    // LogicalFilter placed on top off the projection created above.
     RelNode topRelNode = projRel;
     if (leftIdx >= 0) {
       topRelNode =
@@ -1661,7 +1688,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
   }
 
   /**
-   * Creates a JoinRel given left and right operands and a join condition.
+   * Creates a LogicalJoin given left and right operands and a join condition.
    * Swaps the operands if beneficial.
    *
    * @param multiJoin join factors being optimized
@@ -1674,11 +1701,11 @@ public class LoptOptimizeJoinRule extends RelOptRule {
    * otherwise, the condition has already been partially adjusted and only
    * needs to be further adjusted if swapping is done
    * @param filtersToAdd additional filters that may be added on top of the
-   * resulting JoinRel, if the join is a left or right outer join
+   * resulting LogicalJoin, if the join is a left or right outer join
    * @param selfJoin true if the join being created is a self-join that's
    * removable
    *
-   * @return created JoinRel
+   * @return created LogicalJoin
    */
   private LoptJoinTree createJoinSubtree(
       LoptMultiJoin multiJoin,
@@ -1960,7 +1987,7 @@ public class LoptOptimizeJoinRule extends RelOptRule {
    *
    * @return true if the join is removable
    */
-  public static boolean isRemovableSelfJoin(JoinRelBase joinRel) {
+  public static boolean isRemovableSelfJoin(Join joinRel) {
     final RelNode left = joinRel.getLeft();
     final RelNode right = joinRel.getRight();
 

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/LoptSemiJoinOptimizer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/LoptSemiJoinOptimizer.java b/core/src/main/java/org/apache/calcite/rel/rules/LoptSemiJoinOptimizer.java
index 319b323..2f95c20 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/LoptSemiJoinOptimizer.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/LoptSemiJoinOptimizer.java
@@ -14,22 +14,40 @@
  * 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.rel.metadata.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.SqlKind;
-import org.eigenbase.sql.fun.*;
-import org.eigenbase.util.ImmutableIntList;
-
-import net.hydromatic.optiq.util.BitSets;
+package org.apache.calcite.rel.rules;
+
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.JoinInfo;
+import org.apache.calcite.rel.core.SemiJoin;
+import org.apache.calcite.rel.metadata.RelColumnOrigin;
+import org.apache.calcite.rel.metadata.RelMdUtil;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexCall;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.sql.SqlKind;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.ImmutableIntList;
 
 import com.google.common.collect.Lists;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * Implements the logic for determining the optimal
  * semi-joins to be used in processing joins in a query.
@@ -56,10 +74,10 @@ public class LoptSemiJoinOptimizer {
   /**
    * Associates potential semijoins with each fact table factor. The first
    * parameter in the map corresponds to the fact table. The second
-   * corresponds to the dimension table and a SemiJoinRel that captures all
+   * corresponds to the dimension table and a SemiJoin that captures all
    * the necessary semijoin data between that fact and dimension table
    */
-  private Map<Integer, Map<Integer, SemiJoinRel>> possibleSemiJoins;
+  private Map<Integer, Map<Integer, SemiJoin>> possibleSemiJoins;
 
   private final Comparator<Integer> factorCostComparator =
       new FactorCostComparator();
@@ -91,7 +109,7 @@ public class LoptSemiJoinOptimizer {
    * @param multiJoin join factors being optimized
    */
   public void makePossibleSemiJoins(LoptMultiJoin multiJoin) {
-    possibleSemiJoins = new HashMap<Integer, Map<Integer, SemiJoinRel>>();
+    possibleSemiJoins = new HashMap<Integer, Map<Integer, SemiJoin>>();
 
     // semijoins can't be used with any type of outer join, including full
     if (multiJoin.getMultiJoinRel().isFullOuterJoin()) {
@@ -102,8 +120,8 @@ public class LoptSemiJoinOptimizer {
     for (int factIdx = 0; factIdx < nJoinFactors; factIdx++) {
       Map<Integer, List<RexNode>> dimFilters =
           new HashMap<Integer, List<RexNode>>();
-      Map<Integer, SemiJoinRel> semiJoinMap =
-          new HashMap<Integer, SemiJoinRel>();
+      Map<Integer, SemiJoin> semiJoinMap =
+          new HashMap<Integer, SemiJoin>();
 
       // loop over all filters and find equality filters that reference
       // this factor and one other factor
@@ -137,7 +155,7 @@ public class LoptSemiJoinOptimizer {
       for (Integer dimIdx : dimIdxes) {
         List<RexNode> joinFilters = dimFilters.get(dimIdx);
         if (joinFilters != null) {
-          SemiJoinRel semiJoin =
+          SemiJoin semiJoin =
               findSemiJoinIndexByCost(
                   multiJoin,
                   joinFilters,
@@ -214,15 +232,15 @@ public class LoptSemiJoinOptimizer {
    * @param factIdx index in join factors corresponding to the fact table
    * @param dimIdx index in join factors corresponding to the dimension table
    *
-   * @return SemiJoinRel containing information regarding the semijoin that
+   * @return SemiJoin containing information regarding the semijoin that
    * can be used to filter the fact table
    */
-  private SemiJoinRel findSemiJoinIndexByCost(
+  private SemiJoin findSemiJoinIndexByCost(
       LoptMultiJoin multiJoin,
       List<RexNode> joinFilters,
       int factIdx,
       int dimIdx) {
-    // create a SemiJoinRel with the semi-join condition and keys
+    // create a SemiJoin with the semi-join condition and keys
     RexNode semiJoinCondition =
         RexUtil.composeConjunction(rexBuilder, joinFilters, true);
 
@@ -263,8 +281,8 @@ public class LoptSemiJoinOptimizer {
 
     // find the best index
     List<Integer> bestKeyOrder = new ArrayList<Integer>();
-    LcsRowScanRel tmpFactRel =
-        (LcsRowScanRel) factTable.toRel(
+    LcsTableScan tmpFactRel =
+        (LcsTableScan) factTable.toRel(
             RelOptUtil.getContext(factRel.getCluster()));
 
     LcsIndexOptimizer indexOptimizer = new LcsIndexOptimizer(tmpFactRel);
@@ -302,8 +320,8 @@ public class LoptSemiJoinOptimizer {
               multiJoin.getNumFieldsInJoinFactor(factIdx),
               semiJoinCondition);
     }
-    SemiJoinRel semiJoin =
-        new SemiJoinRel(
+    SemiJoin semiJoin =
+        new SemiJoin(
             factRel.getCluster(),
             factRel.getCluster().traitSetOf(Convention.NONE),
             factRel,
@@ -532,7 +550,7 @@ public class LoptSemiJoinOptimizer {
     for (int i = 0; i < nJoinFactors; i++) {
       Integer factIdx = sortedFactors[i];
       RelNode factRel = chosenSemiJoins[factIdx];
-      Map<Integer, SemiJoinRel> possibleDimensions =
+      Map<Integer, SemiJoin> possibleDimensions =
           possibleSemiJoins.get(factIdx);
       if (possibleDimensions == null) {
         continue;
@@ -545,7 +563,7 @@ public class LoptSemiJoinOptimizer {
       // fact table
       Set<Integer> dimIdxes = possibleDimensions.keySet();
       for (Integer dimIdx : dimIdxes) {
-        SemiJoinRel semiJoin = possibleDimensions.get(dimIdx);
+        SemiJoin semiJoin = possibleDimensions.get(dimIdx);
         if (semiJoin == null) {
           continue;
         }
@@ -566,13 +584,13 @@ public class LoptSemiJoinOptimizer {
       // if a suitable dimension table has been found, associate it
       // with the fact table in the chosenSemiJoins array; also remove
       // the entry from possibleSemiJoins so we won't chose it again;
-      // note that we create the SemiJoinRel using the chosen semijoins
+      // note that we create the SemiJoin using the chosen semijoins
       // already created for each factor so any chaining of filters will
       // be accounted for
       if (bestDimIdx != -1) {
-        SemiJoinRel semiJoin = possibleDimensions.get(bestDimIdx);
-        SemiJoinRel chosenSemiJoin =
-            new SemiJoinRel(
+        SemiJoin semiJoin = possibleDimensions.get(bestDimIdx);
+        SemiJoin chosenSemiJoin =
+            new SemiJoin(
                 factRel.getCluster(),
                 factRel.getCluster().traitSetOf(Convention.NONE),
                 factRel,
@@ -622,7 +640,7 @@ public class LoptSemiJoinOptimizer {
   private double computeScore(
       RelNode factRel,
       RelNode dimRel,
-      SemiJoinRel semiJoin) {
+      SemiJoin semiJoin) {
     // Estimate savings as a result of applying semijoin filter on fact
     // table.  As a heuristic, the selectivity of the semijoin needs to
     // be less than half.  There may be instances where an even smaller
@@ -695,7 +713,7 @@ public class LoptSemiJoinOptimizer {
    */
   private void removeJoin(
       LoptMultiJoin multiJoin,
-      SemiJoinRel semiJoin,
+      SemiJoin semiJoin,
       int factIdx,
       int dimIdx) {
     // if the dimension can be removed because of another semijoin, then
@@ -774,7 +792,7 @@ public class LoptSemiJoinOptimizer {
    * @param dimIdx index corresponding to dimension table
    */
   private void removePossibleSemiJoin(
-      Map<Integer, SemiJoinRel> possibleDimensions,
+      Map<Integer, SemiJoin> possibleDimensions,
       Integer factIdx,
       Integer dimIdx) {
     // dimension table may not have a corresponding semijoin if it
@@ -824,12 +842,12 @@ public class LoptSemiJoinOptimizer {
   }
 
   /** Dummy class to allow code to compile. */
-  private static class LcsRowScanRel {
+  private static class LcsTableScan {
   }
 
   /** Dummy class to allow code to compile. */
   private static class LcsIndexOptimizer {
-    public LcsIndexOptimizer(LcsRowScanRel rel) {}
+    public LcsIndexOptimizer(LcsTableScan rel) {}
 
     public FemLocalIndex findSemiJoinIndexByCost(RelNode dimRel,
         List<Integer> actualLeftKeys, List<Integer> rightKeys,

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/MultiJoin.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoin.java b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoin.java
index 2f252cd..cd70844 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoin.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoin.java
@@ -14,28 +14,36 @@
  * 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.util.ImmutableIntList;
-import org.eigenbase.util.ImmutableNullableList;
-
-import net.hydromatic.linq4j.Ord;
+package org.apache.calcite.rel.rules;
+
+import org.apache.calcite.linq4j.Ord;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.AbstractRelNode;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.util.ImmutableIntList;
+import org.apache.calcite.util.ImmutableNullableList;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
- * A MultiJoinRel represents a join of N inputs, whereas other join relnodes
+ * A MultiJoin represents a join of N inputs, whereas regular Joins
  * represent strictly binary joins.
  */
-public final class MultiJoinRel extends AbstractRelNode {
+public final class MultiJoin extends AbstractRelNode {
   //~ Instance fields --------------------------------------------------------
 
   private final List<RelNode> inputs;
@@ -51,10 +59,10 @@ public final class MultiJoinRel extends AbstractRelNode {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Constructs a MultiJoinRel.
+   * Constructs a MultiJoin.
    *
    * @param cluster               cluster that join belongs to
-   * @param inputs                inputs into this multirel join
+   * @param inputs                inputs into this multi-join
    * @param joinFilter            join filter applicable to this join node
    * @param rowType               row type of the join result of this node
    * @param isFullOuterJoin       true if the join is a full outer join
@@ -75,7 +83,7 @@ public final class MultiJoinRel extends AbstractRelNode {
    *                              the input #
    * @param postJoinFilter        filter to be applied after the joins are
    */
-  public MultiJoinRel(
+  public MultiJoin(
       RelOptCluster cluster,
       List<RelNode> inputs,
       RexNode joinFilter,
@@ -108,7 +116,7 @@ public final class MultiJoinRel extends AbstractRelNode {
 
   @Override public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new MultiJoinRel(
+    return new MultiJoin(
         getCluster(),
         inputs,
         joinFilter,
@@ -170,20 +178,19 @@ public final class MultiJoinRel extends AbstractRelNode {
     return inputs;
   }
 
-  @Override
-  public List<RexNode> getChildExps() {
+  @Override public List<RexNode> getChildExps() {
     return ImmutableList.of(joinFilter);
   }
 
   /**
-   * @return join filters associated with this MultiJoinRel
+   * @return join filters associated with this MultiJoin
    */
   public RexNode getJoinFilter() {
     return joinFilter;
   }
 
   /**
-   * @return true if the MultiJoinRel corresponds to a full outer join.
+   * @return true if the MultiJoin corresponds to a full outer join.
    */
   public boolean isFullOuterJoin() {
     return isFullOuterJoin;
@@ -228,7 +235,7 @@ public final class MultiJoinRel extends AbstractRelNode {
   }
 
   /**
-   * @return post-join filter associated with this MultiJoinRel
+   * @return post-join filter associated with this MultiJoin
    */
   public RexNode getPostJoinFilter() {
     return postJoinFilter;
@@ -244,4 +251,4 @@ public final class MultiJoinRel extends AbstractRelNode {
   }
 }
 
-// End MultiJoinRel.java
+// End MultiJoin.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinOptimizeBushyRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinOptimizeBushyRule.java b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinOptimizeBushyRule.java
index 007e49e..62eef89 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinOptimizeBushyRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinOptimizeBushyRule.java
@@ -14,7 +14,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+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.prepare.CalcitePrepareImpl;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rel.metadata.RelMdUtil;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexPermuteInputsShuttle;
+import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.rex.RexVisitor;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.Pair;
+import org.apache.calcite.util.Util;
+import org.apache.calcite.util.mapping.Mappings;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
 
 import java.io.PrintWriter;
 import java.util.BitSet;
@@ -22,30 +46,15 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.rel.metadata.RelMdUtil;
-import org.eigenbase.rel.metadata.RelMetadataQuery;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.util.Pair;
-import org.eigenbase.util.Util;
-import org.eigenbase.util.mapping.Mappings;
-
-import net.hydromatic.optiq.prepare.OptiqPrepareImpl;
-import net.hydromatic.optiq.util.BitSets;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-
 /**
  * Planner rule that finds an approximately optimal ordering for join operators
  * using a heuristic algorithm.
  *
- * <p>It is triggered by the pattern {@link ProjectRel} ({@link MultiJoinRel}).
+ * <p>It is triggered by the pattern
+ * {@link org.apache.calcite.rel.logical.LogicalProject} ({@link MultiJoin}).
  *
- * <p>It is similar to {@link org.eigenbase.rel.rules.LoptOptimizeJoinRule}.
+ * <p>It is similar to
+ * {@link org.apache.calcite.rel.rules.LoptOptimizeJoinRule}.
  * {@code LoptOptimizeJoinRule} is only capable of producing left-deep joins;
  * this rule is capable of producing bushy joins.
  *
@@ -57,26 +66,26 @@ import com.google.common.collect.Lists;
  *       e.g. {@code t0.c1 = t1.c1 and t1.c2 = t0.c3}
  * </ol>
  */
-public class OptimizeBushyJoinRule extends RelOptRule {
-  public static final OptimizeBushyJoinRule INSTANCE =
-      new OptimizeBushyJoinRule(RelFactories.DEFAULT_JOIN_FACTORY,
+public class MultiJoinOptimizeBushyRule extends RelOptRule {
+  public static final MultiJoinOptimizeBushyRule INSTANCE =
+      new MultiJoinOptimizeBushyRule(RelFactories.DEFAULT_JOIN_FACTORY,
           RelFactories.DEFAULT_PROJECT_FACTORY);
 
   private final RelFactories.JoinFactory joinFactory;
   private final RelFactories.ProjectFactory projectFactory;
   private final PrintWriter pw =
-      OptiqPrepareImpl.DEBUG ? new PrintWriter(System.out, true) : null;
+      CalcitePrepareImpl.DEBUG ? new PrintWriter(System.out, true) : null;
 
-  /** Creates an OptimizeBushyJoinRule. */
-  public OptimizeBushyJoinRule(RelFactories.JoinFactory joinFactory,
+  /** Creates an MultiJoinOptimizeBushyRule. */
+  public MultiJoinOptimizeBushyRule(RelFactories.JoinFactory joinFactory,
       RelFactories.ProjectFactory projectFactory) {
-    super(operand(MultiJoinRel.class, any()));
+    super(operand(MultiJoin.class, any()));
     this.joinFactory = joinFactory;
     this.projectFactory = projectFactory;
   }
 
   @Override public void onMatch(RelOptRuleCall call) {
-    final MultiJoinRel multiJoinRel = call.rel(0);
+    final MultiJoin multiJoinRel = call.rel(0);
     final RexBuilder rexBuilder = multiJoinRel.getCluster().getRexBuilder();
 
     final LoptMultiJoin multiJoin = new LoptMultiJoin(multiJoinRel);
@@ -369,4 +378,4 @@ public class OptimizeBushyJoinRule extends RelOptRule {
   }
 }
 
-// End OptimizeBushyJoinRule.java
+// End MultiJoinOptimizeBushyRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
index a23f57b..4feb04e 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/MultiJoinProjectTransposeRule.java
@@ -14,19 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelOptRuleOperand;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.logical.LogicalJoin;
+import org.apache.calcite.rel.logical.LogicalProject;
 
 /**
- * PullUpProjectsOnTopOfMultiJoinRule implements the rule for pulling {@link
- * ProjectRel}s that are on top of a {@link MultiJoinRel} and beneath a {@link
- * JoinRel} so the {@link ProjectRel} appears above the {@link JoinRel}. In the
- * process of doing so, also save away information about the respective fields
- * that are referenced in the expressions in the {@link ProjectRel} we're
- * pulling up, as well as the join condition, in the resultant {@link
- * MultiJoinRel}s
+ * MultiJoinProjectTransposeRule implements the rule for pulling
+ * {@link org.apache.calcite.rel.logical.LogicalProject}s that are on top of a
+ * {@link MultiJoin} and beneath a
+ * {@link org.apache.calcite.rel.logical.LogicalJoin} so the
+ * {@link org.apache.calcite.rel.logical.LogicalProject} appears above the
+ * {@link org.apache.calcite.rel.logical.LogicalJoin}.
+ *
+ * <p>In the process of doing
+ * so, also save away information about the respective fields that are
+ * referenced in the expressions in the
+ * {@link org.apache.calcite.rel.logical.LogicalProject} we're pulling up, as
+ * well as the join condition, in the resultant {@link MultiJoin}s
  *
  * <p>For example, if we have the following subselect:
  *
@@ -34,49 +43,48 @@ import org.eigenbase.relopt.*;
  *      (select X.x1, Y.y1 from X, Y
  *          where X.x2 = Y.y2 and X.x3 = 1 and Y.y3 = 2)</pre>
  *
- * <p>The {@link MultiJoinRel} associated with (X, Y) associates x1 with X and
+ * <p>The {@link MultiJoin} associated with (X, Y) associates x1 with X and
  * y1 with Y. Although x3 and y3 need to be read due to the filters, they are
  * not required after the row scan has completed and therefore are not saved.
  * The join fields, x2 and y2, are also tracked separately.
  *
- * <p>Note that by only pulling up projects that are on top of {@link
- * MultiJoinRel}s, we preserve projections on top of row scans.
+ * <p>Note that by only pulling up projects that are on top of
+ * {@link MultiJoin}s, we preserve projections on top of row scans.
  *
- * <p>See the superclass for details on restrictions regarding which {@link
- * ProjectRel}s cannot be pulled.
+ * <p>See the superclass for details on restrictions regarding which
+ * {@link org.apache.calcite.rel.logical.LogicalProject}s cannot be pulled.
  */
-public class PullUpProjectsOnTopOfMultiJoinRule
-    extends PullUpProjectsAboveJoinRule {
+public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule {
   //~ Static fields/initializers ---------------------------------------------
 
-  public static final PullUpProjectsOnTopOfMultiJoinRule MULTI_BOTH_PROJECT =
-      new PullUpProjectsOnTopOfMultiJoinRule(
-          operand(JoinRel.class,
-              operand(ProjectRel.class,
-                  operand(MultiJoinRel.class, any())),
-              operand(ProjectRel.class,
-                  operand(MultiJoinRel.class, any()))),
-          "PullUpProjectsOnTopOfMultiJoinRule: with two ProjectRel children");
+  public static final MultiJoinProjectTransposeRule MULTI_BOTH_PROJECT =
+      new MultiJoinProjectTransposeRule(
+          operand(LogicalJoin.class,
+              operand(LogicalProject.class,
+                  operand(MultiJoin.class, any())),
+              operand(LogicalProject.class,
+                  operand(MultiJoin.class, any()))),
+          "MultiJoinProjectTransposeRule: with two LogicalProject children");
 
-  public static final PullUpProjectsOnTopOfMultiJoinRule MULTI_LEFT_PROJECT =
-      new PullUpProjectsOnTopOfMultiJoinRule(
-          operand(JoinRel.class,
+  public static final MultiJoinProjectTransposeRule MULTI_LEFT_PROJECT =
+      new MultiJoinProjectTransposeRule(
+          operand(LogicalJoin.class,
               some(
-                  operand(ProjectRel.class,
-                      operand(MultiJoinRel.class, any())))),
-          "PullUpProjectsOnTopOfMultiJoinRule: with ProjectRel on left");
+                  operand(LogicalProject.class,
+                      operand(MultiJoin.class, any())))),
+          "MultiJoinProjectTransposeRule: with LogicalProject on left");
 
-  public static final PullUpProjectsOnTopOfMultiJoinRule MULTI_RIGHT_PROJECT =
-      new PullUpProjectsOnTopOfMultiJoinRule(
-          operand(JoinRel.class,
+  public static final MultiJoinProjectTransposeRule MULTI_RIGHT_PROJECT =
+      new MultiJoinProjectTransposeRule(
+          operand(LogicalJoin.class,
               operand(RelNode.class, any()),
-              operand(ProjectRel.class,
-                  operand(MultiJoinRel.class, any()))),
-          "PullUpProjectsOnTopOfMultiJoinRule: with ProjectRel on right");
+              operand(LogicalProject.class,
+                  operand(MultiJoin.class, any()))),
+          "MultiJoinProjectTransposeRule: with LogicalProject on right");
 
   //~ Constructors -----------------------------------------------------------
 
-  public PullUpProjectsOnTopOfMultiJoinRule(
+  public MultiJoinProjectTransposeRule(
       RelOptRuleOperand operand,
       String description) {
     super(operand, description);
@@ -84,18 +92,18 @@ public class PullUpProjectsOnTopOfMultiJoinRule
 
   //~ Methods ----------------------------------------------------------------
 
-  // override PullUpProjectsAboveJoinRule
+  // override JoinProjectTransposeRule
   protected boolean hasLeftChild(RelOptRuleCall call) {
     return call.rels.length != 4;
   }
 
-  // override PullUpProjectsAboveJoinRule
+  // override JoinProjectTransposeRule
   protected boolean hasRightChild(RelOptRuleCall call) {
     return call.rels.length > 3;
   }
 
-  // override PullUpProjectsAboveJoinRule
-  protected ProjectRel getRightChild(RelOptRuleCall call) {
+  // override JoinProjectTransposeRule
+  protected LogicalProject getRightChild(RelOptRuleCall call) {
     if (call.rels.length == 4) {
       return call.rel(2);
     } else {
@@ -103,14 +111,14 @@ public class PullUpProjectsOnTopOfMultiJoinRule
     }
   }
 
-  // override PullUpProjectsAboveJoinRule
+  // override JoinProjectTransposeRule
   protected RelNode getProjectChild(
       RelOptRuleCall call,
-      ProjectRel project,
+      LogicalProject project,
       boolean leftChild) {
-    // locate the appropriate MultiJoinRel based on which rule was fired
+    // locate the appropriate MultiJoin based on which rule was fired
     // and which projection we're dealing with
-    MultiJoinRel multiJoin;
+    MultiJoin multiJoin;
     if (leftChild) {
       multiJoin = call.rel(2);
     } else if (call.rels.length == 4) {
@@ -119,10 +127,10 @@ public class PullUpProjectsOnTopOfMultiJoinRule
       multiJoin = call.rel(4);
     }
 
-    // create a new MultiJoinRel that reflects the columns in the projection
-    // above the MultiJoinRel
+    // create a new MultiJoin that reflects the columns in the projection
+    // above the MultiJoin
     return RelOptUtil.projectMultiJoin(multiJoin, project);
   }
 }
 
-// End PullUpProjectsOnTopOfMultiJoinRule.java
+// End MultiJoinProjectTransposeRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java
index 999b7fa..40f4aab 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectCalcMergeRule.java
@@ -14,42 +14,55 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import java.util.*;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.logical.LogicalCalc;
+import org.apache.calcite.rel.logical.LogicalProject;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexOver;
+import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.rex.RexProgramBuilder;
+import org.apache.calcite.util.Pair;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.util.Pair;
+import java.util.Collections;
 
 /**
- * Planner rule which merges a {@link ProjectRel} and a {@link CalcRel}. The
- * resulting {@link CalcRel} has the same project list as the original {@link
- * ProjectRel}, but expressed in terms of the original {@link CalcRel}'s inputs.
+ * Planner rule which merges a
+ * {@link org.apache.calcite.rel.logical.LogicalProject} and a
+ * {@link org.apache.calcite.rel.logical.LogicalCalc}.
  *
- * @see MergeFilterOntoCalcRule
+ * <p>The resulting {@link org.apache.calcite.rel.logical.LogicalCalc} has the
+ * same project list as the original
+ * {@link org.apache.calcite.rel.logical.LogicalProject}, but expressed in terms
+ * of the original {@link org.apache.calcite.rel.logical.LogicalCalc}'s inputs.
+ *
+ * @see FilterCalcMergeRule
  */
-public class MergeProjectOntoCalcRule extends RelOptRule {
+public class ProjectCalcMergeRule extends RelOptRule {
   //~ Static fields/initializers ---------------------------------------------
 
-  public static final MergeProjectOntoCalcRule INSTANCE =
-      new MergeProjectOntoCalcRule();
+  public static final ProjectCalcMergeRule INSTANCE =
+      new ProjectCalcMergeRule();
 
   //~ Constructors -----------------------------------------------------------
 
-  private MergeProjectOntoCalcRule() {
+  private ProjectCalcMergeRule() {
     super(
         operand(
-            ProjectRel.class,
-            operand(CalcRel.class, any())));
+            LogicalProject.class,
+            operand(LogicalCalc.class, any())));
   }
 
   //~ Methods ----------------------------------------------------------------
 
   public void onMatch(RelOptRuleCall call) {
-    final ProjectRel project = call.rel(0);
-    final CalcRel calc = call.rel(1);
+    final LogicalProject project = call.rel(0);
+    final LogicalCalc calc = call.rel(1);
 
     // Don't merge a project which contains windowed aggregates onto a
     // calc. That would effectively be pushing a windowed aggregate down
@@ -65,8 +78,8 @@ public class MergeProjectOntoCalcRule extends RelOptRule {
             project.getRowType(),
             cluster.getRexBuilder());
     if (RexOver.containsOver(program)) {
-      CalcRel projectAsCalc =
-          new CalcRel(
+      LogicalCalc projectAsCalc =
+          new LogicalCalc(
               cluster,
               project.getTraitSet(),
               calc,
@@ -95,11 +108,11 @@ public class MergeProjectOntoCalcRule extends RelOptRule {
             topProgram,
             bottomProgram,
             rexBuilder);
-    final CalcRel newCalc =
-        new CalcRel(
+    final LogicalCalc newCalc =
+        new LogicalCalc(
             cluster,
             project.getTraitSet(),
-            calc.getChild(),
+            calc.getInput(),
             project.getRowType(),
             mergedProgram,
             Collections.<RelCollation>emptyList());
@@ -107,4 +120,4 @@ public class MergeProjectOntoCalcRule extends RelOptRule {
   }
 }
 
-// End MergeProjectOntoCalcRule.java
+// End ProjectCalcMergeRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectFilterTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectFilterTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectFilterTransposeRule.java
index 70ba40e..0fb7918 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectFilterTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectFilterTransposeRule.java
@@ -14,19 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.logical.LogicalFilter;
+import org.apache.calcite.rel.logical.LogicalProject;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexOver;
 
 /**
- * PushProjectPastFilterRule implements the rule for pushing a projection past a
- * filter.
+ * Planner rule that pushes a {@link org.apache.calcite.rel.core.Project}
+ * past a {@link org.apache.calcite.rel.core.Filter}.
  */
-public class PushProjectPastFilterRule extends RelOptRule {
-  public static final PushProjectPastFilterRule INSTANCE =
-      new PushProjectPastFilterRule(PushProjector.ExprCondition.FALSE);
+public class ProjectFilterTransposeRule extends RelOptRule {
+  public static final ProjectFilterTransposeRule INSTANCE =
+      new ProjectFilterTransposeRule(PushProjector.ExprCondition.FALSE);
 
   //~ Instance fields --------------------------------------------------------
 
@@ -38,17 +42,17 @@ public class PushProjectPastFilterRule extends RelOptRule {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a PushProjectPastFilterRule.
+   * Creates a ProjectFilterTransposeRule.
    *
    * @param preserveExprCondition Condition for expressions that should be
    *                              preserved in the projection
    */
-  private PushProjectPastFilterRule(
+  private ProjectFilterTransposeRule(
       PushProjector.ExprCondition preserveExprCondition) {
     super(
         operand(
-            ProjectRel.class,
-            operand(FilterRel.class, any())));
+            LogicalProject.class,
+            operand(LogicalFilter.class, any())));
     this.preserveExprCondition = preserveExprCondition;
   }
 
@@ -56,18 +60,18 @@ public class PushProjectPastFilterRule extends RelOptRule {
 
   // implement RelOptRule
   public void onMatch(RelOptRuleCall call) {
-    ProjectRel origProj;
-    FilterRel filterRel;
+    LogicalProject origProj;
+    LogicalFilter filter;
 
     if (call.rels.length == 2) {
       origProj = call.rel(0);
-      filterRel = call.rel(1);
+      filter = call.rel(1);
     } else {
       origProj = null;
-      filterRel = call.rel(0);
+      filter = call.rel(0);
     }
-    RelNode rel = filterRel.getChild();
-    RexNode origFilter = filterRel.getCondition();
+    RelNode rel = filter.getInput();
+    RexNode origFilter = filter.getCondition();
 
     if ((origProj != null)
         && RexOver.containsOver(origProj.getProjects(), null)) {
@@ -90,4 +94,4 @@ public class PushProjectPastFilterRule extends RelOptRule {
   }
 }
 
-// End PushProjectPastFilterRule.java
+// End ProjectFilterTransposeRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java
index 9d6eddb..5379110 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectJoinTransposeRule.java
@@ -14,23 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import java.util.*;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Join;
+import org.apache.calcite.rel.logical.LogicalProject;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexNode;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- * PushProjectPastJoinRule implements the rule for pushing a projection past a
- * join by splitting the projection into a projection on top of each child of
+ * Planner rule that pushes a {@link org.apache.calcite.rel.core.Project}
+ * past a {@link org.apache.calcite.rel.core.Join}
+ * by splitting the projection into a projection on top of each child of
  * the join.
  */
-public class PushProjectPastJoinRule extends RelOptRule {
-  public static final PushProjectPastJoinRule INSTANCE =
-      new PushProjectPastJoinRule(PushProjector.ExprCondition.FALSE);
+public class ProjectJoinTransposeRule extends RelOptRule {
+  public static final ProjectJoinTransposeRule INSTANCE =
+      new ProjectJoinTransposeRule(PushProjector.ExprCondition.FALSE);
 
   //~ Instance fields --------------------------------------------------------
 
@@ -42,16 +47,16 @@ public class PushProjectPastJoinRule extends RelOptRule {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a PushProjectPastJoinRule with an explicit condition.
+   * Creates a ProjectJoinTransposeRule with an explicit condition.
    *
    * @param preserveExprCondition Condition for expressions that should be
    *                              preserved in the projection
    */
-  private PushProjectPastJoinRule(
+  private ProjectJoinTransposeRule(
       PushProjector.ExprCondition preserveExprCondition) {
     super(
-        operand(ProjectRel.class,
-            operand(JoinRelBase.class, any())));
+        operand(LogicalProject.class,
+            operand(Join.class, any())));
     this.preserveExprCondition = preserveExprCondition;
   }
 
@@ -59,8 +64,8 @@ public class PushProjectPastJoinRule extends RelOptRule {
 
   // implement RelOptRule
   public void onMatch(RelOptRuleCall call) {
-    ProjectRel origProj = call.rel(0);
-    final JoinRelBase join = call.rel(1);
+    LogicalProject origProj = call.rel(0);
+    final Join join = call.rel(1);
 
     // locate all fields referenced in the projection and join condition;
     // determine which inputs are referenced in the projection and
@@ -109,7 +114,7 @@ public class PushProjectPastJoinRule extends RelOptRule {
     }
 
     // create a new join with the projected children
-    JoinRelBase newJoinRel =
+    Join newJoinRel =
         join.copy(
             join.getTraitSet(),
             newJoinFilter,
@@ -127,4 +132,4 @@ public class PushProjectPastJoinRule extends RelOptRule {
   }
 }
 
-// End PushProjectPastJoinRule.java
+// End ProjectJoinTransposeRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectMergeRule.java
index 78c67af..96559cf 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectMergeRule.java
@@ -14,30 +14,36 @@
  * 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.rel.RelFactories.ProjectFactory;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.util.Permutation;
+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.Project;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rel.core.RelFactories.ProjectFactory;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexLocalRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.rex.RexProgramBuilder;
+import org.apache.calcite.util.Permutation;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- * MergeProjectRule merges a {@link ProjectRelBase} into
- * another {@link ProjectRelBase},
+ * ProjectMergeRule merges a {@link org.apache.calcite.rel.core.Project} into
+ * another {@link org.apache.calcite.rel.core.Project},
  * provided the projects aren't projecting identical sets of input references.
  */
-public class MergeProjectRule extends RelOptRule {
-  public static final MergeProjectRule INSTANCE =
-      new MergeProjectRule();
+public class ProjectMergeRule extends RelOptRule {
+  public static final ProjectMergeRule INSTANCE = new ProjectMergeRule();
 
   //~ Instance fields --------------------------------------------------------
 
-  /**
-   * if true, always merge projects
-   */
+  /** Whether to always merge projects. */
   private final boolean force;
 
   private final ProjectFactory projectFactory;
@@ -45,22 +51,22 @@ public class MergeProjectRule extends RelOptRule {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a MergeProjectRule.
+   * Creates a ProjectMergeRule.
    */
-  private MergeProjectRule() {
+  private ProjectMergeRule() {
     this(false, RelFactories.DEFAULT_PROJECT_FACTORY);
   }
 
   /**
-   * Creates a MergeProjectRule, specifying whether to always merge projects.
+   * Creates a ProjectMergeRule, specifying whether to always merge projects.
    *
    * @param force Whether to always merge projects
    */
-  public MergeProjectRule(boolean force, ProjectFactory pFactory) {
+  public ProjectMergeRule(boolean force, ProjectFactory pFactory) {
     super(
-        operand(ProjectRelBase.class,
-            operand(ProjectRelBase.class, any())),
-        "MergeProjectRule" + (force ? ": force mode" : ""));
+        operand(Project.class,
+            operand(Project.class, any())),
+        "ProjectMergeRule" + (force ? ": force mode" : ""));
     this.force = force;
     projectFactory = pFactory;
   }
@@ -69,8 +75,8 @@ public class MergeProjectRule extends RelOptRule {
 
   // implement RelOptRule
   public void onMatch(RelOptRuleCall call) {
-    ProjectRelBase topProject = call.rel(0);
-    ProjectRelBase bottomProject = call.rel(1);
+    Project topProject = call.rel(0);
+    Project bottomProject = call.rel(1);
     RexBuilder rexBuilder = topProject.getCluster().getRexBuilder();
 
     // If one or both projects are permutations, short-circuit the complex logic
@@ -78,18 +84,18 @@ public class MergeProjectRule extends RelOptRule {
     final Permutation topPermutation = topProject.getPermutation();
     if (topPermutation != null) {
       if (topPermutation.isIdentity()) {
-        // Let RemoveTrivialProjectRule handle this.
+        // Let ProjectRemoveRule handle this.
         return;
       }
       final Permutation bottomPermutation = bottomProject.getPermutation();
       if (bottomPermutation != null) {
         if (bottomPermutation.isIdentity()) {
-          // Let RemoveTrivialProjectRule handle this.
+          // Let ProjectRemoveRule handle this.
           return;
         }
         final Permutation product = topPermutation.product(bottomPermutation);
         call.transformTo(
-            RelOptUtil.projectMapping(bottomProject.getChild(),
+            RelOptUtil.projectMapping(bottomProject.getInput(),
                 product.inverse(), topProject.getRowType().getFieldNames(),
                 projectFactory));
         return;
@@ -98,7 +104,7 @@ public class MergeProjectRule extends RelOptRule {
 
     // if we're not in force mode and the two projects reference identical
     // inputs, then return and either let FennelRenameRule or
-    // RemoveTrivialProjectRule replace the projects
+    // ProjectRemoveRule replace the projects
     if (!force) {
       if (RelOptUtil.checkProjAndChildInputs(topProject, false)) {
         return;
@@ -108,7 +114,7 @@ public class MergeProjectRule extends RelOptRule {
     // create a RexProgram for the bottom project
     RexProgram bottomProgram =
         RexProgram.create(
-            bottomProject.getChild().getRowType(),
+            bottomProject.getInput().getRowType(),
             bottomProject.getProjects(),
             null,
             bottomProject.getRowType(),
@@ -142,11 +148,11 @@ public class MergeProjectRule extends RelOptRule {
 
     // replace the two projects with a combined projection
     RelNode newProjectRel = projectFactory.createProject(
-        bottomProject.getChild(), newProjExprs,
+        bottomProject.getInput(), newProjExprs,
         topProject.getRowType().getFieldNames());
 
     call.transformTo(newProjectRel);
   }
 }
 
-// End MergeProjectRule.java
+// End ProjectMergeRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java
index fd300c9..065738e 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectMultiJoinMergeRule.java
@@ -14,37 +14,42 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.logical.LogicalProject;
 
 /**
- * PushProjectIntoMultiJoinRule implements the rule for pushing projection
- * information from a {@link ProjectRel} into the {@link MultiJoinRel} that is
- * input into the {@link ProjectRel}.
+ * Planner rule that pushes
+ * {@link org.apache.calcite.rel.core.Project}
+ * into a {@link MultiJoin},
+ * creating a richer {@code MultiJoin}.
+ *
+ * @see org.apache.calcite.rel.rules.FilterMultiJoinMergeRule
  */
-public class PushProjectIntoMultiJoinRule extends RelOptRule {
-  public static final PushProjectIntoMultiJoinRule INSTANCE =
-      new PushProjectIntoMultiJoinRule();
+public class ProjectMultiJoinMergeRule extends RelOptRule {
+  public static final ProjectMultiJoinMergeRule INSTANCE =
+      new ProjectMultiJoinMergeRule();
 
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a PushProjectIntoMultiJoinRule.
+   * Creates a ProjectMultiJoinMergeRule.
    */
-  private PushProjectIntoMultiJoinRule() {
+  private ProjectMultiJoinMergeRule() {
     super(
         operand(
-            ProjectRel.class,
-            operand(MultiJoinRel.class, any())));
+            LogicalProject.class,
+            operand(MultiJoin.class, any())));
   }
 
   //~ Methods ----------------------------------------------------------------
 
   public void onMatch(RelOptRuleCall call) {
-    ProjectRel project = call.rel(0);
-    MultiJoinRel multiJoin = call.rel(1);
+    LogicalProject project = call.rel(0);
+    MultiJoin multiJoin = call.rel(1);
 
     // if all inputs have their projFields set, then projection information
     // has already been pushed into each input
@@ -59,12 +64,12 @@ public class PushProjectIntoMultiJoinRule extends RelOptRule {
       return;
     }
 
-    // create a new MultiJoinRel that reflects the columns in the projection
-    // above the MultiJoinRel
-    MultiJoinRel newMultiJoin =
+    // create a new MultiJoin that reflects the columns in the projection
+    // above the MultiJoin
+    MultiJoin newMultiJoin =
         RelOptUtil.projectMultiJoin(multiJoin, project);
-    ProjectRel newProject =
-        (ProjectRel) RelOptUtil.createProject(
+    LogicalProject newProject =
+        (LogicalProject) RelOptUtil.createProject(
             newMultiJoin,
             project.getProjects(),
             project.getRowType().getFieldNames());
@@ -73,4 +78,4 @@ public class PushProjectIntoMultiJoinRule extends RelOptRule {
   }
 }
 
-// End PushProjectIntoMultiJoinRule.java
+// End ProjectMultiJoinMergeRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
index c84098b..b74f532 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectRemoveRule.java
@@ -14,54 +14,58 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import java.util.List;
-
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexNode;
 
 import com.google.common.base.Predicate;
 
+import java.util.List;
+
 /**
- * Rule that, given a {@link ProjectRelBase} node that merely returns its input,
- * converts the node into its child.
+ * Planner rule that,
+ * given a {@link org.apache.calcite.rel.core.Project} node that
+ * merely returns its input, converts the node into its child.
  *
- * <p>For example, <code>ProjectRel(ArrayReader(a), {$input0})</code> becomes
+ * <p>For example, <code>Project(ArrayReader(a), {$input0})</code> becomes
  * <code>ArrayReader(a)</code>.</p>
  *
- * @see org.eigenbase.rel.rules.RemoveTrivialCalcRule
- * @see org.eigenbase.rel.rules.MergeProjectRule
+ * @see CalcRemoveRule
+ * @see ProjectMergeRule
  */
-public class RemoveTrivialProjectRule extends RelOptRule {
+public class ProjectRemoveRule extends RelOptRule {
   //~ Static fields/initializers ---------------------------------------------
 
-  private static final Predicate<ProjectRelBase> PREDICATE =
-      new Predicate<ProjectRelBase>() {
-        public boolean apply(ProjectRelBase input) {
+  private static final Predicate<Project> PREDICATE =
+      new Predicate<Project>() {
+        public boolean apply(Project input) {
           return isTrivial(input);
         }
       };
 
-  public static final RemoveTrivialProjectRule INSTANCE =
-      new RemoveTrivialProjectRule();
+  public static final ProjectRemoveRule INSTANCE = new ProjectRemoveRule();
 
   //~ Constructors -----------------------------------------------------------
 
-  private RemoveTrivialProjectRule() {
+  private ProjectRemoveRule() {
     // Create a specialized operand to detect non-matches early. This keeps
     // the rule queue short.
-    super(operand(ProjectRelBase.class, null, PREDICATE, any()));
+    super(operand(Project.class, null, PREDICATE, any()));
   }
 
   //~ Methods ----------------------------------------------------------------
 
   public void onMatch(RelOptRuleCall call) {
-    ProjectRelBase project = call.rel(0);
+    Project project = call.rel(0);
     assert isTrivial(project);
-    RelNode stripped = project.getChild();
+    RelNode stripped = project.getInput();
     RelNode child = call.getPlanner().register(stripped, project);
     call.transformTo(child);
   }
@@ -70,12 +74,12 @@ public class RemoveTrivialProjectRule extends RelOptRule {
    * Returns the child of a project if the project is trivial, otherwise
    * the project itself.
    */
-  public static RelNode strip(ProjectRelBase project) {
-    return isTrivial(project) ? project.getChild() : project;
+  public static RelNode strip(Project project) {
+    return isTrivial(project) ? project.getInput() : project;
   }
 
-  public static boolean isTrivial(ProjectRelBase project) {
-    RelNode child = project.getChild();
+  public static boolean isTrivial(Project project) {
+    RelNode child = project.getInput();
     final RelDataType childRowType = child.getRowType();
     if (!childRowType.isStruct()) {
       return false;
@@ -83,19 +87,15 @@ public class RemoveTrivialProjectRule extends RelOptRule {
     if (!project.isBoxed()) {
       return false;
     }
-    if (!isIdentity(
-        project.getProjects(),
-        project.getRowType(),
+    if (!isIdentity(project.getProjects(), project.getRowType(),
         childRowType)) {
       return false;
     }
     return true;
   }
 
-  public static boolean isIdentity(
-      List<? extends RexNode> exps,
-      RelDataType rowType,
-      RelDataType childRowType) {
+  public static boolean isIdentity(List<? extends RexNode> exps,
+      RelDataType rowType, RelDataType childRowType) {
     List<RelDataTypeField> fields = rowType.getFieldList();
     List<RelDataTypeField> childFields = childRowType.getFieldList();
     int fieldCount = childFields.size();
@@ -119,4 +119,4 @@ public class RemoveTrivialProjectRule extends RelOptRule {
   }
 }
 
-// End RemoveTrivialProjectRule.java
+// End ProjectRemoveRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectSetOpTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectSetOpTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectSetOpTransposeRule.java
index 845deee..2647c5c 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectSetOpTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectSetOpTransposeRule.java
@@ -14,22 +14,30 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import java.util.*;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.SetOp;
+import org.apache.calcite.rel.logical.LogicalProject;
+import org.apache.calcite.rex.RexInputRef;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- * PushProjectPastSetOpRule implements the rule for pushing a {@link ProjectRel}
- * past a {@link SetOpRel}. The children of the {@link SetOpRel} will project
- * only the {@link RexInputRef}s referenced in the original {@link ProjectRel}.
+ * Planner rule that pushes
+ * a {@link org.apache.calcite.rel.logical.LogicalProject}
+ * past a {@link org.apache.calcite.rel.core.SetOp}.
+ *
+ * <p>The children of the {@code SetOp} will project
+ * only the {@link RexInputRef}s referenced in the original
+ * {@code LogicalProject}.
  */
-public class PushProjectPastSetOpRule extends RelOptRule {
-  public static final PushProjectPastSetOpRule INSTANCE =
-      new PushProjectPastSetOpRule(PushProjector.ExprCondition.FALSE);
+public class ProjectSetOpTransposeRule extends RelOptRule {
+  public static final ProjectSetOpTransposeRule INSTANCE =
+      new ProjectSetOpTransposeRule(PushProjector.ExprCondition.FALSE);
 
   //~ Instance fields --------------------------------------------------------
 
@@ -41,17 +49,17 @@ public class PushProjectPastSetOpRule extends RelOptRule {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a PushProjectPastSetOpRule with an explicit condition whether
+   * Creates a ProjectSetOpTransposeRule with an explicit condition whether
    * to preserve expressions.
    *
    * @param preserveExprCondition Condition whether to preserve expressions
    */
-  public PushProjectPastSetOpRule(
+  public ProjectSetOpTransposeRule(
       PushProjector.ExprCondition preserveExprCondition) {
     super(
         operand(
-            ProjectRel.class,
-            operand(SetOpRel.class, any())));
+            LogicalProject.class,
+            operand(SetOp.class, any())));
     this.preserveExprCondition = preserveExprCondition;
   }
 
@@ -59,17 +67,17 @@ public class PushProjectPastSetOpRule extends RelOptRule {
 
   // implement RelOptRule
   public void onMatch(RelOptRuleCall call) {
-    ProjectRel origProj = call.rel(0);
-    SetOpRel setOpRel = call.rel(1);
+    LogicalProject origProj = call.rel(0);
+    SetOp setOp = call.rel(1);
 
     // cannot push project past a distinct
-    if (!setOpRel.all) {
+    if (!setOp.all) {
       return;
     }
 
     // locate all fields referenced in the projection
     PushProjector pushProject =
-        new PushProjector(origProj, null, setOpRel, preserveExprCondition);
+        new PushProjector(origProj, null, setOp, preserveExprCondition);
     pushProject.locateAllRefs();
 
     List<RelNode> newSetOpInputs = new ArrayList<RelNode>();
@@ -80,10 +88,10 @@ public class PushProjectPastSetOpRule extends RelOptRule {
     // to try to keep expensive expressions above the join,
     // because UNION ALL does not have any filtering effect,
     // and it is the only operator this rule currently acts on
-    for (RelNode input : setOpRel.getInputs()) {
+    for (RelNode input : setOp.getInputs()) {
       // be lazy:  produce two ProjectRels, and let another rule
       // merge them (could probably just clone origProj instead?)
-      ProjectRel p =
+      LogicalProject p =
           pushProject.createProjectRefsAndExprs(
               input, true, false);
       newSetOpInputs.add(
@@ -91,11 +99,11 @@ public class PushProjectPastSetOpRule extends RelOptRule {
     }
 
     // create a new setop whose children are the ProjectRels created above
-    SetOpRel newSetOpRel =
-        setOpRel.copy(setOpRel.getTraitSet(), newSetOpInputs);
+    SetOp newSetOp =
+        setOp.copy(setOp.getTraitSet(), newSetOpInputs);
 
-    call.transformTo(newSetOpRel);
+    call.transformTo(newSetOp);
   }
 }
 
-// End PushProjectPastSetOpRule.java
+// End ProjectSetOpTransposeRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java
index 6803e3c..fe53113 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectSortTransposeRule.java
@@ -14,45 +14,50 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Sort;
+import org.apache.calcite.rel.logical.LogicalProject;
 
 import com.google.common.collect.ImmutableList;
 
 /**
- * Planner rule that pushes a {@link ProjectRel} past a {@link SortRel}.
+ * Planner rule that pushes
+ * a {@link org.apache.calcite.rel.logical.LogicalProject}
+ * past a {@link org.apache.calcite.rel.core.Sort}.
+ *
+ * @see org.apache.calcite.rel.rules.SortProjectTransposeRule
  */
-public class PushProjectPastSortRule extends RelOptRule {
-  public static final PushProjectPastSortRule INSTANCE =
-      new PushProjectPastSortRule();
+public class ProjectSortTransposeRule extends RelOptRule {
+  public static final ProjectSortTransposeRule INSTANCE =
+      new ProjectSortTransposeRule();
 
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a PushProjectPastSortRule.
+   * Creates a ProjectSortTransposeRule.
    */
-  private PushProjectPastSortRule() {
+  private ProjectSortTransposeRule() {
     super(
-        operand(
-            ProjectRel.class,
-            operand(SortRel.class, any())));
+        operand(LogicalProject.class,
+            operand(Sort.class, any())));
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  // implement RelOptRule
   public void onMatch(RelOptRuleCall call) {
-    ProjectRel project = call.rel(0);
-    SortRel sort = call.rel(1);
-    if (sort.getClass() != SortRel.class) {
+    LogicalProject project = call.rel(0);
+    Sort sort = call.rel(1);
+    if (sort.getClass() != Sort.class) {
       return;
     }
     RelNode newProject =
         project.copy(
-            project.getTraitSet(), ImmutableList.of(sort.getChild()));
-    final SortRel newSort =
+            project.getTraitSet(), ImmutableList.of(sort.getInput()));
+    final Sort newSort =
         sort.copy(
             sort.getTraitSet(),
             newProject,
@@ -63,4 +68,4 @@ public class PushProjectPastSortRule extends RelOptRule {
   }
 }
 
-// End PushProjectPastSortRule.java
+// End ProjectSortTransposeRule.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableRule.java b/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableRule.java
index 475edbb..785cc26 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/ProjectTableRule.java
@@ -14,43 +14,42 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.rules;
+package org.apache.calcite.rel.rules;
 
-import java.util.List;
-
-import org.eigenbase.rel.FilterRelBase;
-import org.eigenbase.rel.ProjectRelBase;
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.rel.TableAccessRelBase;
-import org.eigenbase.relopt.RelOptRule;
-import org.eigenbase.relopt.RelOptRuleCall;
-import org.eigenbase.relopt.RelOptRuleOperand;
-import org.eigenbase.relopt.RelOptTable;
-import org.eigenbase.relopt.RelOptUtil;
-import org.eigenbase.rex.RexBuilder;
-import org.eigenbase.rex.RexInputRef;
-import org.eigenbase.rex.RexLocalRef;
-import org.eigenbase.rex.RexNode;
-import org.eigenbase.rex.RexProgram;
-import org.eigenbase.rex.RexShuttle;
-
-import net.hydromatic.optiq.ProjectableFilterableTable;
-import net.hydromatic.optiq.rules.java.EnumerableRel;
-import net.hydromatic.optiq.rules.java.JavaRules;
+import org.apache.calcite.adapter.enumerable.EnumerableInterpreter;
+import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelOptRuleOperand;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelOptUtil;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Filter;
+import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.core.TableScan;
+import org.apache.calcite.rex.RexBuilder;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexLocalRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.rex.RexShuttle;
+import org.apache.calcite.schema.ProjectableFilterableTable;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Lists;
 
+import java.util.List;
+
 /**
  * Planner rule that pushes a project into a scan of a
- * {@link net.hydromatic.optiq.ProjectableFilterableTable}.
+ * {@link org.apache.calcite.schema.ProjectableFilterableTable}.
  *
- * @see org.eigenbase.rel.rules.FilterTableRule
+ * @see org.apache.calcite.rel.rules.FilterTableRule
  */
 public abstract class ProjectTableRule extends RelOptRule {
-  private static final Predicate<TableAccessRelBase> PREDICATE =
-      new Predicate<TableAccessRelBase>() {
-        public boolean apply(TableAccessRelBase scan) {
+  private static final Predicate<TableScan> PREDICATE =
+      new Predicate<TableScan>() {
+        public boolean apply(TableScan scan) {
           // We can only push projects into a ProjectableFilterableTable.
           final RelOptTable table = scan.getTable();
           return table.unwrap(ProjectableFilterableTable.class) != null;
@@ -59,14 +58,14 @@ public abstract class ProjectTableRule extends RelOptRule {
 
   public static final ProjectTableRule INSTANCE =
       new ProjectTableRule(
-          operand(ProjectRelBase.class,
-              operand(JavaRules.EnumerableInterpreterRel.class,
-                  operand(TableAccessRelBase.class, null, PREDICATE, none()))),
+          operand(Project.class,
+              operand(EnumerableInterpreter.class,
+                  operand(TableScan.class, null, PREDICATE, none()))),
           "ProjectTableRule:basic") {
         @Override public void onMatch(RelOptRuleCall call) {
-          final ProjectRelBase project = call.rel(0);
-          final JavaRules.EnumerableInterpreterRel interpreter = call.rel(1);
-          final TableAccessRelBase scan = call.rel(2);
+          final Project project = call.rel(0);
+          final EnumerableInterpreter interpreter = call.rel(1);
+          final TableScan scan = call.rel(2);
           final RelOptTable table = scan.getTable();
           assert table.unwrap(ProjectableFilterableTable.class) != null;
           apply(call, project, null, interpreter);
@@ -75,17 +74,17 @@ public abstract class ProjectTableRule extends RelOptRule {
 
   public static final ProjectTableRule INSTANCE2 =
       new ProjectTableRule(
-          operand(ProjectRelBase.class,
-              operand(FilterRelBase.class,
-                  operand(JavaRules.EnumerableInterpreterRel.class,
-                      operand(TableAccessRelBase.class, null, PREDICATE,
+          operand(Project.class,
+              operand(Filter.class,
+                  operand(EnumerableInterpreter.class,
+                      operand(TableScan.class, null, PREDICATE,
                           none())))),
           "ProjectTableRule:filter") {
         @Override public void onMatch(RelOptRuleCall call) {
-          final ProjectRelBase project = call.rel(0);
-          final FilterRelBase filter = call.rel(1);
-          final JavaRules.EnumerableInterpreterRel interpreter = call.rel(2);
-          final TableAccessRelBase scan = call.rel(3);
+          final Project project = call.rel(0);
+          final Filter filter = call.rel(1);
+          final EnumerableInterpreter interpreter = call.rel(2);
+          final TableScan scan = call.rel(3);
           final RelOptTable table = scan.getTable();
           assert table.unwrap(ProjectableFilterableTable.class) != null;
           apply(call, project, filter, interpreter);
@@ -101,8 +100,8 @@ public abstract class ProjectTableRule extends RelOptRule {
 
   //~ Methods ----------------------------------------------------------------
 
-  protected void apply(RelOptRuleCall call, ProjectRelBase project,
-      FilterRelBase filter, JavaRules.EnumerableInterpreterRel interpreter) {
+  protected void apply(RelOptRuleCall call, Project project,
+      Filter filter, EnumerableInterpreter interpreter) {
     // Split the projects into column references and expressions on top of them.
     // Creating a RexProgram is a convenient way to do this.
     final RexBuilder rexBuilder = project.getCluster().getRexBuilder();
@@ -142,7 +141,7 @@ public abstract class ProjectTableRule extends RelOptRule {
       }
     }
 
-    RelNode input = interpreter.getChild();
+    RelNode input = interpreter.getInput();
     if (filter != null) {
       input = RelOptUtil.createFilter(input, filter.getCondition(),
           EnumerableRel.FILTER_FACTORY);
@@ -151,7 +150,7 @@ public abstract class ProjectTableRule extends RelOptRule {
         RelOptUtil.createProject(EnumerableRel.PROJECT_FACTORY, input,
             projectOrdinals);
     final RelNode newInterpreter =
-        new JavaRules.EnumerableInterpreterRel(interpreter.getCluster(),
+        new EnumerableInterpreter(interpreter.getCluster(),
             interpreter.getTraitSet(), newProject, 0.15d);
     final RelNode residue;
     if (extraProjects != null) {