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