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