You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/08/19 01:01:31 UTC

[1/2] incubator-calcite git commit: [CALCITE-834] StackOverflowError getting predicates from the metadata provider

Repository: incubator-calcite
Updated Branches:
  refs/heads/master a61be0db7 -> 6bc8efc43


[CALCITE-834] StackOverflowError getting predicates from the metadata provider


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/c9d7233d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/c9d7233d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/c9d7233d

Branch: refs/heads/master
Commit: c9d7233d4e2be531814663f2a2ef3fc5600c4950
Parents: a61be0d
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Tue Aug 18 19:57:42 2015 +0300
Committer: Julian Hyde <jh...@apache.org>
Committed: Tue Aug 18 11:00:33 2015 -0700

----------------------------------------------------------------------
 .../calcite/rel/metadata/RelMdPredicates.java   | 42 ++++++++++++++++----
 .../apache/calcite/test/RelMetadataTest.java    |  2 +-
 2 files changed, 35 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c9d7233d/core/src/main/java/org/apache/calcite/rel/metadata/RelMdPredicates.java
----------------------------------------------------------------------
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 5e14ba7..1912087 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
@@ -193,11 +193,21 @@ public class RelMdPredicates {
 
   /** Infers predicates for a {@link org.apache.calcite.rel.core.SemiJoin}. */
   public RelOptPredicateList getPredicates(SemiJoin semiJoin) {
-    final RelNode left = semiJoin.getInput(0);
-    final RelOptPredicateList leftInfo =
+    RexBuilder rB = semiJoin.getCluster().getRexBuilder();
+    RelNode left = semiJoin.getInput(0);
+    RelNode right = semiJoin.getInput(1);
+
+    RelOptPredicateList leftInfo =
         RelMetadataQuery.getPulledUpPredicates(left);
-    return RelOptPredicateList.of(leftInfo.pulledUpPredicates,
-        leftInfo.pulledUpPredicates, ImmutableList.<RexNode>of());
+    RelOptPredicateList rightInfo =
+        RelMetadataQuery.getPulledUpPredicates(right);
+
+    JoinConditionBasedPredicateInference jI =
+        new JoinConditionBasedPredicateInference(semiJoin,
+            RexUtil.composeConjunction(rB, leftInfo.pulledUpPredicates, false),
+            RexUtil.composeConjunction(rB, rightInfo.pulledUpPredicates, false));
+
+    return jI.inferPredicates(false);
   }
 
   /** Infers predicates for a {@link org.apache.calcite.rel.core.Join}. */
@@ -325,6 +335,7 @@ public class RelMdPredicates {
    */
   static class JoinConditionBasedPredicateInference {
     final Join joinRel;
+    final boolean isSemiJoin;
     final int nSysFields;
     final int nFieldsLeft;
     final int nFieldsRight;
@@ -339,9 +350,15 @@ public class RelMdPredicates {
     final RexNode rightChildPredicates;
 
     public JoinConditionBasedPredicateInference(Join joinRel,
+            RexNode lPreds, RexNode rPreds) {
+      this(joinRel, joinRel instanceof SemiJoin, lPreds, rPreds);
+    }
+
+    private JoinConditionBasedPredicateInference(Join joinRel, boolean isSemiJoin,
         RexNode lPreds, RexNode rPreds) {
       super();
       this.joinRel = joinRel;
+      this.isSemiJoin = isSemiJoin;
       nFieldsLeft = joinRel.getLeft().getRowType().getFieldList().size();
       nFieldsRight = joinRel.getRight().getRowType().getFieldList().size();
       nSysFields = joinRel.getSystemFieldList().size();
@@ -453,6 +470,7 @@ public class RelMdPredicates {
           nSysFields + nFieldsLeft, 0, nSysFields, nFieldsLeft);
       final RexPermuteInputsShuttle leftPermute =
           new RexPermuteInputsShuttle(leftMapping, joinRel);
+
       List<RexNode> leftInferredPredicates = new ArrayList<RexNode>();
       List<RexNode> rightInferredPredicates = new ArrayList<RexNode>();
 
@@ -467,12 +485,20 @@ public class RelMdPredicates {
 
       switch (joinType) {
       case INNER:
-        return RelOptPredicateList.of(
-            Iterables.concat(RelOptUtil.conjunctions(leftChildPredicates),
+        Iterable<RexNode> pulledUpPredicates;
+        if (isSemiJoin) {
+          pulledUpPredicates = Iterables.concat(
+                RelOptUtil.conjunctions(leftChildPredicates),
+                leftInferredPredicates);
+        } else {
+          pulledUpPredicates = Iterables.concat(
+                RelOptUtil.conjunctions(leftChildPredicates),
                 RelOptUtil.conjunctions(rightChildPredicates),
                 RelOptUtil.conjunctions(joinRel.getCondition()),
-                inferredPredicates),
-            leftInferredPredicates, rightInferredPredicates);
+                inferredPredicates);
+        }
+        return RelOptPredicateList.of(pulledUpPredicates,
+          leftInferredPredicates, rightInferredPredicates);
       case LEFT:
         return RelOptPredicateList.of(
             RelOptUtil.conjunctions(leftChildPredicates),

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/c9d7233d/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java b/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
index ddb116f..5ade0c8 100644
--- a/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
@@ -1074,7 +1074,7 @@ public class RelMetadataTest extends SqlToRelTestBase {
 
     predicates = RelMetadataQuery.getPulledUpPredicates(semiJoin);
     assertThat(predicates.pulledUpPredicates.toString(), is("[=($0, 1)]"));
-    assertThat(predicates.leftInferredPredicates.toString(), is("[=($0, 1)]"));
+    assertThat(predicates.leftInferredPredicates.toString(), is("[]"));
     assertThat(predicates.rightInferredPredicates.isEmpty(), is(true));
   }
 


[2/2] incubator-calcite git commit: Fix javadoc links

Posted by jh...@apache.org.
Fix javadoc links


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/6bc8efc4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/6bc8efc4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/6bc8efc4

Branch: refs/heads/master
Commit: 6bc8efc4318ef919e7a3a4a42afc574e8f5845f5
Parents: c9d7233
Author: Julian Hyde <jh...@apache.org>
Authored: Tue Aug 18 12:27:00 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Tue Aug 18 12:27:00 2015 -0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/calcite/avatica/server/Main.java   | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/6bc8efc4/avatica-server/src/main/java/org/apache/calcite/avatica/server/Main.java
----------------------------------------------------------------------
diff --git a/avatica-server/src/main/java/org/apache/calcite/avatica/server/Main.java b/avatica-server/src/main/java/org/apache/calcite/avatica/server/Main.java
index f8416d6..7876e1c 100644
--- a/avatica-server/src/main/java/org/apache/calcite/avatica/server/Main.java
+++ b/avatica-server/src/main/java/org/apache/calcite/avatica/server/Main.java
@@ -40,9 +40,10 @@ public class Main {
    *
    * <p>Arguments are as follows:
    * <ul>
-   *   <li>args[0]: the {@link Meta.Factory} class name
+   *   <li>args[0]: the {@link org.apache.calcite.avatica.Meta.Factory} class
+   *       name
    *   <li>args[1+]: arguments passed along to
-   *   {@link Meta.Factory#create(java.util.List)}
+   *   {@link org.apache.calcite.avatica.Meta.Factory#create(java.util.List)}
    * </ul>
    *
    * @param args Command-line arguments