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; }
