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 <svlady...@gridgain.com> Authored: Wed Jul 29 16:36:34 2015 +0300 Committer: S.Vladykin <svlady...@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;