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.
    • 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.
    • containsOver

      public final boolean containsOver()
      Returns whether this Project contains any windowed-aggregate functions.
    • 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
    • deepEquals0

      @API(since="1.24", status=INTERNAL) protected boolean deepEquals0​(Object obj)
    • deepHashCode0

      @API(since="1.24", status=INTERNAL) protected int deepHashCode0()
    • 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.