@Override public RelNode visit(LogicalProject project) { final RenameConvertToConvertFromVisitor renameVisitor = new RenameConvertToConvertFromVisitor(project.getCluster().getRexBuilder(), table); final List<RexNode> projExpr = Lists.newArrayList(); for(RexNode rexNode : project.getChildExps()) { projExpr.add(rexNode.accept(unwrappingExpressionVisitor)); } project = project.copy(project.getTraitSet(), project.getInput(), projExpr, project.getRowType()); List<RexNode> exprList = new ArrayList<>(); boolean rewrite = false; for (RexNode rex : project.getChildExps()) { RexNode newExpr = rex.accept(renameVisitor); if (newExpr != rex) { rewrite = true; } exprList.add(newExpr); } if (rewrite == true) { LogicalProject newProject = project.copy(project.getTraitSet(), project.getInput(0), exprList, project.getRowType()); return visitChild(newProject, 0, project.getInput()); } return visitChild(project, 0, project.getInput()); }
public void onMatch(RelOptRuleCall call) { final LogicalFilter filter = call.rel(0); final LogicalProject project = call.rel(1); final List<RexNode> newProjects = new ArrayList<>(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.getInput(), newProjects, newRowType); final RexInputRef newCondition = cluster.getRexBuilder().makeInputRef(newProject, newProjects.size() - 1); call.transformTo(LogicalFilter.create(newProject, newCondition)); } }
public void onMatch(RelOptRuleCall call) { final LogicalFilter filter = call.rel(0); final LogicalProject project = call.rel(1); final List<RexNode> newProjects = new ArrayList<>(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.getInput(), newProjects, newRowType); final RexInputRef newCondition = cluster.getRexBuilder().makeInputRef(newProject, newProjects.size() - 1); call.transformTo(LogicalFilter.create(newProject, newCondition)); } }
final LogicalProject newTopProj = project.copy( newLogicalWindow.getTraitSet(), newLogicalWindow,
final LogicalProject newTopProj = project.copy( newLogicalWindow.getTraitSet(), newLogicalWindow,