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

zhen wang commented on CALCITE-1862:
------------------------------------

some findings
the estimate row count method it self is actually okay. before planner 
optimization it can derive the correct row count

the problem lies in the optimization, as rules gets applied on the relation 
algebra, the plan becomes deeper and deeper, when the stack overflow, the 
algebra has grown to a depth > 100 which essentially lead to the stack 
overflow. 

haven't located which rule is actually leading to the growth of the relation 
algebra. 


> StackOverflowException in RelMdUtil.estimateFilteredRows
> --------------------------------------------------------
>
>                 Key: CALCITE-1862
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1862
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Julian Hyde
>            Priority: Major
>
> The query
> {code}select *
> from (
>   select *
>   from (
>     select cast(null as integer) as d
>     from "scott".emp)
>   where d is null and d is null)
> where d is null;{code}
> gives
> {noformat}
> java.lang.StackOverflowError
> >     at 
> > org.apache.calcite.adapter.clone.ArrayTable.getStatistic(ArrayTable.java:76)
> >     at 
> > org.apache.calcite.prepare.RelOptTableImpl.getRowCount(RelOptTableImpl.java:224)
> >     at 
> > org.apache.calcite.rel.core.TableScan.estimateRowCount(TableScan.java:75)
> >     at 
> > org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:206)
> >     at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> >     at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> >     at 
> > org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:236)
> >     at 
> > org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:71)
> >     at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> >     at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> >     at 
> > org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:236)
> >     at 
> > org.apache.calcite.rel.metadata.RelMdUtil.estimateFilteredRows(RelMdUtil.java:718)
> >     at 
> > org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:123)
> >     at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> >     at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> >     at 
> > org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:236)
> >     at 
> > org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:71)
> >     at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> >     at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> >     at 
> > org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:236)
> >     at 
> > org.apache.calcite.rel.metadata.RelMdUtil.estimateFilteredRows(RelMdUtil.java:718){noformat}
> For a test case, add the query to misc.iq and run QuidemTest.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to