public class ChainedRelMetadataProvider extends Object implements RelMetadataProvider
RelMetadataProvider
interface via the
Glossary.CHAIN_OF_RESPONSIBILITY_PATTERN.
When a consumer calls the apply(java.lang.Class<? extends org.apache.calcite.rel.RelNode>, java.lang.Class<? extends M>) method to ask for a provider
for a particular type of RelNode and Metadata, scans the list
of underlying providers.
| Modifier | Constructor and Description |
|---|---|
protected |
ChainedRelMetadataProvider(com.google.common.collect.ImmutableList<RelMetadataProvider> providers)
Creates a chain.
|
| Modifier and Type | Method and Description |
|---|---|
<M extends Metadata> |
apply(Class<? extends RelNode> relClass,
Class<? extends M> metadataClass)
Deprecated.
|
boolean |
equals(@Nullable Object obj) |
List<MetadataHandler<?>> |
handlers(Class<? extends MetadataHandler<?>> handlerClass)
Retrieves a list of
MetadataHandler for implements a particular
MetadataHandler.class. |
<M extends Metadata> |
handlers(MetadataDef<M> def)
Deprecated.
|
int |
hashCode() |
static RelMetadataProvider |
of(List<RelMetadataProvider> list)
Creates a chain.
|
protected ChainedRelMetadataProvider(com.google.common.collect.ImmutableList<RelMetadataProvider> providers)
@Deprecated public <M extends Metadata> @Nullable UnboundMetadata<M> apply(Class<? extends RelNode> relClass, Class<? extends M> metadataClass)
RelMetadataProviderThe object returned is a function. It can be applied to a relational expression of the given type to create a metadata object.
For example, you might call
RelMetadataProvider provider; LogicalFilter filter; RexNode predicate; Function<RelNode, Metadata> function = provider.apply(LogicalFilter.class, Selectivity.class}; Selectivity selectivity = function.apply(filter); Double d = selectivity.selectivity(predicate);
apply in interface RelMetadataProviderrelClass - Type of relational expressionmetadataClass - Type of metadata@Deprecated public <M extends Metadata> com.google.common.collect.Multimap<Method,MetadataHandler<M>> handlers(MetadataDef<M> def)
handlers in interface RelMetadataProviderpublic List<MetadataHandler<?>> handlers(Class<? extends MetadataHandler<?>> handlerClass)
RelMetadataProviderMetadataHandler for implements a particular
MetadataHandler.class. The resolution order is specificity of the relNode class,
with preference given to handlers that occur earlier in the list.
For instance, given a return list of {A, B, C} where A implements RelNode and Scan,
B implements Scan, and C implements LogicalScan and Filter.
Scan dispatches to a.method(Scan)
LogicalFilter dispatches to c.method(Filter).
LogicalScan dispatches to c.method(LogicalScan).
Aggregate dispatches to a.method(RelNode).
The behavior is undefined if the class hierarchy for dispatching is not a tree.handlers in interface RelMetadataProviderpublic static RelMetadataProvider of(List<RelMetadataProvider> list)
Copyright © 2012-2022 Apache Software Foundation. All Rights Reserved.