You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Dmitry Sysolyatin (Jira)" <ji...@apache.org> on 2021/06/02 15:12:00 UTC

[jira] [Created] (CALCITE-4630) Wrong logical plan for INNER JOIN with subquery

Dmitry Sysolyatin created CALCITE-4630:
------------------------------------------

             Summary: Wrong logical plan for INNER JOIN with subquery
                 Key: CALCITE-4630
                 URL: https://issues.apache.org/jira/browse/CALCITE-4630
             Project: Calcite
          Issue Type: Improvement
          Components: core
    Affects Versions: 1.26.0
            Reporter: Dmitry Sysolyatin


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 s.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)