You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2015/03/12 09:16:41 UTC

[3/7] metamodel git commit: Fixed filtering and paging order in post processing scenario

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 <i....@gmail.com>
Authored: Sun Mar 8 15:07:45 2015 +0100
Committer: Kasper Sørensen <i....@gmail.com>
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;
     }