You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by da...@apache.org on 2020/02/15 03:50:10 UTC
[calcite] branch master updated: [CALCITE-3797] RelMdPredicates
should not assume the RexExecutor instance is RexExecutorImpl
This is an automated email from the ASF dual-hosted git repository.
danny0405 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new bf3fb49 [CALCITE-3797] RelMdPredicates should not assume the RexExecutor instance is RexExecutorImpl
bf3fb49 is described below
commit bf3fb49eba29f4b90b1232f7abaaa32cf7bb73aa
Author: yuzhao.cyz <yu...@gmail.com>
AuthorDate: Fri Feb 14 17:31:04 2020 +0800
[CALCITE-3797] RelMdPredicates should not assume the RexExecutor instance is RexExecutorImpl
The RexExecutor is actually pluggable, we should not do such an assumption.
---
.../java/org/apache/calcite/plan/RexImplicationChecker.java | 8 ++++----
.../org/apache/calcite/rel/metadata/RelMdPredicates.java | 8 ++++----
.../main/java/org/apache/calcite/rex/RexExecutorImpl.java | 13 +++++++++----
3 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java b/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java
index 3e56c0a..2a94e61 100644
--- a/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java
+++ b/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java
@@ -21,6 +21,7 @@ import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexCall;
import org.apache.calcite.rex.RexExecutable;
+import org.apache.calcite.rex.RexExecutor;
import org.apache.calcite.rex.RexExecutorImpl;
import org.apache.calcite.rex.RexInputRef;
import org.apache.calcite.rex.RexNode;
@@ -62,12 +63,12 @@ public class RexImplicationChecker {
new CalciteLogger(LoggerFactory.getLogger(RexImplicationChecker.class));
final RexBuilder builder;
- final RexExecutorImpl executor;
+ final RexExecutor executor;
final RelDataType rowType;
public RexImplicationChecker(
RexBuilder builder,
- RexExecutorImpl executor,
+ RexExecutor executor,
RelDataType rowType) {
this.builder = Objects.requireNonNull(builder);
this.executor = Objects.requireNonNull(executor);
@@ -249,8 +250,7 @@ public class RexImplicationChecker {
}
ImmutableList<RexNode> constExps = ImmutableList.of(second);
- final RexExecutable exec =
- executor.getExecutable(builder, constExps, rowType);
+ final RexExecutable exec = RexExecutorImpl.getExecutable(builder, constExps, rowType);
Object[] result;
exec.setDataContext(dataValues);
diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
index 2aa3091..0061042 100644
--- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
+++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
@@ -41,7 +41,6 @@ import org.apache.calcite.rel.core.Union;
import org.apache.calcite.rex.RexBuilder;
import org.apache.calcite.rex.RexCall;
import org.apache.calcite.rex.RexExecutor;
-import org.apache.calcite.rex.RexExecutorImpl;
import org.apache.calcite.rex.RexInputRef;
import org.apache.calcite.rex.RexLiteral;
import org.apache.calcite.rex.RexNode;
@@ -422,10 +421,11 @@ public class RelMdPredicates
public RelOptPredicateList getPredicates(Intersect intersect, RelMetadataQuery mq) {
final RexBuilder rexBuilder = intersect.getCluster().getRexBuilder();
- final RexExecutorImpl rexImpl =
- (RexExecutorImpl) (intersect.getCluster().getPlanner().getExecutor());
+ final RexExecutor executor =
+ Util.first(intersect.getCluster().getPlanner().getExecutor(), RexUtil.EXECUTOR);
+
final RexImplicationChecker rexImplicationChecker =
- new RexImplicationChecker(rexBuilder, rexImpl, intersect.getRowType());
+ new RexImplicationChecker(rexBuilder, executor, intersect.getRowType());
Set<RexNode> finalPredicates = new HashSet<>();
diff --git a/core/src/main/java/org/apache/calcite/rex/RexExecutorImpl.java b/core/src/main/java/org/apache/calcite/rex/RexExecutorImpl.java
index 120c444..c77033d 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexExecutorImpl.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexExecutorImpl.java
@@ -44,7 +44,12 @@ import java.lang.reflect.Type;
import java.util.List;
/**
-* Evaluates a {@link RexNode} expression.
+ * Evaluates a {@link RexNode} expression.
+ *
+ * <p>For this impl, all the public methods should be
+ * static except that it inherits from {@link RexExecutor}.
+ * This pretends that other code in the project assumes
+ * the executor instance is {@link RexExecutorImpl}.
*/
public class RexExecutorImpl implements RexExecutor {
@@ -54,14 +59,14 @@ public class RexExecutorImpl implements RexExecutor {
this.dataContext = dataContext;
}
- private String compile(RexBuilder rexBuilder, List<RexNode> constExps,
+ private static String compile(RexBuilder rexBuilder, List<RexNode> constExps,
RexToLixTranslator.InputGetter getter) {
final RelDataTypeFactory typeFactory = rexBuilder.getTypeFactory();
final RelDataType emptyRowType = typeFactory.builder().build();
return compile(rexBuilder, constExps, getter, emptyRowType);
}
- private String compile(RexBuilder rexBuilder, List<RexNode> constExps,
+ private static String compile(RexBuilder rexBuilder, List<RexNode> constExps,
RexToLixTranslator.InputGetter getter, RelDataType rowType) {
final RexProgramBuilder programBuilder =
new RexProgramBuilder(rowType, rexBuilder);
@@ -106,7 +111,7 @@ public class RexExecutorImpl implements RexExecutor {
* @param exps Expressions
* @param rowType describes the structure of the input row.
*/
- public RexExecutable getExecutable(RexBuilder rexBuilder, List<RexNode> exps,
+ public static RexExecutable getExecutable(RexBuilder rexBuilder, List<RexNode> exps,
RelDataType rowType) {
final JavaTypeFactoryImpl typeFactory =
new JavaTypeFactoryImpl(rexBuilder.getTypeFactory().getTypeSystem());