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

Maksim Zhuravkov updated IGNITE-22204:
--------------------------------------
    Description: 
Query 
{code:java}
SELECT a FROM
  (SELECT a FROM
    (SELECT a FROM test ORDER BY a LIMIT 3 OFFSET 2) i(a)
    ORDER BY a OFFSET 1
  ) t(a)
{code}

Should be transformed into

{code:java}
 Limit(offset=[1]), id = 201
   Limit(offset=[2], fetch=[3]), id = 200
     Exchange(distribution=[single]), id = 199
       Sort(sort0=[$0], dir0=[ASC], offset=[2], fetch=[3]), id = 198
         TableScan(table=[[PUBLIC, TEST]], requiredColumns=[{0}]), id = 168
{code}

But it gets rewritten as 

{code:java}
 Limit(offset=[1]), id = 201
   Limit(offset=[2], fetch=[3]), id = 200
     Exchange(distribution=[single]), id = 199
       Sort(sort0=[$0], dir0=[ASC], offset=[1], fetch=[1]), id = 198
         TableScan(table=[[PUBLIC, TEST]], requiredColumns=[{0}]), id = 168
{code}







  was:
Patch IGNITE-16013 for AI-2 cannot be applied to AI-3, because that patch 
assumes that Sort's input always returns data from a single source.
This assumption is not correct for the cases, when a query splits into multiple 
fragments.
So transforming

{noformat}
Sort(ordering=ord, offset=o, fetch=f) 
>Scan
{noformat}

into 

{noformat}
Limit (offset=o, fetch=f) 
>Sort(ordering=ord, fetch=f + o)
>>Scan
{noformat}

Is not a valid transformation when there is an Exchange operator between a 
Limit and a Sort and should not be used. 





> Sql. Set operation. Incorrect query transformation for a query with limit / 
> offset and sort
> -------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-22204
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22204
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 3.0.0-beta2
>            Reporter: Maksim Zhuravkov
>            Assignee: Maksim Zhuravkov
>            Priority: Critical
>              Labels: ignite-3
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Query 
> {code:java}
> SELECT a FROM
>   (SELECT a FROM
>     (SELECT a FROM test ORDER BY a LIMIT 3 OFFSET 2) i(a)
>     ORDER BY a OFFSET 1
>   ) t(a)
> {code}
> Should be transformed into
> {code:java}
>  Limit(offset=[1]), id = 201
>    Limit(offset=[2], fetch=[3]), id = 200
>      Exchange(distribution=[single]), id = 199
>        Sort(sort0=[$0], dir0=[ASC], offset=[2], fetch=[3]), id = 198
>          TableScan(table=[[PUBLIC, TEST]], requiredColumns=[{0}]), id = 168
> {code}
> But it gets rewritten as 
> {code:java}
>  Limit(offset=[1]), id = 201
>    Limit(offset=[2], fetch=[3]), id = 200
>      Exchange(distribution=[single]), id = 199
>        Sort(sort0=[$0], dir0=[ASC], offset=[1], fetch=[1]), id = 198
>          TableScan(table=[[PUBLIC, TEST]], requiredColumns=[{0}]), id = 168
> {code}



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

Reply via email to