Code Correction:- *planner.removeRule(JoinPushThroughJoinRule.LEFT);*
On Tue, May 8, 2018 at 8:16 PM, Krishnakant Agrawal <[email protected]> wrote: > Hi All, > > I am using the VolcanoPlanner(with Default Rules) to optimize a RelNode > which has a Join as below:- > > LogicalJoin(condition=[AND(AND(AND(=($1, $46), =(CAST($11):FLOAT NOT > NULL, $47)), <>($46, -999)), <>($47, -999))], joinType=[left]) > LogicalTableScan(table=[[defaultschema, table1]]) > LogicalTableScan(table=[[defaultschema, table2]]) > > I removed the JoinPushThroughJoin.LEFT as the Planner never exits if BOTH > RIGHT & LEFT of this rule is in RuleSet. Reference to:- > https://issues.apache.org/jira/browse/CALCITE-1503 > > The setup code for planner:- > > *RelOptPlanner planner = cluster.planner;* > *planner.removeRule(JoinPushThroughJoinRule.RIGHT);* > *RelNode convertedRel = planner.changeTraits(originalRel, > originalRel.traitSet.replace(EnumerableConvention.INSTANCE).simplify());* > *planner.setRoot(convertedRel);* > *planner.findBestExp();* > > Now the RelNode that was returned has the following:- > > EnumerableThetaJoin(condition=[AND(AND(AND(=($1, $47), =($43, $48)),* $95*), > *$96*)], joinType=[left]) > EnumerableProject(.....) > EnumerableTableScan(table=[[defaultschema, table1]]) > EnumerableProject(......,$f51=[<>($3, -999)], $f52=[<>($4, -999)]) > EnumerableTableScan(table=[[defaultschema, table2]]) > > If we observe the underlined parts of Join Condition of the > EnumerableThetaJoin, those are RexInputRef which was added to the Project > of Second TableScan. > Now when I use RelToSqlConverter to create a SqlString out of rel, it > expects all the conditions Operands to be an instance of > RexCall > (calcite-core-1.14.0-sources.jar!/org/apache/calcite/rel/rel2sql/SqlImplementor.java:273) > but it gets a RexInputRef and throws an AssertionError. > > Can somebody shed light on which Rule is responsible for doing so or am I > Initializing the planner incorrectly? > > >
