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

Pengcheng Xiong commented on CALCITE-987:
-----------------------------------------

Thanks [[email protected]] for the jumbo patch. Sorry that it is my bad to 
make those mistakes. I reviewed the code and I have a question. So for the 
intersect case, I think the logic should be
{code}
Double rowCount = Double.POSITIVE_INFINITY;
 for (RelNode input : rel.getInputs()) {
      Double partialRowCount = RelMetadataQuery.getMaxRowCount(input);
      if (partialRowCount == null){
           return null;
     }
      else{
          if (partialRowCount < rowCount) {
             rowCount = partialRowCount;
          }
      }
     }
return rowCount;
{code}?

> Push limit 0 will result in an infinite loop
> --------------------------------------------
>
>                 Key: CALCITE-987
>                 URL: https://issues.apache.org/jira/browse/CALCITE-987
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.5.0
>            Reporter: Pengcheng Xiong
>            Assignee: Pengcheng Xiong
>             Fix For: 1.6.0
>
>         Attachments: CALCITE-987.01.patch, CALCITE-987.02.patch, 
> CALCITE-987.03.patch, CALCITE-987.04.patch
>
>
> We use "checkInputForCollationAndLimit" in RelMdUtil.java to check the input 
> #rows. However, it calls RelMetadataQuery.getRowCount which will validate the 
> #rows. The validation will change #row=0 to #row=1. This will result in an 
> infinite loop to push limit. The affected rules include 
> SortUnionTransposeRule and any Sort***TransposeRules that call  
> checkInputForCollationAndLimit.



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

Reply via email to