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

Julian Hyde commented on CALCITE-4630:
--------------------------------------

If the {{LIMIT}} were not present, I think it might be valid to push the filter 
down (because of {{INNER}}). So, it's possible that the bug is that something 
is failing to notice the {{LIMIT}}. It could be in {{FilterCorrelateRule}} as 
[~zabetak] says, but the problem could also occur during SQL-to-Rel.

For what's worth, I'll also note that queries that have this pattern - 
sub-query with {{ORDER}} ... {{DESC LIMIT 1}} - can also be mapped to {{MAX}} 
with {{GROUP BY}} or {{MAX}} with a windowed aggregate. See CALCITE-1317 and 
CALCITE-1757 ("WinMagic").

 

> Wrong logical plan for INNER JOIN with subquery
> -----------------------------------------------
>
>                 Key: CALCITE-4630
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4630
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.26.0
>            Reporter: Dmitry Sysolyatin
>            Priority: Critical
>
> I tried to execute the following query:
> {code:sql}
> SELECT
>     d.name,
>     d.timestamp_ns
> FROM trucks t
> INNER JOIN LATERAL (
>   SELECT
>       name, timestamp_ns, fuel_state
>    FROM
>       trucks_diagnostics
>    WHERE
>        trucks_diagnostics.name = t.name
>     ORDER BY timestamp_ns DESC
>     LIMIT 1) d ON true WHERE t.fleet = 'South' AND d.fuel_state < 0.1
> {code}
> calcite generates me the following logical plan:
> {code:java}
> LogicalProject(name=[$8], timestamp_ns=[$9])
>   LogicalCorrelate(correlation=[$cor0], joinType=[inner], 
> requiredColumns=[{4}])
>     LogicalFilter(condition=[=(CAST($6):VARCHAR, 'South')])
>       DataTableScan
>     LogicalFilter(condition=[<($2, 0.1:DECIMAL(2, 1))])
>       LogicalSort(sort0=[$1], dir0=[DESC], fetch=[1])
>         LogicalProject(name=[$4], timestamp_ns=[$0], fuel_state=[$1])
>           LogicalFilter(condition=[=(CAST($4):VARCHAR, 
> CAST($cor0.name):VARCHAR)])
>             DataTableScan
> {code}
> But `LogicalFilter(condition=[<($2, 0.1:DECIMAL(2, 1))])` should not be 
> inside LogicalCorrelate . It should be upper than LogicalCorrelate



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to