From 68e0f6f6133245ef1dbb53cd1608751bfce3befb Mon Sep 17 00:00:00 2001 From: Sergey Nuyanzin Date: Fri, 2 Feb 2024 14:38:02 +0100 Subject: [PATCH] RexUtil and CompositeSingleOperandTypeChecker --- .../src/main/java/org/apache/calcite/rex/RexUtil.java | 9 ++++++++- .../sql/type/CompositeSingleOperandTypeChecker.java | 10 ++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/flink-table/flink-table-planner/src/main/java/org/apache/calcite/rex/RexUtil.java b/flink-table/flink-table-planner/src/main/java/org/apache/calcite/rex/RexUtil.java index 76571269a053a..01dfc2409db0b 100644 --- a/flink-table/flink-table-planner/src/main/java/org/apache/calcite/rex/RexUtil.java +++ b/flink-table/flink-table-planner/src/main/java/org/apache/calcite/rex/RexUtil.java @@ -69,7 +69,14 @@ import static java.util.Objects.requireNonNull; -/** Utility methods concerning row-expressions. */ +/** + * Default implementation of {@link org.apache.calcite.rex.RexUtil}, the class was copied over + * because of current Calcite way of inferring constants from IS NOT DISTINCT FROM clashes with + * filter push down. + * + *

Lines 397 ~ 399, Use Calcite 1.32.0 behavior for {@link RexUtil#gatherConstraints(Class, + * RexNode, Map, Set, RexBuilder)}. + */ public class RexUtil { /** Executor for a bit of constant reduction. The user can pass in another executor. */ diff --git a/flink-table/flink-table-planner/src/main/java/org/apache/calcite/sql/type/CompositeSingleOperandTypeChecker.java b/flink-table/flink-table-planner/src/main/java/org/apache/calcite/sql/type/CompositeSingleOperandTypeChecker.java index 4282d9188ebdc..c16ffb2a91117 100644 --- a/flink-table/flink-table-planner/src/main/java/org/apache/calcite/sql/type/CompositeSingleOperandTypeChecker.java +++ b/flink-table/flink-table-planner/src/main/java/org/apache/calcite/sql/type/CompositeSingleOperandTypeChecker.java @@ -23,8 +23,10 @@ import org.checkerframework.checker.nullness.qual.Nullable; /** - * Allows multiple {@link org.apache.calcite.sql.type.SqlSingleOperandTypeChecker} rules to be - * combined into one rule. + * Default implementation of {@link org.apache.calcite.sql.type.CompositeOperandTypeChecker}, the + * class was copied over because of current Calcite issue CALCITE-5380. + * + *

Lines 73 ~ 79, 101 ~ 107 */ public class CompositeSingleOperandTypeChecker extends CompositeOperandTypeChecker implements SqlSingleOperandTypeChecker { @@ -68,10 +70,12 @@ public boolean checkSingleOperandType( for (SqlSingleOperandTypeChecker rule : rules) { if (!rule.checkSingleOperandType( + // FLINK MODIFICATION BEGIN callBinding, node, rule.getClass() == FamilyOperandTypeChecker.class ? 0 : iFormalOperand, throwOnAndFailure)) { + // FLINK MODIFICATION END typeErrorCount++; } } @@ -94,11 +98,13 @@ public boolean checkSingleOperandType( // describing in more detail what the problem was, hence doing the // loop again. for (SqlSingleOperandTypeChecker rule : rules) { + // FLINK MODIFICATION BEGIN rule.checkSingleOperandType( callBinding, node, rule.getClass() == FamilyOperandTypeChecker.class ? 0 : iFormalOperand, true); + // FLINK MODIFICATION END } // If no exception thrown, just throw a generic validation signature