mengdou created CALCITE-5260: -------------------------------- Summary: The bindings should properly pop last added RelNode when fail to match a subtree Key: CALCITE-5260 URL: https://issues.apache.org/jira/browse/CALCITE-5260 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.31.0 Reporter: mengdou Attachments: image-2022-09-01-19-34-04-600.png, image-2022-09-01-19-36-29-325.png, image-2022-09-01-19-41-48-852.png, image-2022-09-01-19-42-08-804.png
First I define a pattern(For demonstration) like this: {code:java} // pattern like this, using 'unordered' child policy for MultiJoin operandJ(MultiJoin.class, ... unordered( operand(Project.class, ... operand(TableScan.class, ...)))) {code} Then there is a RelNode tree like this: {code:java} MultiJoin Project Filter -- matched unsuccessfully and jump out TableScan Project TableScan -- matched successfully{code} and HepPlanner adds temporary nodes into 'bindings' list when applying a rule and trying to match operands: !image-2022-09-01-19-34-04-600.png! When fail to match a subtree, HepPlanner would jump out immediately and try other possible subtrees, but DO NOT pop the last added node: !image-2022-09-01-19-36-29-325.png! If HepPlanner matches a subtree for current rule finally, it will constructs a HepRuleCall using bindings as the matched relnodes, which contains unnecessary nodes yet !image-2022-09-01-19-41-48-852.png! And an assertion in constructor fails !image-2022-09-01-19-42-08-804.png! -- This message was sent by Atlassian Jira (v8.20.10#820010)