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

Vladimir Sitnikov commented on CALCITE-4253:
--------------------------------------------

Just in case, RelOptUtil fetches RelMetadataQuery right from rel.getCluster():

{code:java}
  public static List<RelOptTable> findAllTables(RelNode rel) {
    final Multimap<Class<? extends RelNode>, RelNode> nodes =
        rel.getCluster().getMetadataQuery().getNodeTypes(rel);
    final List<RelOptTable> usedTables = new ArrayList<>();
    for (Entry<Class<? extends RelNode>, Collection<RelNode>> e : 
nodes.asMap().entrySet()) {
      if (TableScan.class.isAssignableFrom(e.getKey())) {
        for (RelNode node : e.getValue()) {
          TableScan scan = (TableScan) node;
          usedTables.add(scan.getTable());
        }
      }
    }
    return usedTables;
  }
{code}

Do you mean {{RelOptUtil}} should avoid {{getMetadataQuery}} altogether?

PS. it looks like MaterializedViewAggregateRule and MaterializedViewJoinRule 
have the same {{getMetadataQuery().getNodeTypes(rel)}} in order to figure out 
all the {{TableScan}} nodes.

> RelOptUtil#findAllTables should probably use 
> RelMetadataQuery#getTableReferences
> --------------------------------------------------------------------------------
>
>                 Key: CALCITE-4253
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4253
>             Project: Calcite
>          Issue Type: Sub-task
>          Components: core
>    Affects Versions: 1.25.0
>            Reporter: Vladimir Sitnikov
>            Priority: Minor
>
> It looks like both methods do exactly the same thing, so it would probably 
> make sense to divert {{findAllTables}} to 
> {{RelMetadataQuery#getTableReferences}}
> If methods are different, it would make sense to add the relevant 
> documentation and cross-references.



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

Reply via email to