You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2018/09/26 09:38:35 UTC
[8/9] ignite git commit: IGNITE-4150: SQL: updated H2 version to
1.4.197. This closes #3956.
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/20f52468
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/20f52468
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/20f52468
Branch: refs/heads/ignite-2.7
Commit: 20f524680f6b316fcbf203355744ed2c528d4a47
Parents: 9089513
Author: tledkov-gridgain <tl...@gridgain.com>
Authored: Wed Sep 26 11:08:02 2018 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Wed Sep 26 12:37:49 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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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/20f52468/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>