You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jc...@apache.org on 2018/11/13 19:34:17 UTC

calcite git commit: [CALCITE-2668] Support for left/right outer join in RelMdExpressionLineage (addendum)

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 <jc...@apache.org>
Authored: Tue Nov 13 11:26:50 2018 -0800
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
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,