Class JaninoRelMetadataProvider

java.lang.Object
org.apache.calcite.rel.metadata.JaninoRelMetadataProvider
All Implemented Interfaces:
MetadataHandlerProvider, RelMetadataProvider

public class JaninoRelMetadataProvider extends Object implements RelMetadataProvider, MetadataHandlerProvider
Implementation of the RelMetadataProvider interface that generates a class that dispatches to the underlying providers.
  • Field Details

  • Method Details

    • of

      public static JaninoRelMetadataProvider of(RelMetadataProvider provider)
      Creates a JaninoRelMetadataProvider.
      Parameters:
      provider - Underlying provider
    • equals

      public boolean equals(@Nullable Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • apply

      @Deprecated public <@Nullable M extends @Nullable Metadata> 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 interface RelMetadataProvider
      Parameters:
      relClass - Type of relational expression
      metadataClass - Type of metadata
      Returns:
      Function that will field a metadata instance; or null if this provider cannot supply metadata of this type
    • handlers

      @Deprecated public <M extends Metadata> com.google.common.collect.Multimap<Method,MetadataHandler<M>> handlers(MetadataDef<M> def)
      Deprecated.
      Specified by:
      handlers in interface RelMetadataProvider
    • handlers

      public List<MetadataHandler<?>> handlers(Class<? extends MetadataHandler<?>> handlerClass)
      Description copied from interface: RelMetadataProvider
      Retrieves a list of MetadataHandler 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.

      Specified by:
      handlers in interface RelMetadataProvider
    • revise

      public <H extends MetadataHandler<?>> H revise(Class<H> handlerClass)
      Description copied from interface: MetadataHandlerProvider
      Revise the handler for a given kind of metadata.

      Should be invoked if the existing handler throws a MetadataHandlerProvider.NoHandler exception.

      Specified by:
      revise in interface MetadataHandlerProvider
      Type Parameters:
      H - The type metadata the handler provides.
      Parameters:
      handlerClass - The type of class to revise.
      Returns:
      A new handler that should be used instead of any previous handler provided.
    • register

      @Deprecated public void register(Iterable<Class<? extends RelNode>> classes)
      Deprecated.
      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.
    • handler

      public <MH extends MetadataHandler<?>> MH handler(Class<MH> handlerClass)
      Description copied from interface: MetadataHandlerProvider
      Provide a handler for the requested metadata class.
      Specified by:
      handler in interface MetadataHandlerProvider
      Type Parameters:
      MH - The metadata type the handler relates to.
      Parameters:
      handlerClass - The handler interface expected
      Returns:
      The handler implementation.
    • clearStaticCache

      @API(status=INTERNAL) public static void clearStaticCache()