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

Julian Hyde commented on CALCITE-4223:
--------------------------------------

I started writing a PR, but there is already a perfect example. In CALCITE-1861 
I wanted a table to be able to declare its own predicates. So I added 4 lines 
to {{getAllPredicates}}:

{code}
  public RelOptPredicateList getAllPredicates(TableScan scan, RelMetadataQuery 
mq) {
    final BuiltInMetadata.AllPredicates.Handler handler =
        scan.getTable().unwrap(BuiltInMetadata.AllPredicates.Handler.class);
    if (handler != null) {
      return handler.getAllPredicates(scan, mq);
    }
    return RelOptPredicateList.EMPTY;
  }
{code}

and I made a mock table that called {{addWrap}} to add its own implementation 
of {{AllPredicates.Handler}}:

{code}
    restaurantTable.addWrap(
        new BuiltInMetadata.AllPredicates.Handler() {
          public RelOptPredicateList getAllPredicates(RelNode r,
              RelMetadataQuery mq) {
...
          }
        });
{code}

Put a break-point in {{RelMdAllPredicates.getAllPredicates(TableScan scan, 
RelMetadataQuery mq)}} and run {{RelOptRulesTest.testSpatialDWithinToHilbert}} 
and see how your break-point gets hit.

We need to check for handlers in all {{RelMdXxx.getXxx(TableScan, 
RelMdataQuery)}} methods. If I did it again I'd implement {{interface 
AllPredicates}} rather than {{interface AllPredicates.Handler}}, but the 
principle is the same.  

> Introducing column statistics to RelOptTable
> --------------------------------------------
>
>                 Key: CALCITE-4223
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4223
>             Project: Calcite
>          Issue Type: Improvement
>            Reporter: Chunwei Lei
>            Assignee: Chunwei Lei
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> Many systems depend on column statistics to compute more accurate stats, such 
> as NDV, average column size, and so on. It would be nice if Calcite can 
> provide such an interface.
> Column statistics might include NDV, average/max column length, number of 
> nulls, number of trues, number of falses and so on. 
> What do you think?
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to