You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by gv...@apache.org on 2020/03/17 19:35:46 UTC
[ignite] branch ignite-12248 updated: IGNITE-12792: Calcite
integration. Update Calcite version to 1.22.0 This closes #7540
This is an automated email from the ASF dual-hosted git repository.
gvvinblade pushed a commit to branch ignite-12248
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-12248 by this push:
new 2ca6ecb IGNITE-12792: Calcite integration. Update Calcite version to 1.22.0 This closes #7540
2ca6ecb is described below
commit 2ca6ecb3b32883082c24f83c10530e0dee3fb948
Author: Igor Seliverstov <gv...@gmail.com>
AuthorDate: Tue Mar 17 22:35:25 2020 +0300
IGNITE-12792: Calcite integration. Update Calcite version to 1.22.0 This closes #7540
---
modules/calcite/pom.xml | 25 +++++++
.../query/calcite/exec/ExecutionServiceImpl.java | 17 +----
.../query/calcite/exec/exp/type/BasicType.java | 3 +-
.../query/calcite/exec/exp/type/CharacterType.java | 3 +-
.../query/calcite/exec/exp/type/StructType.java | 3 +-
.../metadata/IgniteMdDerivedDistribution.java | 4 +-
.../calcite/metadata/IgniteMdDistribution.java | 21 +++---
.../calcite/metadata/IgniteMdFragmentInfo.java | 6 +-
.../query/calcite/metadata/RelMetadataQueryEx.java | 78 +++++++++-------------
.../calcite/prepare/AbstractMultiStepPlan.java | 4 +-
.../query/calcite/prepare/FragmentSplitter.java | 6 +-
.../query/calcite/prepare/IgnitePlanner.java | 35 ++--------
.../query/calcite/prepare/IgniteSqlValidator.java | 4 +-
.../query/calcite/schema/IgniteTable.java | 7 +-
parent/pom.xml | 1 -
15 files changed, 96 insertions(+), 121 deletions(-)
diff --git a/modules/calcite/pom.xml b/modules/calcite/pom.xml
index 3b30977..88aac81 100644
--- a/modules/calcite/pom.xml
+++ b/modules/calcite/pom.xml
@@ -23,6 +23,13 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
+ <!-- Module specific package versions -->
+ <properties>
+ <calcite.version>1.22.0</calcite.version>
+ <guava.version>19.0</guava.version>
+ <janino.version>3.0.11</janino.version>
+ </properties>
+
<parent>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-parent</artifactId>
@@ -58,6 +65,24 @@
</dependency>
<dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>${guava.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.janino</groupId>
+ <artifactId>commons-compiler</artifactId>
+ <version>${janino.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.janino</groupId>
+ <artifactId>janino</artifactId>
+ <version>${janino.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-core</artifactId>
<version>${project.version}</version>
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
index 3c2f4eb..ebd153f 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
@@ -34,8 +34,6 @@ import org.apache.calcite.plan.ConventionTraitDef;
import org.apache.calcite.plan.RelTraitDef;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
-import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeField;
import org.apache.calcite.sql.SqlNode;
@@ -70,7 +68,6 @@ import org.apache.ignite.internal.processors.query.calcite.message.MessageType;
import org.apache.ignite.internal.processors.query.calcite.message.QueryCancelRequest;
import org.apache.ignite.internal.processors.query.calcite.message.QueryStartRequest;
import org.apache.ignite.internal.processors.query.calcite.message.QueryStartResponse;
-import org.apache.ignite.internal.processors.query.calcite.metadata.IgniteMetadata;
import org.apache.ignite.internal.processors.query.calcite.metadata.MappingService;
import org.apache.ignite.internal.processors.query.calcite.metadata.NodesMapping;
import org.apache.ignite.internal.processors.query.calcite.metadata.PartitionService;
@@ -348,13 +345,8 @@ public class ExecutionServiceImpl extends AbstractService implements ExecutionSe
/** {@inheritDoc} */
@Override public List<FieldsQueryCursor<List<?>>> executeQuery(@Nullable QueryContext ctx, String schema, String query, Object[] params) {
PlanningContext pctx = createContext(ctx, schema, query, params);
- RelMetadataQuery.THREAD_PROVIDERS.set(JaninoRelMetadataProvider.of(IgniteMetadata.METADATA_PROVIDER));
- try (IgnitePlanner ignored = pctx.planner()) {
- return Commons.transform(prepare(pctx), p -> executeSingle(UUID.randomUUID(), pctx, p));
- }
- finally {
- RelMetadataQuery.THREAD_PROVIDERS.remove();
- }
+
+ return Commons.transform(prepare(pctx), p -> executeSingle(UUID.randomUUID(), pctx, p));
}
/** {@inheritDoc} */
@@ -726,7 +718,7 @@ public class ExecutionServiceImpl extends AbstractService implements ExecutionSe
assert nodeId != null && msg != null;
PlanningContext ctx = createContext(msg.schema(), nodeId, msg.topologyVersion());
- RelMetadataQuery.THREAD_PROVIDERS.set(JaninoRelMetadataProvider.of(IgniteMetadata.METADATA_PROVIDER));
+
try {
ExecutionContext execCtx = new ExecutionContext(
taskExecutor(),
@@ -766,9 +758,6 @@ public class ExecutionServiceImpl extends AbstractService implements ExecutionSe
if (ex instanceof Error)
throw (Error)ex;
}
- finally {
- RelMetadataQuery.THREAD_PROVIDERS.remove();
- }
}
/** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/BasicType.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/BasicType.java
index a66db57e..e4b6aa6 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/BasicType.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/BasicType.java
@@ -24,7 +24,6 @@ import java.io.ObjectOutput;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.sql.type.BasicSqlType;
import org.apache.calcite.sql.type.SqlTypeName;
-import org.apache.commons.lang.text.StrBuilder;
import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
import static org.apache.calcite.rel.type.RelDataType.PRECISION_NOT_SPECIFIED;
@@ -130,7 +129,7 @@ public class BasicType implements DataType, Externalizable {
/** */
protected String toString(boolean withNullability) {
- StrBuilder sb = new StrBuilder(typeName.name());
+ StringBuilder sb = new StringBuilder(typeName.name());
boolean printPrecision = precision != PRECISION_NOT_SPECIFIED;
boolean printScale = scale != SCALE_NOT_SPECIFIED;
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/CharacterType.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/CharacterType.java
index 22fa92c..bb935ee 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/CharacterType.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/CharacterType.java
@@ -25,7 +25,6 @@ import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.sql.SqlCollation;
import org.apache.calcite.sql.type.BasicSqlType;
import org.apache.commons.codec.Charsets;
-import org.apache.commons.lang.text.StrBuilder;
import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
/** */
@@ -122,7 +121,7 @@ public class CharacterType extends BasicType implements CharacterDataType {
/** {@inheritDoc} */
@Override public String toString() {
- StrBuilder sb = new StrBuilder(toString(false));
+ StringBuilder sb = new StringBuilder(toString(false));
if (charset != null)
sb.append(" CHARACTER SET \"")
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/StructType.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/StructType.java
index f19c54e..97aa7c3 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/StructType.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/type/StructType.java
@@ -22,7 +22,6 @@ import java.util.Map;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.sql.type.SqlTypeName;
-import org.apache.commons.lang.text.StrBuilder;
import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
import static org.apache.calcite.rel.type.RelDataType.PRECISION_NOT_SPECIFIED;
@@ -78,7 +77,7 @@ public class StructType implements DataType {
/** {@inheritDoc} */
@Override public String toString() {
- StrBuilder sb = new StrBuilder("Row(");
+ StringBuilder sb = new StringBuilder("Row(");
boolean first = true;
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdDerivedDistribution.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdDerivedDistribution.java
index bdbe930..23f213c 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdDerivedDistribution.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdDerivedDistribution.java
@@ -203,6 +203,8 @@ public class IgniteMdDerivedDistribution implements MetadataHandler<DerivedDistr
/** */
private static List<IgniteDistribution> _deriveDistributions(RelNode rel, RelMetadataQuery mq) {
- return RelMetadataQueryEx.wrap(mq).derivedDistributions(rel);
+ assert mq instanceof RelMetadataQueryEx;
+
+ return ((RelMetadataQueryEx) mq).derivedDistributions(rel);
}
}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdDistribution.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdDistribution.java
index c9af577..2aabb56 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdDistribution.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdDistribution.java
@@ -49,8 +49,6 @@ import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistribut
import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions;
import org.apache.ignite.internal.util.typedef.F;
-import static org.apache.calcite.rel.RelDistribution.Type.ANY;
-
/**
* Implementation class for {@link RelMetadataQuery#distribution(RelNode)} method call.
*/
@@ -80,6 +78,13 @@ public class IgniteMdDistribution implements MetadataHandler<BuiltInMetadata.Dis
/**
* See {@link IgniteMdDistribution#distribution(RelNode, RelMetadataQuery)}
*/
+ public IgniteDistribution distribution(IgniteRel rel, RelMetadataQuery mq) {
+ return rel.getTraitSet().getTrait(DistributionTraitDef.INSTANCE);
+ }
+
+ /**
+ * See {@link IgniteMdDistribution#distribution(RelNode, RelMetadataQuery)}
+ */
public IgniteDistribution distribution(LogicalTableModify rel, RelMetadataQuery mq) {
return IgniteDistributions.single(); // TODO skip reducer
}
@@ -141,13 +146,6 @@ public class IgniteMdDistribution implements MetadataHandler<BuiltInMetadata.Dis
}
/**
- * See {@link IgniteMdDistribution#distribution(RelNode, RelMetadataQuery)}
- */
- public IgniteDistribution distribution(IgniteRel rel, RelMetadataQuery mq) {
- throw new AssertionError("Unexpected node: " + rel);
- }
-
- /**
* @return Values relational node distribution.
*/
public static IgniteDistribution values(RelDataType rowType, ImmutableList<ImmutableList<RexLiteral>> tuples) {
@@ -196,10 +194,7 @@ public class IgniteMdDistribution implements MetadataHandler<BuiltInMetadata.Dis
* @return Actual distribution of the given relational node.
*/
public static IgniteDistribution _distribution(RelNode rel, RelMetadataQuery mq) {
- IgniteDistribution distr = rel.getTraitSet().getTrait(DistributionTraitDef.INSTANCE);
-
- if (distr.getType() != ANY)
- return distr;
+ assert mq instanceof RelMetadataQueryEx;
return (IgniteDistribution) mq.distribution(rel);
}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdFragmentInfo.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdFragmentInfo.java
index 23bce2c..b672ed0 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdFragmentInfo.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdFragmentInfo.java
@@ -98,8 +98,6 @@ public class IgniteMdFragmentInfo implements MetadataHandler<FragmentMetadata> {
* information will be recalculated for all fragments.
*/
public FragmentInfo fragmentInfo(Join rel, RelMetadataQuery mq) {
- mq = RelMetadataQueryEx.wrap(mq);
-
FragmentInfo left = _fragmentInfo(rel.getLeft(), mq);
FragmentInfo right = _fragmentInfo(rel.getRight(), mq);
@@ -154,6 +152,8 @@ public class IgniteMdFragmentInfo implements MetadataHandler<FragmentMetadata> {
* @return Fragment meta information.
*/
public static FragmentInfo _fragmentInfo(RelNode rel, RelMetadataQuery mq) {
- return RelMetadataQueryEx.wrap(mq).getFragmentInfo(rel);
+ assert mq instanceof RelMetadataQueryEx;
+
+ return ((RelMetadataQueryEx) mq).getFragmentInfo(rel);
}
}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/RelMetadataQueryEx.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/RelMetadataQueryEx.java
index 7725d83..4b4bc29 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/RelMetadataQueryEx.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/RelMetadataQueryEx.java
@@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableList;
import java.util.List;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider;
+import org.apache.calcite.rel.metadata.RelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteExchange;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteFilter;
@@ -28,32 +29,38 @@ import org.apache.ignite.internal.processors.query.calcite.rel.IgniteJoin;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteProject;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteReceiver;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteSender;
+import org.apache.ignite.internal.processors.query.calcite.rel.IgniteTableModify;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteTableScan;
+import org.apache.ignite.internal.processors.query.calcite.rel.IgniteValues;
import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistribution;
-import org.jetbrains.annotations.NotNull;
/**
* See {@link RelMetadataQuery}
*/
public class RelMetadataQueryEx extends RelMetadataQuery {
- /** */
- private static final RelMetadataQueryEx PROTO = new RelMetadataQueryEx();
-
- /** */
- public static final JaninoRelMetadataProvider PROVIDER = JaninoRelMetadataProvider.of(IgniteMetadata.METADATA_PROVIDER);
-
static {
- PROVIDER.register(ImmutableList.of(
+ JaninoRelMetadataProvider.DEFAULT.register(
+ ImmutableList.of(
IgniteExchange.class,
IgniteReceiver.class,
IgniteSender.class,
IgniteFilter.class,
IgniteProject.class,
IgniteJoin.class,
- IgniteTableScan.class));
+ IgniteTableScan.class,
+ IgniteValues.class,
+ IgniteTableModify.class));
}
/** */
+ private static final IgniteMetadata.FragmentMetadata.Handler SOURCE_DISTRIBUTION_INITIAL_HANDLER =
+ initialHandler(IgniteMetadata.FragmentMetadata.Handler.class);
+
+ /** */
+ private static final IgniteMetadata.DerivedDistribution.Handler DERIVED_DISTRIBUTIONS_INITIAL_HANDLER =
+ initialHandler(IgniteMetadata.DerivedDistribution.Handler.class);
+
+ /** */
private IgniteMetadata.FragmentMetadata.Handler sourceDistributionHandler;
/** */
@@ -64,52 +71,29 @@ public class RelMetadataQueryEx extends RelMetadataQuery {
*
* @return return Metadata query instance.
*/
- @SuppressWarnings("MethodOverridesStaticMethodOfSuperclass")
- public static RelMetadataQueryEx instance() {
- return new RelMetadataQueryEx(PROTO);
+ public static RelMetadataQueryEx create() {
+ return create(IgniteMetadata.METADATA_PROVIDER);
}
/**
- * Wraps an original metadata query instance and reuses its prepared handlers.
+ * Factory method.
*
- * @param mq Original metadata query instance.
- * @return Wrapped metadata query instance.
- */
- public static RelMetadataQueryEx wrap(@NotNull RelMetadataQuery mq) {
- if (mq.getClass() == RelMetadataQueryEx.class)
- return (RelMetadataQueryEx) mq;
-
- return new RelMetadataQueryEx(mq);
- }
-
- /**
- * @param parent Parent metadata query instance.
- */
- private RelMetadataQueryEx(@NotNull RelMetadataQueryEx parent) {
- super(PROVIDER, parent);
-
- sourceDistributionHandler = parent.sourceDistributionHandler;
- derivedDistributionsHandler = parent.derivedDistributionsHandler;
- }
-
- /**
- * @param parent Parent metadata query instance.
+ * @return return Metadata query instance.
*/
- private RelMetadataQueryEx(@NotNull RelMetadataQuery parent) {
- super(PROVIDER, parent);
-
- sourceDistributionHandler = PROTO.sourceDistributionHandler;
- derivedDistributionsHandler = PROTO.derivedDistributionsHandler;
+ public static RelMetadataQueryEx create(RelMetadataProvider metadataProvider) {
+ THREAD_PROVIDERS.set(JaninoRelMetadataProvider.of(metadataProvider));
+ try {
+ return new RelMetadataQueryEx();
+ }
+ finally {
+ THREAD_PROVIDERS.remove();
+ }
}
- /**
- * Constructs query prototype.
- */
+ /** */
private RelMetadataQueryEx() {
- super(JaninoRelMetadataProvider.DEFAULT, RelMetadataQuery.EMPTY);
-
- sourceDistributionHandler = initialHandler(IgniteMetadata.FragmentMetadata.Handler.class);
- derivedDistributionsHandler = initialHandler(IgniteMetadata.DerivedDistribution.Handler.class);
+ sourceDistributionHandler = SOURCE_DISTRIBUTION_INITIAL_HANDLER;
+ derivedDistributionsHandler = DERIVED_DISTRIBUTIONS_INITIAL_HANDLER;
}
/**
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/AbstractMultiStepPlan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/AbstractMultiStepPlan.java
index 99f316b..c759379 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/AbstractMultiStepPlan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/AbstractMultiStepPlan.java
@@ -18,11 +18,11 @@
package org.apache.ignite.internal.processors.query.calcite.prepare;
import java.util.List;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.ignite.internal.processors.query.GridQueryFieldMetadata;
import org.apache.ignite.internal.processors.query.IgniteSQLException;
import org.apache.ignite.internal.processors.query.calcite.metadata.MappingService;
import org.apache.ignite.internal.processors.query.calcite.metadata.OptimisticPlanningException;
-import org.apache.ignite.internal.processors.query.calcite.metadata.RelMetadataQueryEx;
import org.apache.ignite.internal.util.typedef.F;
/**
@@ -52,7 +52,7 @@ public abstract class AbstractMultiStepPlan implements MultiStepPlan {
/** {@inheritDoc} */
@Override public void init(MappingService mappingService, PlanningContext ctx) {
- RelMetadataQueryEx mq = RelMetadataQueryEx.instance();
+ RelMetadataQuery mq = F.first(fragments).root().getCluster().getMetadataQuery();
for (int i = 0, j = 0; i < fragments.size();) {
Fragment fragment = fragments.get(i);
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FragmentSplitter.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FragmentSplitter.java
index 92b0cbe..a46242c2 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FragmentSplitter.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FragmentSplitter.java
@@ -24,8 +24,8 @@ import java.util.List;
import org.apache.calcite.plan.RelOptCluster;
import org.apache.calcite.plan.RelTraitSet;
import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.ignite.internal.processors.query.calcite.metadata.IgniteMdDistribution;
-import org.apache.ignite.internal.processors.query.calcite.metadata.RelMetadataQueryEx;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteExchange;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteFilter;
import org.apache.ignite.internal.processors.query.calcite.rel.IgniteJoin;
@@ -43,7 +43,7 @@ import org.apache.ignite.internal.processors.query.calcite.rel.IgniteValues;
*/
public class FragmentSplitter implements IgniteRelVisitor<IgniteRel> {
/** */
- private RelMetadataQueryEx mq;
+ private RelMetadataQuery mq;
/** */
private List<Fragment> fragments;
@@ -52,7 +52,7 @@ public class FragmentSplitter implements IgniteRelVisitor<IgniteRel> {
private RelNode cutPoint;
/** */
- public List<Fragment> go(Fragment fragment, RelNode cutPoint, RelMetadataQueryEx mq) {
+ public List<Fragment> go(Fragment fragment, RelNode cutPoint, RelMetadataQuery mq) {
this.cutPoint = cutPoint;
this.mq = mq;
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
index 397a9ef..aaa4d41 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
@@ -34,9 +34,6 @@ import org.apache.calcite.prepare.CalciteCatalogReader;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.RelRoot;
import org.apache.calcite.rel.metadata.CachingRelMetadataProvider;
-import org.apache.calcite.rel.metadata.JaninoRelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexExecutor;
@@ -58,6 +55,7 @@ import org.apache.calcite.util.Pair;
import org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode;
import org.apache.ignite.internal.processors.query.IgniteSQLException;
import org.apache.ignite.internal.processors.query.calcite.metadata.IgniteMetadata;
+import org.apache.ignite.internal.processors.query.calcite.metadata.RelMetadataQueryEx;
import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
/**
@@ -224,18 +222,7 @@ public class IgnitePlanner implements Planner, RelOptTable.ViewExpander {
/** {@inheritDoc} */
@Override public RelNode transform(int programIdx, RelTraitSet targetTraits, RelNode rel) {
- RelMetadataProvider clusterProvider = rel.getCluster().getMetadataProvider();
- JaninoRelMetadataProvider threadProvider = RelMetadataQuery.THREAD_PROVIDERS.get();
- try {
- rel.getCluster().setMetadataProvider(new CachingRelMetadataProvider(IgniteMetadata.METADATA_PROVIDER, planner()));
- RelMetadataQuery.THREAD_PROVIDERS.set(JaninoRelMetadataProvider.of(rel.getCluster().getMetadataProvider()));
-
- return programs.get(programIdx).run(planner(), rel, targetTraits.simplify(), materializations(), latices());
- }
- finally {
- rel.getCluster().setMetadataProvider(clusterProvider);
- RelMetadataQuery.THREAD_PROVIDERS.set(threadProvider);
- }
+ return programs.get(programIdx).run(planner(), rel, targetTraits.simplify(), materializations(), latices());
}
/**
@@ -247,18 +234,7 @@ public class IgnitePlanner implements Planner, RelOptTable.ViewExpander {
* @return The root of the new RelNode tree.
*/
public <T extends RelNode> T transform(PlannerPhase phase, RelTraitSet targetTraits, RelNode rel) {
- RelMetadataProvider clusterProvider = rel.getCluster().getMetadataProvider();
- JaninoRelMetadataProvider threadProvider = RelMetadataQuery.THREAD_PROVIDERS.get();
- try {
- rel.getCluster().setMetadataProvider(new CachingRelMetadataProvider(IgniteMetadata.METADATA_PROVIDER, planner()));
- RelMetadataQuery.THREAD_PROVIDERS.set(JaninoRelMetadataProvider.of(rel.getCluster().getMetadataProvider()));
-
- return (T) phase.getProgram(ctx).run(planner(), rel, targetTraits.simplify(), materializations(), latices());
- }
- finally {
- rel.getCluster().setMetadataProvider(clusterProvider);
- RelMetadataQuery.THREAD_PROVIDERS.set(threadProvider);
- }
+ return (T) phase.getProgram(ctx).run(planner(), rel, targetTraits.simplify(), materializations(), latices());
}
/** {@inheritDoc} */
@@ -290,7 +266,10 @@ public class IgnitePlanner implements Planner, RelOptTable.ViewExpander {
/** Creates a cluster. */
RelOptCluster createCluster() {
RelOptCluster cluster = RelOptCluster.create(planner(), rexBuilder);
- cluster.setMetadataProvider(IgniteMetadata.METADATA_PROVIDER);
+
+ cluster.setMetadataProvider(new CachingRelMetadataProvider(IgniteMetadata.METADATA_PROVIDER, planner()));
+ cluster.setMetadataQuerySupplier(RelMetadataQueryEx::create);
+
return cluster;
}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
index da20d13..558e6a9 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
@@ -102,7 +102,7 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
}
return new SqlSelect(SqlParserPos.ZERO, null, selectList, sourceTable,
- call.getCondition(), null, null, null, null, null, null);
+ call.getCondition(), null, null, null, null, null, null, null);
}
/** {@inheritDoc} */
@@ -120,7 +120,7 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
}
return new SqlSelect(SqlParserPos.ZERO, null, selectList, sourceTable,
- call.getCondition(), null, null, null, null, null, null);
+ call.getCondition(), null, null, null, null, null, null, null);
}
/** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/IgniteTable.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/IgniteTable.java
index b80819f..6b4875b 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/IgniteTable.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/IgniteTable.java
@@ -234,7 +234,12 @@ public class IgniteTable extends AbstractTable implements TranslatableTable, Sca
/** {@inheritDoc} */
@Override public boolean isKey(ImmutableBitSet columns) {
- return false;
+ return false; // TODO
+ }
+
+ /** {@inheritDoc} */
+ @Override public List<ImmutableBitSet> getKeys() {
+ return null; // TODO
}
/** {@inheritDoc} */
diff --git a/parent/pom.xml b/parent/pom.xml
index 9633d1f..0e277a8 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -141,7 +141,6 @@
<zookeeper.version>3.5.5</zookeeper.version>
<zstd.version>1.3.7-2</zstd.version>
<opencensus.version>0.22.0</opencensus.version>
- <calcite.version>1.21.0</calcite.version>
<!--Spark 2.4 version support -->
<spark24.hadoop.version>2.6.5</spark24.hadoop.version>