PHOENIX-3501 Push limit to server for distinct optimization

Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/30bb79b7
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/30bb79b7
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/30bb79b7

Branch: refs/heads/4.x-HBase-0.98
Commit: 30bb79b7abce29f415494214fc980208ff20e25f
Parents: b9ca16d
Author: James Taylor <jamestay...@apache.org>
Authored: Fri Nov 18 15:20:34 2016 -0800
Committer: James Taylor <jamestay...@apache.org>
Committed: Fri Nov 18 15:39:09 2016 -0800

----------------------------------------------------------------------
 .../org/apache/phoenix/end2end/DistinctPrefixFilterIT.java  | 1 +
 .../org/apache/phoenix/iterate/BaseResultIterators.java     | 9 ++++++---
 2 files changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/30bb79b7/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctPrefixFilterIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctPrefixFilterIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctPrefixFilterIT.java
index 3d88a43..d66857d 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctPrefixFilterIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DistinctPrefixFilterIT.java
@@ -145,6 +145,7 @@ public class DistinctPrefixFilterIT extends 
ParallelStatsDisabledIT {
 
         testSkipRange("SELECT %s prefix1 FROM "+ testTable + " GROUP BY 
prefix1 ORDER BY prefix1 DESC", 3);
         testSkipRange("SELECT %s DISTINCT prefix1 FROM " + testTable + " ORDER 
BY prefix1 DESC", 3);
+        testSkipRange("SELECT %s DISTINCT prefix1 FROM " + testTable + " ORDER 
BY prefix1 DESC LIMIT 2", 2);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/phoenix/blob/30bb79b7/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
index 940dc56..c0f9707 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
@@ -234,11 +234,14 @@ public abstract class BaseResultIterators extends 
ExplainTable implements Result
                 
!plan.getStatement().getHint().hasHint(HintNode.Hint.RANGE_SCAN) &&
                 cols < 
plan.getTableRef().getTable().getRowKeySchema().getFieldCount() &&
                 plan.getGroupBy().isOrderPreserving() &&
-                (context.getAggregationManager().isEmpty() || 
plan.getGroupBy().isUngroupedAggregate()))
-            {
-                ScanUtil.andFilterAtEnd(context.getScan(),
+                (context.getAggregationManager().isEmpty() || 
plan.getGroupBy().isUngroupedAggregate())) {
+                
+                ScanUtil.andFilterAtEnd(scan,
                         new 
DistinctPrefixFilter(plan.getTableRef().getTable().getRowKeySchema(),
                                 cols));
+                if (plan.getLimit() != null) { // We can push the limit to the 
server
+                    ScanUtil.andFilterAtEnd(scan, new 
PageFilter(plan.getLimit()));
+                }
             }
 
             if (optimizeProjection) {

Reply via email to