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;