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