[
https://issues.apache.org/jira/browse/CALCITE-2454?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yuzhao Chen updated CALCITE-2454:
---------------------------------
Description:
After CALCITE-2116, a RelNode will be reused based on digest, but now many
nodes's digests do not have type info, e.g. LogicalProject, this will affect
some rules when we wanna transform to a node with same digest and same type
(HepPlanner may pick out a RelNode with different type).
So, we should add type info just like VolcanoPlanner.
We encounter this problem with plan like below:
{code:java}
Union
+-- project1(a: int, b:int, c: double)
| +-- project2(a: bigint: b: int, c:double)
+-- project3
{code}
We wanna cast a from bigint -> int so we can have a union with project1 and
project3, but with ProjectMergeRule, while merging project1 and project2,
HepPlanner will think project2 and project1 are identical and it gives back
project2. But actually we wanna pick project1.
was:
After CALCITE-2116, a RelNode will be reused based on digest, but now many
nodes's digests do not have type info, e.g. LogicalProject, this will affect
some rules when we wanna transform to a node with same digest and same type
(HepPlanner may pick out a RelNode with different type).
So, we should add type info just like VolcanoPlanner.
> HepPlanner should not pick cached RelNode when type mismatch while digest
> matches
> ---------------------------------------------------------------------------------
>
> Key: CALCITE-2454
> URL: https://issues.apache.org/jira/browse/CALCITE-2454
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.17.0
> Reporter: Yuzhao Chen
> Assignee: Julian Hyde
> Priority: Major
> Fix For: 1.18.0
>
>
> After CALCITE-2116, a RelNode will be reused based on digest, but now many
> nodes's digests do not have type info, e.g. LogicalProject, this will affect
> some rules when we wanna transform to a node with same digest and same type
> (HepPlanner may pick out a RelNode with different type).
> So, we should add type info just like VolcanoPlanner.
> We encounter this problem with plan like below:
> {code:java}
> Union
> +-- project1(a: int, b:int, c: double)
> | +-- project2(a: bigint: b: int, c:double)
> +-- project3
> {code}
> We wanna cast a from bigint -> int so we can have a union with project1 and
> project3, but with ProjectMergeRule, while merging project1 and project2,
> HepPlanner will think project2 and project1 are identical and it gives back
> project2. But actually we wanna pick project1.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)