Fixed filtering and paging order in post processing scenario

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

Branch: refs/heads/master
Commit: a93bd9c92564215e63c78bcd74d10261e6c0a226
Parents: 26801d3
Author: Kasper Sørensen <[email protected]>
Authored: Sun Mar 8 15:07:45 2015 +0100
Committer: Kasper Sørensen <[email protected]>
Committed: Sun Mar 8 15:07:45 2015 +0100

----------------------------------------------------------------------
 .../metamodel/QueryPostprocessDataContext.java       | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/a93bd9c9/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java 
b/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java
index 6e6363a..0cdbe8b 100644
--- a/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java
+++ b/core/src/main/java/org/apache/metamodel/QueryPostprocessDataContext.java
@@ -618,9 +618,18 @@ public abstract class QueryPostprocessDataContext extends 
AbstractDataContext im
     protected DataSet materializeMainSchemaTable(Table table, List<SelectItem> 
selectItems,
             List<FilterItem> whereItems, int firstRow, int maxRows) {
         final List<SelectItem> workingSelectItems = 
buildWorkingSelectItems(selectItems, whereItems);
-        DataSet dataSet = materializeMainSchemaTable(table, 
workingSelectItems, firstRow, maxRows);
-        dataSet = MetaModelHelper.getFiltered(dataSet, whereItems);
-        dataSet = MetaModelHelper.getSelection(selectItems, dataSet);
+        DataSet dataSet; 
+        if (whereItems.isEmpty()) {
+            // paging is pushed down to materializeMainSchemaTable
+            dataSet = materializeMainSchemaTable(table, workingSelectItems, 
firstRow, maxRows);
+            dataSet = MetaModelHelper.getSelection(selectItems, dataSet);
+        } else {
+            // do not push down paging, first we have to apply filtering
+            dataSet = materializeMainSchemaTable(table, workingSelectItems, 1, 
-1);
+            dataSet = MetaModelHelper.getFiltered(dataSet, whereItems);
+            dataSet = MetaModelHelper.getPaged(dataSet, firstRow, maxRows);
+            dataSet = MetaModelHelper.getSelection(selectItems, dataSet);
+        }
         return dataSet;
     }
 

Reply via email to