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/09/03 03:56:44 UTC

git commit: [OPTIQ-395] Make FieldTrimmer.trimFields(SetOp) generate ProjectRel instead of CalcRel

Repository: incubator-optiq
Updated Branches:
  refs/heads/master e18375a9e -> df9b682d0


[OPTIQ-395] Make FieldTrimmer.trimFields(SetOp) generate ProjectRel instead of CalcRel

Close apache/incubator-optiq#10


Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq/commit/df9b682d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq/tree/df9b682d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq/diff/df9b682d

Branch: refs/heads/master
Commit: df9b682d0b051474c983cb7845816c76da2fe421
Parents: e18375a
Author: Ashutosh Chauhan <ha...@apache.org>
Authored: Tue Sep 2 12:08:01 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Tue Sep 2 18:25:57 2014 -0700

----------------------------------------------------------------------
 .../main/java/org/eigenbase/rel/CalcRel.java    | 28 +++-----------------
 .../org/eigenbase/sql2rel/RelFieldTrimmer.java  |  3 ++-
 2 files changed, 6 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/df9b682d/core/src/main/java/org/eigenbase/rel/CalcRel.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rel/CalcRel.java b/core/src/main/java/org/eigenbase/rel/CalcRel.java
index 5805202..1812786 100644
--- a/core/src/main/java/org/eigenbase/rel/CalcRel.java
+++ b/core/src/main/java/org/eigenbase/rel/CalcRel.java
@@ -241,6 +241,7 @@ public final class CalcRel extends CalcRelBase {
     return createProject(rel, refs, true);
   }
 
+  @Override
   public void collectVariablesUsed(Set<String> variableSet) {
     final RelOptUtil.VariableUsedVisitor vuv =
         new RelOptUtil.VariableUsedVisitor();
@@ -362,16 +363,15 @@ public final class CalcRel extends CalcRelBase {
   public static RelNode projectMapping(
       RelNode rel,
       Mapping mapping,
-      List<String> fieldNames) {
+      List<String> fieldNames,
+      RelFactories.ProjectFactory projectFactory) {
     assert mapping.getMappingType().isSingleSource();
     assert mapping.getMappingType().isMandatorySource();
     if (mapping.isIdentity()) {
       return rel;
     }
-    final List<RelDataType> outputTypeList = new ArrayList<RelDataType>();
     final List<String> outputNameList = new ArrayList<String>();
     final List<RexNode> exprList = new ArrayList<RexNode>();
-    final List<RexLocalRef> projectRefList = new ArrayList<RexLocalRef>();
     final List<RelDataTypeField> fields = rel.getRowType().getFieldList();
     final RexBuilder rexBuilder = rel.getCluster().getRexBuilder();
     for (int i = 0; i < fields.size(); i++) {
@@ -380,33 +380,13 @@ public final class CalcRel extends CalcRelBase {
     for (int i = 0; i < mapping.getTargetCount(); i++) {
       int source = mapping.getSource(i);
       final RelDataTypeField sourceField = fields.get(source);
-      outputTypeList.add(sourceField.getType());
       outputNameList.add(
           ((fieldNames == null)
               || (fieldNames.size() <= i)
               || (fieldNames.get(i) == null)) ? sourceField.getName()
               : fieldNames.get(i));
-      projectRefList.add(
-          new RexLocalRef(
-              source,
-              sourceField.getType()));
     }
-    final RexProgram program =
-        new RexProgram(
-            rel.getRowType(),
-            exprList,
-            projectRefList,
-            null,
-            rel.getCluster().getTypeFactory().createStructType(
-                outputTypeList,
-                outputNameList));
-    return new CalcRel(
-        rel.getCluster(),
-        rel.getTraitSet(),
-        rel,
-        program.getOutputRowType(),
-        program,
-        Collections.<RelCollation>emptyList());
+    return projectFactory.createProject(rel, exprList, outputNameList);
   }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/df9b682d/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java b/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java
index 093be8e..cf740b7 100644
--- a/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java
+++ b/core/src/main/java/org/eigenbase/sql2rel/RelFieldTrimmer.java
@@ -667,7 +667,8 @@ public class RelFieldTrimmer implements ReflectiveVisitor {
       Mapping remaining = Mappings.divide(mapping, inputMapping);
 
       // Create a projection; does nothing if remaining is identity.
-      newInput = CalcRel.projectMapping(newInput, remaining, null);
+      newInput = CalcRel.projectMapping(newInput, remaining, null,
+        projectFactory);
 
       if (input != newInput) {
         ++changeCount;