ignite-1142 - refactor: removed setCastType as it duplicates resultType + minor 
query structure change


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

Branch: refs/heads/ignite-1142
Commit: 5f96b5bdd1284d5b90f706e42f144f5d48f4688f
Parents: 05025f6
Author: S.Vladykin <svlady...@gridgain.com>
Authored: Wed Jul 29 20:06:12 2015 +0300
Committer: S.Vladykin <svlady...@gridgain.com>
Committed: Wed Jul 29 20:06:12 2015 +0300

----------------------------------------------------------------------
 .../cache/query/GridCacheTwoStepQuery.java      | 21 ++++++++++----------
 .../processors/query/h2/sql/GridSqlElement.java | 13 +++++++-----
 .../query/h2/sql/GridSqlFunction.java           | 17 ++++------------
 .../query/h2/sql/GridSqlQueryParser.java        | 13 +++++++-----
 .../query/h2/sql/GridSqlQuerySplitter.java      | 16 +++++++--------
 .../processors/query/h2/sql/GridSqlType.java    | 11 ++++++++++
 6 files changed, 50 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5f96b5bd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java
index 1dacd10..8613df8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java
@@ -38,7 +38,7 @@ public class GridCacheTwoStepQuery {
 
     /** */
     @GridToStringInclude
-    private GridCacheSqlQuery reduce;
+    private GridCacheSqlQuery rdc;
 
     /** */
     private int pageSize = DFLT_PAGE_SIZE;
@@ -51,13 +51,14 @@ public class GridCacheTwoStepQuery {
 
     /**
      * @param spaces All spaces accessed in query.
-     * @param qry Reduce query.
-     * @param params Reduce query parameters.
+     * @param rdc Reduce query.
      */
-    public GridCacheTwoStepQuery(Set<String> spaces, String qry, Object ... 
params) {
+    public GridCacheTwoStepQuery(Set<String> spaces, GridCacheSqlQuery rdc) {
+        assert rdc != null;
+
         this.spaces = spaces;
 
-        reduce = new GridCacheSqlQuery(null, qry, params);
+        this.rdc = rdc;
     }
 
     /**
@@ -89,17 +90,17 @@ public class GridCacheTwoStepQuery {
     }
 
     /**
-     * @param alias Alias.
      * @param qry SQL Query.
-     * @param params Query parameters.
      */
-    public void addMapQuery(String alias, String qry, Object ... params) {
+    public void addMapQuery(GridCacheSqlQuery qry) {
+        String alias = qry.alias();
+
         A.ensure(!F.isEmpty(alias), "alias must not be empty");
 
         if (mapQrys == null)
             mapQrys = new GridLeanMap<>();
 
-        if (mapQrys.put(alias, new GridCacheSqlQuery(alias, qry, params)) != 
null)
+        if (mapQrys.put(alias, qry) != null)
             throw new IgniteException("Failed to add query, alias already 
exists: " + alias + ".");
     }
 
@@ -107,7 +108,7 @@ public class GridCacheTwoStepQuery {
      * @return Reduce query.
      */
     public GridCacheSqlQuery reduceQuery() {
-        return reduce;
+        return rdc;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5f96b5bd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlElement.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlElement.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlElement.java
index 44705de..e3c8c4b 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlElement.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlElement.java
@@ -27,7 +27,7 @@ public abstract class GridSqlElement implements 
Iterable<GridSqlElement> {
     protected List<GridSqlElement> children;
 
     /** */
-    private GridSqlType expressionResultType;
+    private GridSqlType resultType;
 
     /**
      * @param children Initial child list.
@@ -41,15 +41,18 @@ public abstract class GridSqlElement implements 
Iterable<GridSqlElement> {
     /**
      * @return Optional expression result type (if this is an expression and 
result type is known).
      */
-    public GridSqlType expressionResultType() {
-        return expressionResultType;
+    public GridSqlType resultType() {
+        return resultType;
     }
 
     /**
      * @param type Optional expression result type (if this is an expression 
and result type is known).
+     * @return {@code this}.
      */
-    public void expressionResultType(GridSqlType type) {
-        expressionResultType = type;
+    public GridSqlElement resultType(GridSqlType type) {
+        resultType = type;
+
+        return this;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5f96b5bd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlFunction.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlFunction.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlFunction.java
index c41bbb7..77039b0 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlFunction.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlFunction.java
@@ -50,9 +50,6 @@ public class GridSqlFunction extends GridSqlElement {
     /** */
     protected final GridSqlFunctionType type;
 
-    /**  */
-    private String castType;
-
     /**
      * @param type Function type.
      */
@@ -87,16 +84,6 @@ public class GridSqlFunction extends GridSqlElement {
         this(schema, TYPE_MAP.get(name), name);
     }
 
-    /**
-     * @param castType Type for {@link GridSqlFunctionType#CAST} function.
-     * @return {@code this}.
-     */
-    public GridSqlFunction setCastType(String castType) {
-        this.castType = castType;
-
-        return this;
-    }
-
     /** {@inheritDoc} */
     @Override public String getSQL() {
         StatementBuilder buff = new StatementBuilder();
@@ -123,12 +110,16 @@ public class GridSqlFunction extends GridSqlElement {
         buff.append('(');
 
         if (type == CAST) {
+            String castType = resultType().sql();
+
             assert !F.isEmpty(castType) : castType;
             assert size() == 1;
 
             buff.append(child().getSQL()).append(" AS ").append(castType);
         }
         else if (type == CONVERT) {
+            String castType = resultType().sql();
+
             assert !F.isEmpty(castType) : castType;
             assert size() == 1;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5f96b5bd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
index 27e8516..195fb28 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQueryParser.java
@@ -381,7 +381,7 @@ public class GridSqlQueryParser {
     private GridSqlElement parseExpressionWithType(Expression expression) {
         GridSqlElement res = parseExpression(expression);
 
-        if (res != null && res.expressionResultType() == null) {
+        if (res != null && res.resultType() == null) {
             GridSqlType type = GridSqlType.UNKNOWN;
 
             if (expression.getType() != Value.UNKNOWN) {
@@ -391,7 +391,7 @@ public class GridSqlQueryParser {
                 type = new GridSqlType(c.getType(), c.getScale(), 
c.getPrecision(), c.getDisplaySize(), c.getCreateSQL());
             }
 
-            res.expressionResultType(type);
+            res.resultType(type);
         }
 
         return res;
@@ -544,9 +544,12 @@ public class GridSqlQueryParser {
                 }
             }
 
-            if (f.getFunctionType() == Function.CAST || f.getFunctionType() == 
Function.CONVERT)
-                res.setCastType(new Column(null, f.getType(), 
f.getPrecision(), f.getScale(), f.getDisplaySize())
-                    .getCreateSQL());
+            if (f.getFunctionType() == Function.CAST || f.getFunctionType() == 
Function.CONVERT) {
+                Column c = new Column(null, f.getType(), f.getPrecision(), 
f.getScale(), f.getDisplaySize());
+
+                res.resultType(new GridSqlType(c.getType(), c.getScale(), 
c.getPrecision(),
+                    c.getDisplaySize(), c.getCreateSQL()));
+            }
 
             return res;
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5f96b5bd/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 98de44b..adc8aeb 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
@@ -214,11 +214,11 @@ public class GridSqlQuerySplitter {
         }
 
         // Build resulting two step query.
-        GridCacheTwoStepQuery res = new GridCacheTwoStepQuery(spaces, 
rdcQry.getSQL(),
-            findParams(rdcQry, params, new ArrayList<>()).toArray());
+        GridCacheTwoStepQuery res = new GridCacheTwoStepQuery(spaces, new 
GridCacheSqlQuery(null, rdcQry.getSQL(),
+            findParams(rdcQry, params, new ArrayList<>()).toArray()));
 
-        res.addMapQuery(mergeTable, mapQry.getSQL(),
-            findParams(mapQry, params, new 
ArrayList<>(params.length)).toArray());
+        res.addMapQuery(new GridCacheSqlQuery(mergeTable, mapQry.getSQL(),
+            findParams(mapQry, params, new 
ArrayList<>(params.length)).toArray()));
 
         res.explain(explain);
 
@@ -422,12 +422,12 @@ public class GridSqlQuerySplitter {
             if (idx < rdcSelect.length) { // SELECT __C0 AS original_alias
                 GridSqlElement rdcEl = column(mapColAlias);
 
-                GridSqlType type = el.expressionResultType();
+                GridSqlType type = el.resultType();
 
                 assert type != null;
 
                 if (type.type() == Value.UUID) // There is no JDBC type UUID, 
so conversion to bytes occurs.
-                    rdcEl = 
function(CAST).setCastType("UUID").addChild(rdcEl); // TODO IGNITE-1142 - 
remove this cast when table function removed
+                    rdcEl = 
function(CAST).resultType(GridSqlType.UUID).addChild(rdcEl); // TODO 
IGNITE-1142 - remove this cast when table function removed
 
                 if (colNames.add(rdcColAlias)) // To handle column name 
duplication (usually wildcard for few tables).
                     rdcEl = alias(rdcColAlias, rdcEl);
@@ -527,7 +527,7 @@ public class GridSqlQuerySplitter {
 
                 //-- AVG(CAST(x AS DOUBLE)) map
                 mapAgg = aggregate(agg.distinct(), AVG).addChild( // Add 
function argument.
-                    
function(CAST).setCastType("DOUBLE").addChild(agg.child()));
+                    
function(CAST).resultType(GridSqlType.DOUBLE).addChild(agg.child()));
 
                 //-- SUM( AVG(x)*COUNT(x) )/SUM( COUNT(x) ) reduce
                 GridSqlElement sumUpRdc = aggregate(false, SUM).addChild(
@@ -557,7 +557,7 @@ public class GridSqlQuerySplitter {
                     mapAgg.addChild(agg.child());
 
                 rdcAgg = aggregate(false, 
SUM).addChild(column(mapAggAlias.alias()));
-                rdcAgg = function(CAST).setCastType("BIGINT").addChild(rdcAgg);
+                rdcAgg = 
function(CAST).resultType(GridSqlType.BIGINT).addChild(rdcAgg);
 
                 break;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5f96b5bd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlType.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlType.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlType.java
index 5a25e1a..e96ae69 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlType.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlType.java
@@ -26,6 +26,17 @@ public class GridSqlType {
     /** */
     public static final GridSqlType UNKNOWN = new GridSqlType(Value.UNKNOWN, 
0, 0, 0, null);
 
+    /** */
+    public static final GridSqlType BIGINT = new GridSqlType(Value.LONG, 0, 
ValueLong.PRECISION,
+        ValueLong.DISPLAY_SIZE, "BIGINT");
+
+    /** */
+    public static final GridSqlType DOUBLE = new GridSqlType(Value.DOUBLE, 0, 
ValueDouble.PRECISION,
+        ValueDouble.DISPLAY_SIZE, "DOUBLE");
+
+    /** */
+    public static final GridSqlType UUID = new GridSqlType(Value.UUID, 0, 
Integer.MAX_VALUE, 36, "UUID");
+
     /** H2 type. */
     private final int type;
 

Reply via email to