Class Project

All Implemented Interfaces:
Cloneable, RelOptNode, Hintable, RelNode
Direct Known Subclasses:
Bindables.BindableProject, CassandraProject, ElasticsearchProject, EnumerableProject, GeodeProject, JdbcRules.JdbcProject, LogicalProject, MongoProject, PigProject

public abstract class Project
extends SingleRel
implements Hintable
Relational expression that computes a set of 'select expressions' from its input relational expression.
See Also:
LogicalProject
  • Field Details

    • exps

      protected final com.google.common.collect.ImmutableList<RexNode> exps
    • hints

      protected final com.google.common.collect.ImmutableList<RelHint> hints
  • Constructor Details

  • Method Details

    • copy

      public final RelNode copy​(RelTraitSet traitSet, List<RelNode> inputs)
      Description copied from interface: RelNode
      Creates a copy of this relational expression, perhaps changing traits and inputs.

      Sub-classes with other important attributes are encouraged to create variants of this method with more parameters.

      Specified by:
      copy in interface RelNode
      Overrides:
      copy in class AbstractRelNode
      Parameters:
      traitSet - Trait set
      inputs - Inputs
      Returns:
      Copy of this relational expression, substituting traits and inputs
    • copy

      public abstract Project copy​(RelTraitSet traitSet, RelNode input, List<RexNode> projects, RelDataType rowType)
      Copies a project.
      Parameters:
      traitSet - Traits
      input - Input
      projects - Project expressions
      rowType - Output row type
      Returns:
      New Project if any parameter differs from the value of this Project, or just this if all the parameters are the same
      See Also:
      copy(RelTraitSet, List)
    • copy

      @Deprecated public Project copy​(RelTraitSet traitSet, RelNode input, List<RexNode> projects, RelDataType rowType, int flags)
      Deprecated.
    • isBoxed

      @Deprecated public boolean isBoxed()
      Deprecated.
    • getChildExps

      public List<RexNode> getChildExps()
      Description copied from interface: RelNode
      Returns a list of this relational expression's child expressions. (These are scalar expressions, and so do not include the relational inputs that are returned by RelNode.getInputs().

      The caller should treat the list as unmodifiable; typical implementations will return an immutable list. If there are no child expressions, returns an empty list, not null.

      Specified by:
      getChildExps in interface RelNode
      Overrides:
      getChildExps in class AbstractRelNode
      Returns:
      List of this relational expression's child expressions
      See Also:
      RelNode.accept(org.apache.calcite.rex.RexShuttle)
    • accept

      public RelNode accept​(RexShuttle shuttle)
      Description copied from interface: RelNode
      Accepts a visit from a shuttle. If the shuttle updates expression, then a copy of the relation should be created. This new relation might have a different row-type.
      Specified by:
      accept in interface RelNode
      Overrides:
      accept in class AbstractRelNode
      Parameters:
      shuttle - Shuttle
      Returns:
      A copy of this node incorporating changes made by the shuttle to this node's children
    • getProjects

      public List<RexNode> getProjects()
      Returns the project expressions.
      Returns:
      Project expressions
    • getNamedProjects

      public final List<Pair<RexNode,​String>> getNamedProjects()
      Returns a list of (expression, name) pairs. Convenient for various transformations.
      Returns:
      List of (expression, name) pairs
    • getHints

      public com.google.common.collect.ImmutableList<RelHint> getHints()
      Description copied from interface: Hintable
      Returns the hints of this relational expressions as an immutable list.
      Specified by:
      getHints in interface Hintable
    • getFlags

      @Deprecated public int getFlags()
      Deprecated.
    • isValid

      public boolean isValid​(Litmus litmus, RelNode.Context context)
      Description copied from interface: RelNode
      Returns whether this relational expression is valid.

      If assertions are enabled, this method is typically called with litmus = THROW, as follows:

      assert rel.isValid(Litmus.THROW)

      This signals that the method can throw an AssertionError if it is not valid.

      Specified by:
      isValid in interface RelNode
      Overrides:
      isValid in class AbstractRelNode
      Parameters:
      litmus - What to do if invalid
      context - Context for validity checking
      Returns:
      Whether relational expression is valid
    • computeSelfCost

      public RelOptCost computeSelfCost​(RelOptPlanner planner, RelMetadataQuery mq)
      Description copied from interface: RelNode
      Returns the cost of this plan (not including children). The base implementation throws an error; derived classes should override.

      NOTE jvs 29-Mar-2006: Don't call this method directly. Instead, use RelMetadataQuery.getNonCumulativeCost(org.apache.calcite.rel.RelNode), which gives plugins a chance to override the rel's default ideas about cost.

      Specified by:
      computeSelfCost in interface RelNode
      Overrides:
      computeSelfCost in class AbstractRelNode
      Parameters:
      planner - Planner for cost calculation
      mq - Metadata query
      Returns:
      Cost of this plan (not including children)
    • explainTerms

      public RelWriter explainTerms​(RelWriter pw)
      Description copied from class: AbstractRelNode
      Describes the inputs and attributes of this relational expression. Each node should call super.explainTerms, then call the RelWriter.input(String, RelNode) and RelWriterImpl.item(String, Object) methods for each input and attribute.
      Overrides:
      explainTerms in class SingleRel
      Parameters:
      pw - Plan writer
      Returns:
      Plan writer for fluent-explain pattern
    • getMapping

      public Mappings.TargetMapping getMapping()
      Returns a mapping, or null if this projection is not a mapping.
      Returns:
      Mapping, or null if this projection is not a mapping
    • getMapping

      public static Mappings.TargetMapping getMapping​(int inputFieldCount, List<? extends RexNode> projects)
      Returns a mapping of a set of project expressions.

      The mapping is an inverse surjection. Every target has a source field, but no source has more than one target. Thus you can safely call Mappings.TargetMapping.getSourceOpt(int).

      Parameters:
      inputFieldCount - Number of input fields
      projects - Project expressions
      Returns:
      Mapping of a set of project expressions, or null if projection is not a mapping
    • getPartialMapping

      public static Mappings.TargetMapping getPartialMapping​(int inputFieldCount, List<? extends RexNode> projects)
      Returns a partial mapping of a set of project expressions.

      The mapping is an inverse function. Every target has a source field, but a source might have 0, 1 or more targets. Project expressions that do not consist of a mapping are ignored.

      Parameters:
      inputFieldCount - Number of input fields
      projects - Project expressions
      Returns:
      Mapping of a set of project expressions, never null
    • getPermutation

      public Permutation getPermutation()
      Returns a permutation, if this projection is merely a permutation of its input fields; otherwise null.
      Returns:
      Permutation, if this projection is merely a permutation of its input fields; otherwise null
    • getPermutation

      public static Permutation getPermutation​(int inputFieldCount, List<? extends RexNode> projects)
      Returns a permutation, if this projection is merely a permutation of its input fields; otherwise null.
    • isMapping

      public boolean isMapping()
      Checks whether this is a functional mapping. Every output is a source field, but a source field may appear as zero, one, or more output fields.