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;