Andrey Minogin created CALCITE-7902:
---------------------------------------

             Summary: Planning fails with "is a PhysicalNode, which is not 
allowed in JoinAssociateRule" when calcite.enable.join.commute=true
                 Key: CALCITE-7902
                 URL: https://issues.apache.org/jira/browse/CALCITE-7902
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.42.0
            Reporter: Andrey Minogin
         Attachments: JoinChain.java

With the documented system property calcite.enable.join.commute=true, the 
default planner fails on an ordinary inner join of three tables:

{noformat}
java.lang.RuntimeException: 
rel#226:EnumerableHashJoin.ENUMERABLE.[](left=RelSubset#69,right=EnumerableHashJoin#225,condition==($0,
 $4),joinType=inner) is a PhysicalNode, which is not allowed in 
JoinAssociateRule
{noformat}

Setup: Frameworks.getPlanner with Programs.standard() and default rules, 
Calcite 1.42.0, JDK 21. Tables are declared only (row type and row count, no 
data). Query:

{code:sql}
SELECT T0.ID AS ID0, T0.C AS C0, T1.ID AS ID1, T1.C AS C1, T2.ID AS ID2, T2.C 
AS C2
FROM T0 JOIN T1 ON T0.ID = T1.FK JOIN T2 ON T1.ID = T2.FK
WHERE T0.A > 10 AND T1.A < 900 AND T2.C > 0.5
{code}

Self-contained reproducer attached (JoinChain.java, calcite-core only):
{noformat}
java -Dcalcite.enable.join.commute=true -cp ... repro.JoinChain 3 false 3
{noformat}

Observations:
- Fails with 3 and 4 tables in the default (non-top-down) mode.
- Does not fail without the property.
- Does not fail with calcite.planner.topdown.opt=true.
- Does not fail when EnumerableMergeJoinRule is removed.

CoreRules.JOIN_ASSOCIATE is configured withOperandFor(Join.class), so it can 
match a physical join that is already registered in the RelSet, and 
VolcanoRuleCall.transformTo then rejects the result. Configuring the rule 
withOperandFor(LogicalJoin.class) avoids the failure in our runs. The same 
configuration is on main as of 2026-10-27.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to