Julian Hyde created CALCITE-794:
-----------------------------------

             Summary: Detect cycles when computing statistics
                 Key: CALCITE-794
                 URL: https://issues.apache.org/jira/browse/CALCITE-794
             Project: Calcite
          Issue Type: Bug
            Reporter: Julian Hyde
            Assignee: Julian Hyde


The graph of RelNodes is allowed to be cyclic. This causes problems when 
evaluating certain metadata, for example RelMetataQuery.areColumnsUnique. While 
computing the value for RelNode r, it might recurse through say a Project and 
hit r again. This causes a stack overflow.

We solve this by adding a map or set of active RelNodes. The map is stored 
within RelMetadataQuery, which can now be instantiated, and its methods are no 
longer static. The first call should instantiate a RelMetadataQuery, but all 
subsequent calls for metadata (perhaps several kinds of metadata) will use the 
same RelMetadataQuery instance, hence the same map.

Also add a RelMetadataQuery argument to the static "handler" methods in 
RelMdColumnUniqueness and similar classes.

This is a breaking change for people who have written a metadata handler, and 
might be subtle to detect, because the methods are invoked via reflection.

For code that is just using RelMetadataQuery methods, the change is still 
breaking, but the break points and remedy will be obvious: the methods are no 
longer static, so they need to change  RelMetadataQuery.foo() to  
RelMetadataQuery.instance().foo().



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

Reply via email to