git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Volcano Planner spitting out EnumerableThetaJoin with RexInputRef in On Condition


Code Correction:-

*planner.removeRule(JoinPushThroughJoinRule.LEFT);*

On Tue, May 8, 2018 at 8:16 PM, Krishnakant Agrawal <kk.agrawal19@xxxxxxxxx>
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?
>
>
>