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
>>

Reply via email to