[
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)