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:18 UTC
[1/5] incubator-ignite git commit: ignite-1142 - code improvements
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-1142 [created] d82df227f
ignite-1142 - code improvements
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/7b5e9afc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/7b5e9afc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/7b5e9afc
Branch: refs/heads/ignite-1142
Commit: 7b5e9afc0ea5634a25212ffcce2231adf9e6fd5d
Parents: a127756
Author: S.Vladykin <sv...@gridgain.com>
Authored: Wed Jul 29 15:55:55 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Wed Jul 29 15:55:55 2015 +0300
----------------------------------------------------------------------
.../processors/query/h2/sql/GridSqlQuery.java | 4 +-
.../query/h2/sql/GridSqlQueryParser.java | 2 +-
.../query/h2/sql/GridSqlQuerySplitter.java | 20 +++---
.../processors/query/h2/sql/GridSqlSelect.java | 76 ++++++++++++--------
.../processors/query/h2/sql/GridSqlUnion.java | 2 +-
5 files changed, 60 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7b5e9afc/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuery.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuery.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuery.java
index ad13dfe..329304a 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuery.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuery.java
@@ -134,7 +134,7 @@ public abstract class GridSqlQuery {
* @param col Column index.
* @return Expression for column index.
*/
- protected abstract GridSqlElement expression(int col);
+ protected abstract GridSqlElement column(int col);
/**
* @param buff Statement builder.
@@ -157,7 +157,7 @@ public abstract class GridSqlQuery {
if (idx < visibleCols)
buff.append(idx + 1);
else {
- GridSqlElement expr = expression(idx);
+ GridSqlElement expr = column(idx);
if (expr == null) // For plain select should never be null, for union H2 itself can't parse query.
throw new IllegalStateException("Failed to build query: " + buff.toString());
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7b5e9afc/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 4267b4a..ccedd13 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
@@ -272,7 +272,7 @@ public class GridSqlQueryParser {
ArrayList<Expression> expressions = select.getExpressions();
for (int i = 0; i < expressions.size(); i++)
- res.addSelectExpression(parseExpression(expressions.get(i)), i < select.getColumnCount());
+ res.addColumn(parseExpression(expressions.get(i)), i < select.getColumnCount());
int[] grpIdx = GROUP_INDEXES.get(select);
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7b5e9afc/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 502366d..947efb9 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
@@ -88,7 +88,7 @@ public class GridSqlQuerySplitter {
int c = 0;
- for (GridSqlElement expr : left.select(true)) {
+ for (GridSqlElement expr : left.columns(true)) {
String colName;
if (expr instanceof GridSqlAlias)
@@ -101,12 +101,12 @@ public class GridSqlQuerySplitter {
expr = alias(colName, expr);
// Set generated alias to the expression.
- left.setSelectExpression(c, expr);
+ left.setColumn(c, expr);
}
GridSqlColumn col = column(colName);
- wrapQry.addSelectExpression(col, true);
+ wrapQry.addColumn(col, true);
c++;
}
@@ -147,7 +147,7 @@ public class GridSqlQuerySplitter {
// Split all select expressions into map-reduce parts.
List<GridSqlElement> mapExps = F.addAll(new ArrayList<GridSqlElement>(mapQry.allColumns()),
- mapQry.select(false));
+ mapQry.columns(false));
GridSqlElement[] rdcExps = new GridSqlElement[mapQry.visibleColumns()];
@@ -159,16 +159,16 @@ public class GridSqlQuerySplitter {
aggregateFound |= splitSelectExpression(mapExps, rdcExps, colNames, i, collocated);
// Fill select expressions.
- mapQry.clearSelect();
+ mapQry.clearColumns();
for (GridSqlElement exp : mapExps) // Add all map expressions as visible.
- mapQry.addSelectExpression(exp, true);
+ mapQry.addColumn(exp, true);
for (GridSqlElement rdcExp : rdcExps) // Add corresponding visible reduce columns.
- rdcQry.addSelectExpression(rdcExp, true);
+ rdcQry.addColumn(rdcExp, true);
for (int i = rdcExps.length; i < mapExps.size(); i++) // Add all extra map columns as invisible reduce columns.
- rdcQry.addSelectExpression(column(((GridSqlAlias)mapExps.get(i)).alias()), false);
+ rdcQry.addColumn(column(((GridSqlAlias)mapExps.get(i)).alias()), false);
// -- GROUP BY
if (mapQry.groupColumns() != null && !collocated)
@@ -242,7 +242,7 @@ public class GridSqlQuerySplitter {
collectAllSpacesInFrom(select.from(), spaces);
- for (GridSqlElement el : select.select(false))
+ for (GridSqlElement el : select.columns(false))
collectAllSpacesInSubqueries(el, spaces);
collectAllSpacesInSubqueries(select.where(), spaces);
@@ -325,7 +325,7 @@ public class GridSqlQuerySplitter {
if (params.length == 0)
return target;
- for (GridSqlElement el : qry.select(false))
+ for (GridSqlElement el : qry.columns(false))
findParams(el, params, target);
findParams(qry.from(), params, target);
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7b5e9afc/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlSelect.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlSelect.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlSelect.java
index fb2643e..6705c48 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlSelect.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlSelect.java
@@ -26,10 +26,10 @@ import java.util.*;
*/
public class GridSqlSelect extends GridSqlQuery {
/** */
- private List<GridSqlElement> allExprs = new ArrayList<>();
+ private List<GridSqlElement> cols = new ArrayList<>();
/** */
- private List<GridSqlElement> select = new ArrayList<>();
+ private int visibleCols;
/** */
private int[] grpCols;
@@ -45,19 +45,19 @@ public class GridSqlSelect extends GridSqlQuery {
/** {@inheritDoc} */
@Override public int visibleColumns() {
- return select.size();
+ return visibleCols;
}
/**
* @return Number of columns is select including invisible ones.
*/
public int allColumns() {
- return allExprs.size();
+ return cols.size();
}
/** {@inheritDoc} */
- @Override protected GridSqlElement expression(int col) {
- return allExprs.get(col);
+ @Override protected GridSqlElement column(int col) {
+ return cols.get(col);
}
/** {@inheritDoc} */
@@ -67,7 +67,7 @@ public class GridSqlSelect extends GridSqlQuery {
if (distinct)
buff.append(" DISTINCT");
- for (GridSqlElement expression : select) {
+ for (GridSqlElement expression : columns(true)) {
buff.appendExceptFirst(",");
buff.append('\n');
buff.append(expression.getSQL());
@@ -86,14 +86,14 @@ public class GridSqlSelect extends GridSqlQuery {
for (int grpCol : grpCols) {
buff.appendExceptFirst(", ");
- addAlias(buff, allExprs.get(grpCol));
+ addAlias(buff, cols.get(grpCol));
}
}
if (havingCol >= 0) {
buff.append("\nHAVING ");
- addAlias(buff, allExprs.get(havingCol));
+ addAlias(buff, cols.get(havingCol));
}
getSortLimitSQL(buff);
@@ -114,52 +114,59 @@ public class GridSqlSelect extends GridSqlQuery {
/**
* @param visibleOnly If only visible expressions needed.
- * @return Select phrase expressions.
+ * @return Select clause expressions.
*/
- public Iterable<GridSqlElement> select(boolean visibleOnly) {
- return visibleOnly ? select : allExprs;
+ public Iterable<GridSqlElement> columns(boolean visibleOnly) {
+ assert visibleCols <= cols.size();
+
+ return visibleOnly && visibleCols != cols.size() ?
+ cols.subList(0, visibleCols) : cols;
}
/**
- * Clears select list.
+ * Clears select expressions list.
+ * @return {@code this}.
*/
- public void clearSelect() {
- select = new ArrayList<>();
- allExprs = new ArrayList<>();
+ public GridSqlSelect clearColumns() {
+ visibleCols = 0;
+ cols = new ArrayList<>();
+
+ return this;
}
/**
* @param expression Expression.
* @param visible Expression is visible in select phrase.
+ * @return {@code this}.
*/
- public void addSelectExpression(GridSqlElement expression, boolean visible) {
+ public GridSqlSelect addColumn(GridSqlElement expression, boolean visible) {
if (expression == null)
throw new NullPointerException();
if (visible) {
- if (select.size() != allExprs.size())
+ if (visibleCols != cols.size())
throw new IllegalStateException("Already started adding invisible columns.");
- select.add(expression);
+ visibleCols++;
}
- else if (select.isEmpty())
- throw new IllegalStateException("No visible columns.");
- allExprs.add(expression);
+ cols.add(expression);
+
+ return this;
}
/**
* @param colIdx Column index.
* @param expression Expression.
+ * @return {@code this}.
*/
- public void setSelectExpression(int colIdx, GridSqlElement expression) {
+ public GridSqlSelect setColumn(int colIdx, GridSqlElement expression) {
if (expression == null)
throw new NullPointerException();
- if (colIdx < select.size()) // Assuming that all the needed expressions were already added.
- select.set(colIdx, expression);
+ cols.set(colIdx, expression);
- allExprs.set(colIdx, expression);
+ return this;
}
/**
@@ -171,9 +178,12 @@ public class GridSqlSelect extends GridSqlQuery {
/**
* @param grpCols Group columns.
+ * @return {@code this}.
*/
- public void groupColumns(int[] grpCols) {
+ public GridSqlSelect groupColumns(int[] grpCols) {
this.grpCols = grpCols;
+
+ return this;
}
/**
@@ -202,9 +212,12 @@ public class GridSqlSelect extends GridSqlQuery {
/**
* @param where New where.
+ * @return {@code this}.
*/
- public void where(GridSqlElement where) {
+ public GridSqlSelect where(GridSqlElement where) {
this.where = where;
+
+ return this;
}
/**
@@ -226,16 +239,19 @@ public class GridSqlSelect extends GridSqlQuery {
* @return Having.
*/
public GridSqlElement having() {
- return havingCol >= 0 ? allExprs.get(havingCol) : null;
+ return havingCol >= 0 ? column(havingCol) : null;
}
/**
* @param col Index of HAVING column.
+ * @return {@code this}.
*/
- public void havingColumn(int col) {
+ public GridSqlSelect havingColumn(int col) {
assert col >= -1 : col;
havingCol = col;
+
+ return this;
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7b5e9afc/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlUnion.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlUnion.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlUnion.java
index 721c288..2900470 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlUnion.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlUnion.java
@@ -41,7 +41,7 @@ public class GridSqlUnion extends GridSqlQuery {
}
/** {@inheritDoc} */
- @Override protected GridSqlElement expression(int col) {
+ @Override protected GridSqlElement column(int col) {
throw new IllegalStateException();
}
[5/5] incubator-ignite git commit: ignite-1142 - removed extra
parsing for merge table columns with types
Posted by se...@apache.org.
ignite-1142 - removed extra parsing for merge table columns with types
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/d82df227
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/d82df227
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/d82df227
Branch: refs/heads/ignite-1142
Commit: d82df227f598989ca9a0dadbf0dbc7078b468bea
Parents: 5f96b5b
Author: S.Vladykin <sv...@gridgain.com>
Authored: Thu Jul 30 01:45:45 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Thu Jul 30 01:45:45 2015 +0300
----------------------------------------------------------------------
.../cache/query/GridCacheSqlQuery.java | 23 +++++
.../processors/query/h2/sql/GridSqlElement.java | 5 ++
.../query/h2/sql/GridSqlQueryParser.java | 95 ++++++++++----------
.../query/h2/sql/GridSqlQuerySplitter.java | 54 +++++++++--
.../processors/query/h2/sql/GridSqlType.java | 8 +-
.../h2/twostep/GridReduceQueryExecutor.java | 23 +++--
6 files changed, 142 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d82df227/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheSqlQuery.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheSqlQuery.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheSqlQuery.java
index 7a0e140..256fd7c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheSqlQuery.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheSqlQuery.java
@@ -26,6 +26,7 @@ import org.apache.ignite.marshaller.*;
import org.apache.ignite.plugin.extensions.communication.*;
import java.nio.*;
+import java.util.*;
/**
* Query.
@@ -52,6 +53,11 @@ public class GridCacheSqlQuery implements Message {
/** */
private byte[] paramsBytes;
+ /** */
+ @GridToStringInclude
+ @GridDirectTransient
+ private LinkedHashMap<String, ?> columns;
+
/**
* For {@link Message}.
*/
@@ -74,6 +80,23 @@ public class GridCacheSqlQuery implements Message {
}
/**
+ * @return Columns.
+ */
+ public LinkedHashMap<String, ?> columns() {
+ return columns;
+ }
+
+ /**
+ * @param columns Columns.
+ * @return {@code this}.
+ */
+ public GridCacheSqlQuery columns(LinkedHashMap<String, ?> columns) {
+ this.columns = columns;
+
+ return this;
+ }
+
+ /**
* @return Alias.
*/
public String alias() {
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d82df227/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 e3c8c4b..0f98a33 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
@@ -113,4 +113,9 @@ public abstract class GridSqlElement implements Iterable<GridSqlElement> {
@Override public Iterator<GridSqlElement> iterator() {
return children.iterator();
}
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return getSQL();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d82df227/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 195fb28..a52f3b0 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
@@ -204,12 +204,12 @@ public class GridSqlQueryParser {
res = new GridSqlSubquery(parse(qry));
}
else if (tbl instanceof FunctionTable)
- res = parseExpression(FUNC_EXPR.get((FunctionTable)tbl));
+ res = parseExpression(FUNC_EXPR.get((FunctionTable)tbl), false);
else if (tbl instanceof RangeTable) {
res = new GridSqlFunction(GridSqlFunctionType.SYSTEM_RANGE);
- res.addChild(parseExpression(RANGE_MIN.get((RangeTable)tbl)));
- res.addChild(parseExpression(RANGE_MAX.get((RangeTable)tbl)));
+ res.addChild(parseExpression(RANGE_MIN.get((RangeTable)tbl), false));
+ res.addChild(parseExpression(RANGE_MAX.get((RangeTable)tbl), false));
}
else
assert0(false, filter.getSelect().getSQL());
@@ -241,7 +241,7 @@ public class GridSqlQueryParser {
res.distinct(select.isDistinct());
Expression where = CONDITION.get(select);
- res.where(parseExpression(where));
+ res.where(parseExpression(where, false));
Set<TableFilter> allFilters = new HashSet<>(select.getTopFilters());
@@ -256,7 +256,7 @@ public class GridSqlQueryParser {
GridSqlElement gridFilter = parseTable(filter);
from = from == null ? gridFilter : new GridSqlJoin(from, gridFilter, filter.isJoinOuter(),
- parseExpression(filter.getJoinCondition()));
+ parseExpression(filter.getJoinCondition(), false));
allFilters.remove(filter);
@@ -271,7 +271,7 @@ public class GridSqlQueryParser {
ArrayList<Expression> expressions = select.getExpressions();
for (int i = 0; i < expressions.size(); i++)
- res.addColumn(parseExpressionWithType(expressions.get(i)), i < select.getColumnCount());
+ res.addColumn(parseExpression(expressions.get(i), true), i < select.getColumnCount());
int[] grpIdx = GROUP_INDEXES.get(select);
@@ -285,8 +285,8 @@ public class GridSqlQueryParser {
processSortOrder(select.getSortOrder(), res);
- res.limit(parseExpression(select.getLimit()));
- res.offset(parseExpression(select.getOffset()));
+ res.limit(parseExpression(select.getLimit(), false));
+ res.offset(parseExpression(select.getOffset(), false));
return res;
}
@@ -345,8 +345,8 @@ public class GridSqlQueryParser {
res.unionType(union.getUnionType());
- res.limit(parseExpression(union.getLimit()));
- res.offset(parseExpression(union.getOffset()));
+ res.limit(parseExpression(union.getLimit(), false));
+ res.offset(parseExpression(union.getOffset(), false));
processSortOrder(UNION_SORT.get(union), res);
@@ -357,41 +357,32 @@ public class GridSqlQueryParser {
/**
* @param expression Expression.
+ * @param calcTypes Calculate types for all the expressions.
* @return Parsed expression.
*/
- private GridSqlElement parseExpression(@Nullable Expression expression) {
+ private GridSqlElement parseExpression(@Nullable Expression expression, boolean calcTypes) {
if (expression == null)
return null;
GridSqlElement res = (GridSqlElement)h2ObjToGridObj.get(expression);
if (res == null) {
- res = parseExpression0(expression);
+ res = parseExpression0(expression, calcTypes);
- h2ObjToGridObj.put(expression, res);
- }
+ if (calcTypes) {
+ GridSqlType type = GridSqlType.UNKNOWN;
- return res;
- }
+ if (expression.getType() != Value.UNKNOWN) {
+ Column c = new Column(null, expression.getType(), expression.getPrecision(), expression.getScale(),
+ expression.getDisplaySize());
- /**
- * @param expression H2 Expression.
- * @return Parsed expression.
- */
- private GridSqlElement parseExpressionWithType(Expression expression) {
- GridSqlElement res = parseExpression(expression);
-
- if (res != null && res.resultType() == null) {
- GridSqlType type = GridSqlType.UNKNOWN;
-
- if (expression.getType() != Value.UNKNOWN) {
- Column c = new Column(null, expression.getType(), expression.getPrecision(), expression.getScale(),
- expression.getDisplaySize());
+ type = 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());
+ res.resultType(type);
}
- res.resultType(type);
+ h2ObjToGridObj.put(expression, res);
}
return res;
@@ -399,9 +390,10 @@ public class GridSqlQueryParser {
/**
* @param expression Expression.
+ * @param calcTypes Calculate types for all the expressions.
* @return Parsed expression.
*/
- private GridSqlElement parseExpression0(Expression expression) {
+ private GridSqlElement parseExpression0(Expression expression, boolean calcTypes) {
if (expression instanceof ExpressionColumn) {
TableFilter tblFilter = ((ExpressionColumn)expression).getTableFilter();
@@ -411,7 +403,8 @@ public class GridSqlQueryParser {
}
if (expression instanceof Alias)
- return new GridSqlAlias(expression.getAlias(), parseExpression(expression.getNonAliasExpression()), true);
+ return new GridSqlAlias(expression.getAlias(),
+ parseExpression(expression.getNonAliasExpression(), calcTypes), true);
if (expression instanceof ValueExpression)
return new GridSqlConst(expression.getValue(null));
@@ -424,12 +417,13 @@ public class GridSqlQueryParser {
if (type == Operation.NEGATE) {
assert OPERATION_RIGHT.get(operation) == null;
- return new GridSqlOperation(GridSqlOperationType.NEGATE, parseExpression(OPERATION_LEFT.get(operation)));
+ return new GridSqlOperation(GridSqlOperationType.NEGATE,
+ parseExpression(OPERATION_LEFT.get(operation), calcTypes));
}
return new GridSqlOperation(OPERATION_OP_TYPES[type],
- parseExpression(OPERATION_LEFT.get(operation)),
- parseExpression(OPERATION_RIGHT.get(operation)));
+ parseExpression(OPERATION_LEFT.get(operation), calcTypes),
+ parseExpression(OPERATION_RIGHT.get(operation), calcTypes));
}
if (expression instanceof Comparison) {
@@ -439,18 +433,18 @@ public class GridSqlQueryParser {
assert opType != null : COMPARISON_TYPE.get(cmp);
- GridSqlElement left = parseExpression(COMPARISON_LEFT.get(cmp));
+ GridSqlElement left = parseExpression(COMPARISON_LEFT.get(cmp), calcTypes);
if (opType.childrenCount() == 1)
return new GridSqlOperation(opType, left);
- GridSqlElement right = parseExpression(COMPARISON_RIGHT.get(cmp));
+ GridSqlElement right = parseExpression(COMPARISON_RIGHT.get(cmp), calcTypes);
return new GridSqlOperation(opType, left, right);
}
if (expression instanceof ConditionNot)
- return new GridSqlOperation(NOT, parseExpression(expression.getNotIfPossible(null)));
+ return new GridSqlOperation(NOT, parseExpression(expression.getNotIfPossible(null), calcTypes));
if (expression instanceof ConditionAndOr) {
ConditionAndOr andOr = (ConditionAndOr)expression;
@@ -460,7 +454,7 @@ public class GridSqlQueryParser {
assert type == ConditionAndOr.AND || type == ConditionAndOr.OR;
return new GridSqlOperation(type == ConditionAndOr.AND ? AND : OR,
- parseExpression(ANDOR_LEFT.get(andOr)), parseExpression(ANDOR_RIGHT.get(andOr)));
+ parseExpression(ANDOR_LEFT.get(andOr), calcTypes), parseExpression(ANDOR_RIGHT.get(andOr), calcTypes));
}
if (expression instanceof Subquery) {
@@ -474,12 +468,12 @@ public class GridSqlQueryParser {
if (expression instanceof ConditionIn) {
GridSqlOperation res = new GridSqlOperation(IN);
- res.addChild(parseExpression(LEFT_CI.get((ConditionIn)expression)));
+ res.addChild(parseExpression(LEFT_CI.get((ConditionIn)expression), calcTypes));
List<Expression> vals = VALUE_LIST_CI.get((ConditionIn)expression);
for (Expression val : vals)
- res.addChild(parseExpression(val));
+ res.addChild(parseExpression(val, calcTypes));
return res;
}
@@ -487,12 +481,12 @@ public class GridSqlQueryParser {
if (expression instanceof ConditionInConstantSet) {
GridSqlOperation res = new GridSqlOperation(IN);
- res.addChild(parseExpression(LEFT_CICS.get((ConditionInConstantSet) expression)));
+ res.addChild(parseExpression(LEFT_CICS.get((ConditionInConstantSet)expression), calcTypes));
List<Expression> vals = VALUE_LIST_CICS.get((ConditionInConstantSet)expression);
for (Expression val : vals)
- res.addChild(parseExpression(val));
+ res.addChild(parseExpression(val, calcTypes));
return res;
}
@@ -506,7 +500,7 @@ public class GridSqlQueryParser {
assert0(!all, expression);
assert0(compareType == Comparison.EQUAL, expression);
- res.addChild(parseExpression(LEFT_CIS.get((ConditionInSelect) expression)));
+ res.addChild(parseExpression(LEFT_CIS.get((ConditionInSelect) expression), calcTypes));
Query qry = QUERY.get((ConditionInSelect)expression);
@@ -522,8 +516,9 @@ public class GridSqlQueryParser {
boolean regexp = REGEXP_CL.get((CompareLike)expression);
- return new GridSqlOperation(regexp ? REGEXP : LIKE, parseExpression(LEFT.get((CompareLike) expression)),
- parseExpression(RIGHT.get((CompareLike) expression)));
+ return new GridSqlOperation(regexp ? REGEXP : LIKE,
+ parseExpression(LEFT.get((CompareLike)expression), calcTypes),
+ parseExpression(RIGHT.get((CompareLike)expression), calcTypes));
}
if (expression instanceof Function) {
@@ -540,7 +535,7 @@ public class GridSqlQueryParser {
res.addChild(GridSqlPlaceholder.EMPTY);
}
else
- res.addChild(parseExpression(arg));
+ res.addChild(parseExpression(arg, calcTypes));
}
}
@@ -563,7 +558,7 @@ public class GridSqlQueryParser {
if (f.getArgs() != null) {
for (Expression arg : f.getArgs())
- res.addChild(parseExpression(arg));
+ res.addChild(parseExpression(arg, calcTypes));
}
return res;
@@ -579,7 +574,7 @@ public class GridSqlQueryParser {
Expression on = ON.get((Aggregate)expression);
if (on != null)
- res.addChild(parseExpression(on));
+ res.addChild(parseExpression(on, calcTypes));
return res;
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d82df227/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 adc8aeb..fe53101 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
@@ -89,6 +89,8 @@ public class GridSqlQuerySplitter {
int c = 0;
for (GridSqlElement expr : left.columns(true)) {
+ GridSqlType type = expr.resultType();
+
String colName;
if (expr instanceof GridSqlAlias)
@@ -106,6 +108,8 @@ public class GridSqlQuerySplitter {
GridSqlColumn col = column(colName);
+ col.resultType(type);
+
wrapQry.addColumn(col, true);
c++;
@@ -218,7 +222,8 @@ public class GridSqlQuerySplitter {
findParams(rdcQry, params, new ArrayList<>()).toArray()));
res.addMapQuery(new GridCacheSqlQuery(mergeTable, mapQry.getSQL(),
- findParams(mapQry, params, new ArrayList<>(params.length)).toArray()));
+ findParams(mapQry, params, new ArrayList<>(params.length)).toArray())
+ .columns(collectColumns(mapExps)));
res.explain(explain);
@@ -226,6 +231,34 @@ public class GridSqlQuerySplitter {
}
/**
+ * @param cols Columns from SELECT clause.
+ * @return Map of columns with types.
+ */
+ private static LinkedHashMap<String,?> collectColumns(List<GridSqlElement> cols) {
+ LinkedHashMap<String, GridSqlType> res = new LinkedHashMap<>(cols.size(), 1f, false);
+
+ for (int i = 0; i < cols.size(); i++) {
+ GridSqlElement col = cols.get(i);
+ GridSqlType t = col.resultType();
+
+ if (t == null || t == GridSqlType.UNKNOWN)
+ throw new IllegalStateException("Type: " + t + " -> " + col);
+
+ String alias;
+
+ if (col instanceof GridSqlAlias)
+ alias = ((GridSqlAlias)col).alias();
+ else
+ alias = columnName(i);
+
+ if (res.put(alias, t) != null)
+ throw new IllegalStateException("Alias already exists: " + alias);
+ }
+
+ return res;
+ }
+
+ /**
* @param qry Query.
* @param spaces Space names.
* @return Query.
@@ -501,6 +534,8 @@ public class GridSqlQuerySplitter {
) {
GridSqlAggregateFunction agg = parentExpr.child(aggIdx);
+ assert agg.resultType() != null;
+
GridSqlElement mapAgg, rdcAgg;
// Create stubbed map alias to fill it with correct expression later.
@@ -515,7 +550,8 @@ public class GridSqlQuerySplitter {
switch (agg.type()) {
case AVG: // SUM( AVG(CAST(x AS DOUBLE))*COUNT(x) )/SUM( COUNT(x) ).
//-- COUNT(x) map
- GridSqlElement cntMapAgg = aggregate(agg.distinct(), COUNT).addChild(agg.child());
+ GridSqlElement cntMapAgg = aggregate(agg.distinct(), COUNT)
+ .resultType(GridSqlType.BIGINT).addChild(agg.child());
// Add generated alias to COUNT(x).
// Using size as index since COUNT will be added as the last select element to the map query.
@@ -526,7 +562,7 @@ public class GridSqlQuerySplitter {
mapSelect.add(cntMapAgg);
//-- AVG(CAST(x AS DOUBLE)) map
- mapAgg = aggregate(agg.distinct(), AVG).addChild( // Add function argument.
+ mapAgg = aggregate(agg.distinct(), AVG).resultType(GridSqlType.DOUBLE).addChild(
function(CAST).resultType(GridSqlType.DOUBLE).addChild(agg.child()));
//-- SUM( AVG(x)*COUNT(x) )/SUM( COUNT(x) ) reduce
@@ -544,14 +580,14 @@ public class GridSqlQuerySplitter {
case SUM: // SUM( SUM(x) )
case MAX: // MAX( MAX(x) )
case MIN: // MIN( MIN(x) )
- mapAgg = aggregate(agg.distinct(), agg.type()).addChild(agg.child());
+ mapAgg = aggregate(agg.distinct(), agg.type()).resultType(agg.resultType()).addChild(agg.child());
rdcAgg = aggregate(agg.distinct(), agg.type()).addChild(column(mapAggAlias.alias()));
break;
case COUNT_ALL: // CAST(SUM( COUNT(*) ) AS BIGINT)
case COUNT: // CAST(SUM( COUNT(x) ) AS BIGINT)
- mapAgg = aggregate(agg.distinct(), agg.type());
+ mapAgg = aggregate(agg.distinct(), agg.type()).resultType(GridSqlType.BIGINT);
if (agg.type() == COUNT)
mapAgg.addChild(agg.child());
@@ -566,9 +602,11 @@ public class GridSqlQuerySplitter {
}
assert !(mapAgg instanceof GridSqlAlias);
+ assert mapAgg.resultType() != null;
// Fill the map alias with aggregate.
mapAggAlias.child(0, mapAgg);
+ mapAggAlias.resultType(mapAgg.resultType());
// Replace in original expression aggregate with reduce aggregate.
parentExpr.child(aggIdx, rdcAgg);
@@ -597,7 +635,11 @@ public class GridSqlQuerySplitter {
* @return Alias.
*/
private static GridSqlAlias alias(String alias, GridSqlElement child) {
- return new GridSqlAlias(alias, child);
+ GridSqlAlias res = new GridSqlAlias(alias, child);
+
+ res.resultType(child.resultType());
+
+ return res;
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d82df227/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 e96ae69..aeee562 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,12 +17,13 @@
package org.apache.ignite.internal.processors.query.h2.sql;
+import org.apache.ignite.internal.util.typedef.internal.*;
import org.h2.value.*;
/**
* SQL Data type based on H2.
*/
-public class GridSqlType {
+public final class GridSqlType {
/** */
public static final GridSqlType UNKNOWN = new GridSqlType(Value.UNKNOWN, 0, 0, 0, null);
@@ -107,4 +108,9 @@ public class GridSqlType {
public String sql() {
return sql;
}
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(GridSqlType.class, this);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d82df227/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
index cde3288..e34ddd6 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
@@ -29,6 +29,7 @@ import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.*;
import org.apache.ignite.internal.processors.cache.query.*;
import org.apache.ignite.internal.processors.query.*;
import org.apache.ignite.internal.processors.query.h2.*;
+import org.apache.ignite.internal.processors.query.h2.sql.*;
import org.apache.ignite.internal.processors.query.h2.twostep.messages.*;
import org.apache.ignite.internal.util.*;
import org.apache.ignite.internal.util.typedef.*;
@@ -36,9 +37,7 @@ import org.apache.ignite.internal.util.typedef.internal.*;
import org.apache.ignite.lang.*;
import org.apache.ignite.marshaller.*;
import org.apache.ignite.plugin.extensions.communication.*;
-import org.h2.command.*;
import org.h2.command.ddl.*;
-import org.h2.command.dml.*;
import org.h2.engine.*;
import org.h2.expression.*;
import org.h2.index.*;
@@ -55,7 +54,6 @@ import javax.cache.*;
import java.lang.reflect.*;
import java.sql.*;
import java.util.*;
-import java.util.Set;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
@@ -1053,17 +1051,24 @@ public class GridReduceQueryExecutor {
data.create = true;
if (!explain) {
- Prepared prepare = ses.prepare(qry.query(), false);
+ LinkedHashMap<String,?> colsMap = qry.columns();
- List<org.h2.expression.Parameter> parsedParams = prepare.getParameters();
+ assert colsMap != null;
- for (int i = Math.min(parsedParams.size(), qry.parameters().length); --i >= 0; ) {
- Object val = qry.parameters()[i];
+ ArrayList<Column> cols = new ArrayList<>(colsMap.size());
- parsedParams.get(i).setValue(DataType.convertToValue(ses, val, Value.UNKNOWN));
+ for (Map.Entry<String,?> e : colsMap.entrySet()) {
+ String alias = e.getKey();
+ GridSqlType t = (GridSqlType)e.getValue();
+
+ assert !F.isEmpty(alias);
+
+ Column c = new Column(alias, t.type(), t.precision(), t.scale(), t.displaySize());
+
+ cols.add(c);
}
- data.columns = generateColumnsFromQuery((Query)prepare);
+ data.columns = cols;
}
else
data.columns = planColumns();
[3/5] incubator-ignite git commit: ignite-1142 - calculate type only
for select columns
Posted by se...@apache.org.
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;
[2/5] incubator-ignite git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-1142
Posted by se...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-1142
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/1ee9736e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/1ee9736e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/1ee9736e
Branch: refs/heads/ignite-1142
Commit: 1ee9736ebba841cccfbb00cfc5ac5a3338706bd7
Parents: 7b5e9af 5288b2d
Author: S.Vladykin <sv...@gridgain.com>
Authored: Wed Jul 29 15:56:41 2015 +0300
Committer: S.Vladykin <sv...@gridgain.com>
Committed: Wed Jul 29 15:56:41 2015 +0300
----------------------------------------------------------------------
.../datastreamer/DataStreamerImpl.java | 22 ++++++++++++++++++++
.../datastreamer/DataStreamerUpdateJob.java | 20 +++++++++++++++++-
2 files changed, 41 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
[4/5] incubator-ignite git commit: ignite-1142 - refactor: removed
setCastType as it duplicates resultType + minor query structure change
Posted by se...@apache.org.
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 <sv...@gridgain.com>
Authored: Wed Jul 29 20:06:12 2015 +0300
Committer: S.Vladykin <sv...@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;