Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Invalid
-
None
-
None
-
None
Description
Consider the following two hep programs.
Program 1:
final HepProgramBuilder programBuilder = new HepProgramBuilder(); programBuilder.addMatchOrder(HepMatchOrder.BOTTOM_UP); programBuilder.addRuleInstance(JoinToMultiJoinRule.INSTANCE); programBuilder.addRuleInstance(LoptOptimizeJoinRule.INSTANCE); final HepProgram program = programBuilder.build();
Program 2:
final HepProgramBuilder programBuilder = new HepProgramBuilder(); final HepProgramBuilder subprogramBuilder = new HepProgramBuilder(); subprogramBuilder.addMatchOrder(HepMatchOrder.BOTTOM_UP); subprogramBuilder.addRuleInstance(JoinToMultiJoinRule.INSTANCE); subprogramBuilder.addRuleInstance(LoptOptimizeJoinRule.INSTANCE); programBuilder.addSubprogram(subprogramBuilder.build()); final HepProgram program = programBuilder.build();
I would expect both programs to behave similarly. However, program 2 will loop indefinitely. The reason is that HepPlanner subprogram execution loops if subprogram generates any new expression.
https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java#L339
This does not seem right since planner can control exiting the program (and thus, subprogram) depending on its own internal state and configuration properties, e.g., match limit.
Attachments
Issue Links
- is related to
-
HIVE-21365 Refactor Hep planner steps in CBO
- Closed
- links to