public boolean traverse(RelNode root) { root.accept(this); return mightRequireValueGen; } }
public void validate(RelNode relNode) { try { relNode.accept(this); } catch (Util.FoundOne e) { // Can ignore - the check failed. } }
@Override public Void visitSubQuery(RexSubQuery subQuery) { subQuery.rel.accept(CorelMapBuilder.this); return super.visitSubQuery(subQuery); } };
/** Creates a CorelMap by iterating over a {@link RelNode} tree. */ CorelMap build(RelNode rel) { stripHep(rel).accept(this); return new CorelMap(mapRefRelToCorRef, mapCorToCorRel, mapFieldAccessToCorVar); }
@Override public Void visitSubQuery(RexSubQuery subQuery) { subQuery.rel.accept(CorelMapBuilder.this); return super.visitSubQuery(subQuery); } };
/** Creates a CorelMap by iterating over a {@link RelNode} tree. */ CorelMap build(RelNode rel) { stripHep(rel).accept(this); return new CorelMap(mapRefRelToCorRef, mapCorToCorRel, mapFieldAccessToCorVar); }
@Override public RelNode visit(RelNode other) { if (other instanceof RelSubset) { return ((RelSubset) other).getBest().accept(this); } else { return super.visit(other); } }
/** * Visits a particular child of a parent. */ protected RelNode visitChild(RelNode parent, int i, RelNode child) { Stacks.push(stack, parent); try { RelNode child2 = child.accept(this); if (child2 != child) { final List<RelNode> newInputs = new ArrayList<RelNode>(parent.getInputs()); newInputs.set(i, child2); return parent.copy(parent.getTraitSet(), newInputs); } return parent; } finally { Stacks.pop(stack, parent); } }
/** * Visits a particular child of a parent. */ protected RelNode visitChild(RelNode parent, int i, RelNode child) { Stacks.push(stack, parent); try { RelNode child2 = child.accept(this); if (child2 != child) { final List<RelNode> newInputs = new ArrayList<RelNode>(parent.getInputs()); newInputs.set(i, child2); return parent.copy(parent.getTraitSet(), newInputs); } return parent; } finally { Stacks.pop(stack, parent); } }
rel.accept( new CorrelationReferenceFinder() { protected RexNode handle(RexFieldAccess fieldAccess) {
public JdbcPrel(RelOptCluster cluster, RelTraitSet traitSet, JdbcIntermediatePrel prel) { super(cluster, traitSet); final RelNode input = prel.getInput(); rows = input.estimateRowCount(cluster.getMetadataQuery()); convention = (DrillJdbcConvention) input.getTraitSet().getTrait(ConventionTraitDef.INSTANCE); // generate sql for tree. final SqlDialect dialect = convention.getPlugin().getDialect(); final JdbcImplementor jdbcImplementor = new JdbcImplementor( dialect, (JavaTypeFactory) getCluster().getTypeFactory()); final JdbcImplementor.Result result = jdbcImplementor.visitChild(0, input.accept(new SubsetRemover())); sql = result.asStatement().toSqlString(dialect).getSql(); rowType = input.getRowType(); }
@Override public RelNode apply(RelNode input) { return input.accept(CopyWithCluster.this); } };
private RelNode convertRelSubsets(RelNode root) { return root.accept(new RoutingShuttle() { @Override public RelNode visit(RelNode other) { if (other instanceof RelSubset) { return visit(((RelSubset) other).getBest()); } return super.visit(other); } }); }
@Override protected RelNode visitChild(RelNode parent, int i, RelNode child) { RelNode newParent = parent.accept(flattener); return super.visitChild(newParent, i, newParent.getInput(i)); } }
@Override public RelNode visit(RelNode other) { if ((other instanceof ContainerRel)) { ((ContainerRel) other).getSubTree().accept(this); } return super.visit(other); } }
private final com.dremio.exec.planner.sql.handlers.RelTransformer getPostStripNormalizer(MaterializationDescriptor descriptor) { // for incremental update, we need to rewrite the queryRel so that it propagates the UPDATE_COLUMN and // adds it as a grouping key in aggregates if (!descriptor.getIncrementalUpdateSettings().isIncremental()) { return com.dremio.exec.planner.sql.handlers.RelTransformer.NO_OP_TRANSFORMER; } final RelShuttle shuttle = Optional.ofNullable(descriptor.getIncrementalUpdateSettings().getUpdateField()) .map(IncrementalUpdateUtils.SubstitutionShuttle::new) .orElse(IncrementalUpdateUtils.FILE_BASED_SUBSTITUTION_SHUTTLE); return (rel) -> rel.accept(shuttle); }
@Override public RelNode visit(RelNode other) { other.collectVariablesUsed(vuv.variables); other.accept(vuv); RelNode result = super.visit(other); // Important! Remove stopped variables AFTER we visit // children. (which what super.visit() does) vuv.variables.removeAll(other.getVariablesSet()); return result; } }
@Override public RelNode copyWith(CopyWithCluster copier) { final RelNode copiedSubTree = getSubTree().accept(copier); return new JdbcRel( copier.getCluster(), getTraitSet(), copiedSubTree ); } }
@Override public RelNode visit(LogicalProject project) { final RelNode input = project.getInput().accept(this); return new LogicalProject( cluster, copyOf(project.getTraitSet()), input, Lists.transform(project.getProjects(), COPY_REX_NODE), copyOf(project.getRowType()) ); }
@Override protected RelNode visitChild(RelNode parent, int i, RelNode child) { if (child instanceof HepRelVertex) { child = ((HepRelVertex) child).getCurrentRel(); } else if (child instanceof RelSubset) { RelSubset subset = (RelSubset) child; child = Util.first(subset.getBest(), subset.getOriginal()); } return super.visitChild(parent, i, child).accept(rexVisitor); } }