RelBuilder relBuilder) { final CorelMap corelMap = new CorelMapBuilder().build(rootRel); if (!corelMap.hasCorrelation()) { return rootRel;
RelBuilder relBuilder) { final CorelMap corelMap = new CorelMapBuilder().build(rootRel); if (!corelMap.hasCorrelation()) { return rootRel;
/** Decorrelates a query. * * <p>This is the main entry point to {@code RelDecorrelator}. * * @param rootRel Root node of the query * * @return Equivalent query with all * {@link org.apache.calcite.rel.logical.LogicalCorrelate} instances removed */ public static RelNode decorrelateQuery(RelNode rootRel) { final CorelMap corelMap = new CorelMapBuilder().build(rootRel); if (!corelMap.hasCorrelation()) { return rootRel; } final RelOptCluster cluster = rootRel.getCluster(); final RelDecorrelator decorrelator = new RelDecorrelator(cluster, corelMap, cluster.getPlanner().getContext()); RelNode newRootRel = decorrelator.removeCorrelationViaRule(rootRel); if (SQL2REL_LOGGER.isDebugEnabled()) { SQL2REL_LOGGER.debug( RelOptUtil.dumpPlan("Plan after removing Correlator", newRootRel, SqlExplainFormat.TEXT, SqlExplainLevel.EXPPLAN_ATTRIBUTES)); } if (!decorrelator.cm.mapCorToCorRel.isEmpty()) { newRootRel = decorrelator.decorrelate(newRootRel); } return newRootRel; }
/** Creates a CorelMap with given contents. */ public static CorelMap of( SortedSetMultimap<RelNode, CorRef> mapRefRelToCorVar, SortedMap<CorrelationId, RelNode> mapCorToCorRel, Map<RexFieldAccess, CorRef> mapFieldAccessToCorVar) { return new CorelMap(mapRefRelToCorVar, mapCorToCorRel, mapFieldAccessToCorVar); }
/** Creates a CorelMap by iterating over a {@link RelNode} tree. */ CorelMap build(RelNode... rels) { for (RelNode rel : rels) { stripHep(rel).accept(this); } return new CorelMap(mapRefRelToCorRef, mapCorToCorRel, mapFieldAccessToCorVar); }
/** Creates a CorelMap with given contents. */ public static CorelMap of( SortedSetMultimap<RelNode, CorRef> mapRefRelToCorVar, SortedMap<CorrelationId, RelNode> mapCorToCorRel, Map<RexFieldAccess, CorRef> mapFieldAccessToCorVar) { return new CorelMap(mapRefRelToCorVar, mapCorToCorRel, mapFieldAccessToCorVar); }
/** Creates a CorelMap with given contents. */ public static CorelMap of( SortedSetMultimap<RelNode, CorRef> mapRefRelToCorVar, SortedMap<CorrelationId, RelNode> mapCorToCorRel, Map<RexFieldAccess, CorRef> mapFieldAccessToCorVar) { return new CorelMap(mapRefRelToCorVar, mapCorToCorRel, mapFieldAccessToCorVar); }
/** Creates a CorelMap by iterating over a {@link RelNode} tree. */ CorelMap build(RelNode... rels) { for (RelNode rel : rels) { stripHep(rel).accept(this); } return new CorelMap(mapRefRelToCorRef, mapCorToCorRel, mapFieldAccessToCorVar); }
/** Creates a CorelMap by iterating over a {@link RelNode} tree. */ CorelMap build(RelNode... rels) { for (RelNode rel : rels) { stripHep(rel).accept(this); } return new CorelMap(mapRefRelToCorRef, mapCorToCorRel, mapFieldAccessToCorVar); }