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

Alessandro Solimando commented on CALCITE-6852:
-----------------------------------------------

As [~rubenql] pointed out with a code comment, it seems to be working as 
intented, see for instance:

- CALCITE-1584

- [https://lists.apache.org/thread/gy5fyy7qtbfh9lm0o6jpkj9ct2zvnqmz]

and I recall other discussions around those lines in the last few years, the 
conclusion is always that Calcite is best effort on aliases and field names but 
there is no guarantee around that to leave more freedom to the planner, and 
they shouldn't be relied on.

In my understanding this makes sense, the planner reasons in terms of relations 
and what they are semantically made of (input relations - RelNodes, expressions 
- RexNodes and other metadata such as collations), but it doesn't (and it 
doesn't need to) check aliases when it comes to deciding equivalence of 
relations for building the equivalent rel subsets which are later used to 
compose the final plan.

A notable exception is the top-most project I think, as failing to name fields 
in the output would break correctness, but for any intermediate projection, 
that's internal machinery and field names are just cosmetics at that level, 
like variable names in an equations.

> Project's digest calculation error, should include FieldNames in rowType 
> -------------------------------------------------------------------------
>
>                 Key: CALCITE-6852
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6852
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.39.0
>            Reporter: Zhen Chen
>            Assignee: Zhen Chen
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.39.0
>
>         Attachments: image-2025-02-22-17-19-46-706.png, 
> image-2025-02-23-16-47-22-367.png, image-2025-02-23-16-53-03-724.png
>
>
> When I was building test cases for CALCITE-6850, I found that the results did 
> not meet my expectations. When debugging the code, I discovered that the 
> project's digest calculation did not include column names, This leads to the 
> inability to correctly find the correct project during the findBestExp 
> process.
> debug picture:
> !image-2025-02-22-17-19-46-706.png|width=553,height=245!
> I think we need to add column names in computing project's degist like this:
> {code:java}
> // code now
> protected int deepHashCode0() {
>   return Objects.hash(traitSet, input.deepHashCode(), exps, hints);
> }
> // should change to 
> protected int deepHashCode0() {
>   return Objects.hash(traitSet, input.deepHashCode(),
>     exps, hints, getRowType().getFieldNames()); 
> }{code}
> This change will affect some cases and the results of these cases need to be 
> fixed.
>  
> If calcite need this change, I can pull a pr. If this issue is not fixed, 
> there will be no way to find a case for issue CALCITE-6850. 
>  
> supplement:
> !image-2025-02-23-16-47-22-367.png|width=518,height=274!
> !image-2025-02-23-16-53-03-724.png|width=521,height=284!
> If project fields is not nested, then it wil use field name as pw key, and 
> expr as pw value,but in deepHashCode(), only use pw value to compute hash 
> code. So other operators has no effect. Such as Agg, it use the aggCalls as 
> pw value.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to