Class ChainedRelMetadataProvider

All Implemented Interfaces:
Direct Known Subclasses:

public class ChainedRelMetadataProvider extends Object implements RelMetadataProvider
Implementation of the RelMetadataProvider interface via the Glossary.CHAIN_OF_RESPONSIBILITY_PATTERN.

When a consumer calls the apply(java.lang.Class<? extends org.apache.calcite.rel.RelNode>, java.lang.Class<? extends M>) method to ask for a provider for a particular type of RelNode and Metadata, scans the list of underlying providers.

  • Constructor Details

    • ChainedRelMetadataProvider

      protected ChainedRelMetadataProvider(<RelMetadataProvider> providers)
      Creates a chain.
  • Method Details

    • equals

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

      public int hashCode()
      hashCode in class Object
    • apply

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

      @Deprecated public <M extends Metadata><Method,MetadataHandler<M>> handlers(MetadataDef<M> def)
      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
    • of

      public static RelMetadataProvider of(List<RelMetadataProvider> list)
      Creates a chain.