IGNITE-4150: SQL: updated H2 version to 1.4.197. This closes #3956.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/50c5809a Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/50c5809a Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/50c5809a Branch: refs/heads/ignite-gg-14206 Commit: 50c5809a803f02e2de7b1984c556537568562189 Parents: 67134de Author: tledkov-gridgain <tled...@gridgain.com> Authored: Wed Sep 26 11:08:02 2018 +0300 Committer: devozerov <voze...@gridgain.com> Committed: Wed Sep 26 11:08:02 2018 +0300 ---------------------------------------------------------------------- .../examples/datagrid/SpatialQueryExample.java | 4 +- .../cache/query/annotations/QuerySqlField.java | 2 +- .../processors/cache/query/CacheQuery.java | 18 +-- .../internal/processors/query/QueryUtils.java | 2 +- modules/geospatial/pom.xml | 6 +- .../query/h2/opt/GridH2SpatialIndex.java | 10 +- .../query/h2/H2IndexingAbstractGeoSelfTest.java | 6 +- .../processors/query/h2/H2DatabaseType.java | 6 +- .../processors/query/h2/IgniteH2Indexing.java | 2 +- .../processors/query/h2/dml/DmlUtils.java | 6 +- .../query/h2/opt/GridH2CollocationModel.java | 3 + .../query/h2/opt/GridH2ProxySpatialIndex.java | 5 +- .../query/h2/opt/GridH2RowDescriptor.java | 6 +- .../query/h2/opt/GridH2ValueCacheObject.java | 3 +- .../query/h2/sql/GridSqlAggregateFunction.java | 48 ++++++- .../query/h2/sql/GridSqlQueryParser.java | 80 +++++++---- .../query/h2/sql/GridSqlQuerySplitter.java | 2 +- .../processors/query/h2/sql/GridSqlUnion.java | 16 +-- .../ignite/mesos/resource/IgniteProvider.java | 6 +- .../src/sql_esc_convert_function_test.cpp | 4 +- .../Cache/Query/Linq/CacheLinqTest.Misc.cs | 2 +- .../frontend/app/data/pom-dependencies.json | 3 +- .../benchmark-native-sql-select-join.properties | 89 ++++++++++++ .../jdbc/NativeSqlJoinQueryRangeBenchmark.java | 135 +++++++++++++++++++ parent/pom.xml | 2 +- 25 files changed, 377 insertions(+), 89 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/examples/src/main/java-lgpl/org/apache/ignite/examples/datagrid/SpatialQueryExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java-lgpl/org/apache/ignite/examples/datagrid/SpatialQueryExample.java b/examples/src/main/java-lgpl/org/apache/ignite/examples/datagrid/SpatialQueryExample.java index 7e13e34..f27dbac 100644 --- a/examples/src/main/java-lgpl/org/apache/ignite/examples/datagrid/SpatialQueryExample.java +++ b/examples/src/main/java-lgpl/org/apache/ignite/examples/datagrid/SpatialQueryExample.java @@ -17,8 +17,6 @@ package org.apache.ignite.examples.datagrid; -import com.vividsolutions.jts.geom.*; -import com.vividsolutions.jts.io.*; import org.apache.ignite.*; import org.apache.ignite.cache.query.SqlQuery; import org.apache.ignite.cache.query.annotations.*; @@ -27,6 +25,8 @@ import org.apache.ignite.configuration.*; import javax.cache.*; import java.util.*; import org.apache.ignite.examples.ExampleNodeStartup; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.io.WKTReader; /** * This examples shows the usage of geospatial queries and indexes in Apache Ignite. http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/core/src/main/java/org/apache/ignite/cache/query/annotations/QuerySqlField.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/query/annotations/QuerySqlField.java b/modules/core/src/main/java/org/apache/ignite/cache/query/annotations/QuerySqlField.java index 35b7575..b05f6b6 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/query/annotations/QuerySqlField.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/query/annotations/QuerySqlField.java @@ -41,7 +41,7 @@ public @interface QuerySqlField { * during updates, but makes select operations faster. * <p> * When indexing SPI and indexed field is - * of type {@code com.vividsolutions.jts.geom.Geometry} (or any subclass of this class) then Ignite will + * of type {@code org.locationtech.jts.geom.Geometry} (or any subclass of this class) then Ignite will * consider this index as spatial providing performance boost for spatial queries. * * @return {@code True} if index must be created for this field in database. http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/CacheQuery.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/CacheQuery.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/CacheQuery.java index d8eb7ca..c8f392f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/CacheQuery.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/CacheQuery.java @@ -156,13 +156,13 @@ import org.jetbrains.annotations.Nullable; * private class MapPoint implements Serializable { * // Geospatial index. * @QuerySqlField(index = true) - * private com.vividsolutions.jts.geom.Point location; + * private org.locationtech.jts.geom.Point location; * * // Not indexed field. * @QuerySqlField * private String name; * - * public MapPoint(com.vividsolutions.jts.geom.Point location, String name) { + * public MapPoint(org.locationtech.jts.geom.Point location, String name) { * this.location = location; * this.name = name; * } @@ -170,14 +170,14 @@ import org.jetbrains.annotations.Nullable; * </pre> * Example of spatial query on the geo-indexed field from above: * <pre name="code" class="java"> - * com.vividsolutions.jts.geom.GeometryFactory factory = new com.vividsolutions.jts.geom.GeometryFactory(); + * org.locationtech.jts.geom.GeometryFactory factory = new org.locationtech.jts.geom.GeometryFactory(); * - * com.vividsolutions.jts.geom.Polygon square = factory.createPolygon(new Coordinate[] { - * new com.vividsolutions.jts.geom.Coordinate(0, 0), - * new com.vividsolutions.jts.geom.Coordinate(0, 100), - * new com.vividsolutions.jts.geom.Coordinate(100, 100), - * new com.vividsolutions.jts.geom.Coordinate(100, 0), - * new com.vividsolutions.jts.geom.Coordinate(0, 0) + * org.locationtech.jts.geom.Polygon square = factory.createPolygon(new Coordinate[] { + * new org.locationtech.jts.geom.Coordinate(0, 0), + * new org.locationtech.jts.geom.Coordinate(0, 100), + * new org.locationtech.jts.geom.Coordinate(100, 100), + * new org.locationtech.jts.geom.Coordinate(100, 0), + * new org.locationtech.jts.geom.Coordinate(0, 0) * }); * * Map.Entry<String, UserData> records = cache.queries().createSqlQuery(MapPoint.class, "select * from MapPoint where location && ?") http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java index 42de312..d977a49 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java @@ -97,7 +97,7 @@ public class QueryUtils { private static final int DISCO_HIST_SIZE = getInteger(IGNITE_INDEXING_DISCOVERY_HISTORY_SIZE, 1000); /** */ - private static final Class<?> GEOMETRY_CLASS = U.classForName("com.vividsolutions.jts.geom.Geometry", null); + private static final Class<?> GEOMETRY_CLASS = U.classForName("org.locationtech.jts.geom.Geometry", null); /** */ private static final Set<Class<?>> SQL_TYPES = createSqlTypes(); http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/geospatial/pom.xml ---------------------------------------------------------------------- diff --git a/modules/geospatial/pom.xml b/modules/geospatial/pom.xml index 7133fad..a8fb899 100644 --- a/modules/geospatial/pom.xml +++ b/modules/geospatial/pom.xml @@ -42,9 +42,9 @@ </dependency> <dependency> - <groupId>com.vividsolutions</groupId> - <artifactId>jts</artifactId> - <version>1.13</version> + <groupId>org.locationtech.jts</groupId> + <artifactId>jts-core</artifactId> + <version>1.15.0</version> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java ---------------------------------------------------------------------- diff --git a/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java b/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java index 831e674..4d1577b 100644 --- a/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java +++ b/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java @@ -26,8 +26,6 @@ import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Geometry; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.processors.query.h2.H2Cursor; import org.apache.ignite.internal.util.GridCursorIteratorWrapper; @@ -52,6 +50,8 @@ import org.h2.table.IndexColumn; import org.h2.table.TableFilter; import org.h2.value.Value; import org.h2.value.ValueGeometry; +import org.locationtech.jts.geom.Envelope; +import org.locationtech.jts.geom.Geometry; import static org.apache.ignite.internal.processors.query.h2.opt.GridH2KeyValueRowOnheap.KEY_COL; @@ -286,8 +286,7 @@ public class GridH2SpatialIndex extends GridH2IndexBase implements SpatialIndex /** {@inheritDoc} */ @Override public double getCost(Session ses, int[] masks, TableFilter[] filters, int filter, SortOrder sortOrder, HashSet<Column> cols) { - return SpatialTreeIndex.getCostRangeIndex(masks, - table.getRowCountApproximation(), columns) / 10; + return SpatialTreeIndex.getCostRangeIndex(masks, columns) / 10; } /** {@inheritDoc} */ @@ -343,9 +342,8 @@ public class GridH2SpatialIndex extends GridH2IndexBase implements SpatialIndex IndexingQueryFilter qryFilter = null; GridH2QueryContext qctx = GridH2QueryContext.get(); - if (qctx != null) { + if (qctx != null) qryFilter = qctx.filter(); - } IndexingQueryCacheFilter qryCacheFilter = qryFilter != null ? qryFilter.forCache(getTable().cacheName()) : null; http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/H2IndexingAbstractGeoSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/H2IndexingAbstractGeoSelfTest.java b/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/H2IndexingAbstractGeoSelfTest.java index e9f96e3..9c5038e 100644 --- a/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/H2IndexingAbstractGeoSelfTest.java +++ b/modules/geospatial/src/test/java/org/apache/ignite/internal/processors/query/h2/H2IndexingAbstractGeoSelfTest.java @@ -17,9 +17,6 @@ package org.apache.ignite.internal.processors.query.h2; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.io.ParseException; -import com.vividsolutions.jts.io.WKTReader; import org.apache.ignite.IgniteCache; import org.apache.ignite.cache.CacheAtomicityMode; import org.apache.ignite.cache.CacheMode; @@ -39,6 +36,9 @@ import org.apache.ignite.internal.util.typedef.internal.SB; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.testframework.GridTestUtils; import org.jetbrains.annotations.NotNull; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.io.ParseException; +import org.locationtech.jts.io.WKTReader; import javax.cache.Cache; import java.io.Serializable; http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2DatabaseType.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2DatabaseType.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2DatabaseType.java index 3b75239..3d7faca 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2DatabaseType.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2DatabaseType.java @@ -144,11 +144,11 @@ public enum H2DatabaseType { return GEOMETRY; if (LocalDateTimeUtils.isJava8DateApiPresent()) { - if (LocalDateTimeUtils.isLocalDate(cls)) + if (LocalDateTimeUtils.LOCAL_DATE == cls) return DATE; - else if (LocalDateTimeUtils.isLocalTime(cls)) + else if (LocalDateTimeUtils.LOCAL_TIME == cls) return TIME; - else if (LocalDateTimeUtils.isLocalDateTime(cls)) + else if (LocalDateTimeUtils.LOCAL_DATE_TIME == cls) return TIMESTAMP; } http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java index 96d864d..4b855a7 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java @@ -250,7 +250,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { /** Default DB options. */ private static final String DB_OPTIONS = ";LOCK_MODE=3;MULTI_THREADED=1;DB_CLOSE_ON_EXIT=FALSE" + ";DEFAULT_LOCK_TIMEOUT=10000;FUNCTIONS_IN_SCHEMA=true;OPTIMIZE_REUSE_RESULTS=0;QUERY_CACHE_SIZE=0" + - ";RECOMPILE_ALWAYS=1;MAX_OPERATION_MEMORY=0;NESTED_JOINS=0;BATCH_JOINS=1" + + ";MAX_OPERATION_MEMORY=0;BATCH_JOINS=1" + ";ROW_FACTORY=\"" + GridH2PlainRowFactory.class.getName() + "\"" + ";DEFAULT_TABLE_ENGINE=" + GridH2DefaultTableEngine.class.getName(); http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java index 03b03d8..58fea4a 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java @@ -71,14 +71,14 @@ public class DmlUtils { U.resolveClassLoader(desc.context().gridConfig())); if (LocalDateTimeUtils.isJava8DateApiPresent()) { - if (val instanceof Timestamp && LocalDateTimeUtils.isLocalDateTime(expCls)) + if (val instanceof Timestamp && LocalDateTimeUtils.LOCAL_DATE_TIME ==expCls) return LocalDateTimeUtils.valueToLocalDateTime(ValueTimestamp.get((Timestamp) val)); - if (val instanceof Date && LocalDateTimeUtils.isLocalDate(expCls)) + if (val instanceof Date && LocalDateTimeUtils.LOCAL_DATE == expCls) return LocalDateTimeUtils.valueToLocalDate(ValueDate.fromDateValue( DateTimeUtils.dateValueFromDate(((Date) val).getTime()))); - if (val instanceof Time && LocalDateTimeUtils.isLocalTime(expCls)) + if (val instanceof Time && LocalDateTimeUtils.LOCAL_TIME == expCls) return LocalDateTimeUtils.valueToLocalTime(ValueTime.get((Time) val)); } http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java index 800a2aa..5e574e4 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java @@ -650,6 +650,9 @@ public final class GridH2CollocationModel { } } + if (filters == null) + return cm; + assert cm.view; Select select = filters[0].getSelect(); http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ProxySpatialIndex.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ProxySpatialIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ProxySpatialIndex.java index 8af5099..9977128 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ProxySpatialIndex.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ProxySpatialIndex.java @@ -53,9 +53,8 @@ public class GridH2ProxySpatialIndex extends GridH2ProxyIndex implements Spatial /** {@inheritDoc} */ @Override public double getCost(Session ses, int[] masks, TableFilter[] filters, int filter, - SortOrder sortOrder, HashSet<Column> cols) { - return SpatialTreeIndex.getCostRangeIndex(masks, - table.getRowCountApproximation(), columns) / 10; + SortOrder sortOrder, HashSet<Column> cols) { + return SpatialTreeIndex.getCostRangeIndex(masks, columns) / 10; } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java index 23f3ba4..d20496a 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java @@ -223,13 +223,13 @@ public class GridH2RowDescriptor { UUID uuid = (UUID)obj; return ValueUuid.get(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits()); case Value.DATE: - if (LocalDateTimeUtils.isLocalDate(obj.getClass())) + if (LocalDateTimeUtils.LOCAL_DATE == obj.getClass()) return LocalDateTimeUtils.localDateToDateValue(obj); return ValueDate.get((Date)obj); case Value.TIME: - if (LocalDateTimeUtils.isLocalTime(obj.getClass())) + if (LocalDateTimeUtils.LOCAL_TIME == obj.getClass()) return LocalDateTimeUtils.localTimeToTimeValue(obj); return ValueTime.get((Time)obj); @@ -238,7 +238,7 @@ public class GridH2RowDescriptor { if (obj instanceof java.util.Date && !(obj instanceof Timestamp)) obj = new Timestamp(((java.util.Date)obj).getTime()); - if (LocalDateTimeUtils.isLocalDateTime(obj.getClass())) + if (LocalDateTimeUtils.LOCAL_DATE_TIME == obj.getClass()) return LocalDateTimeUtils.localDateTimeToValue(obj); return ValueTimestamp.get((Timestamp)obj); http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ValueCacheObject.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ValueCacheObject.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ValueCacheObject.java index 9b5f0d5..5b1dfcd 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ValueCacheObject.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ValueCacheObject.java @@ -25,6 +25,7 @@ import org.apache.ignite.internal.binary.BinaryObjectImpl; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectValueContext; import org.h2.message.DbException; +import org.h2.util.Bits; import org.h2.util.JdbcUtils; import org.h2.util.Utils; import org.h2.value.CompareMode; @@ -169,7 +170,7 @@ public class GridH2ValueCacheObject extends Value { if (o1.equals(o2)) return 0; - return Utils.compareNotNullSigned(getBytesNoCopy(), v.getBytesNoCopy()); + return Bits.compareNotNullSigned(getBytesNoCopy(), v.getBytesNoCopy()); } return h1 > h2 ? 1 : -1; http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlAggregateFunction.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlAggregateFunction.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlAggregateFunction.java index 2978b15..cfe0155 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlAggregateFunction.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlAggregateFunction.java @@ -18,7 +18,10 @@ package org.apache.ignite.internal.processors.query.h2.sql; import org.apache.ignite.internal.util.typedef.F; +import org.h2.expression.Aggregate; import org.h2.util.StatementBuilder; +import org.h2.util.StringUtils; +import org.jetbrains.annotations.Nullable; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlFunctionType.AVG; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlFunctionType.COUNT; @@ -38,6 +41,39 @@ public class GridSqlAggregateFunction extends GridSqlFunction { // STDDEV_POP, STDDEV_SAMP, VAR_POP, VAR_SAMP, BOOL_OR, BOOL_AND, SELECTIVITY, HISTOGRAM, }; + /** + * Map type. + * + * @param type H2 type. + * @return Ignite type, {@code null} if not supported. + */ + @Nullable private static GridSqlFunctionType mapType(Aggregate.AggregateType type) { + switch (type) { + case COUNT_ALL: + return COUNT_ALL; + + case COUNT: + return COUNT; + + case GROUP_CONCAT: + return GROUP_CONCAT; + + case SUM: + return SUM; + + case MIN: + return MIN; + + case MAX: + return MAX; + + case AVG: + return AVG; + } + + return null; + } + /** */ private final boolean distinct; @@ -62,20 +98,20 @@ public class GridSqlAggregateFunction extends GridSqlFunction { /** * @param distinct Distinct. - * @param typeId Type. + * @param type Type. */ - public GridSqlAggregateFunction(boolean distinct, int typeId) { - this(distinct, TYPE_INDEX[typeId]); + public GridSqlAggregateFunction(boolean distinct, Aggregate.AggregateType type) { + this(distinct, mapType(type)); } /** * Checks if the aggregate type is valid. * - * @param typeId Aggregate type id. + * @param type Aggregate type. * @return True is valid, otherwise false. */ - protected static boolean isValidType(int typeId) { - return (typeId >= 0) && (typeId < TYPE_INDEX.length); + protected static boolean isValidType(Aggregate.AggregateType type) { + return mapType(type) != null; } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/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 cca1dfc..a653e7f 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 @@ -50,6 +50,7 @@ import org.h2.command.CommandInterface; import org.h2.command.Prepared; import org.h2.command.ddl.AlterTableAddConstraint; import org.h2.command.ddl.AlterTableAlterColumn; +import org.h2.command.ddl.CommandWithColumns; import org.h2.command.ddl.CreateIndex; import org.h2.command.ddl.CreateTable; import org.h2.command.ddl.CreateTableData; @@ -108,8 +109,6 @@ import org.jetbrains.annotations.Nullable; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.AND; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.BIGGER; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.BIGGER_EQUAL; -import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.CONCAT; -import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.DIVIDE; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.EQUAL; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.EQUAL_NULL_SAFE; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.EXISTS; @@ -117,14 +116,10 @@ import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperatio import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.IS_NOT_NULL; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.IS_NULL; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.LIKE; -import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.MINUS; -import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.MODULUS; -import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.MULTIPLY; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.NOT; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.NOT_EQUAL; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.NOT_EQUAL_NULL_SAFE; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.OR; -import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.PLUS; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.REGEXP; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.SMALLER; import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlOperationType.SMALLER_EQUAL; @@ -138,10 +133,6 @@ import static org.apache.ignite.internal.processors.query.h2.sql.GridSqlType.fro @SuppressWarnings("TypeMayBeWeakened") public class GridSqlQueryParser { /** */ - private static final GridSqlOperationType[] OPERATION_OP_TYPES = - {CONCAT, PLUS, MINUS, MULTIPLY, DIVIDE, null, MODULUS}; - - /** */ private static final GridSqlOperationType[] COMPARISON_TYPES = {EQUAL, BIGGER_EQUAL, BIGGER, SMALLER_EQUAL, SMALLER, NOT_EQUAL, IS_NULL, IS_NOT_NULL, @@ -165,7 +156,7 @@ public class GridSqlQueryParser { private static final Getter<SelectUnion, Boolean> UNION_IS_FOR_UPDATE = getter(SelectUnion.class, "isForUpdate"); /** */ - private static final Getter<Operation, Integer> OPERATION_TYPE = getter(Operation.class, "opType"); + private static final Getter<Operation, Operation.OpType> OPERATION_TYPE = getter(Operation.class, "opType"); /** */ private static final Getter<Operation, Expression> OPERATION_LEFT = getter(Operation.class, "left"); @@ -249,7 +240,7 @@ public class GridSqlQueryParser { private static final Getter<Aggregate, Boolean> DISTINCT = getter(Aggregate.class, "distinct"); /** */ - private static final Getter<Aggregate, Integer> TYPE = getter(Aggregate.class, "type"); + private static final Getter<Aggregate, Aggregate.AggregateType> TYPE = getter(Aggregate.class, "type"); /** */ private static final Getter<Aggregate, Expression> ON = getter(Aggregate.class, "on"); @@ -290,7 +281,7 @@ public class GridSqlQueryParser { private static final Getter<Explain, Prepared> EXPLAIN_COMMAND = getter(Explain.class, "command"); /** */ - private static final Getter<Merge, Table> MERGE_TABLE = getter(Merge.class, "table"); + private static final Getter<Merge, Table> MERGE_TABLE = getter(Merge.class, "targetTable"); /** */ private static final Getter<Merge, Column[]> MERGE_COLUMNS = getter(Merge.class, "columns"); @@ -299,7 +290,7 @@ public class GridSqlQueryParser { private static final Getter<Merge, Column[]> MERGE_KEYS = getter(Merge.class, "keys"); /** */ - private static final Getter<Merge, List<Expression[]>> MERGE_ROWS = getter(Merge.class, "list"); + private static final Getter<Merge, List<Expression[]>> MERGE_ROWS = getter(Merge.class, "valuesExpressionList"); /** */ private static final Getter<Merge, Query> MERGE_QUERY = getter(Merge.class, "query"); @@ -323,7 +314,7 @@ public class GridSqlQueryParser { private static final Getter<Insert, Boolean> INSERT_SORTED = getter(Insert.class, "sortedInsertMode"); /** */ - private static final Getter<Delete, TableFilter> DELETE_FROM = getter(Delete.class, "tableFilter"); + private static final Getter<Delete, TableFilter> DELETE_FROM = getter(Delete.class, "targetTableFilter"); /** */ private static final Getter<Delete, Expression> DELETE_WHERE = getter(Delete.class, "condition"); @@ -332,7 +323,7 @@ public class GridSqlQueryParser { private static final Getter<Delete, Expression> DELETE_LIMIT = getter(Delete.class, "limitExpr"); /** */ - private static final Getter<Update, TableFilter> UPDATE_TARGET = getter(Update.class, "tableFilter"); + private static final Getter<Update, TableFilter> UPDATE_TARGET = getter(Update.class, "targetTableFilter"); /** */ private static final Getter<Update, ArrayList<Column>> UPDATE_COLUMNS = getter(Update.class, "columns"); @@ -397,12 +388,12 @@ public class GridSqlQueryParser { private static final Getter<CreateTable, CreateTableData> CREATE_TABLE_DATA = getter(CreateTable.class, "data"); /** */ - private static final Getter<CreateTable, ArrayList<DefineCommand>> CREATE_TABLE_CONSTRAINTS = - getter(CreateTable.class, "constraintCommands"); + private static final Getter<CommandWithColumns, ArrayList<DefineCommand>> CREATE_TABLE_CONSTRAINTS = + getter(CommandWithColumns.class, "constraintCommands"); /** */ - private static final Getter<CreateTable, IndexColumn[]> CREATE_TABLE_PK = getter(CreateTable.class, - "pkColumns"); + private static final Getter<CommandWithColumns, IndexColumn[]> CREATE_TABLE_PK = + getter(CommandWithColumns.class, "pkColumns"); /** */ private static final Getter<CreateTable, Boolean> CREATE_TABLE_IF_NOT_EXISTS = getter(CreateTable.class, @@ -1122,7 +1113,7 @@ public class GridSqlQueryParser { List<DefineCommand> constraints = CREATE_TABLE_CONSTRAINTS.get(createTbl); - if (constraints.size() == 0) + if (F.isEmpty(constraints)) throw new IgniteSQLException("No PRIMARY KEY defined for CREATE TABLE", IgniteQueryErrorCode.PARSING); @@ -1923,6 +1914,41 @@ public class GridSqlQueryParser { } /** + * Map operation type. + * + * @param opType H2 operation type. + * @return Ignite operation type. + */ + private static GridSqlOperationType mapOperationType(Operation.OpType opType) { + switch (opType) { + case CONCAT: + return GridSqlOperationType.CONCAT; + + case PLUS: + return GridSqlOperationType.PLUS; + + case MINUS: + return GridSqlOperationType.MINUS; + + case MULTIPLY: + return GridSqlOperationType.MULTIPLY; + + case DIVIDE: + return GridSqlOperationType.DIVIDE; + + case NEGATE: + // NB: Was set to null in original code for some reason; left unchanged during 1.4.197 migration. + return null; + + case MODULUS: + return GridSqlOperationType.MODULUS; + + default: + throw new IllegalStateException("Unsupported operation type: " + opType); + } + } + + /** * @param expression Expression. * @param calcTypes Calculate types for all the expressions. * @return Parsed expression. @@ -1950,16 +1976,16 @@ public class GridSqlQueryParser { if (expression instanceof Operation) { Operation operation = (Operation)expression; - Integer type = OPERATION_TYPE.get(operation); + Operation.OpType type = OPERATION_TYPE.get(operation); - if (type == Operation.NEGATE) { + if (type == Operation.OpType.NEGATE) { assert OPERATION_RIGHT.get(operation) == null; return new GridSqlOperation(GridSqlOperationType.NEGATE, parseExpression(OPERATION_LEFT.get(operation), calcTypes)); } - return new GridSqlOperation(OPERATION_OP_TYPES[type], + return new GridSqlOperation(mapOperationType(type), parseExpression(OPERATION_LEFT.get(operation), calcTypes), parseExpression(OPERATION_RIGHT.get(operation), calcTypes)); } @@ -2118,11 +2144,11 @@ public class GridSqlQueryParser { return new GridSqlParameter(((Parameter)expression).getIndex()); if (expression instanceof Aggregate) { - int typeId = TYPE.get((Aggregate)expression); + Aggregate.AggregateType type = TYPE.get((Aggregate)expression); - if (GridSqlAggregateFunction.isValidType(typeId)) { + if (GridSqlAggregateFunction.isValidType(type)) { GridSqlAggregateFunction res = new GridSqlAggregateFunction( - DISTINCT.get((Aggregate)expression), typeId); + DISTINCT.get((Aggregate)expression), type); Expression on = ON.get((Aggregate)expression); http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/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 c26be27..ca9c5bb 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 @@ -1338,7 +1338,7 @@ public class GridSqlQuerySplitter { prntModel.add(model); } - if (((GridSqlUnion)child).unionType() != SelectUnion.UNION_ALL) + if (((GridSqlUnion)child).unionType() != SelectUnion.UnionType.UNION_ALL) model.unionAll = false; buildQueryModel(model, child, LEFT_CHILD, null); http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/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 09f0e24..8d2ba42 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 @@ -32,7 +32,7 @@ public class GridSqlUnion extends GridSqlQuery { public static final int RIGHT_CHILD = 3; /** */ - private int unionType; + private SelectUnion.UnionType unionType; /** */ private GridSqlQuery right; @@ -108,19 +108,19 @@ public class GridSqlUnion extends GridSqlQuery { buff.append('(').append(left.getSQL()).append(')'); switch (unionType()) { - case SelectUnion.UNION_ALL: + case UNION_ALL: buff.append("\nUNION ALL\n"); break; - case SelectUnion.UNION: + case UNION: buff.append("\nUNION\n"); break; - case SelectUnion.INTERSECT: + case INTERSECT: buff.append("\nINTERSECT\n"); break; - case SelectUnion.EXCEPT: + case EXCEPT: buff.append("\nEXCEPT\n"); break; @@ -137,7 +137,7 @@ public class GridSqlUnion extends GridSqlQuery { /** {@inheritDoc} */ @Override public boolean simpleQuery() { - return unionType() == SelectUnion.UNION_ALL && sort().isEmpty() && + return unionType() == SelectUnion.UnionType.UNION_ALL && sort().isEmpty() && offset() == null && limit() == null && left().simpleQuery() && right().simpleQuery(); } @@ -145,14 +145,14 @@ public class GridSqlUnion extends GridSqlQuery { /** * @return Union type. */ - public int unionType() { + public SelectUnion.UnionType unionType() { return unionType; } /** * @param unionType New union type. */ - public void unionType(int unionType) { + public void unionType(SelectUnion.UnionType unionType) { this.unionType = unionType; } http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java ---------------------------------------------------------------------- diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java index 5735051..4cd0c0a 100644 --- a/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java +++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/resource/IgniteProvider.java @@ -52,13 +52,13 @@ public class IgniteProvider { private static final String DOWNLOAD_URL_PATTERN = "https://archive.apache.org/dist/ignite/%s/apache-ignite-fabric-%s-bin.zip"; /** URL for request Ignite latest version. */ - private final static String IGNITE_LATEST_VERSION_URL = ""; + private final static String IGNITE_LATEST_VERSION_URL = "https://ignite.apache.org/latest"; /** Mirrors. */ - private static final String APACHE_MIRROR_URL = ""; + private static final String APACHE_MIRROR_URL = "https://www.apache.org/dyn/closer.cgi?as_json=1"; /** Ignite on Apache URL path. */ - private static final String IGNITE_PATH = ""; + private static final String IGNITE_PATH = "/ignite/%s/apache-ignite-fabric-%s-bin.zip"; /** Version pattern. */ private static final Pattern VERSION_PATTERN = Pattern.compile("(?<=version=).*\\S+"); http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/platforms/cpp/odbc-test/src/sql_esc_convert_function_test.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc-test/src/sql_esc_convert_function_test.cpp b/modules/platforms/cpp/odbc-test/src/sql_esc_convert_function_test.cpp index f583d02..a71d924 100644 --- a/modules/platforms/cpp/odbc-test/src/sql_esc_convert_function_test.cpp +++ b/modules/platforms/cpp/odbc-test/src/sql_esc_convert_function_test.cpp @@ -151,8 +151,8 @@ BOOST_AUTO_TEST_CASE(TestEscConvertFunctionTime) BOOST_AUTO_TEST_CASE(TestEscConvertFunctionTimestamp) { using ignite::impl::binary::BinaryUtils; - Timestamp ts = common::MakeTimestampGmt(1983, 3, 14, 13, 20, 15, 999999999); - CheckSingleResult<Timestamp>("SELECT {fn CONVERT('1983-03-14 13:20:15.999999999', SQL_TIMESTAMP)}", ts); + Timestamp ts = common::MakeTimestampGmt(1983, 3, 14, 13, 20, 15, 999999000); + CheckSingleResult<Timestamp>("SELECT {fn CONVERT('1983-03-14 13:20:15.999999', SQL_TIMESTAMP)}", ts); } BOOST_AUTO_TEST_SUITE_END() http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Linq/CacheLinqTest.Misc.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Linq/CacheLinqTest.Misc.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Linq/CacheLinqTest.Misc.cs index d9c57d0..8aaa7b8 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Linq/CacheLinqTest.Misc.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Linq/CacheLinqTest.Misc.cs @@ -149,7 +149,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Query.Linq TestConditionalWithNullableStructs<double>(); TestConditionalWithNullableStructs<float>(); TestConditionalWithNullableStructs<decimal>(); - TestConditionalWithNullableStructs<DateTime>(DateTime.UtcNow); + TestConditionalWithNullableStructs<DateTime>(DateTime.Parse("1983-03-14 13:20:15.999999").ToUniversalTime()); var charException = Assert.Throws<NotSupportedException>(() => TestConditionalWithNullableStructs<char>()); Assert.AreEqual("Type is not supported for SQL mapping: System.Char", charException.Message); http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/web-console/frontend/app/data/pom-dependencies.json ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/data/pom-dependencies.json b/modules/web-console/frontend/app/data/pom-dependencies.json index 8d3fa81..d13bf14 100644 --- a/modules/web-console/frontend/app/data/pom-dependencies.json +++ b/modules/web-console/frontend/app/data/pom-dependencies.json @@ -19,7 +19,8 @@ "PostgreSQL": {"groupId": "org.postgresql", "artifactId": "postgresql", "version": "9.4.1212.jre7"}, "H2": {"groupId": "com.h2database", "artifactId": "h2", "version": [ {"range": ["1.0.0", "2.0.0"], "version": "1.4.191"}, - {"range": "2.0.0", "version": "1.4.195"} + {"range": ["2.0.0", "2.7.0"], "version": "1.4.195"}, + {"range": "2.7.0", "version": "1.4.197"} ]}, "Oracle": {"groupId": "com.oracle.jdbc", "artifactId": "ojdbc7", "version": "12.1.0.2", "jar": "ojdbc7.jar"}, "DB2": {"groupId": "ibm", "artifactId": "jdbc", "version": "4.21.29", "jar": "db2jcc4.jar"}, http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/yardstick/config/benchmark-native-sql-select-join.properties ---------------------------------------------------------------------- diff --git a/modules/yardstick/config/benchmark-native-sql-select-join.properties b/modules/yardstick/config/benchmark-native-sql-select-join.properties new file mode 100644 index 0000000..f32622a --- /dev/null +++ b/modules/yardstick/config/benchmark-native-sql-select-join.properties @@ -0,0 +1,89 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# Contains benchmarks for select queries +# + +now0=`date +'%H%M%S'` + +# JVM options. +JVM_OPTS=${JVM_OPTS}" -DIGNITE_QUIET=false" + +# Uncomment to enable concurrent garbage collection (GC) if you encounter long GC pauses. +JVM_OPTS=${JVM_OPTS}" \ +-Xms8g \ +-Xmx8g \ +-Xloggc:./gc${now0}.log \ +-XX:+PrintGCDetails \ +-verbose:gc \ +-XX:+UseParNewGC \ +-XX:+UseConcMarkSweepGC \ +-XX:+PrintGCDateStamps \ +" + +#Ignite version +ver="RELEASE-" + +# List of default probes. +# Add DStatProbe or VmStatProbe if your OS supports it (e.g. if running on Linux). +BENCHMARK_DEFAULT_PROBES=ThroughputLatencyProbe,PercentileProbe,DStatProbe + +# Packages where the specified benchmark is searched by reflection mechanism. +BENCHMARK_PACKAGES=org.yardstickframework,org.apache.ignite.yardstick + +# Flag which indicates to restart the servers before every benchmark execution. +RESTART_SERVERS=true + +# Probe point writer class name. +# BENCHMARK_WRITER= + +# The benchmark is applicable only for 1 server and 1 driver +SERVER_HOSTS="" +DRIVER_HOSTS=127.0.0.1 + +# Remote username. +# REMOTE_USER= + +# Number of nodes, used to wait for the specified number of nodes to start. +nodesNum=$((`echo ${SERVER_HOSTS} | tr ',' '\n' | wc -l` + `echo ${DRIVER_HOSTS} | tr ',' '\n' | wc -l`)) + +# Backups count. +b=1 + +# Warmup. +w=30 + +# Duration. +d=300 + +# Threads count. +t=4 + +# Sync mode. +sm=PRIMARY_SYNC + +# Jobs. +j=10 + +DATA_RANGE=100000 + +# Run configuration which contains all benchmarks. +# Note that each benchmark is set to run for 300 seconds (5 min) with warm-up set to 60 seconds (1 minute). +CONFIGS="\ +-cfg ${SCRIPT_DIR}/../config/ignite-localhost-config.xml -pc 2 -nn 1 -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -r ${DATA_RANGE} --sqlRange 1 -dn NativeSqlJoinQueryRangeBenchmark -sn IgniteNode -ds ${ver}sql-select-native-r1-${b}-backup,\ +-cfg ${SCRIPT_DIR}/../config/ignite-localhost-config.xml -pc 2 -nn 1 -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -r ${DATA_RANGE} --sqlRange 1000 -dn NativeSqlJoinQueryRangeBenchmark -sn IgniteNode -ds ${ver}sql-select-native-r1k-${b}-backup ,\ +-cfg ${SCRIPT_DIR}/../config/ignite-localhost-config.xml -pc 2 -nn 1 -b ${b} -w ${w} -d ${d} -t ${t} -sm ${sm} -r ${DATA_RANGE} --sqlRange -1 -dn NativeSqlJoinQueryRangeBenchmark -sn IgniteNode -ds ${ver}sql-select-native-r100k-${b}-backup,\ +" http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/jdbc/NativeSqlJoinQueryRangeBenchmark.java ---------------------------------------------------------------------- diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/jdbc/NativeSqlJoinQueryRangeBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/jdbc/NativeSqlJoinQueryRangeBenchmark.java new file mode 100644 index 0000000..f660b8c --- /dev/null +++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/jdbc/NativeSqlJoinQueryRangeBenchmark.java @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.yardstick.jdbc; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; +import org.apache.ignite.cache.query.FieldsQueryCursor; +import org.apache.ignite.cache.query.SqlFieldsQuery; +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.processors.query.GridQueryProcessor; +import org.apache.ignite.yardstick.IgniteAbstractBenchmark; +import org.yardstickframework.BenchmarkConfiguration; + +import static org.yardstickframework.BenchmarkUtils.println; + +/** + * Native sql benchmark that performs select operations. + */ +public class NativeSqlJoinQueryRangeBenchmark extends IgniteAbstractBenchmark { + /** Ignite query processor. */ + GridQueryProcessor qry; + + /** + * Benchmarked action that performs selects and validates results. + * + * {@inheritDoc} + */ + @Override public boolean test(Map<Object, Object> ctx) throws Exception { + long expRsSize; + + SqlFieldsQuery qry; + + if (args.sqlRange() == 1) { + qry = new SqlFieldsQuery("SELECT * FROM person p join organization o on p.orgId=o.id WHERE p.id = ? " + + "order by p.id"); + + qry.setArgs(ThreadLocalRandom.current().nextLong(args.range()) + 1); + + expRsSize = 1; + } + else if (args.sqlRange() <= 0) { + qry = new SqlFieldsQuery("SELECT * FROM person p join organization o on p.orgId=o.id order by p.id LIMIT 1000"); + + expRsSize = 1000; + } + else { + qry = new SqlFieldsQuery("SELECT * FROM person p join organization o on p.orgId=o.id WHERE p.id BETWEEN ? AND ?" + + "order by p.id"); + + long id = ThreadLocalRandom.current().nextLong(args.range() - args.sqlRange()) + 1; + long maxId = id + args.sqlRange() - 1; + + qry.setArgs(id, maxId); + + expRsSize = args.sqlRange(); + } + + long rsSize = 0; + + try (FieldsQueryCursor<List<?>> cursor = ((IgniteEx)ignite()).context().query() + .querySqlFields(qry, false)) { + + for (List<?> r : cursor) + rsSize++; + } + + if (rsSize != expRsSize) + throw new Exception("Invalid result set size [actual=" + rsSize + ", expected=" + expRsSize + ']'); + + return true; + } + + /** {@inheritDoc} */ + @Override public void setUp(BenchmarkConfiguration cfg) throws Exception { + super.setUp(cfg); + + qry = ((IgniteEx)ignite()).context().query(); + + StringBuilder withExpr = new StringBuilder(" WITH \"AFFINITY_KEY=orgId,"); + + if (args.atomicMode() != null) + withExpr.append("atomicity=").append(args.atomicMode().name()).append(","); + + if (args.partitionedCachesNumber() == 1) + withExpr.append("template=replicated"); + else + withExpr.append("template=partitioned"); + + withExpr.append("\""); + + qry.querySqlFields( + new SqlFieldsQuery("CREATE TABLE person (id long, orgId long, name varchar, PRIMARY KEY (id, orgId))" + withExpr), true); + + withExpr = new StringBuilder(" WITH \""); + + if (args.atomicMode() != null) + withExpr.append("atomicity=").append(args.atomicMode().name()).append(","); + + withExpr.append("template=partitioned"); + + withExpr.append("\""); + + qry.querySqlFields( + new SqlFieldsQuery("CREATE TABLE organization (id long primary key, name varchar)" + withExpr), true); + + for (long k = 1; k <= args.range(); ++k) { + qry.querySqlFields(new SqlFieldsQuery("insert into person (id, orgId, name) values (?, ?, ?)") + .setArgs(k, k / 10, "person " + k), true).getAll(); + + if (k % 10 == 0) { + qry.querySqlFields(new SqlFieldsQuery("insert into organization (id, name) values (?, ?)") + .setArgs(k / 10, "organization " + k / 10), true).getAll(); + } + + if (k % 10000 == 0) + println(cfg, "Populate " + k); + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/50c5809a/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index cc92ca8..cc04175 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -69,7 +69,7 @@ <guava.version>25.1-jre</guava.version> <guava14.version>14.0.1</guava14.version> <guava16.version>16.0.1</guava16.version> - <h2.version>1.4.195</h2.version> + <h2.version>1.4.197</h2.version> <hadoop.version>2.9.1</hadoop.version> <hamcrest.version>1.2</hamcrest.version> <httpclient.version>4.5.1</httpclient.version>