[jira] [Updated] (CALCITE-5289) Assertion failure in MultiJoinOptimizeBushyRule

2024-04-18 Thread Alessandro Solimando (Jira)


 [ 
https://issues.apache.org/jira/browse/CALCITE-5289?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alessandro Solimando updated CALCITE-5289:
--
Fix Version/s: 1.37.0

> Assertion failure in MultiJoinOptimizeBushyRule
> ---
>
> Key: CALCITE-5289
> URL: https://issues.apache.org/jira/browse/CALCITE-5289
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.32.0, 1.35.0
>Reporter: Mihai Budiu
>Assignee: Mou Wu
>Priority: Minor
>  Labels: pull-request-available
> Fix For: 1.37.0
>
>
> The reproduction is easy: just modify the following test case from 
> PlannerTest.java:
>  
> — a/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
> +++ b/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
> {}@@ -1005,7 +1005,7 @@ private void checkJoinNWay(int n) throws 
> Exception {{}
> {{private void checkHeuristic(String sql, String expected) throws Exception 
> {}}
> {{ Planner planner = getPlanner(null,}}
> {{-    Programs.heuristicJoinOrder(Programs.RULE_SET, false, 0));}}
> {{+    Programs.heuristicJoinOrder(Programs.RULE_SET, true, 0));}}
> {{ SqlNode parse = planner.parse(sql);}}
> {{ SqlNode validate = planner.validate(parse);}}
> {{     RelNode convert = planner.rel(validate).rel;}}
>  
> Then the test fails with the exception shown below. This happens with the 
> latest version of calcite, the main branch.
> It looks like the rule does not account for the fact that outer joins can 
> produce results with a different nullability than the input relations.
> The exception can be triggered even for very simple outer join queries, e.g.: 
> SELECT T1.COL3 FROM T AS T1 LEFT JOIN T AS T2 ON T1.COL1 = T2.COL5
>  
> The only workaround I found is to make sure this rule is never applied when a 
> query contains an outer join.
>  
> Here is the Java stack trace:
> {{java.lang.RuntimeException: Error while applying rule 
> MultiJoinOptimizeBushyRule, args 
> [rel#44:MultiJoin.NONE.[](input#0=RelSubset#42,input#1=RelSubset#43,joinFilter=true,isFullOuterJoin=false,joinTypes=[RIGHT,
>  INNER],outerJoinConditions=[=($0, $10), NULL],projFields=[ALL, ALL])]}}
>  
> {{   at 
> org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:250)}}
> {{   at 
> org.apache.calcite.plan.volcano.IterativeRuleDriver.drive(IterativeRuleDriver.java:59)}}
> {{   at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:523)}}
> {{   at 
> org.apache.calcite.tools.Programs$RuleSetProgram.run(Programs.java:318)}}
> {{   at 
> org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:337)}}
> {{   at 
> org.apache.calcite.tools.Programs.lambda$heuristicJoinOrder$1(Programs.java:223)}}
> {{   at 
> org.apache.calcite.prepare.PlannerImpl.transform(PlannerImpl.java:373)}}
> {{   at 
> org.apache.calcite.tools.PlannerTest.checkHeuristic(PlannerTest.java:1014)}}
> {{   at 
> org.apache.calcite.tools.PlannerTest.testHeuristicRightJoin(PlannerTest.java:1003)}}
> {{   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)}}
> {{   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}}
> {{   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}}
> {{   at java.lang.reflect.Method.invoke(Method.java:498)}}
> {{   at 
> org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)}}
> {{   at 
> org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)}}
> {{   at 
> org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)}}
> {{   at 
> org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)}}
> {{   at 
> org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)}}
> {{   at 
> org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)}}
> {{   at 
> 

[jira] [Updated] (CALCITE-5289) Assertion failure in MultiJoinOptimizeBushyRule

2024-04-17 Thread ASF GitHub Bot (Jira)


 [ 
https://issues.apache.org/jira/browse/CALCITE-5289?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated CALCITE-5289:

Labels: pull-request-available  (was: )

> Assertion failure in MultiJoinOptimizeBushyRule
> ---
>
> Key: CALCITE-5289
> URL: https://issues.apache.org/jira/browse/CALCITE-5289
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.32.0, 1.35.0
>Reporter: Mihai Budiu
>Assignee: Mou Wu
>Priority: Minor
>  Labels: pull-request-available
>
> The reproduction is easy: just modify the following test case from 
> PlannerTest.java:
>  
> — a/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
> +++ b/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
> {}@@ -1005,7 +1005,7 @@ private void checkJoinNWay(int n) throws 
> Exception {{}
> {{private void checkHeuristic(String sql, String expected) throws Exception 
> {}}
> {{ Planner planner = getPlanner(null,}}
> {{-    Programs.heuristicJoinOrder(Programs.RULE_SET, false, 0));}}
> {{+    Programs.heuristicJoinOrder(Programs.RULE_SET, true, 0));}}
> {{ SqlNode parse = planner.parse(sql);}}
> {{ SqlNode validate = planner.validate(parse);}}
> {{     RelNode convert = planner.rel(validate).rel;}}
>  
> Then the test fails with the exception shown below. This happens with the 
> latest version of calcite, the main branch.
> It looks like the rule does not account for the fact that outer joins can 
> produce results with a different nullability than the input relations.
> The exception can be triggered even for very simple outer join queries, e.g.: 
> SELECT T1.COL3 FROM T AS T1 LEFT JOIN T AS T2 ON T1.COL1 = T2.COL5
>  
> The only workaround I found is to make sure this rule is never applied when a 
> query contains an outer join.
>  
> Here is the Java stack trace:
> {{java.lang.RuntimeException: Error while applying rule 
> MultiJoinOptimizeBushyRule, args 
> [rel#44:MultiJoin.NONE.[](input#0=RelSubset#42,input#1=RelSubset#43,joinFilter=true,isFullOuterJoin=false,joinTypes=[RIGHT,
>  INNER],outerJoinConditions=[=($0, $10), NULL],projFields=[ALL, ALL])]}}
>  
> {{   at 
> org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:250)}}
> {{   at 
> org.apache.calcite.plan.volcano.IterativeRuleDriver.drive(IterativeRuleDriver.java:59)}}
> {{   at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:523)}}
> {{   at 
> org.apache.calcite.tools.Programs$RuleSetProgram.run(Programs.java:318)}}
> {{   at 
> org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:337)}}
> {{   at 
> org.apache.calcite.tools.Programs.lambda$heuristicJoinOrder$1(Programs.java:223)}}
> {{   at 
> org.apache.calcite.prepare.PlannerImpl.transform(PlannerImpl.java:373)}}
> {{   at 
> org.apache.calcite.tools.PlannerTest.checkHeuristic(PlannerTest.java:1014)}}
> {{   at 
> org.apache.calcite.tools.PlannerTest.testHeuristicRightJoin(PlannerTest.java:1003)}}
> {{   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)}}
> {{   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}}
> {{   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}}
> {{   at java.lang.reflect.Method.invoke(Method.java:498)}}
> {{   at 
> org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)}}
> {{   at 
> org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)}}
> {{   at 
> org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)}}
> {{   at 
> org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)}}
> {{   at 
> org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)}}
> {{   at 
> org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)}}
> {{   at 
> 

[jira] [Updated] (CALCITE-5289) Assertion failure in MultiJoinOptimizeBushyRule

2023-07-27 Thread Mihai Budiu (Jira)


 [ 
https://issues.apache.org/jira/browse/CALCITE-5289?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mihai Budiu updated CALCITE-5289:
-
Affects Version/s: 1.35.0

> Assertion failure in MultiJoinOptimizeBushyRule
> ---
>
> Key: CALCITE-5289
> URL: https://issues.apache.org/jira/browse/CALCITE-5289
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.32.0, 1.35.0
>Reporter: Mihai Budiu
>Assignee: Mou Wu
>Priority: Minor
>
> The reproduction is easy: just modify the following test case from 
> PlannerTest.java:
>  
> — a/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
> +++ b/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
> {}@@ -1005,7 +1005,7 @@ private void checkJoinNWay(int n) throws 
> Exception {{}
> {{private void checkHeuristic(String sql, String expected) throws Exception 
> {}}
> {{ Planner planner = getPlanner(null,}}
> {{-    Programs.heuristicJoinOrder(Programs.RULE_SET, false, 0));}}
> {{+    Programs.heuristicJoinOrder(Programs.RULE_SET, true, 0));}}
> {{ SqlNode parse = planner.parse(sql);}}
> {{ SqlNode validate = planner.validate(parse);}}
> {{     RelNode convert = planner.rel(validate).rel;}}
>  
> Then the test fails with the exception shown below. This happens with the 
> latest version of calcite, the main branch.
> It looks like the rule does not account for the fact that outer joins can 
> produce results with a different nullability than the input relations.
> The exception can be triggered even for very simple outer join queries, e.g.: 
> SELECT T1.COL3 FROM T AS T1 LEFT JOIN T AS T2 ON T1.COL1 = T2.COL5
>  
> The only workaround I found is to make sure this rule is never applied when a 
> query contains an outer join.
>  
> Here is the Java stack trace:
> {{java.lang.RuntimeException: Error while applying rule 
> MultiJoinOptimizeBushyRule, args 
> [rel#44:MultiJoin.NONE.[](input#0=RelSubset#42,input#1=RelSubset#43,joinFilter=true,isFullOuterJoin=false,joinTypes=[RIGHT,
>  INNER],outerJoinConditions=[=($0, $10), NULL],projFields=[ALL, ALL])]}}
>  
> {{   at 
> org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:250)}}
> {{   at 
> org.apache.calcite.plan.volcano.IterativeRuleDriver.drive(IterativeRuleDriver.java:59)}}
> {{   at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:523)}}
> {{   at 
> org.apache.calcite.tools.Programs$RuleSetProgram.run(Programs.java:318)}}
> {{   at 
> org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:337)}}
> {{   at 
> org.apache.calcite.tools.Programs.lambda$heuristicJoinOrder$1(Programs.java:223)}}
> {{   at 
> org.apache.calcite.prepare.PlannerImpl.transform(PlannerImpl.java:373)}}
> {{   at 
> org.apache.calcite.tools.PlannerTest.checkHeuristic(PlannerTest.java:1014)}}
> {{   at 
> org.apache.calcite.tools.PlannerTest.testHeuristicRightJoin(PlannerTest.java:1003)}}
> {{   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)}}
> {{   at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}}
> {{   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}}
> {{   at java.lang.reflect.Method.invoke(Method.java:498)}}
> {{   at 
> org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)}}
> {{   at 
> org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)}}
> {{   at 
> org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)}}
> {{   at 
> org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)}}
> {{   at 
> org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)}}
> {{   at 
> org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)}}
> {{   at 
> org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)}}
> {{   at 
> org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)}}
> {{   at 
> 

[jira] [Updated] (CALCITE-5289) Assertion failure in MultiJoinOptimizeBushyRule

2022-09-19 Thread Mihai Budiu (Jira)


 [ 
https://issues.apache.org/jira/browse/CALCITE-5289?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mihai Budiu updated CALCITE-5289:
-
Description: 
The reproduction is easy: just modify the following test case from 
PlannerTest.java:

 

— a/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
+++ b/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
{}@@ -1005,7 +1005,7 @@ private void checkJoinNWay(int n) throws Exception 
{{}

{{private void checkHeuristic(String sql, String expected) throws Exception {}}
{{ Planner planner = getPlanner(null,}}
{{-    Programs.heuristicJoinOrder(Programs.RULE_SET, false, 0));}}
{{+    Programs.heuristicJoinOrder(Programs.RULE_SET, true, 0));}}
{{ SqlNode parse = planner.parse(sql);}}
{{ SqlNode validate = planner.validate(parse);}}
{{     RelNode convert = planner.rel(validate).rel;}}

 

Then the test fails with the exception shown below. This happens with the 
latest version of calcite, the main branch.

It looks like the rule does not account for the fact that outer joins can 
produce results with a different nullability than the input relations.

The exception can be triggered even for very simple outer join queries, e.g.: 
SELECT T1.COL3 FROM T AS T1 LEFT JOIN T AS T2 ON T1.COL1 = T2.COL5

 

The only workaround I found is to make sure this rule is never applied when a 
query contains an outer join.

 

Here is the Java stack trace:

{{java.lang.RuntimeException: Error while applying rule 
MultiJoinOptimizeBushyRule, args 
[rel#44:MultiJoin.NONE.[](input#0=RelSubset#42,input#1=RelSubset#43,joinFilter=true,isFullOuterJoin=false,joinTypes=[RIGHT,
 INNER],outerJoinConditions=[=($0, $10), NULL],projFields=[ALL, ALL])]}}

 

{{   at 
org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:250)}}

{{   at 
org.apache.calcite.plan.volcano.IterativeRuleDriver.drive(IterativeRuleDriver.java:59)}}

{{   at 
org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:523)}}

{{   at 
org.apache.calcite.tools.Programs$RuleSetProgram.run(Programs.java:318)}}

{{   at 
org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:337)}}

{{   at 
org.apache.calcite.tools.Programs.lambda$heuristicJoinOrder$1(Programs.java:223)}}

{{   at 
org.apache.calcite.prepare.PlannerImpl.transform(PlannerImpl.java:373)}}

{{   at 
org.apache.calcite.tools.PlannerTest.checkHeuristic(PlannerTest.java:1014)}}

{{   at 
org.apache.calcite.tools.PlannerTest.testHeuristicRightJoin(PlannerTest.java:1003)}}

{{   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)}}

{{   at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}}

{{   at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}}

{{   at java.lang.reflect.Method.invoke(Method.java:498)}}

{{   at 
org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)}}

{{   at 
org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)}}

{{   at 
org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)}}

{{   at 
org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)}}

{{   at 
org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)}}

{{   at 
org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)}}

{{   at 
org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)}}

{{   at 
org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)}}

{{   at 
org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)}}

{{   at 

[jira] [Updated] (CALCITE-5289) Assertion failure in MultiJoinOptimizeBushyRule

2022-09-19 Thread Mihai Budiu (Jira)


 [ 
https://issues.apache.org/jira/browse/CALCITE-5289?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mihai Budiu updated CALCITE-5289:
-
Description: 
The reproduction is easy: just modify the following test case from 
PlannerTest.java:

 

--- a/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
+++ b/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
@@ -1005,7 +1005,7 @@ private void checkJoinNWay(int n) throws Exception 
{

{{private void checkHeuristic(String sql, String expected) throws Exception {}}
{{ Planner planner = getPlanner(null,}}
{{-    Programs.heuristicJoinOrder(Programs.RULE_SET, false, 0));}}
{{+    Programs.heuristicJoinOrder(Programs.RULE_SET, true, 0));}}
{{ SqlNode parse = planner.parse(sql);}}
{{ SqlNode validate = planner.validate(parse);}}
{{ {{    RelNode convert = planner.rel(validate).rel;

 

Then the test fails with the exception shown below. This happens with the 
latest version of calcite, the main branch.

It looks like the rule does not account for the fact that outer joins can 
produce results with a different nullability than the input relations.

The exception can be triggered even for very simple outer join queries, e.g.: 
SELECT T1.COL3 FROM T AS T1 LEFT JOIN T AS T2 ON T1.COL1 = T2.COL5

 

The only workaround I found is to make sure this rule is never applied when a 
query contains an outer join.

 

Here is the Java stack trace:

{{java.lang.RuntimeException: Error while applying rule 
MultiJoinOptimizeBushyRule, args 
[rel#44:MultiJoin.NONE.[](input#0=RelSubset#42,input#1=RelSubset#43,joinFilter=true,isFullOuterJoin=false,joinTypes=[RIGHT,
 INNER],outerJoinConditions=[=($0, $10), NULL],projFields=[ALL, ALL])]}}

 

{{   at 
org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:250)}}

{{   at 
org.apache.calcite.plan.volcano.IterativeRuleDriver.drive(IterativeRuleDriver.java:59)}}

{{   at 
org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:523)}}

{{   at 
org.apache.calcite.tools.Programs$RuleSetProgram.run(Programs.java:318)}}

{{   at 
org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:337)}}

{{   at 
org.apache.calcite.tools.Programs.lambda$heuristicJoinOrder$1(Programs.java:223)}}

{{   at 
org.apache.calcite.prepare.PlannerImpl.transform(PlannerImpl.java:373)}}

{{   at 
org.apache.calcite.tools.PlannerTest.checkHeuristic(PlannerTest.java:1014)}}

{{   at 
org.apache.calcite.tools.PlannerTest.testHeuristicRightJoin(PlannerTest.java:1003)}}

{{   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)}}

{{   at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}}

{{   at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}}

{{   at java.lang.reflect.Method.invoke(Method.java:498)}}

{{   at 
org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)}}

{{   at 
org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)}}

{{   at 
org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)}}

{{   at 
org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)}}

{{   at 
org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)}}

{{   at 
org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)}}

{{   at 
org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)}}

{{   at 
org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)}}

{{   at 
org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)}}

{{   at 
org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)}}

{{   at