protected MutableRel invert(List<Pair<RexNode, String>> namedProjects, MutableRel input, RexShuttle shuttle) { LOGGER.trace("SubstitutionVisitor: invert:\nprojects: {}\ninput: {}\nproject: {}\n", namedProjects, input, shuttle); final List<RexNode> exprList = new ArrayList<>(); final RexBuilder rexBuilder = input.cluster.getRexBuilder(); final List<RexNode> projects = Pair.left(namedProjects); for (RexNode expr : projects) { exprList.add(rexBuilder.makeZeroLiteral(expr.getType())); } for (Ord<RexNode> expr : Ord.zip(projects)) { final RexNode node = expr.e.accept(shuttle); if (node == null) { throw MatchFailed.INSTANCE; } exprList.set(expr.i, node); } return MutableProject.of(input, exprList, Pair.right(namedProjects)); }
RelNode newProject = HiveProject.create(frame.r, Pair.left(projects), Pair.right(projects));
projFactory.createProject(child, Pair.left(projects), Pair.right(projects));
SqlValidatorUtil.uniquify(Pair.right(projects)));
public void onMatch(RelOptRuleCall call) { final LogicalCorrelate correlate = call.rel(0); final RelNode left = call.rel(1); final Project aggOutputProject; final Aggregate aggregate; if (flavor) { aggOutputProject = call.rel(2); aggregate = call.rel(3); } else { aggregate = call.rel(2); // Create identity projection final List<Pair<RexNode, String>> projects = Lists.newArrayList(); final List<RelDataTypeField> fields = aggregate.getRowType().getFieldList(); for (int i = 0; i < fields.size(); i++) { projects.add(RexInputRef.of2(projects.size(), fields)); } aggOutputProject = (Project) RelOptUtil.createProject( aggregate, Pair.left(projects), Pair.right(projects), false, relBuilder); } onMatch2(call, correlate, left, aggOutputProject, aggregate); }
/** * Projects all {@code input} output fields plus the additional expressions. * * @param input Input relational expression * @param additionalExprs Additional expressions and names * @return the new Project */ private RelNode createProjectWithAdditionalExprs( RelNode input, List<Pair<RexNode, String>> additionalExprs) { final List<RelDataTypeField> fieldList = input.getRowType().getFieldList(); List<Pair<RexNode, String>> projects = Lists.newArrayList(); for (Ord<RelDataTypeField> field : Ord.zip(fieldList)) { projects.add( Pair.of( (RexNode) rexBuilder.makeInputRef( field.e.getType(), field.i), field.e.getName())); } projects.addAll(additionalExprs); return RelOptUtil.createProject(input, Pair.left(projects), Pair.right(projects), false, relBuilder); }
relBuilder.project(Pair.left(newProjects), Pair.right(newProjects)); relBuilder.aggregate(relBuilder.groupKey(newGroupSet, false, null), newAggrCalls.build()); RelNode rel = relBuilder.build();
projFactory.createProject(child, Pair.left(projects), Pair.right(projects));
RelNode newProject = HiveProject.create(newInput, Pair.left(projects), Pair.right(projects));
RelNode newProject = HiveProject.create(newInput, Pair.left(projects), Pair.right(projects));
RelNode newProject = HiveProject.create(frame.r, Pair.left(projects), SqlValidatorUtil.uniquify(Pair.right(projects)));
RelNode newProject = HiveProject.create(frame.r, Pair.left(projects), Pair.right(projects));
return RelOptUtil.createProject(correlate, Pair.left(newProjects), Pair.right(newProjects), false, relBuilder);
relBuilder.project(Pair.left(newChildExprs), Pair.right(newChildExprs));
RelNode newProject = HiveProject.create(newInput, Pair.left(projects), Pair.right(projects));
relBuilder.project(Pair.left(newChildExprs), Pair.right(newChildExprs)); final ImmutableList<RexNode> sortFields = relBuilder.fields(RelCollations.of(fieldCollations));
RelNode newProject = HiveProject.create(newInput, Pair.left(projects), Pair.right(projects));
relBuilder.project(Pair.left(newChildExprs), Pair.right(newChildExprs));
return RelOptUtil.createProject(join, Pair.left(newProjExprs), Pair.right(newProjExprs), false, relBuilder);
relBuilder.project(Pair.left(newChildExprs), Pair.right(newChildExprs)); final ImmutableList<RexNode> sortFields = relBuilder.fields(RelCollations.of(fieldCollations));