[
https://issues.apache.org/jira/browse/CALCITE-7239?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
weihua zhang closed CALCITE-7239.
---------------------------------
Resolution: Not A Problem
> For the HepPlanner used to execute the SubQueryRemoveRule, its noDag property
> should be set to true
> ---------------------------------------------------------------------------------------------------
>
> Key: CALCITE-7239
> URL: https://issues.apache.org/jira/browse/CALCITE-7239
> Project: Calcite
> Issue Type: Test
> Reporter: weihua zhang
> Priority: Trivial
> Labels: pull-request-available
>
> {code:java}
> public PreparedResult prepareSql(
> SqlNode sqlQuery,
> SqlNode sqlNodeOriginal,
> Class<?> runtimeContextClass,
> SqlValidator validator,
> boolean needsValidation) {
> init(runtimeContextClass);
> final SqlToRelConverter.Config config =
> SqlToRelConverter.config()
> .withTrimUnusedFields(false)
> .withExpand(false);
> final Holder<SqlToRelConverter.Config> configHolder = Holder.of(config);
> Hook.SQL2REL_CONVERTER_CONFIG_BUILDER.run(configHolder);
> final SqlToRelConverter sqlToRelConverter =
> getSqlToRelConverter(validator, catalogReader, configHolder.get());
> // Convert the valid AST into a logical plan
> RelRoot root = sqlToRelConverter.convertQuery(sqlQuery, needsValidation,
> true);
> RelNode relNode = root.project();
> RelNode subQueryRemovedPlan =
> runProgram(
> ImmutableList.of(
> CoreRules.JOIN_SUB_QUERY_TO_CORRELATE,
> CoreRules.PROJECT_SUB_QUERY_TO_CORRELATE,
> CoreRules.FILTER_SUB_QUERY_TO_CORRELATE
> ),
> relNode);
> RelBuilder relBuilder =
> RelFactories.LOGICAL_BUILDER.create(root.rel.getCluster(), catalogReader);
> RelNode decorrelatedPlan =
> RelDecorrelator.decorrelateQuery(subQueryRemovedPlan, relBuilder);
> root = root.withRel(decorrelatedPlan);
> return implement(root);
> }
> private RelNode runProgram(List<RelOptRule> rules, RelNode currentNode) {
> HepProgramBuilder builder = new HepProgramBuilder();
> builder.addRuleCollection(rules);
> builder.addMatchOrder(HepMatchOrder.BOTTOM_UP);
> HepPlanner planner = new HepPlanner(builder.build(),
> currentNode.getCluster().getPlanner().getContext(),
> false, null, RelOptCostImpl.FACTORY); // if noDAG=false, will throw
> exception in some cases
> planner.setRoot(currentNode);
> return planner.findBestExp();
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)