Repository: calcite Updated Branches: refs/heads/master 81a9bd783 -> a36ffc35c
[CALCITE-2668] Support for left/right outer join in RelMdExpressionLineage (addendum) Catch UnsupportedOperationException in RelMdExpressionLineage Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/a36ffc35 Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/a36ffc35 Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/a36ffc35 Branch: refs/heads/master Commit: a36ffc35cd21c4db69021d8051ac8c9834c02faa Parents: 81a9bd7 Author: Jesus Camacho Rodriguez <[email protected]> Authored: Tue Nov 13 11:26:50 2018 -0800 Committer: Jesus Camacho Rodriguez <[email protected]> Committed: Tue Nov 13 11:27:06 2018 -0800 ---------------------------------------------------------------------- .../calcite/rel/metadata/RelMdAllPredicates.java | 18 ++++++++++++------ .../rel/metadata/RelMdExpressionLineage.java | 12 +++++++++--- 2 files changed, 21 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/a36ffc35/core/src/main/java/org/apache/calcite/rel/metadata/RelMdAllPredicates.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdAllPredicates.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdAllPredicates.java index 6101846..4d1b9d7 100644 --- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdAllPredicates.java +++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdAllPredicates.java @@ -146,9 +146,12 @@ public class RelMdAllPredicates } // Replace with new expressions and return union of predicates - return predsBelow.union(rexBuilder, - RelOptPredicateList.of(rexBuilder, - RelMdExpressionLineage.createAllPossibleExpressions(rexBuilder, pred, mapping))); + final Set<RexNode> allExprs = + RelMdExpressionLineage.createAllPossibleExpressions(rexBuilder, pred, mapping); + if (allExprs == null) { + return null; + } + return predsBelow.union(rexBuilder, RelOptPredicateList.of(rexBuilder, allExprs)); } /** @@ -222,9 +225,12 @@ public class RelMdAllPredicates } // Replace with new expressions and return union of predicates - return newPreds.union(rexBuilder, - RelOptPredicateList.of(rexBuilder, - RelMdExpressionLineage.createAllPossibleExpressions(rexBuilder, pred, mapping))); + final Set<RexNode> allExprs = + RelMdExpressionLineage.createAllPossibleExpressions(rexBuilder, pred, mapping); + if (allExprs == null) { + return null; + } + return newPreds.union(rexBuilder, RelOptPredicateList.of(rexBuilder, allExprs)); } /** http://git-wip-us.apache.org/repos/asf/calcite/blob/a36ffc35/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java index fcbf571..3ee6f6b 100644 --- a/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java +++ b/core/src/main/java/org/apache/calcite/rel/metadata/RelMdExpressionLineage.java @@ -56,6 +56,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import javax.annotation.Nullable; /** * Default implementation of @@ -398,7 +399,7 @@ public class RelMdExpressionLineage * @param mapping mapping * @return set of resulting expressions equivalent to the input expression */ - protected static Set<RexNode> createAllPossibleExpressions(RexBuilder rexBuilder, + @Nullable protected static Set<RexNode> createAllPossibleExpressions(RexBuilder rexBuilder, RexNode expr, Map<RexInputRef, Set<RexNode>> mapping) { // Extract input fields referenced by expression final ImmutableBitSet predFieldsUsed = extractInputRefs(expr); @@ -408,8 +409,13 @@ public class RelMdExpressionLineage return ImmutableSet.of(expr); } - return createAllPossibleExpressions(rexBuilder, expr, predFieldsUsed, mapping, - new HashMap<>()); + try { + return createAllPossibleExpressions(rexBuilder, expr, predFieldsUsed, mapping, + new HashMap<>()); + } catch (UnsupportedOperationException e) { + // There may be a RexNode unsupported by RexCopier, just return null + return null; + } } private static Set<RexNode> createAllPossibleExpressions(RexBuilder rexBuilder,
