You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by se...@apache.org on 2015/07/30 00:46:20 UTC

[3/5] incubator-ignite git commit: ignite-1142 - calculate type only for select columns

ignite-1142 - calculate type only for select columns


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

Branch: refs/heads/ignite-1142
Commit: 05025f6d4e776ae70caded2bb476e4eef92cc8b7
Parents: 1ee9736
Author: S.Vladykin <sv...@gridgain.com>
Authored: Wed Jul 29 16:36:34 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Wed Jul 29 16:36:34 2015 +0300

----------------------------------------------------------------------
 .../query/h2/sql/GridSqlQueryParser.java        | 26 ++++++++++++++++----
 .../query/h2/sql/GridSqlQuerySplitter.java      |  4 ++-
 .../processors/query/h2/sql/GridSqlType.java    |  5 ++++
 3 files changed, 29 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/05025f6d/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 ccedd13..27e8516 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
@@ -22,7 +22,6 @@ import org.h2.command.*;
 import org.h2.command.dml.*;
 import org.h2.engine.*;
 import org.h2.expression.*;
-import org.h2.expression.Parameter;
 import org.h2.jdbc.*;
 import org.h2.result.*;
 import org.h2.table.*;
@@ -272,7 +271,7 @@ public class GridSqlQueryParser {
         ArrayList<Expression> expressions = select.getExpressions();
 
         for (int i = 0; i < expressions.size(); i++)
-            res.addColumn(parseExpression(expressions.get(i)), i < select.getColumnCount());
+            res.addColumn(parseExpressionWithType(expressions.get(i)), i < select.getColumnCount());
 
         int[] grpIdx = GROUP_INDEXES.get(select);
 
@@ -358,6 +357,7 @@ public class GridSqlQueryParser {
 
     /**
      * @param expression Expression.
+     * @return Parsed expression.
      */
     private GridSqlElement parseExpression(@Nullable Expression expression) {
         if (expression == null)
@@ -368,15 +368,30 @@ public class GridSqlQueryParser {
         if (res == null) {
             res = parseExpression0(expression);
 
+            h2ObjToGridObj.put(expression, res);
+        }
+
+        return res;
+    }
+
+    /**
+     * @param expression H2 Expression.
+     * @return Parsed expression.
+     */
+    private GridSqlElement parseExpressionWithType(Expression expression) {
+        GridSqlElement res = parseExpression(expression);
+
+        if (res != null && res.expressionResultType() == null) {
+            GridSqlType type = GridSqlType.UNKNOWN;
+
             if (expression.getType() != Value.UNKNOWN) {
                 Column c = new Column(null, expression.getType(), expression.getPrecision(), expression.getScale(),
                     expression.getDisplaySize());
 
-                res.expressionResultType(new GridSqlType(c.getType(), c.getScale(), c.getPrecision(), c.getDisplaySize(),
-                    c.getCreateSQL()));
+                type = new GridSqlType(c.getType(), c.getScale(), c.getPrecision(), c.getDisplaySize(), c.getCreateSQL());
             }
 
-            h2ObjToGridObj.put(expression, res);
+            res.expressionResultType(type);
         }
 
         return res;
@@ -384,6 +399,7 @@ public class GridSqlQueryParser {
 
     /**
      * @param expression Expression.
+     * @return Parsed expression.
      */
     private GridSqlElement parseExpression0(Expression expression) {
         if (expression instanceof ExpressionColumn) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/05025f6d/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 947efb9..98de44b 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
@@ -424,7 +424,9 @@ public class GridSqlQuerySplitter {
 
                 GridSqlType type = el.expressionResultType();
 
-                if (type != null && type.type() == Value.UUID) // There is no JDBC type UUID, so conversion to bytes occurs.
+                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
 
                 if (colNames.add(rdcColAlias)) // To handle column name duplication (usually wildcard for few tables).

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/05025f6d/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 1dbcd46..5a25e1a 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
@@ -17,10 +17,15 @@
 
 package org.apache.ignite.internal.processors.query.h2.sql;
 
+import org.h2.value.*;
+
 /**
  * SQL Data type based on H2.
  */
 public class GridSqlType {
+    /** */
+    public static final GridSqlType UNKNOWN = new GridSqlType(Value.UNKNOWN, 0, 0, 0, null);
+
     /** H2 type. */
     private final int type;