public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs) { assert traitSet.containsIfApplicable(Convention.NONE); return new ProjectRel( getCluster(), sole(inputs), getProjects(), rowType, getFlags(), collationList); }
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() ) ); } }
@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() ); } }
Collections.<RexNode>singletonList(expr), newRowType, project.getFlags()); return new TrimResult(newProject, mapping);