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

LakeShen updated CALCITE-6009:
------------------------------
    Description: 
In calcite,Limit would be represented by Sort,such as `LogicalSort[fetch = 5]`.

When the Limit' source row number is less than the Limit's fetch,we could 
remove the the redundant Limit.

For example:
{code:java}
SELECT * FROM (VALUES 1,2,3,4,5,6) AS t1 LIMIT 10 {code}
The plan tree is :
{code:java}
 LogicalSort(fetch=[10])
  LogicalProject(t1=[$0])
    LogicalValues(tuples=[[{ 1 }, { 2 }, { 3 }, { 4 }, { 5 }, { 6 }]]) {code}
Because the Limit's source max row number is 6,the Limit's fetch is 10,so we 
could remove the redundant Limit.

Another example is :
{code:java}
SELECT count(*) FROM orders LIMIT 2 {code}
The plan tree is :
{code:java}
 LogicalSort(fetch=[2])
  LogicalAggregate(group=[{}], EXPR$0=[COUNT()])
    LogicalTableScan(table=[[tpch, ORDERS]]) {code}
Because Limit's source max row number is 1,the Limit's fetch is 2, so we could 
remove the redundant Limit.

 

  was:
In calcite,Limit would be represented by Sort,such as `LogicalSort[fetch = 5]`.

When the Limit' source row number is less than the Limit's fetch,we could 
remove the the redundant Limit.

For example:
{code:java}
SELECT * FROM (VALUES 1,2,3,4,5,6) AS t1 LIMIT 10 {code}
The plan tree is :
{code:java}
 LogicalSort(fetch=[10])
  LogicalProject(t1=[$0])
    LogicalValues(tuples=[[{ 1 }, { 2 }, { 3 }, { 4 }, { 5 }, { 6 }]]) {code}
Because the Limit's source max row number is 6,the Limit's fetch is 10,so we 
could remove the 


> Add the optimize for removing the redundant Limit when a Limit's source row 
> number less than Limit's fetch
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-6009
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6009
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: LakeShen
>            Priority: Major
>
> In calcite,Limit would be represented by Sort,such as `LogicalSort[fetch = 
> 5]`.
> When the Limit' source row number is less than the Limit's fetch,we could 
> remove the the redundant Limit.
> For example:
> {code:java}
> SELECT * FROM (VALUES 1,2,3,4,5,6) AS t1 LIMIT 10 {code}
> The plan tree is :
> {code:java}
>  LogicalSort(fetch=[10])
>   LogicalProject(t1=[$0])
>     LogicalValues(tuples=[[{ 1 }, { 2 }, { 3 }, { 4 }, { 5 }, { 6 }]]) {code}
> Because the Limit's source max row number is 6,the Limit's fetch is 10,so we 
> could remove the redundant Limit.
> Another example is :
> {code:java}
> SELECT count(*) FROM orders LIMIT 2 {code}
> The plan tree is :
> {code:java}
>  LogicalSort(fetch=[2])
>   LogicalAggregate(group=[{}], EXPR$0=[COUNT()])
>     LogicalTableScan(table=[[tpch, ORDERS]]) {code}
> Because Limit's source max row number is 1,the Limit's fetch is 2, so we 
> could remove the redundant Limit.
>  



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

Reply via email to