[
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)