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()