[ 
https://issues.apache.org/jira/browse/CALCITE-5553?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benchao Li updated CALCITE-5553:
--------------------------------
    Summary: RelStructuredTypeFlattener produces bad plan for single field 
struct  (was: Calcite RelStructuredTypeFlattener produces bad plan for single 
field structs)

> RelStructuredTypeFlattener produces bad plan for single field struct
> --------------------------------------------------------------------
>
>                 Key: CALCITE-5553
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5553
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.23.0, 1.28.0, 1.33.0
>            Reporter: Andrew Pilloud
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 40m
>  Remaining Estimate: 0h
>
> A Beam user brought us a query that produces an invalid plan after
> upgrading to a newer version of Beam (moving them from Calcite 1.20 to
> 1.28). I was able to write a test case which demonstrates this issue
> with a trivial filter on a table containing a nested struct with a
> single field. The issue appears to be coming out of
> RelStructuredTypeFlattener.rewrite and I bisected it to a single
> commit, 
> [e44beba28|https://github.com/apache/calcite/commit/e44beba286ea9049c5fd00c3a3b0e4a4f1c03356].
> Removing the noFlatteningForInput function added in this commit fixes
> the issue. That method doesn't appear to be looking at types at all,
> only mismatches in field count, I expect so any single field struct
> would hit this. Any suggestions on how we can work around this in
> Beam?
> The test query and plans are as follows, the test case is in [PR 
> 3092|https://github.com/apache/calcite/pull/3092].
> {code}
> select dn.skill from sales.dept_single dn WHERE dn.skill.type = ''
> {code}
> Expected plan:
> {noformat}
> LogicalProject(SKILL=[ROW($0)])
>   LogicalFilter(condition=[=($0, '')])
>     LogicalProject(TYPE=[$0.TYPE])
>       LogicalTableScan(table=[[CATALOG, SALES, DEPT_SINGLE]])
> {noformat}
> Actual Plan:
> {noformat}
> LogicalProject(SKILL=[ROW($0)])
>   LogicalFilter(condition=[=($0.TYPE, '')])
>     LogicalProject(TYPE=[$0.TYPE])
>       LogicalTableScan(table=[[CATALOG, SALES, DEPT_SINGLE]])
> {noformat}
> Plan before flatten:
> {noformat}
> LogicalProject(SKILL=[$0])
>   LogicalFilter(condition=[=($0.TYPE, '')])
>     LogicalTableScan(table=[[CATALOG, SALES, DEPT_SINGLE]])
> {noformat}



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

Reply via email to