@Override public RelNode convert(RelNode rel) { final Calc calc = (Calc) rel; final RelNode input = calc.getInput(); return new StreamsCalcRel(calc.getCluster(), calc.getTraitSet().replace(StreamsLogicalConvention.INSTANCE), convert(input, input.getTraitSet().replace(StreamsLogicalConvention.INSTANCE)), calc.getProgram()); } }
/** Predicate for whether a {@link Calc} contains multisets or windowed * aggregates. */ public static boolean containsMultisetOrWindowedAgg(Calc calc) { return !(B && RexMultisetUtil.containsMultiset(calc.getProgram()) || calc.getProgram().containsAggs()); }
/** Predicate for whether a {@link Calc} contains multisets or windowed * aggregates. */ public static boolean containsMultisetOrWindowedAgg(Calc calc) { return !(B && RexMultisetUtil.containsMultiset(calc.getProgram()) || calc.getProgram().containsAggs()); }
public ImmutableList<RelCollation> collations(Calc calc, RelMetadataQuery mq) { return ImmutableList.copyOf(calc(mq, calc.getInput(), calc.getProgram())); }
public ImmutableList<RelCollation> collations(Calc calc, RelMetadataQuery mq) { return ImmutableList.copyOf(calc(mq, calc.getInput(), calc.getProgram())); }
@Override public boolean matches(RelOptRuleCall call) { final Calc calc = call.rel(1); return calc.getProgram().getCondition() == null; }
public Double getRowCount(Calc rel, RelMetadataQuery mq) { return RelMdUtil.estimateFilteredRows(rel.getInput(), rel.getProgram(), mq); }
public Double getRowCount(Calc rel, RelMetadataQuery mq) { return RelMdUtil.estimateFilteredRows(rel.getInput(), rel.getProgram(), mq); }
/** * Creates a CalcToWindowRule. * * @param relBuilderFactory Builder for relational expressions */ public CalcToWindowRule(RelBuilderFactory relBuilderFactory) { super( operandJ(Calc.class, null, calc -> RexOver.containsOver(calc.getProgram()), any()), relBuilderFactory, "ProjectToWindowRule"); }
/** * Creates a CalcToWindowRule. * * @param relBuilderFactory Builder for relational expressions */ public CalcToWindowRule(RelBuilderFactory relBuilderFactory) { super( operandJ(Calc.class, null, calc -> RexOver.containsOver(calc.getProgram()), any()), relBuilderFactory, "ProjectToWindowRule"); }
public RelNode convert(RelNode rel) { final Calc calc = (Calc) rel; // If there's a multiset, let FarragoMultisetSplitter work on it // first. if (RexMultisetUtil.containsMultiset(calc.getProgram())) { return null; } return new JdbcCalc(rel.getCluster(), rel.getTraitSet().replace(out), convert(calc.getInput(), calc.getTraitSet().replace(out)), calc.getProgram()); } }
public RelNode convert(RelNode rel) { final Calc calc = (Calc) rel; // If there's a multiset, let FarragoMultisetSplitter work on it // first. if (RexMultisetUtil.containsMultiset(calc.getProgram())) { return null; } return new JdbcCalc(rel.getCluster(), rel.getTraitSet().replace(out), convert(calc.getInput(), calc.getTraitSet().replace(out)), calc.getProgram()); } }
public void onMatch(RelOptRuleCall call) { final Aggregate aggregate = call.rel(0); final Calc calc = call.rel(1); final RexProgram program = calc.getProgram(); final List<RexNode> projects = new ArrayList<>(); for (RexLocalRef localRef : program.getProjectList()) { projects.add(program.expandLocalRef(localRef)); } final Project project = LogicalProject.create(calc.getInput(), projects, calc.getRowType()); RelNode x = AggregateProjectMergeRule.apply(call, aggregate, project); if (x != null) { call.transformTo(x); } } }
public void onMatch(RelOptRuleCall call) { Calc calc = call.rel(0); assert RexOver.containsOver(calc.getProgram()); final CalcRelSplitter transform = new WindowedAggRelSplitter(calc, call.builder()); RelNode newRel = transform.execute(); call.transformTo(newRel); } }
public void onMatch(RelOptRuleCall call) { Calc calc = call.rel(0); assert RexOver.containsOver(calc.getProgram()); final CalcRelSplitter transform = new WindowedAggRelSplitter(calc, call.builder()); RelNode newRel = transform.execute(); call.transformTo(newRel); } }
/** * Constructs a CalcRelSplitter. * * @param calc Calc to split * @param relTypes Array of rel types, e.g. {Java, Fennel}. Must be * distinct. */ CalcRelSplitter(Calc calc, RelBuilder relBuilder, RelType[] relTypes) { this.relBuilder = relBuilder; for (int i = 0; i < relTypes.length; i++) { assert relTypes[i] != null; for (int j = 0; j < i; j++) { assert relTypes[i] != relTypes[j] : "Rel types must be distinct"; } } this.program = calc.getProgram(); this.cluster = calc.getCluster(); this.traits = calc.getTraitSet(); this.typeFactory = calc.getCluster().getTypeFactory(); this.child = calc.getInput(); this.relTypes = relTypes; }
/** * Constructs a CalcRelSplitter. * * @param calc Calc to split * @param relTypes Array of rel types, e.g. {Java, Fennel}. Must be * distinct. */ CalcRelSplitter(Calc calc, RelBuilder relBuilder, RelType[] relTypes) { this.relBuilder = relBuilder; for (int i = 0; i < relTypes.length; i++) { assert relTypes[i] != null; for (int j = 0; j < i; j++) { assert relTypes[i] != relTypes[j] : "Rel types must be distinct"; } } this.program = calc.getProgram(); this.cluster = calc.getCluster(); this.traits = calc.getTraitSet(); this.typeFactory = calc.getCluster().getTypeFactory(); this.child = calc.getInput(); this.relTypes = relTypes; }
@Override public void onMatch(RelOptRuleCall call) { final Calc calc = call.rel(0); final Pair<ImmutableList<RexNode>, ImmutableList<RexNode>> projectFilter = calc.getProgram().split(); final RelBuilder relBuilder = call.builder(); relBuilder.push(calc.getInput()); relBuilder.filter(projectFilter.right); relBuilder.project(projectFilter.left, calc.getRowType().getFieldNames()); call.transformTo(relBuilder.build()); } }
@Override public void onMatch(RelOptRuleCall call) { final Calc calc = call.rel(0); final Pair<ImmutableList<RexNode>, ImmutableList<RexNode>> projectFilter = calc.getProgram().split(); final RelBuilder relBuilder = call.builder(); relBuilder.push(calc.getInput()); relBuilder.filter(projectFilter.right); relBuilder.project(projectFilter.left, calc.getRowType().getFieldNames()); call.transformTo(relBuilder.build()); } }
public Result visitCalc(Calc e) { Result x = visitChild(0, e.getInput()); final RexProgram program = e.getProgram(); Builder builder = program.getCondition() != null ? x.builder(e, Clause.WHERE) : x.builder(e); if (!isStar(program)) { final List<SqlNode> selectList = new ArrayList<>(); for (RexLocalRef ref : program.getProjectList()) { SqlNode sqlExpr = builder.context.toSql(program, ref); addSelect(selectList, sqlExpr, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); } if (program.getCondition() != null) { builder.setWhere( builder.context.toSql(program, program.getCondition())); } return builder.result(); }