[ 
https://issues.apache.org/jira/browse/CALCITE-628?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14388065#comment-14388065
 ] 

Julian Hyde commented on CALCITE-628:
-------------------------------------

I agree that VolcanoPlanner should not call simplify. But I think 
RelOptRule.convert(RelNode, RelTrait) has to -- it needs to create a RelSubset, 
whose traits must be simple, whereas the RelNode might have complex traits. I 
could not get TestTraitPropagation.withoutHack to pass without it.

If you really want to preserve the traits call RelOptRule.convert(RelNode, 
RelTraitSet) instead.

I made a tweak to RelTraitSet.simplify to make it treat all traits equally, not 
give preference to trait 0. If there is 1 trait, it stays the same; if there 
are 2 or more, it reverts to the default trait.

You can see my changes in 
https://github.com/julianhyde/incubator-calcite/commit/74daae79ba4ff56a10f485cdfc9d99fc55324b71
 in my https://github.com/julianhyde/incubator-calcite/tree/CALCITE-606 branch.

Do you see any reason why I should not commit all of the changes I made in that 
branch? I think they are all for the good.

> Calcite hit Assertion Error when calling Frameworks.planner or 
> RelOptRule.convert(), if the target trait is composite  
> -----------------------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-628
>                 URL: https://issues.apache.org/jira/browse/CALCITE-628
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Jinfeng Ni
>            Assignee: Julian Hyde
>
> CALCITE-88 introduces the concept of RelCompositeTrait. As such, Calcite 
> seems to require that each new RelSubSet should only have simple trait, in 
> stead of composite traits. If that condition is not meet, an assertion will 
> be thrown.
> However, when we use Frameworks.planner to call transform(),  or use 
> RelOptRule to call convert() method, there is no guarantee that the target 
> traits are simple.  If the target traits happened to be composite, then 
> Calcite will hit Assertion at RelSubset.java:108.
> There seems to be two options to fix this Assertion and ensure RelSubset only 
> have simple traitsets :
> 1) Follow the way Prepare.optimize(), and call simplify() for the target 
> traitset, in both PlannerImpl.transform() or RelOptRule.convert().
> 2) Each callers of transform(), or convert() method should make sure the 
> target traits are simple.
> The patch I'm going to submit uses the 1st option, using the same logic in 
> Prepare.optimize().
>  



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to