Class ReflectiveRelMetadataProvider
- All Implemented Interfaces:
RelMetadataProvider
,ReflectiveVisitor
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
ModifierConstructorDescriptionprotected
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.
-