Package org.apache.calcite.rel.metadata
Class ReflectiveRelMetadataProvider
java.lang.Object
org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider
- All Implemented Interfaces:
RelMetadataProvider
,ReflectiveVisitor
public class ReflectiveRelMetadataProvider
extends Object
implements RelMetadataProvider, ReflectiveVisitor
Implementation of the
RelMetadataProvider
interface that dispatches
metadata methods to methods on a given object via reflection.
The methods on the target object must be public and non-static, and have
the same signature as the implemented metadata method except for an
additional first parameter of type RelNode
or a sub-class. That
parameter gives this provider an indication of that relational expressions it
can handle.
For an example, see RelMdColumnOrigins.SOURCE
.
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
ReflectiveRelMetadataProvider
(ConcurrentMap<Class<RelNode>, UnboundMetadata> map, Class<? extends Metadata> metadataClass0, com.google.common.collect.Multimap<Method, MetadataHandler<?>> handlerMap, Class<? extends MetadataHandler<?>> handlerClass) Creates a ReflectiveRelMetadataProvider. -
Method Summary
Modifier and TypeMethodDescription<@Nullable M extends @Nullable Metadata>
@Nullable UnboundMetadata<M>Deprecated.<@Nullable M extends @Nullable Metadata>
@Nullable UnboundMetadata<M>Deprecated.List<MetadataHandler<?>>
handlers
(Class<? extends MetadataHandler<?>> handlerClass) Retrieves a list ofMetadataHandler
for implements a particularMetadataHandler
.class.<M extends Metadata>
com.google.common.collect.Multimap<Method,MetadataHandler<M>> handlers
(MetadataDef<M> def) Deprecated.static RelMetadataProvider
reflectiveSource
(Method method, MetadataHandler target) Deprecated.static <M extends Metadata>
RelMetadataProviderreflectiveSource
(MetadataHandler<? extends M> handler, Class<? extends MetadataHandler<M>> handlerClass) static RelMetadataProvider
reflectiveSource
(MetadataHandler target, Method... methods) Deprecated.
-
Constructor Details
-
ReflectiveRelMetadataProvider
protected ReflectiveRelMetadataProvider(ConcurrentMap<Class<RelNode>, UnboundMetadata> map, Class<? extends Metadata> metadataClass0, com.google.common.collect.Multimap<Method, MetadataHandler<?>> handlerMap, Class<? extends MetadataHandler<?>> handlerClass) Creates a ReflectiveRelMetadataProvider.- Parameters:
map
- MapmetadataClass0
- Metadata classhandlerMap
- Methods handled and the objects to call them on
-
-
Method Details
-
reflectiveSource
@Deprecated public static RelMetadataProvider reflectiveSource(Method method, MetadataHandler target) Deprecated.Returns an implementation ofRelMetadataProvider
that scans for methods with a preceding argument.For example,
BuiltInMetadata.Selectivity
has a methodBuiltInMetadata.Selectivity.getSelectivity(RexNode)
. A classclass RelMdSelectivity { public Double getSelectivity(Union rel, RexNode predicate) { } public Double getSelectivity(Filter rel, RexNode predicate) { }
provides implementations of selectivity for relational expressions that extend
Union
orFilter
. -
reflectiveSource
@Deprecated public static RelMetadataProvider reflectiveSource(MetadataHandler target, Method... methods) Deprecated.Returns a reflective metadata provider that implements several methods. -
reflectiveSource
public static <M extends Metadata> RelMetadataProvider reflectiveSource(MetadataHandler<? extends M> handler, Class<? extends MetadataHandler<M>> handlerClass) -
handlers
@Deprecated public <M extends Metadata> com.google.common.collect.Multimap<Method,MetadataHandler<M>> handlers(MetadataDef<M> def) Deprecated.- Specified by:
handlers
in interfaceRelMetadataProvider
-
handlers
Description copied from interface:RelMetadataProvider
Retrieves a list ofMetadataHandler
for implements a particularMetadataHandler
.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.- Specified by:
handlers
in interfaceRelMetadataProvider
-
apply
@Deprecated public <@Nullable M extends @Nullable Metadata> @Nullable UnboundMetadata<M> apply(Class<? extends RelNode> relClass, Class<? extends @Nullable M> metadataClass) Deprecated.Description copied from interface:RelMetadataProvider
Retrieves metadata of a particular type and for a particular sub-class of relational expression.The 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);
- Specified by:
apply
in interfaceRelMetadataProvider
- Parameters:
relClass
- Type of relational expressionmetadataClass
- Type of metadata- Returns:
- Function that will field a metadata instance; or null if this provider cannot supply metadata of this type
-
apply
@Deprecated public <@Nullable M extends @Nullable Metadata> @Nullable UnboundMetadata<M> apply(Class<? extends RelNode> relClass) Deprecated.
-