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 2019/01/30 09:04:48 UTC

[ignite] branch master updated: IGNITE-11117: SQL: Moved partition model to core module. This closes #5956.

This is an automated email from the ASF dual-hosted git repository.

vozerov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 0b00370  IGNITE-11117: SQL: Moved partition model to core module. This closes #5956.
0b00370 is described below

commit 0b00370e6a34ce1d443490d3a73c9b860cacfebc
Author: devozerov <vo...@gridgain.com>
AuthorDate: Wed Jan 30 12:03:38 2019 +0300

    IGNITE-11117: SQL: Moved partition model to core module. This closes #5956.
---
 .../affinity/PartitionAffinityFunctionType.java    |  2 +-
 .../sql/optimizer}/affinity/PartitionAllNode.java  |  2 +-
 .../affinity/PartitionCompositeNode.java           |  2 +-
 .../affinity/PartitionCompositeNodeOperator.java   |  2 +-
 .../optimizer}/affinity/PartitionConstantNode.java |  2 +-
 .../optimizer}/affinity/PartitionGroupNode.java    |  2 +-
 .../affinity/PartitionJoinCondition.java           |  2 +-
 .../optimizer}/affinity/PartitionJoinGroup.java    |  2 +-
 .../sql/optimizer}/affinity/PartitionNode.java     |  2 +-
 .../sql/optimizer}/affinity/PartitionNoneNode.java |  2 +-
 .../affinity/PartitionParameterNode.java           | 21 +++++-----
 .../sql/optimizer/affinity/PartitionResolver.java} | 36 ++++++----------
 .../sql/optimizer}/affinity/PartitionResult.java   |  2 +-
 .../optimizer}/affinity/PartitionSingleNode.java   |  2 +-
 .../sql/optimizer}/affinity/PartitionTable.java    |  2 +-
 .../affinity/PartitionTableAffinityDescriptor.java |  2 +-
 .../optimizer}/affinity/PartitionTableModel.java   |  2 +-
 .../cache/query/GridCacheTwoStepQuery.java         |  2 +-
 .../processors/query/h2/IgniteH2Indexing.java      |  6 ++-
 ...nConstantNode.java => H2PartitionResolver.java} | 41 +++++++-----------
 .../query/h2/affinity/PartitionExtractor.java      | 49 ++++++++++++++--------
 21 files changed, 87 insertions(+), 98 deletions(-)

diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAffinityFunctionType.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionAffinityFunctionType.java
similarity index 95%
copy from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAffinityFunctionType.java
copy to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionAffinityFunctionType.java
index 4c88fcb..66c20c0 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAffinityFunctionType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionAffinityFunctionType.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 /**
  * Affinity function type.
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAllNode.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionAllNode.java
similarity index 96%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAllNode.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionAllNode.java
index 30860f5..c625089 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAllNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionAllNode.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.internal.util.typedef.internal.S;
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionCompositeNode.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionCompositeNode.java
similarity index 99%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionCompositeNode.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionCompositeNode.java
index 45ceaaf..d724cf8 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionCompositeNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionCompositeNode.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionCompositeNodeOperator.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionCompositeNodeOperator.java
similarity index 95%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionCompositeNodeOperator.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionCompositeNodeOperator.java
index 3176dce..1c64e64 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionCompositeNodeOperator.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionCompositeNodeOperator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.jetbrains.annotations.Nullable;
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionConstantNode.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionConstantNode.java
similarity index 96%
copy from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionConstantNode.java
copy to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionConstantNode.java
index 9e258ae..da9dca2 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionConstantNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionConstantNode.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.internal.util.typedef.internal.S;
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionGroupNode.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionGroupNode.java
similarity index 98%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionGroupNode.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionGroupNode.java
index 3d66439..b7106a7 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionGroupNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionGroupNode.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionJoinCondition.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionJoinCondition.java
similarity index 98%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionJoinCondition.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionJoinCondition.java
index 244c301..af69eb3 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionJoinCondition.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionJoinCondition.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.internal.util.typedef.F;
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionJoinGroup.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionJoinGroup.java
similarity index 97%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionJoinGroup.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionJoinGroup.java
index 641d013..68fa38e 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionJoinGroup.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionJoinGroup.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import java.util.Collection;
 import java.util.Collections;
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionNode.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionNode.java
similarity index 95%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionNode.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionNode.java
index 7372fc2..c8c354c 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionNode.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.IgniteCheckedException;
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionNoneNode.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionNoneNode.java
similarity index 96%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionNoneNode.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionNoneNode.java
index 5d4b324..f136fc9 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionNoneNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionNoneNode.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.internal.util.typedef.internal.S;
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionParameterNode.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionParameterNode.java
similarity index 77%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionParameterNode.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionParameterNode.java
index e9f4880..6219c30 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionParameterNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionParameterNode.java
@@ -15,11 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.processors.query.h2.H2Utils;
-import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 
@@ -29,7 +27,7 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 public class PartitionParameterNode extends PartitionSingleNode {
     /** Indexing. */
     @GridToStringExclude
-    private final IgniteH2Indexing indexing;
+    private final PartitionResolver partResolver;
 
     /** Index. */
     private final int idx;
@@ -41,15 +39,14 @@ public class PartitionParameterNode extends PartitionSingleNode {
      * Constructor.
      *
      * @param tbl Table descriptor.
-     * @param indexing Indexing.
+     * @param partResolver Partition resolver.
      * @param idx Parameter index.
      * @param dataType Parameter data type.
      */
-    public PartitionParameterNode(PartitionTable tbl, IgniteH2Indexing indexing, int idx,
-        int dataType) {
+    public PartitionParameterNode(PartitionTable tbl, PartitionResolver partResolver, int idx, int dataType) {
         super(tbl);
 
-        this.indexing = indexing;
+        this.partResolver = partResolver;
         this.idx = idx;
         this.dataType = dataType;
     }
@@ -59,9 +56,11 @@ public class PartitionParameterNode extends PartitionSingleNode {
         assert args != null;
         assert idx < args.length;
 
-        Object param = H2Utils.convert(args[idx], indexing, dataType);
-
-        return indexing.kernalContext().affinity().partition(tbl.cacheName(), param);
+        return partResolver.partition(
+            args[idx],
+            dataType,
+            tbl.cacheName()
+        );
     }
 
     /** {@inheritDoc} */
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAffinityFunctionType.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionResolver.java
similarity index 61%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAffinityFunctionType.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionResolver.java
index 4c88fcb..e606200 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionAffinityFunctionType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionResolver.java
@@ -15,34 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
+
+import org.apache.ignite.IgniteCheckedException;
 
 /**
- * Affinity function type.
+ * Partition resolver interface. Takes argument, data type and cache name, returns partition.
  */
-public enum PartitionAffinityFunctionType {
-    /** Custom affintiy function. */
-    CUSTOM(0),
-
-    /** Rendezvous affinity function. */
-    RENDEZVOUS(1);
-
-    /** Value. */
-    private final int val;
-
+public interface PartitionResolver {
     /**
-     * Constructor.
+     * Resolve partition.
      *
-     * @param val Value.
-     */
-    PartitionAffinityFunctionType(int val) {
-        this.val = val;
-    }
-
-    /**
-     * @return Value.
+     * @param arg Argument.
+     * @param dataType Data type.
+     * @param cacheName Cache name.
+     * @return Partition.
+     * @throws IgniteCheckedException If failed.
      */
-    public int value() {
-        return val;
-    }
+    int partition(Object arg, int dataType, String cacheName) throws IgniteCheckedException;
 }
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionResult.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionResult.java
similarity index 96%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionResult.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionResult.java
index daa14d3..ba5064e 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionResult.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionResult.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionSingleNode.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionSingleNode.java
similarity index 97%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionSingleNode.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionSingleNode.java
index 35e7d30..466e1c6 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionSingleNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionSingleNode.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTable.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTable.java
similarity index 97%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTable.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTable.java
index 1b996c1..5ac4b69 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTable.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTable.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTableAffinityDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTableAffinityDescriptor.java
similarity index 98%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTableAffinityDescriptor.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTableAffinityDescriptor.java
index 21dab9c..97bbb77 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTableAffinityDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTableAffinityDescriptor.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTableModel.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTableModel.java
similarity index 98%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTableModel.java
rename to modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTableModel.java
index 6393941..90101ea 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionTableModel.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/optimizer/affinity/PartitionTableModel.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.h2.affinity;
+package org.apache.ignite.internal.sql.optimizer.affinity;
 
 import org.jetbrains.annotations.Nullable;
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java
index 685344a..78ae003 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheTwoStepQuery.java
@@ -22,7 +22,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.ignite.internal.processors.query.QueryUtils;
-import org.apache.ignite.internal.processors.query.h2.affinity.PartitionResult;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionResult;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 
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 d4598e6..69cbaae 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
@@ -93,7 +93,8 @@ import org.apache.ignite.internal.processors.query.RunningQueryManager;
 import org.apache.ignite.internal.processors.query.SqlClientContext;
 import org.apache.ignite.internal.processors.query.UpdateSourceIterator;
 import org.apache.ignite.internal.processors.query.h2.affinity.PartitionExtractor;
-import org.apache.ignite.internal.processors.query.h2.affinity.PartitionResult;
+import org.apache.ignite.internal.processors.query.h2.affinity.H2PartitionResolver;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionResult;
 import org.apache.ignite.internal.processors.query.h2.database.H2TreeClientIndex;
 import org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex;
 import org.apache.ignite.internal.processors.query.h2.database.io.H2ExtrasInnerIO;
@@ -2040,6 +2041,7 @@ public class IgniteH2Indexing implements GridQueryIndexing {
                 failed = false;
 
                 return new QueryCursorImpl<>(new Iterable<List<?>>() {
+                    @SuppressWarnings("NullableProblems")
                     @Override public Iterator<List<?>> iterator() {
                         return new Iterator<List<?>>() {
                             @Override public boolean hasNext() {
@@ -2420,7 +2422,7 @@ public class IgniteH2Indexing implements GridQueryIndexing {
         dmlProc = new DmlStatementsProcessor(ctx, this);
         ddlProc = new DdlStatementsProcessor(ctx, schemaMgr);
 
-        partExtractor = new PartitionExtractor(this);
+        partExtractor = new PartitionExtractor(new H2PartitionResolver(this));
         runningQueryMgr = new RunningQueryManager(ctx);
 
         if (JdbcUtils.serializer != null)
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionConstantNode.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/H2PartitionResolver.java
similarity index 53%
rename from modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionConstantNode.java
rename to modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/H2PartitionResolver.java
index 9e258ae..7520c2c 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionConstantNode.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/H2PartitionResolver.java
@@ -17,44 +17,31 @@
 
 package org.apache.ignite.internal.processors.query.h2.affinity;
 
-import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.processors.query.h2.H2Utils;
+import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionResolver;
 
 /**
- * Node with constant partition.
+ * Default partition resolver implementation which uses H2 to convert types appropriately.
  */
-public class PartitionConstantNode extends PartitionSingleNode {
-    /** Partition. */
-    private final int part;
+public class H2PartitionResolver implements PartitionResolver {
+    /** Indexing. */
+    private final IgniteH2Indexing idx;
 
     /**
      * Constructor.
      *
-     * @param tbl Table.
-     * @param part Partition.
+     * @param idx Indexing.
      */
-    public PartitionConstantNode(PartitionTable tbl, int part) {
-        super(tbl);
-
-        this.part = part;
+    public H2PartitionResolver(IgniteH2Indexing idx) {
+        this.idx = idx;
     }
 
     /** {@inheritDoc} */
-    @Override public int applySingle(Object... args) {
-        return part;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean constant() {
-        return true;
-    }
+    @Override public int partition(Object arg, int dataType, String cacheName) throws IgniteCheckedException {
+        Object param = H2Utils.convert(arg, idx, dataType);
 
-    /** {@inheritDoc} */
-    @Override public int value() {
-        return part;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(PartitionConstantNode.class, this);
+        return idx.kernalContext().affinity().partition(cacheName, param);
     }
 }
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java
index 0898e63..f82be53 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java
@@ -17,17 +17,12 @@
 
 package org.apache.ignite.internal.processors.query.h2.affinity;
 
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.internal.processors.cache.query.GridCacheSqlQuery;
-import org.apache.ignite.internal.processors.query.h2.H2Utils;
-import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlAlias;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlAst;
@@ -41,6 +36,21 @@ import org.apache.ignite.internal.processors.query.h2.sql.GridSqlParameter;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuery;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlSelect;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlTable;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionAffinityFunctionType;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionAllNode;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionCompositeNode;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionCompositeNodeOperator;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionConstantNode;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionGroupNode;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionJoinCondition;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionNode;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionNoneNode;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionParameterNode;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionResult;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionSingleNode;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionTable;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionTableAffinityDescriptor;
+import org.apache.ignite.internal.sql.optimizer.affinity.PartitionTableModel;
 import org.apache.ignite.internal.util.typedef.F;
 import org.h2.table.Column;
 import org.h2.value.Value;
@@ -48,6 +58,9 @@ import org.jetbrains.annotations.Nullable;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * Partition tree extractor.
@@ -59,8 +72,8 @@ public class PartitionExtractor {
      */
     private static final int DFLT_MAX_EXTRACTED_PARTS_FROM_BETWEEN = 16;
 
-    /** Indexing. */
-    private final IgniteH2Indexing idx;
+    /** Partition resolver. */
+    private final H2PartitionResolver partResolver;
 
     /** Maximum number of partitions to be used in case of between expression. */
     private final int maxPartsCntBetween;
@@ -68,10 +81,10 @@ public class PartitionExtractor {
     /**
      * Constructor.
      *
-     * @param idx Indexing.
+     * @param partResolver Partition resolver.
      */
-    public PartitionExtractor(IgniteH2Indexing idx) {
-        this.idx = idx;
+    public PartitionExtractor(H2PartitionResolver partResolver) {
+        this.partResolver = partResolver;
 
         maxPartsCntBetween = Integer.getInteger(
             IgniteSystemProperties.IGNITE_SQL_MAX_EXTRACTED_PARTS_FROM_BETWEEN,
@@ -602,14 +615,16 @@ public class PartitionExtractor {
             return null;
 
         if (rightConst != null) {
-            Object constVal = H2Utils.convert(rightConst.value().getObject(), idx, leftCol0.getType());
-
-            int part = idx.kernalContext().affinity().partition(tbl.cacheName(), constVal);
+            int part = partResolver.partition(
+                rightConst.value().getObject(),
+                leftCol0.getType(),
+                tbl.cacheName()
+            );
 
             return new PartitionConstantNode(tbl0, part);
         }
         else if (rightParam != null)
-            return new PartitionParameterNode(tbl0, idx, rightParam.index(), leftCol0.getType());
+            return new PartitionParameterNode(tbl0, partResolver, rightParam.index(), leftCol0.getType());
         else
             return null;
     }
@@ -746,9 +761,7 @@ public class PartitionExtractor {
             return null;
 
         for (long i = leftLongVal; i <= rightLongVal; i++) {
-            Object constVal = H2Utils.convert(i, idx, leftCol.column().getType());
-
-            int part = idx.kernalContext().affinity().partition(tbl0.cacheName(), constVal);
+            int part = partResolver.partition(i , leftCol.column().getType(), tbl0.cacheName());
 
             parts.add(new PartitionConstantNode(tbl0, part));