Package org.apache.calcite.rel.metadata
Class JaninoRelMetadataProvider
- java.lang.Object
-
- org.apache.calcite.rel.metadata.JaninoRelMetadataProvider
-
- All Implemented Interfaces:
RelMetadataProvider
public class JaninoRelMetadataProvider extends java.lang.Object implements RelMetadataProvider
Implementation of theRelMetadataProvider
interface that generates a class that dispatches to the underlying providers.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
JaninoRelMetadataProvider.Key
Key for the cache.static class
JaninoRelMetadataProvider.NoHandler
Exception that indicates there there should be a handler for this class but there is not.
-
Field Summary
Fields Modifier and Type Field Description private static java.util.Set<java.lang.Class<? extends RelNode>>
ALL_RELS
static JaninoRelMetadataProvider
DEFAULT
private static com.google.common.cache.LoadingCache<JaninoRelMetadataProvider.Key,MetadataHandler>
HANDLERS
Cache of pre-generated handlers by provider and kind of metadata.private RelMetadataProvider
provider
-
Constructor Summary
Constructors Modifier Constructor Description private
JaninoRelMetadataProvider(RelMetadataProvider provider)
Private constructor; useof(org.apache.calcite.rel.metadata.RelMetadataProvider)
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description <M extends Metadata>
UnboundMetadata<M>apply(java.lang.Class<? extends RelNode> relClass, java.lang.Class<? extends M> metadataClass)
Retrieves metadata of a particular type and for a particular sub-class of relational expression.private static java.lang.StringBuilder
argList(java.lang.StringBuilder buff, java.lang.reflect.Method method)
Returns e.g.(package private) static <M extends Metadata>
MetadataHandler<M>compile(java.lang.String className, java.lang.String classBody, MetadataDef<M> def, java.util.List<java.lang.Object> argList)
(package private) <M extends Metadata,H extends MetadataHandler<M>>
Hcreate(MetadataDef<M> def)
boolean
equals(java.lang.Object obj)
private static java.lang.String
findProvider(java.util.List<Pair<java.lang.String,MetadataHandler>> providerList, java.lang.Class<?> declaringClass)
<M extends Metadata>
com.google.common.collect.Multimap<java.lang.reflect.Method,MetadataHandler<M>>handlers(MetadataDef<M> def)
int
hashCode()
private static <M extends Metadata>
MetadataHandler<M>load3(MetadataDef<M> def, com.google.common.collect.Multimap<java.lang.reflect.Method,MetadataHandler<M>> map, com.google.common.collect.ImmutableList<java.lang.Class<? extends RelNode>> relClasses)
private static <K,V>
com.google.common.cache.CacheBuilder<K,V>maxSize(com.google.common.cache.CacheBuilder<K,V> builder, int size)
static JaninoRelMetadataProvider
of(RelMetadataProvider provider)
Creates a JaninoRelMetadataProvider.private static java.lang.StringBuilder
paramList(java.lang.StringBuilder buff, java.lang.reflect.Method method)
Returns e.g.void
register(java.lang.Iterable<java.lang.Class<? extends RelNode>> classes)
Registers some classes.(package private) <M extends Metadata,H extends MetadataHandler<M>>
Hrevise(java.lang.Class<? extends RelNode> rClass, MetadataDef<M> def)
private static java.lang.StringBuilder
safeArgList(java.lang.StringBuilder buff, java.lang.reflect.Method method)
Returns e.g.
-
-
-
Field Detail
-
provider
private final RelMetadataProvider provider
-
DEFAULT
public static final JaninoRelMetadataProvider DEFAULT
-
ALL_RELS
private static final java.util.Set<java.lang.Class<? extends RelNode>> ALL_RELS
-
HANDLERS
private static final com.google.common.cache.LoadingCache<JaninoRelMetadataProvider.Key,MetadataHandler> HANDLERS
Cache of pre-generated handlers by provider and kind of metadata. For the cache to be effective, providers should implement identity correctly.
-
-
Constructor Detail
-
JaninoRelMetadataProvider
private JaninoRelMetadataProvider(RelMetadataProvider provider)
Private constructor; useof(org.apache.calcite.rel.metadata.RelMetadataProvider)
.
-
-
Method Detail
-
of
public static JaninoRelMetadataProvider of(RelMetadataProvider provider)
Creates a JaninoRelMetadataProvider.- Parameters:
provider
- Underlying provider
-
maxSize
private static <K,V> com.google.common.cache.CacheBuilder<K,V> maxSize(com.google.common.cache.CacheBuilder<K,V> builder, int size)
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
apply
public <M extends Metadata> UnboundMetadata<M> apply(java.lang.Class<? extends RelNode> relClass, java.lang.Class<? extends M> metadataClass)
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
-
handlers
public <M extends Metadata> com.google.common.collect.Multimap<java.lang.reflect.Method,MetadataHandler<M>> handlers(MetadataDef<M> def)
- Specified by:
handlers
in interfaceRelMetadataProvider
-
load3
private static <M extends Metadata> MetadataHandler<M> load3(MetadataDef<M> def, com.google.common.collect.Multimap<java.lang.reflect.Method,MetadataHandler<M>> map, com.google.common.collect.ImmutableList<java.lang.Class<? extends RelNode>> relClasses)
-
findProvider
private static java.lang.String findProvider(java.util.List<Pair<java.lang.String,MetadataHandler>> providerList, java.lang.Class<?> declaringClass)
-
argList
private static java.lang.StringBuilder argList(java.lang.StringBuilder buff, java.lang.reflect.Method method)
Returns e.g. ", ignoreNulls".
-
safeArgList
private static java.lang.StringBuilder safeArgList(java.lang.StringBuilder buff, java.lang.reflect.Method method)
Returns e.g. ", ignoreNulls".
-
paramList
private static java.lang.StringBuilder paramList(java.lang.StringBuilder buff, java.lang.reflect.Method method)
Returns e.g. ",\n boolean ignoreNulls".
-
compile
static <M extends Metadata> MetadataHandler<M> compile(java.lang.String className, java.lang.String classBody, MetadataDef<M> def, java.util.List<java.lang.Object> argList) throws org.codehaus.commons.compiler.CompileException, java.io.IOException
- Throws:
org.codehaus.commons.compiler.CompileException
java.io.IOException
-
create
<M extends Metadata,H extends MetadataHandler<M>> H create(MetadataDef<M> def)
-
revise
<M extends Metadata,H extends MetadataHandler<M>> H revise(java.lang.Class<? extends RelNode> rClass, MetadataDef<M> def)
-
register
public void register(java.lang.Iterable<java.lang.Class<? extends RelNode>> classes)
Registers some classes. Does not flush the providers, but next time we need to generate a provider, it will handle all of these classes. So, calling this method reduces the number of times we need to re-generate.
-
-