- newLeftInput.getRowType().getFieldCount(); final List<Integer> rightKeys = Util.range(rightOffset, rightOffset + leftJoinKeys.size());
public void onMatch(RelOptRuleCall call) { ProjectRel project = call.rel(0); call.transformTo( new EmptyRel( project.getCluster(), project.getRowType())); } };
public void rewriteRel(ProjectRel rel) { final List<RexNode> flattenedExpList = new ArrayList<RexNode>(); final List<String> flattenedFieldNameList = new ArrayList<String>(); List<String> fieldNames = rel.getRowType().getFieldNames(); flattenProjections( rel.getProjects(), fieldNames, "", flattenedExpList, flattenedFieldNameList); RelNode newRel = CalcRel.createProject( getNewForOldRel(rel.getChild()), flattenedExpList, flattenedFieldNameList); setNewForOldRel(rel, newRel); }
public void rewriteRel(ProjectRel rel) { final List<RexNode> flattenedExpList = new ArrayList<RexNode>(); final List<String> flattenedFieldNameList = new ArrayList<String>(); List<String> fieldNames = rel.getRowType().getFieldNames(); flattenProjections( rel.getProjects(), fieldNames, "", flattenedExpList, flattenedFieldNameList); RelNode newRel = CalcRel.createProject( getNewForOldRel(rel.getChild()), flattenedExpList, flattenedFieldNameList); setNewForOldRel(rel, newRel); }
public void onMatch(RelOptRuleCall call) { final ProjectRel project = call.rel(0); final RelNode child = project.getChild(); final RelDataType rowType = project.getRowType(); final RexProgram program = RexProgram.create( child.getRowType(), project.getProjects(), null, project.getRowType(), project.getCluster().getRexBuilder()); final CalcRel calc = new CalcRel( project.getCluster(), project.getTraitSet(), child, rowType, program, ImmutableList.<RelCollation>of()); call.transformTo(calc); } }
bottomProject.getProjects(), null, bottomProject.getRowType(), rexBuilder); RexProgram topProgram = RexProgram.create( bottomProject.getRowType(), projExprs, null, topProject.getRowType(), rexBuilder); bottomProject.getChild(), newProjExprs, topProject.getRowType().getFieldNames());
public void onMatch(RelOptRuleCall call) { final ProjectRel project = call.rel(0); final RelNode child = project.getChild(); final RelDataType rowType = project.getRowType(); final RexProgram program = RexProgram.create( child.getRowType(), project.getProjects(), null, project.getRowType(), project.getCluster().getRexBuilder()); final CalcRel calc = new CalcRel( project.getCluster(), project.getTraitSet(), child, rowType, program, Collections.<RelCollation>emptyList()); call.transformTo(calc); } }
final ProjectRel newProject = new ProjectRel(cluster, newTable, newProjects, project.getRowType(), ProjectRel.Flags.Boxed, Collections.<RelCollation>emptyList()); call.transformTo(newProject);
newMultiJoin, project.getProjects(), project.getRowType().getFieldNames());
public void onMatch(RelOptRuleCall call) { ProjectRel project = call.rel(0); MultiJoinRel multiJoin = call.rel(1); // if all inputs have their projFields set, then projection information // has already been pushed into each input boolean allSet = true; for (int i = 0; i < multiJoin.getInputs().size(); i++) { if (multiJoin.getProjFields().get(i) == null) { allSet = false; break; } } if (allSet) { return; } // create a new MultiJoinRel that reflects the columns in the projection // above the MultiJoinRel MultiJoinRel newMultiJoin = RelOptUtil.projectMultiJoin(multiJoin, project); ProjectRel newProject = (ProjectRel) CalcRel.createProject( newMultiJoin, project.getProjects(), project.getRowType().getFieldNames()); call.transformTo(newProject); } }
/** Returns the child of a project if the project is trivial, otherwise * the project itself. */ public static RelNode strip(ProjectRel project) { RelNode child = project.getChild(); final RelDataType childRowType = child.getRowType(); if (!childRowType.isStruct()) { return project; } if (!project.isBoxed()) { return project; } if (!isIdentity( project.getProjects(), project.getRowType(), childRowType)) { return project; } return child; }
public void onMatch(RelOptRuleCall call) { ProjectRel project = call.rel(0); List<RexNode> expList = new ArrayList<RexNode>(project.getChildExps()); if (reduceExpressions(project, expList)) { call.transformTo( new ProjectRel( project.getCluster(), project.getTraitSet(), project.getChild(), expList, project.getRowType(), ProjectRel.Flags.BOXED)); // New plan is absolutely better than old plan. call.getPlanner().setImportance(project, 0.0); } } };
newSemiJoin, projExprs, project.getRowType().getFieldNames());
public UnifyResult apply(UnifyIn<ProjectRel, ProjectRel> in) { final RexShuttle shuttle = getRexShuttle(in.target); final List<RexNode> newProjects; try { newProjects = shuttle.apply(in.query.getProjects()); } catch (MatchFailed e) { return null; } final ProjectRel newProject = new ProjectRel( in.target.getCluster(), in.target, newProjects, in.query.getRowType(), in.query.getFlags(), in.query.getCollationList()); final RelNode newProject2 = RemoveTrivialProjectRule.strip(newProject); return in.result(newProject2); } }
@Override public void onMatch( RelOptRuleCall call ) { ProjectRel rel = call.rel( 0 ); RelTraitSet newTraits = rel.getTraitSet().plus( Cascading.CONVENTION ); call.transformTo( new CascadingProjectRel( rel.getCluster(), newTraits, convert( rel.getChild(), newTraits ), rel.getProjects(), rel.getRowType(), rel.getFlags(), rel.getCollationList() ) ); } }
public void onMatch(RelOptRuleCall call) { final FilterRel filter = call.rel(0); final ProjectRel project = call.rel(1); final List<RexNode> newProjects = new ArrayList<RexNode>(project.getProjects()); newProjects.add(filter.getCondition()); final RelOptCluster cluster = filter.getCluster(); RelDataType newRowType = cluster.getTypeFactory().builder() .addAll(project.getRowType().getFieldList()) .add("condition", Util.last(newProjects).getType()) .build(); final RelNode newProject = project.copy(project.getTraitSet(), project.getChild(), newProjects, newRowType); final RexInputRef newCondition = cluster.getRexBuilder().makeInputRef(newProject, newProjects.size() - 1); call.transformTo(new FilterRel(cluster, newProject, newCondition)); } }
newSemiJoin, projExprs, project.getRowType().getFieldNames());
@Override public RelNode convert( RelNode rel ) { // stolen from JavaRules.EnumerableAggregateRule ProjectRel project = (ProjectRel) rel; RelNode convertedChild = convert( project.getChild(), project.getTraitSet().replace( CONVENTION ) ); if( convertedChild == null ) return null; // We can't convert the child, so we can't convert rel. // return new CascadingProjectRel( rel.getCluster(), rel.getTraitSet(), convertedChild, project.getGroupSet(), project.getAggCallList() ); return new CascadingProjectRel( rel.getCluster(), rel.getTraitSet(), convertedChild, project.getProjects(), project.getRowType(), project.getFlags(), project.getCollationList() ); } }
public RelNode convert(RelNode rel) { final ProjectRel project = (ProjectRel) rel; return new JdbcProjectRel( rel.getCluster(), rel.getTraitSet().replace(getOutConvention()), convert( project.getChild(), project.getChild().getTraitSet().replace(getOutConvention())), project.getProjects(), project.getRowType(), ProjectRelBase.Flags.BOXED); } }
public RelNode convert(RelNode rel) { final ProjectRel project = (ProjectRel) rel; if (B && RexMultisetUtil.containsMultiset(project.getProjects(), true) || RexOver.containsOver(project.getProjects(), null)) { return null; } return new EnumerableProjectRel( rel.getCluster(), rel.getTraitSet().replace(EnumerableConvention.INSTANCE), convert( project.getChild(), project.getChild().getTraitSet() .replace(EnumerableConvention.INSTANCE)), project.getProjects(), project.getRowType(), ProjectRelBase.Flags.BOXED); } }