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

[36/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/externalize/RelJson.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/externalize/RelJson.java b/core/src/main/java/org/apache/calcite/rel/externalize/RelJson.java
index 1b4d76f..4c77805 100644
--- a/core/src/main/java/org/apache/calcite/rel/externalize/RelJson.java
+++ b/core/src/main/java/org/apache/calcite/rel/externalize/RelJson.java
@@ -14,29 +14,49 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.externalize;
+
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelCollationImpl;
+import org.apache.calcite.rel.RelFieldCollation;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.AggregateCall;
+import org.apache.calcite.rel.core.Correlation;
+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.RexCorrelVariable;
+import org.apache.calcite.rex.RexFieldAccess;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.sql.SqlAggFunction;
+import org.apache.calcite.sql.SqlFunction;
+import org.apache.calcite.sql.SqlOperator;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.sql.type.SqlTypeName;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.JsonBuilder;
+import org.apache.calcite.util.Util;
+
+import com.google.common.collect.ImmutableList;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
-import java.util.*;
-
-import org.eigenbase.relopt.RelOptCluster;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.SqlFunction;
-import org.eigenbase.sql.SqlOperator;
-import org.eigenbase.sql.fun.SqlStdOperatorTable;
-import org.eigenbase.sql.type.SqlTypeName;
-import org.eigenbase.util.JsonBuilder;
-import org.eigenbase.util.Util;
-
-import net.hydromatic.optiq.util.BitSets;
-
-import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
- * Utilities for converting {@link RelNode} into JSON format.
+ * Utilities for converting {@link org.apache.calcite.rel.RelNode}
+ * into JSON format.
  */
 public class RelJson {
   private final Map<String, Constructor> constructorMap =
@@ -45,9 +65,11 @@ public class RelJson {
 
   public static final List<String> PACKAGES =
       ImmutableList.of(
-          "org.eigenbase.rel.",
-          "net.hydromatic.optiq.impl.jdbc.",
-          "net.hydromatic.optiq.impl.jdbc.JdbcRules$");
+          "org.apache.calcite.rel.",
+          "org.apache.calcite.rel.core.",
+          "org.apache.calcite.rel.logical.",
+          "org.apache.calcite.adapter.jdbc.",
+          "org.apache.calcite.adapter.jdbc.JdbcRules$");
 
   public RelJson(JsonBuilder jsonBuilder) {
     this.jsonBuilder = jsonBuilder;
@@ -81,9 +103,8 @@ public class RelJson {
         //noinspection unchecked
         constructor = clazz.getConstructor(RelInput.class);
       } catch (NoSuchMethodException e) {
-        throw new RuntimeException(
-            "class does not have required constructor, " + clazz
-            + "(RelInput)");
+        throw new RuntimeException("class does not have required constructor, "
+            + clazz + "(RelInput)");
       }
       constructorMap.put(type, constructor);
     }
@@ -91,8 +112,8 @@ public class RelJson {
   }
 
   /**
-   * Converts a type name to a class. E.g. {@code getClass("ProjectRel")}
-   * returns {@link org.eigenbase.rel.ProjectRel}.class.
+   * Converts a type name to a class. E.g. {@code getClass("LogicalProject")}
+   * returns {@link org.apache.calcite.rel.logical.LogicalProject}.class.
    */
   public Class typeNameToClass(String type) {
     if (!type.contains(".")) {
@@ -436,8 +457,8 @@ public class RelJson {
     return null;
   }
 
-  Aggregation toAggregation(String agg, Map<String, Object> map) {
-    return (Aggregation) toOp(agg, map);
+  SqlAggFunction toAggregation(String agg, Map<String, Object> map) {
+    return (SqlAggFunction) toOp(agg, map);
   }
 
   private String toJson(SqlOperator operator) {

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonReader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonReader.java b/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonReader.java
index b99dd1f..8e20b7f 100644
--- a/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonReader.java
+++ b/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonReader.java
@@ -14,32 +14,45 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
-
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.*;
-
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.util.Pair;
-import org.eigenbase.util.Util;
-
-import net.hydromatic.optiq.Schema;
-import net.hydromatic.optiq.util.BitSets;
+package org.apache.calcite.rel.externalize;
+
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptSchema;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.AggregateCall;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.schema.Schema;
+import org.apache.calcite.sql.SqlAggFunction;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.Pair;
+import org.apache.calcite.util.Util;
 
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import com.google.common.collect.ImmutableList;
 
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Reads a JSON plan and converts it back to a tree of relational expressions.
  *
- * @see org.eigenbase.rel.RelInput
+ * @see org.apache.calcite.rel.RelInput
  */
 public class RelJsonReader {
   private static final TypeReference<LinkedHashMap<String, Object>> TYPE_REF =
@@ -175,14 +188,12 @@ public class RelJsonReader {
             (List<String>) get(fieldsTag);
         return cluster.getTypeFactory().createStructType(
             new AbstractList<Map.Entry<String, RelDataType>>() {
-              @Override
-              public Map.Entry<String, RelDataType> get(int index) {
+              @Override public Map.Entry<String, RelDataType> get(int index) {
                 return Pair.of(names.get(index),
                     expressionList.get(index).getType());
               }
 
-              @Override
-              public int size() {
+              @Override public int size() {
                 return names.size();
               }
             });
@@ -228,7 +239,8 @@ public class RelJsonReader {
 
   private AggregateCall toAggCall(Map<String, Object> jsonAggCall) {
     final String aggName = (String) jsonAggCall.get("agg");
-    final Aggregation aggregation = relJson.toAggregation(aggName, jsonAggCall);
+    final SqlAggFunction aggregation =
+        relJson.toAggregation(aggName, jsonAggCall);
     final Boolean distinct = (Boolean) jsonAggCall.get("distinct");
     final List<Integer> operands = (List<Integer>) jsonAggCall.get("operands");
     final RelDataType type =

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonWriter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonWriter.java b/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonWriter.java
index 4bef2ef..28981c8 100644
--- a/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonWriter.java
+++ b/core/src/main/java/org/apache/calcite/rel/externalize/RelJsonWriter.java
@@ -14,19 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.externalize;
 
-import java.util.*;
-
-import org.eigenbase.sql.SqlExplainLevel;
-import org.eigenbase.util.*;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.sql.SqlExplainLevel;
+import org.apache.calcite.util.JsonBuilder;
+import org.apache.calcite.util.Pair;
 
 import com.google.common.collect.ImmutableList;
 
+import java.util.ArrayList;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Callback for a relational expression to dump itself as JSON.
  *
- * @see org.eigenbase.rel.RelJsonReader
+ * @see RelJsonReader
  */
 public class RelJsonWriter implements RelWriter {
   //~ Instance fields ----------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/externalize/RelWriterImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/externalize/RelWriterImpl.java b/core/src/main/java/org/apache/calcite/rel/externalize/RelWriterImpl.java
index 7262d56..0bf5ffb 100644
--- a/core/src/main/java/org/apache/calcite/rel/externalize/RelWriterImpl.java
+++ b/core/src/main/java/org/apache/calcite/rel/externalize/RelWriterImpl.java
@@ -14,24 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.externalize;
 
-import java.io.PrintWriter;
-import java.util.*;
-
-import org.eigenbase.rel.metadata.*;
-import org.eigenbase.rex.*;
-import org.eigenbase.sql.*;
-import org.eigenbase.util.*;
-
-import net.hydromatic.linq4j.Ord;
-
-import net.hydromatic.optiq.runtime.Spacer;
+import org.apache.calcite.linq4j.Ord;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.runtime.Spacer;
+import org.apache.calcite.sql.SqlExplainLevel;
+import org.apache.calcite.util.Pair;
 
 import com.google.common.collect.ImmutableList;
 
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
- * Implementation of {@link org.eigenbase.rel.RelWriter}.
+ * Implementation of {@link org.apache.calcite.rel.RelWriter}.
  */
 public class RelWriterImpl implements RelWriter {
   //~ Instance fields --------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/externalize/RelXmlWriter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/externalize/RelXmlWriter.java b/core/src/main/java/org/apache/calcite/rel/externalize/RelXmlWriter.java
index 2108f6b..50e5381 100644
--- a/core/src/main/java/org/apache/calcite/rel/externalize/RelXmlWriter.java
+++ b/core/src/main/java/org/apache/calcite/rel/externalize/RelXmlWriter.java
@@ -14,14 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.externalize;
 
-import java.io.*;
-import java.util.*;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.sql.SqlExplainLevel;
+import org.apache.calcite.util.Pair;
+import org.apache.calcite.util.XmlOutput;
 
-import org.eigenbase.sql.*;
-import org.eigenbase.util.Pair;
-import org.eigenbase.util.XmlOutput;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Callback for a relational expression to dump in XML format.

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/externalize/package-info.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/externalize/package-info.java b/core/src/main/java/org/apache/calcite/rel/externalize/package-info.java
new file mode 100644
index 0000000..d5897ff
--- /dev/null
+++ b/core/src/main/java/org/apache/calcite/rel/externalize/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+
+/**
+ * Facilities to externalize {@link org.apache.calcite.rel.RelNode}s to and from
+ * XML and JSON format.
+ */
+package org.apache.calcite.rel.externalize;
+
+// End package-info.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/jdbc/package-info.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/jdbc/package-info.java b/core/src/main/java/org/apache/calcite/rel/jdbc/package-info.java
index c851a88..877c848 100644
--- a/core/src/main/java/org/apache/calcite/rel/jdbc/package-info.java
+++ b/core/src/main/java/org/apache/calcite/rel/jdbc/package-info.java
@@ -19,6 +19,6 @@
  * Contains query transformation rules relating to generating SQL for
  * foreign JDBC databases.
  */
-package org.eigenbase.rel.jdbc;
+package org.apache.calcite.rel.jdbc;
 
 // End package-info.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalAggregate.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalAggregate.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalAggregate.java
index 0e9c959..198f242 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalAggregate.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalAggregate.java
@@ -14,36 +14,44 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-import java.util.*;
+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.RelShuttle;
+import org.apache.calcite.rel.core.Aggregate;
+import org.apache.calcite.rel.core.AggregateCall;
 
-import org.eigenbase.relopt.*;
+import java.util.BitSet;
+import java.util.List;
 
 /**
- * <code>AggregateRel</code> is a relational operator which eliminates
+ * <code>LogicalAggregate</code> is a relational operator which eliminates
  * duplicates and computes totals.
  *
  * <p>Rules:
  *
  * <ul>
- * <li>{@link org.eigenbase.rel.rules.PullConstantsThroughAggregatesRule}
- * <li>{@link org.eigenbase.rel.rules.RemoveDistinctAggregateRule}
- * <li>{@link org.eigenbase.rel.rules.ReduceAggregatesRule}.
+ * <li>{@link org.apache.calcite.rel.rules.AggregateProjectPullUpConstantsRule}
+ * <li>{@link org.apache.calcite.rel.rules.AggregateExpandDistinctAggregatesRule}
+ * <li>{@link org.apache.calcite.rel.rules.AggregateReduceFunctionsRule}.
  * </ul>
  */
-public final class AggregateRel extends AggregateRelBase {
+public final class LogicalAggregate extends Aggregate {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates an AggregateRel.
+   * Creates a LogicalAggregate.
    *
    * @param cluster  Cluster that this relational expression belongs to
    * @param child    input relational expression
    * @param groupSet Bit set of grouping fields
    * @param aggCalls Array of aggregates to compute, not null
    */
-  public AggregateRel(
+  public LogicalAggregate(
       RelOptCluster cluster,
       RelNode child,
       BitSet groupSet,
@@ -57,18 +65,18 @@ public final class AggregateRel extends AggregateRelBase {
   }
 
   /**
-   * Creates an AggregateRel by parsing serialized output.
+   * Creates a LogicalAggregate by parsing serialized output.
    */
-  public AggregateRel(RelInput input) {
+  public LogicalAggregate(RelInput input) {
     super(input);
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  @Override public AggregateRel copy(RelTraitSet traitSet, RelNode input,
+  @Override public LogicalAggregate copy(RelTraitSet traitSet, RelNode input,
       BitSet groupSet, List<AggregateCall> aggCalls) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new AggregateRel(getCluster(), input, groupSet, aggCalls);
+    return new LogicalAggregate(getCluster(), input, groupSet, aggCalls);
   }
 
   @Override public RelNode accept(RelShuttle shuttle) {
@@ -76,4 +84,4 @@ public final class AggregateRel extends AggregateRelBase {
   }
 }
 
-// End AggregateRel.java
+// End LogicalAggregate.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalCalc.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalCalc.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalCalc.java
index ba0b650..3d74fab 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalCalc.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalCalc.java
@@ -14,41 +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.logical;
 
-import java.util.*;
+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.core.Calc;
+import org.apache.calcite.rel.rules.FilterToCalcRule;
+import org.apache.calcite.rel.rules.ProjectToCalcRule;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexProgram;
 
-import org.eigenbase.rel.rules.*;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
+import java.util.List;
+import java.util.Set;
 
 /**
  * A relational expression which computes project expressions and also filters.
  *
  * <p>This relational expression combines the functionality of
- * {@link ProjectRel} and {@link FilterRel}. It should be created in the later
- * stages of optimization, by merging consecutive {@link ProjectRel} and
- * {@link FilterRel} nodes together.
+ * {@link LogicalProject} and {@link LogicalFilter}.
+ * It should be created in the later
+ * stages of optimization, by merging consecutive {@link LogicalProject} and
+ * {@link LogicalFilter} nodes together.
  *
- * <p>The following rules relate to <code>CalcRel</code>:</p>
+ * <p>The following rules relate to <code>LogicalCalc</code>:</p>
  *
  * <ul>
- * <li>{@link FilterToCalcRule} creates this from a {@link FilterRel}</li>
- * <li>{@link ProjectToCalcRule} creates this from a {@link FilterRel}</li>
- * <li>{@link MergeFilterOntoCalcRule} merges this with a {@link FilterRel}</li>
- * <li>{@link MergeProjectOntoCalcRule} merges this with a
- *     {@link ProjectRel}</li>
- * <li>{@link MergeCalcRule} merges two CalcRels</li>
+ * <li>{@link FilterToCalcRule} creates this from a {@link LogicalFilter}
+ * <li>{@link ProjectToCalcRule} creates this from a {@link LogicalFilter}
+ * <li>{@link org.apache.calcite.rel.rules.FilterCalcMergeRule}
+ *     merges this with a {@link LogicalFilter}
+ * <li>{@link org.apache.calcite.rel.rules.ProjectCalcMergeRule}
+ *     merges this with a {@link LogicalProject}
+ * <li>{@link org.apache.calcite.rel.rules.CalcMergeRule}
+ *     merges two {@code LogicalCalc}s
  * </ul>
  */
-public final class CalcRel extends CalcRelBase {
+public final class LogicalCalc extends Calc {
   //~ Static fields/initializers ---------------------------------------------
 
   //~ Constructors -----------------------------------------------------------
 
-  /** Creates a CalcRel. */
-  public CalcRel(
+  /** Creates a LogicalCalc. */
+  public LogicalCalc(
       RelOptCluster cluster,
       RelTraitSet traits,
       RelNode child,
@@ -60,9 +71,9 @@ public final class CalcRel extends CalcRelBase {
 
   //~ Methods ----------------------------------------------------------------
 
-  @Override public CalcRelBase copy(RelTraitSet traitSet, RelNode child,
+  @Override public LogicalCalc copy(RelTraitSet traitSet, RelNode child,
       RexProgram program, List<RelCollation> collationList) {
-    return new CalcRel(getCluster(), traitSet, child,
+    return new LogicalCalc(getCluster(), traitSet, child,
         program.getOutputRowType(), program, collationList);
   }
 
@@ -76,4 +87,4 @@ public final class CalcRel extends CalcRelBase {
   }
 }
 
-// End CalcRel.java
+// End LogicalCalc.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalFilter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalFilter.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalFilter.java
index 2252e71..6766a78 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalFilter.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalFilter.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.logical;
 
-import org.eigenbase.relopt.*;
-import org.eigenbase.rex.*;
+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.RelShuttle;
+import org.apache.calcite.rel.core.Filter;
+import org.apache.calcite.rex.RexNode;
 
 /**
- * Relational expression that iterates over its input
- * and returns elements for which <code>condition</code> evaluates to
- * <code>true</code>.
- *
- * <p>If the condition allows nulls, then a null value is treated the same as
- * false.</p>
+ * Sub-class of {@link org.apache.calcite.rel.core.Filter}
+ * not targeted at any particular engine or calling convention.
  */
-public final class FilterRel extends FilterRelBase {
+public final class LogicalFilter extends Filter {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a filter.
+   * Creates a LogicalFilter.
    *
-   * @param cluster   {@link RelOptCluster}  this relational expression belongs
-   *                  to
-   * @param child     input relational expression
-   * @param condition boolean expression which determines whether a row is
+   * @param cluster   Cluster that this relational expression belongs to
+   * @param child     Input relational expression
+   * @param condition Boolean expression which determines whether a row is
    *                  allowed to pass
    */
-  public FilterRel(
+  public LogicalFilter(
       RelOptCluster cluster,
       RelNode child,
       RexNode condition) {
@@ -51,24 +52,23 @@ public final class FilterRel extends FilterRelBase {
   }
 
   /**
-   * Creates a FilterRel by parsing serialized output.
+   * Creates a LogicalFilter by parsing serialized output.
    */
-  public FilterRel(RelInput input) {
+  public LogicalFilter(RelInput input) {
     super(input);
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  public FilterRel copy(RelTraitSet traitSet, RelNode input,
+  public LogicalFilter copy(RelTraitSet traitSet, RelNode input,
       RexNode condition) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new FilterRel(getCluster(), input, condition);
+    return new LogicalFilter(getCluster(), input, condition);
   }
 
-  @Override
-  public RelNode accept(RelShuttle shuttle) {
+  @Override public RelNode accept(RelShuttle shuttle) {
     return shuttle.visit(this);
   }
 }
 
-// End FilterRel.java
+// End LogicalFilter.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalIntersect.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalIntersect.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalIntersect.java
index 8bc3f67..5147b73 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalIntersect.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalIntersect.java
@@ -14,21 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-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.RelShuttle;
+import org.apache.calcite.rel.core.Intersect;
 
-import org.eigenbase.relopt.*;
+import java.util.List;
 
 /**
- * <code>IntersectRel</code> returns the intersection of the rows of its inputs.
- * If "all" is true, then multiset intersection is performed; otherwise, set
- * intersection is performed (implying no duplicates in the results).
+ * Sub-class of {@link org.apache.calcite.rel.core.Intersect}
+ * not targeted at any particular engine or calling convention.
  */
-public final class IntersectRel extends IntersectRelBase {
+public final class LogicalIntersect extends Intersect {
   //~ Constructors -----------------------------------------------------------
 
-  public IntersectRel(
+  public LogicalIntersect(
       RelOptCluster cluster,
       List<RelNode> inputs,
       boolean all) {
@@ -39,29 +44,22 @@ public final class IntersectRel extends IntersectRelBase {
         all);
   }
 
-  /**
-   * Creates an IntersectRel by parsing serialized output.
-   */
-  public IntersectRel(RelInput input) {
+  /** Creates a LogicalIntersect by parsing serialized output. */
+  public LogicalIntersect(RelInput input) {
     super(input);
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  @Override
-  public IntersectRel copy(
-      RelTraitSet traitSet, List<RelNode> inputs, boolean all) {
+  @Override public LogicalIntersect copy(RelTraitSet traitSet,
+      List<RelNode> inputs, boolean all) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new IntersectRel(
-        getCluster(),
-        inputs,
-        all);
+    return new LogicalIntersect(getCluster(), inputs, all);
   }
 
-  @Override
-  public RelNode accept(RelShuttle shuttle) {
+  @Override public RelNode accept(RelShuttle shuttle) {
     return shuttle.visit(this);
   }
 }
 
-// End IntersectRel.java
+// End LogicalIntersect.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalJoin.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalJoin.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalJoin.java
index 8d06304..1dcea6f 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalJoin.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalJoin.java
@@ -14,30 +14,43 @@
  * 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.RelDataTypeField;
-import org.eigenbase.rex.*;
+package org.apache.calcite.rel.logical;
+
+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.RelShuttle;
+import org.apache.calcite.rel.RelWriter;
+import org.apache.calcite.rel.core.Join;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexNode;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 
+import java.util.List;
+import java.util.Set;
+
 /**
- * A JoinRel represents two relational expressions joined according to some
- * condition.
+ * Sub-class of {@link org.apache.calcite.rel.core.Join}
+ * not targeted at any particular engine or calling convention.
  *
  * <p>Some rules:
  *
- * <ul> <li>{@link org.eigenbase.rel.rules.ExtractJoinFilterRule} converts an
- * {@link JoinRel inner join} to a {@link FilterRel filter} on top of a {@link
- * JoinRel cartesian inner join}.  <li>{@code
- * net.sf.farrago.fennel.rel.FennelCartesianJoinRule} implements a JoinRel as a
- * cartesian product.  </ul>
+ * <ul>
+ * <li>{@link org.apache.calcite.rel.rules.JoinExtractFilterRule} converts an
+ * {@link LogicalJoin inner join} to a {@link LogicalFilter filter} on top of a
+ * {@link LogicalJoin cartesian inner join}.
+ *
+ * <li>{@code net.sf.farrago.fennel.rel.FennelCartesianJoinRule}
+ * implements a LogicalJoin as a cartesian product.
+ *
+ * </ul>
  */
-public final class JoinRel extends JoinRelBase {
+public final class LogicalJoin extends Join {
   //~ Instance fields --------------------------------------------------------
 
   // NOTE jvs 14-Mar-2006:  Normally we don't use state like this
@@ -50,7 +63,7 @@ public final class JoinRel extends JoinRelBase {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a JoinRel.
+   * Creates a LogicalJoin.
    *
    * @param cluster          Cluster
    * @param left             Left input
@@ -59,9 +72,9 @@ public final class JoinRel extends JoinRelBase {
    * @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
    */
-  public JoinRel(
+  public LogicalJoin(
       RelOptCluster cluster,
       RelNode left,
       RelNode right,
@@ -80,7 +93,7 @@ public final class JoinRel extends JoinRelBase {
   }
 
   /**
-   * Creates a JoinRel, flagged with whether it has been translated to a
+   * Creates a LogicalJoin, flagged with whether it has been translated to a
    * semi-join.
    *
    * @param cluster          Cluster
@@ -90,7 +103,7 @@ public final class JoinRel extends JoinRelBase {
    * @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
    * @param systemFieldList  List of system fields that will be prefixed to
@@ -98,7 +111,7 @@ public final class JoinRel extends JoinRelBase {
    *                         null
    * @see #isSemiJoinDone()
    */
-  public JoinRel(
+  public LogicalJoin(
       RelOptCluster cluster,
       RelNode left,
       RelNode right,
@@ -121,9 +134,9 @@ public final class JoinRel extends JoinRelBase {
   }
 
   /**
-   * Creates a JoinRel by parsing serialized output.
+   * Creates a LogicalJoin by parsing serialized output.
    */
-  public JoinRel(RelInput input) {
+  public LogicalJoin(RelInput input) {
     this(
         input.getCluster(), input.getInputs().get(0),
         input.getInputs().get(1), input.getExpression("condition"),
@@ -134,11 +147,10 @@ public final class JoinRel extends JoinRelBase {
 
   //~ Methods ----------------------------------------------------------------
 
-  @Override
-  public JoinRel copy(RelTraitSet traitSet, RexNode conditionExpr, RelNode left,
-      RelNode right, JoinRelType joinType, boolean semiJoinDone) {
+  @Override public LogicalJoin copy(RelTraitSet traitSet, RexNode conditionExpr,
+      RelNode left, RelNode right, JoinRelType joinType, boolean semiJoinDone) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new JoinRel(
+    return new LogicalJoin(
         getCluster(),
         left,
         right,
@@ -149,8 +161,7 @@ public final class JoinRel extends JoinRelBase {
         this.systemFieldList);
   }
 
-  @Override
-  public RelNode accept(RelShuttle shuttle) {
+  @Override public RelNode accept(RelShuttle shuttle) {
     return shuttle.visit(this);
   }
 
@@ -170,4 +181,4 @@ public final class JoinRel extends JoinRelBase {
   }
 }
 
-// End JoinRel.java
+// End LogicalJoin.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalMinus.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalMinus.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalMinus.java
index 83411a9..9db2a1b 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalMinus.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalMinus.java
@@ -14,22 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-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.RelShuttle;
+import org.apache.calcite.rel.core.Minus;
 
-import org.eigenbase.relopt.*;
+import java.util.List;
 
 /**
- * <code>MinusRel</code> returns the rows of its first input minus any matching
- * rows from its other inputs. If "all" is true, then multiset subtraction is
- * performed; otherwise, set subtraction is performed (implying no duplicates in
- * the results).
+ * Sub-class of {@link org.apache.calcite.rel.core.Minus}
+ * not targeted at any particular engine or calling convention.
  */
-public final class MinusRel extends MinusRelBase {
+public final class LogicalMinus extends Minus {
   //~ Constructors -----------------------------------------------------------
 
-  public MinusRel(
+  public LogicalMinus(
       RelOptCluster cluster,
       List<RelNode> inputs,
       boolean all) {
@@ -41,28 +45,26 @@ public final class MinusRel extends MinusRelBase {
   }
 
   /**
-   * Creates a MinusRel by parsing serialized output.
+   * Creates a LogicalMinus by parsing serialized output.
    */
-  public MinusRel(RelInput input) {
+  public LogicalMinus(RelInput input) {
     super(input);
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  @Override
-  public MinusRel copy(
+  @Override public LogicalMinus copy(
       RelTraitSet traitSet, List<RelNode> inputs, boolean all) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new MinusRel(
+    return new LogicalMinus(
         getCluster(),
         inputs,
         all);
   }
 
-  @Override
-  public RelNode accept(RelShuttle shuttle) {
+  @Override public RelNode accept(RelShuttle shuttle) {
     return shuttle.visit(this);
   }
 }
 
-// End MinusRel.java
+// End LogicalMinus.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalOneRow.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalOneRow.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalOneRow.java
index 3e56391..4a44459 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalOneRow.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalOneRow.java
@@ -14,44 +14,47 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-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.core.OneRow;
 
-import org.eigenbase.relopt.*;
+import java.util.List;
 
 /**
- * <code>OneRowRel</code> always returns one row, one column (containing the
- * value 0).
+ * Sub-class of {@link org.apache.calcite.rel.core.OneRow}
+ * not targeted at any particular engine or calling convention.
  */
-public final class OneRowRel extends OneRowRelBase {
+public final class LogicalOneRow extends OneRow {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a <code>OneRowRel</code>.
+   * Creates a <code>LogicalOneRow</code>.
    *
-   * @param cluster {@link RelOptCluster}  this relational expression belongs
-   *                to
+   * @param cluster   Cluster that this relational expression belongs to
    */
-  public OneRowRel(RelOptCluster cluster) {
+  public LogicalOneRow(RelOptCluster cluster) {
     super(
         cluster,
         cluster.traitSetOf(Convention.NONE));
   }
 
   /**
-   * Creates a OneRowRel by parsing serialized output.
+   * Creates a LogicalOneRow by parsing serialized output.
    */
-  public OneRowRel(RelInput input) {
+  public LogicalOneRow(RelInput input) {
     super(input.getCluster(), input.getTraitSet());
   }
 
-  @Override
-  public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
+  @Override public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
     assert traitSet.containsIfApplicable(Convention.NONE);
     assert inputs.isEmpty();
     return this;
   }
 }
 
-// End OneRowRel.java
+// End LogicalOneRow.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalProject.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalProject.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalProject.java
index faec719..8cc81a5 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalProject.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalProject.java
@@ -14,35 +14,40 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-import java.util.*;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollationImpl;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelShuttle;
+import org.apache.calcite.rel.core.Project;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexUtil;
 
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
+import java.util.List;
 
 /**
- * <code>ProjectRel</code> is a relational expression which 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.</p>
+ * Sub-class of {@link org.apache.calcite.rel.core.Project} not
+ * targeted at any particular engine or calling convention.
  */
-public final class ProjectRel extends ProjectRelBase {
+public final class LogicalProject extends Project {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a ProjectRel with no sort keys.
+   * Creates a LogicalProject with no sort keys.
    *
    * @param cluster    Cluster this relational expression belongs to
    * @param child      input relational expression
    * @param exps       set of expressions for the input columns
    * @param fieldNames aliases of the expressions
-   * @param flags      values as in {@link ProjectRelBase.Flags}
+   * @param flags      Flags; values as in {@link Project.Flags},
+   *                   usually {@link Project.Flags#BOXED}
    */
-  public ProjectRel(
+  public LogicalProject(
       RelOptCluster cluster,
       RelNode child,
       List<RexNode> exps,
@@ -61,16 +66,17 @@ public final class ProjectRel extends ProjectRelBase {
   }
 
   /**
-   * Creates a ProjectRel.
+   * Creates a LogicalProject.
    *
    * @param cluster  Cluster this relational expression belongs to
    * @param traitSet traits of this rel
    * @param child    input relational expression
    * @param exps     List of expressions for the input columns
    * @param rowType  output row type
-   * @param flags    values as in {@link ProjectRelBase.Flags}
+   * @param flags      Flags; values as in {@link Project.Flags},
+   *                   usually {@link Project.Flags#BOXED}
    */
-  public ProjectRel(
+  public LogicalProject(
       RelOptCluster cluster,
       RelTraitSet traitSet,
       RelNode child,
@@ -82,23 +88,23 @@ public final class ProjectRel extends ProjectRelBase {
   }
 
   /**
-   * Creates a ProjectRel by parsing serialized output.
+   * Creates a LogicalProject by parsing serialized output.
    */
-  public ProjectRel(RelInput input) {
+  public LogicalProject(RelInput input) {
     super(input);
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  @Override public ProjectRel copy(RelTraitSet traitSet, RelNode input,
+  @Override public LogicalProject copy(RelTraitSet traitSet, RelNode input,
       List<RexNode> exps, RelDataType rowType) {
-    return new ProjectRel(getCluster(), traitSet, input, exps, rowType, flags);
+    return new LogicalProject(getCluster(), traitSet, input, exps, rowType,
+        flags);
   }
 
-  @Override
-  public RelNode accept(RelShuttle shuttle) {
+  @Override public RelNode accept(RelShuttle shuttle) {
     return shuttle.visit(this);
   }
 }
 
-// End ProjectRel.java
+// End LogicalProject.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableFunctionScan.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableFunctionScan.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableFunctionScan.java
index d2ec6a8..de0d1fa 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableFunctionScan.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableFunctionScan.java
@@ -14,27 +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.logical;
+
+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.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.TableFunctionScan;
+import org.apache.calcite.rel.metadata.RelColumnMapping;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexNode;
 
 import java.lang.reflect.Type;
 import java.util.List;
 import java.util.Set;
 
-import org.eigenbase.rel.metadata.RelColumnMapping;
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
-
 /**
- * <code>TableFunctionRel</code> represents a call to a function which returns a
- * result set. Currently, it can only appear as a leaf in a query tree, but
- * eventually we will extend it to take relational inputs.
+ * Sub-class of {@link org.apache.calcite.rel.core.TableFunctionScan}
+ * not targeted at any particular engine or calling convention.
  */
-public class TableFunctionRel extends TableFunctionRelBase {
+public class LogicalTableFunctionScan extends TableFunctionScan {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a <code>TableFunctionRel</code>.
+   * Creates a <code>LogicalTableFunctionScan</code>.
    *
    * @param cluster        Cluster that this relational expression belongs to
    * @param inputs         0 or more relational inputs
@@ -44,7 +50,7 @@ public class TableFunctionRel extends TableFunctionRelBase {
    * @param rowType        row type produced by function
    * @param columnMappings column mappings associated with this function
    */
-  public TableFunctionRel(
+  public LogicalTableFunctionScan(
       RelOptCluster cluster,
       List<RelNode> inputs,
       RexNode rexCall,
@@ -61,18 +67,18 @@ public class TableFunctionRel extends TableFunctionRelBase {
   }
 
   /**
-   * Creates a TableFunctionRel by parsing serialized output.
+   * Creates a LogicalTableFunctionScan by parsing serialized output.
    */
-  public TableFunctionRel(RelInput input) {
+  public LogicalTableFunctionScan(RelInput input) {
     super(input);
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  @Override
-  public TableFunctionRel copy(RelTraitSet traitSet, List<RelNode> inputs) {
+  @Override public LogicalTableFunctionScan copy(RelTraitSet traitSet,
+      List<RelNode> inputs) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new TableFunctionRel(
+    return new LogicalTableFunctionScan(
         getCluster(),
         inputs,
         getCall(),
@@ -87,4 +93,4 @@ public class TableFunctionRel extends TableFunctionRelBase {
   }
 }
 
-// End TableFunctionRel.java
+// End LogicalTableFunctionScan.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableModify.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableModify.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableModify.java
index b2b1246..c1835ff 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableModify.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableModify.java
@@ -14,24 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-import java.util.*;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.prepare.Prepare;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.TableModify;
 
-import org.eigenbase.relopt.*;
-
-import net.hydromatic.optiq.prepare.Prepare;
+import java.util.List;
 
 /**
- * TableModificationRel is like TableAccessRel, but represents a request to
- * modify a table rather than read from it. It takes one child which produces
- * the modified rows. (For INSERT, the new values; for DELETE, the old values;
- * for UPDATE, all old values plus updated new values.)
+ * Sub-class of {@link org.apache.calcite.rel.core.TableModify}
+ * not targeted at any particular engine or calling convention.
  */
-public final class TableModificationRel extends TableModificationRelBase {
+public final class LogicalTableModify extends TableModify {
   //~ Constructors -----------------------------------------------------------
 
-  public TableModificationRel(
+  public LogicalTableModify(
       RelOptCluster cluster,
       RelOptTable table,
       Prepare.CatalogReader schema,
@@ -52,10 +54,10 @@ public final class TableModificationRel extends TableModificationRelBase {
 
   //~ Methods ----------------------------------------------------------------
 
-  @Override
-  public TableModificationRel copy(RelTraitSet traitSet, List<RelNode> inputs) {
+  @Override public LogicalTableModify copy(RelTraitSet traitSet,
+      List<RelNode> inputs) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new TableModificationRel(
+    return new LogicalTableModify(
         getCluster(),
         table,
         catalogReader,
@@ -66,4 +68,4 @@ public final class TableModificationRel extends TableModificationRelBase {
   }
 }
 
-// End TableModificationRel.java
+// End LogicalTableModify.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableScan.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableScan.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableScan.java
index 5341fc2..5340fd0 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableScan.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalTableScan.java
@@ -14,14 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-import java.util.List;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelInput;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.TableScan;
 
-import org.eigenbase.relopt.*;
+import java.util.List;
 
 /**
- * A <code>TableAccessRel</code> reads all the rows from a {@link RelOptTable}.
+ * A <code>LogicalTableScan</code> reads all the rows from a
+ * {@link RelOptTable}.
  *
  * <p>If the table is a <code>net.sf.saffron.ext.JdbcTable</code>, then this is
  * literally possible. But for other kinds of tables, there may be many ways to
@@ -45,16 +52,16 @@ import org.eigenbase.relopt.*;
  * <p>can. It is the optimizer's responsibility to find these ways, by applying
  * transformation rules.</p>
  */
-public final class TableAccessRel extends TableAccessRelBase {
+public final class LogicalTableScan extends TableScan {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a TableAccessRel.
+   * Creates a LogicalTableScan.
    *
    * @param cluster Cluster
    * @param table   Table
    */
-  public TableAccessRel(
+  public LogicalTableScan(
       RelOptCluster cluster,
       RelOptTable table) {
     super(
@@ -64,18 +71,17 @@ public final class TableAccessRel extends TableAccessRelBase {
   }
 
   /**
-   * Creates a TableAccessRel by parsing serialized output.
+   * Creates a LogicalTableScan by parsing serialized output.
    */
-  public TableAccessRel(RelInput input) {
+  public LogicalTableScan(RelInput input) {
     super(input);
   }
 
-  @Override
-  public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
+  @Override public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
     assert traitSet.containsIfApplicable(Convention.NONE);
     assert inputs.isEmpty();
     return this;
   }
 }
 
-// End TableAccessRel.java
+// End LogicalTableScan.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalUnion.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalUnion.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalUnion.java
index 4e24846..49dde4d 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalUnion.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalUnion.java
@@ -14,20 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-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.RelShuttle;
+import org.apache.calcite.rel.core.Union;
 
-import org.eigenbase.relopt.*;
+import java.util.List;
 
 /**
- * <code>UnionRel</code> returns the union of the rows of its inputs, optionally
- * eliminating duplicates.
+ * Sub-class of {@link org.apache.calcite.rel.core.Union}
+ * not targeted at any particular engine or calling convention.
  */
-public final class UnionRel extends UnionRelBase {
+public final class LogicalUnion extends Union {
   //~ Constructors -----------------------------------------------------------
 
-  public UnionRel(
+  public LogicalUnion(
       RelOptCluster cluster,
       List<RelNode> inputs,
       boolean all) {
@@ -39,27 +45,26 @@ public final class UnionRel extends UnionRelBase {
   }
 
   /**
-   * Creates a UnionRel by parsing serialized output.
+   * Creates a LogicalUnion by parsing serialized output.
    */
-  public UnionRel(RelInput input) {
+  public LogicalUnion(RelInput input) {
     super(input);
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  public UnionRel copy(
+  public LogicalUnion copy(
       RelTraitSet traitSet, List<RelNode> inputs, boolean all) {
     assert traitSet.containsIfApplicable(Convention.NONE);
-    return new UnionRel(
+    return new LogicalUnion(
         getCluster(),
         inputs,
         all);
   }
 
-  @Override
-  public RelNode accept(RelShuttle shuttle) {
+  @Override public RelNode accept(RelShuttle shuttle) {
     return shuttle.visit(this);
   }
 }
 
-// End UnionRel.java
+// End LogicalUnion.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalValues.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalValues.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalValues.java
index 5b28d8e..fc3beed 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalValues.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalValues.java
@@ -14,63 +14,66 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel;
+package org.apache.calcite.rel.logical;
 
-import java.util.*;
+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.RelShuttle;
+import org.apache.calcite.rel.core.Values;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexLiteral;
 
-import org.eigenbase.relopt.*;
-import org.eigenbase.reltype.*;
-import org.eigenbase.rex.*;
+import java.util.List;
 
 /**
- * <code>ValuesRel</code> represents a sequence of zero or more literal row
- * values.
+ * Sub-class of {@link org.apache.calcite.rel.core.Values}
+ * not targeted at any particular engine or calling convention.
  */
-public class ValuesRel extends ValuesRelBase {
+public class LogicalValues extends Values {
   //~ Constructors -----------------------------------------------------------
 
   /**
-   * Creates a new ValuesRel. Note that tuples passed in become owned by this
+   * Creates a new LogicalValues.
+   *
+   * <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
    */
-  public ValuesRel(
+  public LogicalValues(
       RelOptCluster cluster,
       RelDataType rowType,
       List<List<RexLiteral>> tuples) {
-    super(
-        cluster,
-        rowType,
-        tuples,
-        cluster.traitSetOf(Convention.NONE));
+    super(cluster, rowType, tuples, cluster.traitSetOf(Convention.NONE));
   }
 
   /**
-   * Creates a ValuesRel by parsing serialized output.
+   * Creates a LogicalValues by parsing serialized output.
    */
-  public ValuesRel(RelInput input) {
+  public LogicalValues(RelInput input) {
     super(input);
   }
 
-  public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
+  @Override public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) {
     assert traitSet.containsIfApplicable(Convention.NONE);
     assert inputs.isEmpty();
-    return new ValuesRel(
+    return new LogicalValues(
         getCluster(),
         rowType,
         tuples);
   }
 
-  @Override
-  public RelNode accept(RelShuttle shuttle) {
+  @Override public RelNode accept(RelShuttle shuttle) {
     return shuttle.visit(this);
   }
 }
 
-// End ValuesRel.java
+// End LogicalValues.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
index d278a38..e75d340 100644
--- a/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalWindow.java
@@ -14,61 +14,70 @@
  * 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.*;
-import org.eigenbase.util.Pair;
-import org.eigenbase.util.Util;
-
-import net.hydromatic.linq4j.Ord;
-
-import net.hydromatic.optiq.util.BitSets;
-
+package org.apache.calcite.rel.logical;
+
+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.RelCollation;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Window;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rex.RexFieldCollation;
+import org.apache.calcite.rex.RexInputRef;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexLocalRef;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexOver;
+import org.apache.calcite.rex.RexProgram;
+import org.apache.calcite.rex.RexShuttle;
+import org.apache.calcite.rex.RexWindow;
+import org.apache.calcite.rex.RexWindowBound;
+import org.apache.calcite.util.BitSets;
+import org.apache.calcite.util.Pair;
+
+import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
-import com.google.common.collect.*;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.LinkedListMultimap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
- * A relational expression representing a set of window aggregates.
- *
- * <p>A window rel 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>Created by {@link org.eigenbase.rel.rules.WindowedAggSplitterRule}.
  */
-public final class WindowRel extends WindowRelBase {
+public final class LogicalWindow extends Window {
   /**
-   * Creates a WindowRel.
+   * Creates a LogicalWindow.
    *
    * @param cluster Cluster
    * @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 WindowRel(
+  public LogicalWindow(
       RelOptCluster cluster, RelTraitSet traits, RelNode child,
-      List<RexLiteral> constants, RelDataType rowType, List<Window> windows) {
-    super(cluster, traits, child, constants, rowType, windows);
+      List<RexLiteral> constants, RelDataType rowType, List<Group> groups) {
+    super(cluster, traits, child, constants, rowType, groups);
   }
 
-  @Override
-  public WindowRel copy(RelTraitSet traitSet, List<RelNode> inputs) {
-    return new WindowRel(
-        getCluster(), traitSet, sole(inputs), constants, rowType, windows);
+  @Override public LogicalWindow copy(RelTraitSet traitSet,
+      List<RelNode> inputs) {
+    return new LogicalWindow(getCluster(), traitSet, sole(inputs), constants,
+      rowType, groups);
   }
 
   /**
-   * Creates a WindowRel.
+   * Creates a LogicalWindow.
    */
   public static RelNode create(
       RelOptCluster cluster,
@@ -76,7 +85,7 @@ public final class WindowRel extends WindowRelBase {
       RelNode child,
       final RexProgram program,
       RelDataType outRowType) {
-    // Build a list of distinct windows, partitions and aggregate
+    // Build a list of distinct groups, partitions and aggregate
     // functions.
     final Multimap<WindowKey, RexOver> windowMap =
         LinkedListMultimap.create();
@@ -90,8 +99,7 @@ public final class WindowRel extends WindowRelBase {
     // Identify constants in the expression tree and replace them with
     // references to newly generated constant pool.
     RexShuttle replaceConstants = new RexShuttle() {
-      @Override
-      public RexNode visitLiteral(RexLiteral literal) {
+      @Override public RexNode visitLiteral(RexLiteral literal) {
         RexInputRef ref = constantPool.get(literal);
         if (ref != null) {
           return ref;
@@ -104,7 +112,7 @@ public final class WindowRel extends WindowRelBase {
       }
     };
 
-    // Build a list of windows, partitions, and aggregate functions. Each
+    // Build a list of groups, partitions, and aggregate functions. Each
     // aggregate function will add its arguments as outputs of the input
     // program.
     for (RexNode agg : program.getExprList()) {
@@ -115,9 +123,9 @@ public final class WindowRel extends WindowRelBase {
       }
     }
 
-    final Map<RexOver, WindowRelBase.RexWinAggCall> aggMap =
-        new HashMap<RexOver, WindowRelBase.RexWinAggCall>();
-    List<Window> windowList = new ArrayList<Window>();
+    final Map<RexOver, Window.RexWinAggCall> aggMap =
+        new HashMap<RexOver, Window.RexWinAggCall>();
+    List<Group> groups = new ArrayList<Group>();
     for (Map.Entry<WindowKey, Collection<RexOver>> entry
         : windowMap.asMap().entrySet()) {
       final WindowKey windowKey = entry.getKey();
@@ -134,13 +142,12 @@ public final class WindowRel extends WindowRelBase {
         aggMap.put(over, aggCall);
       }
       RexShuttle toInputRefs = new RexShuttle() {
-        @Override
-        public RexNode visitLocalRef(RexLocalRef localRef) {
+        @Override public RexNode visitLocalRef(RexLocalRef localRef) {
           return new RexInputRef(localRef.getIndex(), localRef.getType());
         }
       };
-      windowList.add(
-          new Window(
+      groups.add(
+          new Group(
               windowKey.groupSet,
               windowKey.isRows,
               windowKey.lowerBound.accept(toInputRefs),
@@ -152,8 +159,8 @@ public final class WindowRel extends WindowRelBase {
     // Figure out the type of the inputs to the output program.
     // They are: the inputs to this rel, followed by the outputs of
     // each window.
-    final List<WindowRelBase.RexWinAggCall> flattenedAggCallList =
-        new ArrayList<WindowRelBase.RexWinAggCall>();
+    final List<Window.RexWinAggCall> flattenedAggCallList =
+        new ArrayList<Window.RexWinAggCall>();
     List<Map.Entry<String, RelDataType>> fieldList =
         new ArrayList<Map.Entry<String, RelDataType>>(
             child.getRowType().getFieldList());
@@ -169,7 +176,7 @@ public final class WindowRel extends WindowRelBase {
       }
     }
 
-    for (Ord<Window> window : Ord.zip(windowList)) {
+    for (Ord<Group> window : Ord.zip(groups)) {
       for (Ord<RexWinAggCall> over : Ord.zip(window.e.aggCalls)) {
         // Add the k-th over expression of
         // the i-th window to the output of the program.
@@ -190,7 +197,7 @@ public final class WindowRel extends WindowRelBase {
         new RexShuttle() {
           public RexNode visitOver(RexOver over) {
             // Look up the aggCall which this expr was translated to.
-            final WindowRelBase.RexWinAggCall aggCall =
+            final Window.RexWinAggCall aggCall =
                 aggMap.get(over);
             assert aggCall != null;
             assert RelOptUtil.eq(
@@ -201,7 +208,7 @@ public final class WindowRel extends WindowRelBase {
                 true);
 
             // Find the index of the aggCall among all partitions of all
-            // windows.
+            // groups.
             final int aggCallIndex =
                 flattenedAggCallList.indexOf(aggCall);
             assert aggCallIndex >= 0;
@@ -230,14 +237,14 @@ public final class WindowRel extends WindowRelBase {
                 localRef.getType());
           }
         };
-    // TODO: The order that the "over" calls occur in the windows and
+    // TODO: The order that the "over" calls occur in the groups and
     // partitions may not match the order in which they occurred in the
     // original expression. We should add a project to permute them.
 
-    WindowRel window =
-        new WindowRel(
+    LogicalWindow window =
+        new LogicalWindow(
             cluster, traitSet, child, constants, intermediateRowType,
-            windowList);
+            groups);
 
     return RelOptUtil.createProject(
         window,
@@ -264,7 +271,7 @@ public final class WindowRel extends WindowRelBase {
     };
   }
 
-  /** Window specification. All windowed aggregates over the same window
+  /** Group specification. All windowed aggregates over the same window
    * (regardless of how it is specified, in terms of a named window or specified
    * attribute by attribute) will end up with the same window key. */
   private static class WindowKey {
@@ -287,20 +294,21 @@ public final class WindowRel extends WindowRelBase {
       this.upperBound = upperBound;
     }
 
-    @Override
-    public int hashCode() {
-      return Util.hashV(
-          groupSet, orderKeys, isRows, lowerBound, upperBound);
+    @Override public int hashCode() {
+      return com.google.common.base.Objects.hashCode(groupSet,
+          orderKeys,
+          isRows,
+          lowerBound,
+          upperBound);
     }
 
-    @Override
-    public boolean equals(Object obj) {
+    @Override public boolean equals(Object obj) {
       return obj == this
           || obj instanceof WindowKey
           && groupSet.equals(((WindowKey) obj).groupSet)
           && orderKeys.equals(((WindowKey) obj).orderKeys)
-          && Util.equal(lowerBound, ((WindowKey) obj).lowerBound)
-          && Util.equal(upperBound, ((WindowKey) obj).upperBound)
+          && Objects.equal(lowerBound, ((WindowKey) obj).lowerBound)
+          && Objects.equal(upperBound, ((WindowKey) obj).upperBound)
           && isRows == ((WindowKey) obj).isRows;
     }
   }
@@ -338,4 +346,4 @@ public final class WindowRel extends WindowRelBase {
   }
 }
 
-// End WindowRel.java
+// End LogicalWindow.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/logical/package-info.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/package-info.java b/core/src/main/java/org/apache/calcite/rel/logical/package-info.java
new file mode 100644
index 0000000..3317ac1
--- /dev/null
+++ b/core/src/main/java/org/apache/calcite/rel/logical/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 logical relational expressions.
+ *
+ * <h2>Related packages and classes</h2>
+ * <ul>
+ *
+ * <li>Package <code>
+ * <a href="../logical/package-summary.html">org.apache.calcite.rel.core</a></code>
+ * contains core 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.logical;
+
+// End package-info.java

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/BuiltInMetadata.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/BuiltInMetadata.java b/core/src/main/java/org/apache/calcite/rel/metadata/BuiltInMetadata.java
index 7bb40ec..4d890b6 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/BuiltInMetadata.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/BuiltInMetadata.java
@@ -14,15 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
 
-import java.util.*;
+import org.apache.calcite.plan.RelOptCost;
+import org.apache.calcite.plan.RelOptPredicateList;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.sql.SqlExplainLevel;
 
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.RelOptCost;
-import org.eigenbase.relopt.RelOptPredicateList;
-import org.eigenbase.rex.RexNode;
-import org.eigenbase.sql.SqlExplainLevel;
+import java.util.BitSet;
+import java.util.Set;
 
 /**
  * Contains the interfaces for several common forms of metadata.
@@ -137,7 +138,7 @@ public abstract class BuiltInMetadata {
      * Estimates the distinct row count in the original source for the given
      * {@code groupKey}, ignoring any filtering being applied by the expression.
      * Typically, "original source" means base table, but for derived columns,
-     * the estimate may come from a non-leaf rel such as a ProjectRel.
+     * the estimate may come from a non-leaf rel such as a LogicalProject.
      *
      * @param groupKey column mask representing the subset of columns for which
      *                 the row count will be determined
@@ -152,8 +153,8 @@ public abstract class BuiltInMetadata {
     /**
      * For a given output column of an expression, determines all columns of
      * underlying tables which contribute to result values. An output column may
-     * have more than one origin due to expressions such as UnionRel and
-     * ProjectRel. The optimizer may use this information for catalog access
+     * have more than one origin due to expressions such as Union and
+     * LogicalProject. The optimizer may use this information for catalog access
      * (e.g. index availability).
      *
      * @param outputColumn 0-based ordinal for output column of interest

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/CachingRelMetadataProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/CachingRelMetadataProvider.java b/core/src/main/java/org/apache/calcite/rel/metadata/CachingRelMetadataProvider.java
index fe825c0..a45501b 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/CachingRelMetadataProvider.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/CachingRelMetadataProvider.java
@@ -14,17 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
 
-import java.lang.reflect.*;
-import java.util.*;
-
-import org.eigenbase.rel.*;
-import org.eigenbase.relopt.*;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.rel.RelNode;
 
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Implementation of the {@link RelMetadataProvider}
  * interface that caches results from an underlying provider.
@@ -39,8 +43,7 @@ public class CachingRelMetadataProvider implements RelMetadataProvider {
   private final RelOptPlanner planner;
 
   private static final Object NULL_SENTINEL = new Object() {
-    @Override
-    public String toString() {
+    @Override public String toString() {
       return "{null}";
     }
   };

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/ChainedRelMetadataProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/ChainedRelMetadataProvider.java b/core/src/main/java/org/apache/calcite/rel/metadata/ChainedRelMetadataProvider.java
index 3cef5b3..445cce4 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/ChainedRelMetadataProvider.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/ChainedRelMetadataProvider.java
@@ -14,21 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
 
-import java.lang.reflect.*;
-import java.util.*;
-
-import org.eigenbase.rel.*;
+import org.apache.calcite.rel.RelNode;
 
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.List;
+
 /**
  * Implementation of the {@link RelMetadataProvider}
  * interface via the
- * {@link org.eigenbase.util.Glossary#CHAIN_OF_RESPONSIBILITY_PATTERN}.
+ * {@link org.apache.calcite.util.Glossary#CHAIN_OF_RESPONSIBILITY_PATTERN}.
  *
  * <p>When a consumer calls the {@link #apply} method to ask for a provider
  * for a particular type of {@link RelNode} and {@link Metadata}, scans the list

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/DefaultRelMetadataProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/DefaultRelMetadataProvider.java b/core/src/main/java/org/apache/calcite/rel/metadata/DefaultRelMetadataProvider.java
index 5958476..33ad92f 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/DefaultRelMetadataProvider.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/DefaultRelMetadataProvider.java
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
 
 import com.google.common.collect.ImmutableList;
 
 /**
- * DefaultRelMetadataProvider supplies a default implementation of the {@link
- * RelMetadataProvider} interface. It provides generic formulas and derivation
- * rules for the standard logical algebra; coverage corresponds to the methods
- * declared in {@link RelMetadataQuery}.
+ * DefaultRelMetadataProvider supplies a default implementation of the
+ * {@link RelMetadataProvider} interface. It provides generic formulas and
+ * derivation rules for the standard logical algebra; coverage corresponds to
+ * the methods declared in {@link RelMetadataQuery}.
  */
 public class DefaultRelMetadataProvider extends ChainedRelMetadataProvider {
   //~ Constructors -----------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/Metadata.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/Metadata.java b/core/src/main/java/org/apache/calcite/rel/metadata/Metadata.java
index be97533..34e456f 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/Metadata.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/Metadata.java
@@ -14,20 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
 
-import org.eigenbase.rel.RelNode;
+import org.apache.calcite.rel.RelNode;
 
 /**
  * Metadata about a relational expression.
  *
  * <p>For particular types of metadata, a sub-class defines one of more methods
  * to query that metadata. Then a {@link RelMetadataProvider} can offer those
- * kinds of metadata for particular sub-classes of {@link RelNode}.</p>
+ * kinds of metadata for particular sub-classes of {@link RelNode}.
  *
  * <p>User code (typically in a planner rule or an implementation of
- * {@link RelNode#computeSelfCost(org.eigenbase.relopt.RelOptPlanner)}) acquires
- * a {@code Metadata} instance by calling {@link RelNode#metadata}.</p>
+ * {@link RelNode#computeSelfCost(org.apache.calcite.plan.RelOptPlanner)})
+ * acquires a {@code Metadata} instance by calling {@link RelNode#metadata}.
  *
  * <p>A {@code Metadata} instance already knows which particular {@code RelNode}
  * it is describing, so the methods do not pass in the {@code RelNode}. In fact,

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactory.java b/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactory.java
index 428d533..7651ecd 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactory.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactory.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
 
-import org.eigenbase.rel.RelNode;
+import org.apache.calcite.rel.RelNode;
 
 /**
  * Source of metadata about relational expressions.

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a0ba73cd/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactoryImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactoryImpl.java b/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactoryImpl.java
index 9512597..e20d6ce 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactoryImpl.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/MetadataFactoryImpl.java
@@ -14,12 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.eigenbase.rel.metadata;
+package org.apache.calcite.rel.metadata;
 
-import java.util.concurrent.ExecutionException;
-
-import org.eigenbase.rel.RelNode;
-import org.eigenbase.util.Pair;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.util.Pair;
 
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
@@ -27,6 +25,8 @@ import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 
+import java.util.concurrent.ExecutionException;
+
 /** Implementation of {@link MetadataFactory} that gets providers from a
  * {@link RelMetadataProvider} and stores them in a cache.
  *
@@ -51,8 +51,7 @@ public class MetadataFactoryImpl implements MetadataFactory {
       Function<RelNode, Metadata>> loader(final RelMetadataProvider provider) {
     return new CacheLoader<Pair<Class<RelNode>, Class<Metadata>>,
         Function<RelNode, Metadata>>() {
-      @Override
-      public Function<RelNode, Metadata> load(
+      @Override public Function<RelNode, Metadata> load(
           Pair<Class<RelNode>, Class<Metadata>> key) throws Exception {
         final Function<RelNode, Metadata> function =
             provider.apply(key.left, key.right);