You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/04/07 05:31:51 UTC
[36/50] incubator-ignite git commit: ignite-sprint-3 - map query sort
limit fix (IGNITE-682)
ignite-sprint-3 - map query sort limit fix (IGNITE-682)
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/2f34c46a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/2f34c46a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/2f34c46a
Branch: refs/heads/ignite-639
Commit: 2f34c46a695ed93f39cbc9f32b790f443fe0596b
Parents: 88268bf
Author: S.Vladykin <sv...@gridgain.com>
Authored: Mon Apr 6 17:41:17 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Mon Apr 6 17:41:17 2015 +0300
----------------------------------------------------------------------
.../query/h2/sql/GridSqlQuerySplitter.java | 22 ++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2f34c46a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
index 77e0cc8..b3deea3 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
@@ -77,8 +77,10 @@ public class GridSqlQuerySplitter {
Set<String> colNames = new HashSet<>();
+ boolean aggregateFound = false;
+
for (int i = 0, len = mapExps.size(); i < len; i++) // Remember len because mapExps list can grow.
- splitSelectExpression(mapExps, rdcExps, colNames, i);
+ aggregateFound |= splitSelectExpression(mapExps, rdcExps, colNames, i);
// Fill select expressions.
mapQry.clearSelect();
@@ -110,15 +112,20 @@ public class GridSqlQuerySplitter {
// -- ORDER BY
if (!srcQry.sort().isEmpty()) {
- mapQry.clearSort();
+ if (aggregateFound) // Ordering over aggregates does not make sense.
+ mapQry.clearSort(); // Otherwise map sort will be used by offset-limit.
for (GridSqlSortColumn sortCol : srcQry.sort().values())
rdcQry.addSort(column(((GridSqlAlias)mapExps.get(sortCol.column())).alias()), sortCol);
}
// -- LIMIT
- if (srcQry.limit() != null)
+ if (srcQry.limit() != null) {
+ if (aggregateFound)
+ mapQry.limit(null);
+
rdcQry.limit(srcQry.limit());
+ }
// -- OFFSET
if (srcQry.offset() != null) {
@@ -209,19 +216,24 @@ public class GridSqlQuerySplitter {
* @param rdcSelect Selects for reduce query.
* @param colNames Set of unique top level column names.
* @param idx Index.
+ * @return {@code true} If aggregate was found.
*/
- private static void splitSelectExpression(List<GridSqlElement> mapSelect, GridSqlElement[] rdcSelect,
+ private static boolean splitSelectExpression(List<GridSqlElement> mapSelect, GridSqlElement[] rdcSelect,
Set<String> colNames, int idx) {
GridSqlElement el = mapSelect.get(idx);
GridSqlAlias alias = null;
+ boolean aggregateFound = false;
+
if (el instanceof GridSqlAlias) { // Unwrap from alias.
alias = (GridSqlAlias)el;
el = alias.child();
}
if (el instanceof GridSqlAggregateFunction) {
+ aggregateFound = true;
+
GridSqlAggregateFunction agg = (GridSqlAggregateFunction)el;
GridSqlElement mapAgg, rdcAgg;
@@ -322,6 +334,8 @@ public class GridSqlQuerySplitter {
rdcSelect[idx] = rdcEl;
}
}
+
+ return aggregateFound;
}
/**