Thanks. I've replied there. (I also added a bit of markup to your description.)
https://issues.apache.org/jira/browse/CALCITE-1593 On Thu, Jan 19, 2017 at 12:35 PM, Γιώργος Θεοδωράκης <[email protected]> wrote: > I created a JIRA issue (I hope I did it right as it is my first). Thank you > Julian. > > 2017-01-19 22:12 GMT+02:00 Julian Hyde <[email protected]>: > >> Can you log a JIRA case for this? I will answer there. >> >> On Thu, Jan 19, 2017 at 11:25 AM, Γιώργος Θεοδωράκης >> <[email protected]> wrote: >> > Hello, >> > >> > I have created my own operators and Convention to apply my custom cost >> > logic. I have tried many rules with both Volcano and HepPlanner and >> > everything works fine. When I apply LoptOptimizeRule I get the correct >> > output. However, when I try to use: >> > JoinPushThroughJoinRule.LEFT, >> > JoinPushThroughJoinRule.RIGHT, >> > JoinAssociateRule.INSTANCE, >> > JoinCommuteRule.INSTANCE >> > something goes wrong. I try to apply them in VolcanoPlanner in the same >> > step I use my converter rules to change the initial Logical Operators to >> > the custom ones. >> > I declare them as: >> > static final RelOptRule SABER_JOIN_PUSH_THROUGH_JOIN_RULE_RIGHT = new >> > JoinPushThroughJoinRule("JoinPushThroughJoinRule", true, >> > SaberJoinRel.class, SaberRelFactories.SABER_LOGICAL_BUILDER); >> > static final RelOptRule SABER_JOIN_PUSH_THROUGH_JOIN_RULE_LEFT = new >> > JoinPushThroughJoinRule("JoinPushThroughJoinRule", false, >> > SaberJoinRel.class, SaberRelFactories.SABER_LOGICAL_BUILDER); >> > >> > static final RelOptRule SABER_JOIN_COMMUTE_RULE = new >> > JoinCommuteRule(SaberJoinRel.class, >> > SaberRelFactories.SABER_LOGICAL_BUILDER, false); >> > So, when I use the four of them I get: >> > >> > Exception in thread "main" java.lang.AssertionError: Internal error: >> Error >> > while applying rule SaberProjectRule, args >> > [rel#171:LogicalProject.NONE.[](input=rel#170:Subset#20. >> LOGICAL.[],rowtime=$8,customerid=$9,phone=$10,rowtime0=$0,orderid=$1, >> productid=$2,units=$3,customerid0=$4,rowtime00=$5, >> productid0=$6,description=$7)] >> > at org.apache.calcite.util.Util.newInternal(Util.java:792) >> > at >> > org.apache.calcite.plan.volcano.VolcanoRuleCall. >> onMatch(VolcanoRuleCall.java:236) >> > at >> > org.apache.calcite.plan.volcano.VolcanoPlanner. >> findBestExp(VolcanoPlanner.java:819) >> > at org.apache.calcite.tools.Programs$RuleSetProgram.run( >> Programs.java:334) >> > at org.apache.calcite.prepare.PlannerImpl.transform( >> PlannerImpl.java:308) >> > at calcite.planner.SaberPlanner.getLogicalPlan(SaberPlanner.java:257) >> > at calcite.Tester.main(Tester.java:183) >> > Caused by: java.lang.AssertionError: Internal error: Error occurred while >> > applying rule SaberProjectRule >> > at org.apache.calcite.util.Util.newInternal(Util.java:792) >> > at >> > org.apache.calcite.plan.volcano.VolcanoRuleCall. >> transformTo(VolcanoRuleCall.java:148) >> > at >> > org.apache.calcite.plan.RelOptRuleCall.transformTo( >> RelOptRuleCall.java:225) >> > at >> > org.apache.calcite.rel.convert.ConverterRule.onMatch( >> ConverterRule.java:117) >> > at >> > org.apache.calcite.plan.volcano.VolcanoRuleCall. >> onMatch(VolcanoRuleCall.java:213) >> > ... 5 more >> > Caused by: org.apache.calcite.rel.metadata.CyclicMetadataException >> > at >> > org.apache.calcite.rel.metadata.CyclicMetadataException.<clinit>( >> CyclicMetadataException.java:28) >> > at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source) >> > at >> > org.apache.calcite.rel.metadata.RelMetadataQuery. >> getRowCount(RelMetadataQuery.java:201) >> > at >> > org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount. >> java:132) >> > at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source) >> > at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source) >> > at >> > org.apache.calcite.rel.metadata.RelMetadataQuery. >> getRowCount(RelMetadataQuery.java:201) >> > >> > .... >> > >> > If it helps, when I don't use JoinCommuteRule I don't get an exception, >> but >> > I get wrong result and when I don't use JoinAssociateRule I get: >> > >> > Exception in thread "main" java.lang.StackOverflowError >> > at >> > com.google.common.collect.ImmutableCollection.<init>( >> ImmutableCollection.java:157) >> > at com.google.common.collect.ImmutableList.<init>( >> ImmutableList.java:313) >> > at >> > com.google.common.collect.SingletonImmutableList.<init>( >> SingletonImmutableList.java:35) >> > at com.google.common.collect.ImmutableList.of(ImmutableList.java:76) >> > at org.apache.calcite.rel.SingleRel.getInputs(SingleRel.java:63) >> > at >> > org.apache.calcite.plan.volcano.RelSubset$CheapestPlanReplacer.visit( >> RelSubset.java:461) >> > >> > Thank you in advance, >> > George >>
