Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@
import com.facebook.presto.sql.planner.plan.GroupIdNode;
import com.facebook.presto.sql.planner.plan.JoinNode;
import com.facebook.presto.sql.planner.plan.OffsetNode;
import com.facebook.presto.sql.planner.plan.RowNumberNode;
import com.facebook.presto.sql.planner.plan.SampleNode;
import com.facebook.presto.sql.planner.plan.SemiJoinNode;
import com.facebook.presto.sql.planner.plan.SimplePlanRewriter;
import com.facebook.presto.sql.planner.plan.SortNode;
import com.facebook.presto.sql.planner.plan.TopNRowNumberNode;
import com.facebook.presto.sql.planner.plan.UnnestNode;
import com.facebook.presto.sql.planner.plan.WindowNode;
import com.google.common.collect.ImmutableList;
Expand Down Expand Up @@ -283,6 +285,18 @@ public PlanNode visitFilter(FilterNode node, RewriteContext<Void> context)
return convertToEmptyNodeIfInputEmpty(node, context);
}

@Override
public PlanNode visitRowNumber(RowNumberNode node, RewriteContext<Void> context)
{
return convertToEmptyNodeIfInputEmpty(node, context);
}

@Override
public PlanNode visitTopNRowNumber(TopNRowNumberNode node, RewriteContext<Void> context)
{
return convertToEmptyNodeIfInputEmpty(node, context);
}

@Override
public PlanNode visitLimit(LimitNode node, RewriteContext<Void> context)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,4 +226,24 @@ public void testQueryWithJoinWindowFilterLimitOrderby()
ImmutableList.of("custkey", "name", "acctbal", "sum"),
values("sum", "custkey", "name", "acctbal")));
}

@Test
public void testRowNumberWithEmptyInput()
{
assertPlan("select orderkey, row_number() over (partition by orderpriority), orderpriority from (select orderkey, orderpriority from orders where false)",
enableOptimization(),
output(
ImmutableList.of("orderkey", "rownumber", "orderpriority"),
values(ImmutableList.of("orderkey", "orderpriority", "rownumber"), ImmutableList.of())));
}

@Test
public void testTopNRowNumberWithEmptyInput()
{
assertPlan("select * from (select orderkey, row_number() over (partition by orderpriority order by orderkey) row_number, orderpriority from (select orderkey, orderpriority from orders where false)) where row_number < 2",
enableOptimization(),
output(
ImmutableList.of("orderkey", "row_number", "orderpriority"),
values(ImmutableList.of("orderkey", "orderpriority", "row_number"), ImmutableList.of())));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6675,6 +6675,8 @@ public void testQueryWithEmptyInput()
assertQuery(enableOptimization, "WITH emptyorders as (select * from orders where false) SELECT p.name, l.orderkey, l.partkey, l.quantity, RANK() OVER (PARTITION BY p.name ORDER BY l.quantity DESC) AS rank_quantity " +
"FROM lineitem l JOIN emptyorders o ON l.orderkey = o.orderkey JOIN part p ON l.partkey = p.partkey WHERE o.orderdate BETWEEN DATE '1995-03-01' AND DATE '1995-03-31' " +
"AND l.shipdate BETWEEN DATE '1995-03-01' AND DATE '1995-03-31' AND p.size = 15 ORDER BY p.name, rank_quantity LIMIT 100");
assertQuery(enableOptimization, "select orderkey, row_number() over (partition by orderpriority), orderpriority from (select orderkey, orderpriority from orders where false)");
assertQuery(enableOptimization, "select * from (select orderkey, row_number() over (partition by orderpriority order by orderkey) row_number, orderpriority from (select orderkey, orderpriority from orders where false)) where row_number < 2");

emptyJoinQueries(enableOptimization);
}
Expand Down