[ 
https://issues.apache.org/jira/browse/CALCITE-834?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14701589#comment-14701589
 ] 

Jesus Camacho Rodriguez commented on CALCITE-834:
-------------------------------------------------

It seems my initial assessment was wrong; although I had found a workaround on 
Hive, the problem seems to be in Calcite and was introduced in CALCITE-390.

I think we should infer predicates for SemiJoin the same way that we do it for 
Join operators i.e. through JoinConditionBasedPredicateInference. Thus, left 
inferred and right inferred will only contain inferred predicates. Otherwise, 
the problem that we are finding in Hive is that 
JoinPushTransitivePredicatesRule might enter in an infinite loop as it 
continuously infers the same filter predicates.

[~julianhyde], I'm sure you have a clearer idea about this, what do you think? 
I have created a pull request with the modification of 
JoinConditionBasedPredicateInference that solves this issue 
https://github.com/apache/incubator-calcite/pull/121

Thanks

> java.lang.StackOverflowError when we get predicates for a plan from the 
> metadata provider
> -----------------------------------------------------------------------------------------
>
>                 Key: CALCITE-834
>                 URL: https://issues.apache.org/jira/browse/CALCITE-834
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Jesus Camacho Rodriguez
>            Assignee: Jesus Camacho Rodriguez
>
> The problem was discovered using the latest SNAPSHOT of 1.4 for a QA run in 
> Hive. In Hive, it can be reproduced using {{semijoin.q}}. In particular, the 
> query is the following:
> {code}
> explain select a.key from t3 a left semi join t2 b on a.value = b.value where 
> a.key > 100
> {code}
> The (partial) stack trace of the Exception is:
> {code}
> ...
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ChainedRelMetadataProvider$ChainedInvocationHandler.invoke(ChainedRelMetadataProvider.java:109)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.CachingRelMetadataProvider$CachingInvocationHandler.invoke(CachingRelMetadataProvider.java:132)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at 
> org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:484)
>         at 
> org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:186)
>         at sun.reflect.GeneratedMethodAccessor99.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$1$1.invoke(ReflectiveRelMetadataProvider.java:182)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ChainedRelMetadataProvider$ChainedInvocationHandler.invoke(ChainedRelMetadataProvider.java:109)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.CachingRelMetadataProvider$CachingInvocationHandler.invoke(CachingRelMetadataProvider.java:132)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ChainedRelMetadataProvider$ChainedInvocationHandler.invoke(ChainedRelMetadataProvider.java:109)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.CachingRelMetadataProvider$CachingInvocationHandler.invoke(CachingRelMetadataProvider.java:132)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at 
> org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:484)
>         at 
> org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:186)
>         at sun.reflect.GeneratedMethodAccessor99.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$1$1.invoke(ReflectiveRelMetadataProvider.java:182)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ChainedRelMetadataProvider$ChainedInvocationHandler.invoke(ChainedRelMetadataProvider.java:109)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.CachingRelMetadataProvider$CachingInvocationHandler.invoke(CachingRelMetadataProvider.java:132)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ChainedRelMetadataProvider$ChainedInvocationHandler.invoke(ChainedRelMetadataProvider.java:109)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.CachingRelMetadataProvider$CachingInvocationHandler.invoke(CachingRelMetadataProvider.java:132)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at 
> org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:484)
>         at 
> org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:186)
>         at sun.reflect.GeneratedMethodAccessor99.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$1$1.invoke(ReflectiveRelMetadataProvider.java:182)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ChainedRelMetadataProvider$ChainedInvocationHandler.invoke(ChainedRelMetadataProvider.java:109)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.CachingRelMetadataProvider$CachingInvocationHandler.invoke(CachingRelMetadataProvider.java:132)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.ChainedRelMetadataProvider$ChainedInvocationHandler.invoke(ChainedRelMetadataProvider.java:109)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at 
> org.apache.calcite.rel.metadata.CachingRelMetadataProvider$CachingInvocationHandler.invoke(CachingRelMetadataProvider.java:132)
>         at com.sun.proxy.$Proxy22.getPredicates(Unknown Source)
>         at 
> org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:484)
>         at 
> org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:186)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to