public UnifyResult apply(UnifyIn<ProjectRel, FilterRel> in) { final Pair<RelNode, Integer> queryParent = in.parent(in.query); if (queryParent.left instanceof FilterRel) { final UnifyIn<FilterRel, FilterRel> in2 = in.create((FilterRel) queryParent.left); final FilterRel newFilter = FilterToFilterUnifyRule.INSTANCE.createFilter( in2.query, in2.target); if (newFilter == null) { return null; } return in2.result( in.query.copy( in.query.getTraitSet(), ImmutableList.<RelNode>of(newFilter))); } return null; } }
public void onMatch(RelOptRuleCall call) { ProjectRel project = call.rel(0); RelNode stripped = strip(project); if (stripped == project) { return; } RelNode child = call.getPlanner().register(stripped, project); call.transformTo( convert( child, project.getTraitSet())); }
public void onMatch(RelOptRuleCall call) { ProjectRel project = call.rel(0); assert isTrivial(project); RelNode stripped = project.getChild(); RelNode child = call.getPlanner().register(stripped, project); call.transformTo( convert( child, project.getTraitSet())); }
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); } } };
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); } }
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); } }
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)); } }
@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() ) ); } }
@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() ); } }
new CalcRel( cluster, project.getTraitSet(), calc, project.getRowType(), new CalcRel( cluster, project.getTraitSet(), calc.getChild(), project.getRowType(),
new CalcRel( project.getCluster(), project.getTraitSet(), calc, project.getRowType(),