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;