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.
  *     &#64;QuerySqlField(index = true)
- *     private com.vividsolutions.jts.geom.Point location;
+ *     private org.locationtech.jts.geom.Point location;
  *
  *     // Not indexed field.
  *     &#64;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>

Reply via email to