ignite-gg9499 - wip

Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/7298090b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/7298090b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/7298090b

Branch: refs/heads/ignite-gg9499
Commit: 7298090b6b32b4def69a67c2cab12f2db76af8ea
Parents: b18d6fb
Author: S.Vladykin <svlady...@gridgain.com>
Authored: Fri Jan 16 12:43:42 2015 +0300
Committer: S.Vladykin <svlady...@gridgain.com>
Committed: Fri Jan 16 12:43:42 2015 +0300

----------------------------------------------------------------------
 .../query/h2/sql/GridSqlQuerySplitter.java      | 35 +++++++++-----------
 1 file changed, 16 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7298090b/modules/indexing/src/main/java/org/gridgain/grid/kernal/processors/query/h2/sql/GridSqlQuerySplitter.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/gridgain/grid/kernal/processors/query/h2/sql/GridSqlQuerySplitter.java
 
b/modules/indexing/src/main/java/org/gridgain/grid/kernal/processors/query/h2/sql/GridSqlQuerySplitter.java
index deeeae0..2348bc9 100644
--- 
a/modules/indexing/src/main/java/org/gridgain/grid/kernal/processors/query/h2/sql/GridSqlQuerySplitter.java
+++ 
b/modules/indexing/src/main/java/org/gridgain/grid/kernal/processors/query/h2/sql/GridSqlQuerySplitter.java
@@ -39,7 +39,7 @@ public class GridSqlQuerySplitter {
      * @param idx Index of column.
      * @return Generated by index column alias.
      */
-    private static String columnAlias(int idx) {
+    private static String columnName(int idx) {
         return COLUMN_PREFIX + idx;
     }
 
@@ -62,11 +62,7 @@ public class GridSqlQuerySplitter {
             return res;
         }
 
-        // Map query.
-        GridSqlSelect mapQry = srcQry.clone();
-
-        mapQry.clearSelect();
-
+        // Split all select expressions into map-reduce parts.
         List<GridSqlElement> mapExps = new 
ArrayList<>(srcQry.allExpressions());
 
         GridSqlElement[] rdcExps = new GridSqlElement[srcQry.select().size()];
@@ -74,18 +70,14 @@ public class GridSqlQuerySplitter {
         for (int i = 0, len = mapExps.size(); i < len; i++)
             splitSelectExpression(mapExps, rdcExps, i);
 
-        List<GridSqlAlias> aliases = new 
ArrayList<>(srcQry.allExpressions().size());
+        // Build map query.
+        GridSqlSelect mapQry = srcQry.clone();
+
+        mapQry.clearSelect();
 
         int idx = 0;
 
         for (GridSqlElement exp : mapExps) { // Add all expressions to select 
clause.
-            if (exp instanceof GridSqlColumn)
-                exp = alias(((GridSqlColumn)exp).columnName(), exp);
-            else if (!(exp instanceof GridSqlAlias))
-                exp = alias(columnAlias(idx), exp);
-
-            aliases.add((GridSqlAlias)exp);
-
             mapQry.addSelectExpression(exp);
 
             idx++;
@@ -128,7 +120,7 @@ public class GridSqlQuerySplitter {
         if (exp instanceof GridSqlAlias)
             return ((GridSqlAlias)exp).alias();
 
-        return columnAlias(idx);
+        return columnName(idx);
     }
 
     /**
@@ -158,7 +150,7 @@ public class GridSqlQuerySplitter {
 
                     // Add generated alias to COUNT(x).
                     // Using size as index since COUNT will be added as the 
last select element to the map query.
-                    cntMap = alias(columnAlias(mapSelect.size()), cntMap);
+                    cntMap = alias(columnName(mapSelect.size()), cntMap);
 
                     mapSelect.add(cntMap);
 
@@ -166,7 +158,7 @@ public class GridSqlQuerySplitter {
                     GridSqlElement avgMap = aggregate(agg.distinct(), 
AVG).addChild(agg.child()); // Add function argument.
 
                     // Add generated alias to AVG(x).
-                    avgMap = alias(columnAlias(idx), avgMap);
+                    avgMap = alias(columnName(idx), avgMap);
 
                     mapSelect.set(idx, avgMap);
 
@@ -193,13 +185,18 @@ public class GridSqlQuerySplitter {
                 case MAX:
                 case MIN:
                 case SUM:
-                case GROUP_CONCAT:
                 default:
                     throw new IgniteException("Unsupported aggregate: " + 
agg.type());
             }
         }
-        else if (alias == null) {
+        else {
+            if (alias == null) { // Generate alias if none.
+                alias = alias(columnName(idx), mapSelect.get(idx));
+
+                mapSelect.set(idx, alias);
+            }
 
+            rdcSelect[idx] = column(alias.alias());
         }
     }
 

Reply via email to