Class Project

All Implemented Interfaces:
Cloneable, RelOptNode, Hintable, RelNode
Direct Known Subclasses:
Bindables.BindableProject, CassandraProject, ElasticsearchProject, EnumerableProject, GeodeProject, InnodbProject, 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:
  • Field Details

    • exps

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

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

      protected final com.google.common.collect.ImmutableSet<CorrelationId> variablesSet
  • 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

      @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
    • getAliasedProjects

      public final List<RexNode> getAliasedProjects(RelBuilder b)
      Returns a list of project expressions, each of which is wrapped in a call to AS if its field name differs from the default.

      This method has a similar effect to getNamedProjects(), but the single list is easier to manage.

      See Also:
    • 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, @Nullable 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 @Nullable 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)
    • getVariablesSet

      public Set<CorrelationId> getVariablesSet()
      Description copied from interface: RelNode
      Returns the variables that are set in this relational expression but also used and therefore not available to parents of this relational expression.
      Specified by:
      getVariablesSet in interface RelNode
      Overrides:
      getVariablesSet in class AbstractRelNode
      Returns:
      Names of variables which are set in this relational expression
    • 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 RelWriter.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) @EnsuresNonNullIf(expression="#1", result=true) protected boolean deepEquals0(@Nullable Object obj)
    • deepHashCode0

      @API(since="1.24", status=INTERNAL) protected int deepHashCode0()
    • getMapping

      public @Nullable 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 @Nullable 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 @Nullable 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 @Nullable 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.