Class TupleRuntimePlan

java.lang.Object
org.rumbledb.runtime.plan.RuntimePlan<FlworTuple>
org.rumbledb.runtime.TupleRuntimePlan
All Implemented Interfaces:
Serializable, LocalRuntimePlan<FlworTuple>, NativeQueryRuntimePlan
Direct Known Subclasses:
CountClauseIterator, ForClauseIterator, GroupByClauseIterator, JoinClauseIterator, LetClauseIterator, OrderByClauseIterator, WhereClauseIterator, WindowClauseIterator

public abstract class TupleRuntimePlan extends RuntimePlan<FlworTuple> implements LocalRuntimePlan<FlworTuple>, NativeQueryRuntimePlan
See Also:
  • Field Details

  • Constructor Details

  • Method Details

    • getChildIterator

      public TupleRuntimePlan getChildIterator()
    • createNativeCursor

      public abstract Cursor<FlworTuple> createNativeCursor(DynamicContext context)
      Description copied from interface: LocalRuntimePlan
      Creates an independent cursor for one native local evaluation.
      Specified by:
      createNativeCursor in interface LocalRuntimePlan<FlworTuple>
      Parameters:
      context - the dynamic context for that evaluation
      Returns:
      an unopened cursor
    • isDataFrame

      public boolean isDataFrame()
    • getInputTupleVariableDependencies

      protected abstract Map<Name,DynamicContext.VariableDependency> getInputTupleVariableDependencies(Map<Name,DynamicContext.VariableDependency> parentProjection)
      Builds the DataFrame projection that this clause needs to receive from its child clause. The intent is that the result of this method is forwarded to the child clause in getDataFrame() so it can optimize some values away. Invariant: all keys in getInputTupleVariableDependencies(...) MUST be output tuple variables, i.e., appear in this.child.getOutputTupleVariableNames()
      Parameters:
      parentProjection - the projection needed by the parent clause.
      Returns:
      the projection needed by this clause.
    • setInputAndOutputTupleVariableDependencies

      public void setInputAndOutputTupleVariableDependencies(Map<Name,DynamicContext.VariableDependency> parentProjection)
      Computes and stores the DataFrame projection that this clause needs to receive from its child clause. Also stores that of its parent for future purposes. The intent is that the result of this method is used in getDataFrame() so it can optimize some values away. Invariant: all keys MUST be output tuple variables, i.e., appear in this.child.getOutputTupleVariableNames()
      Parameters:
      parentProjection - the projection needed by the parent clause.
    • getDynamicContextVariableDependencies

      public Map<Name,DynamicContext.VariableDependency> getDynamicContextVariableDependencies()
      Variable dependencies are variables that MUST be provided by the parent clause in the dynamic context for successful execution of this clause. These variables are: 1. All variables that the expression of the clause depends on (recursive call of getVariableDependencies on the expression) 2. Except those variables bound in the current FLWOR (obtained from the auxiliary method getVariablesBoundInCurrentFLWORExpression), because those are provided in the Tuples 3. Plus (recursively calling getVariableDependencies) all the Variable Dependencies of the child clause if it exists.
      Returns:
      a map of variable names to dependencies (FULL, COUNT, ...) that this clause needs to obtain from the dynamic context.
    • getOutputTupleVariableNames

      public Set<Name> getOutputTupleVariableNames()
      Returns the output tuple variable names. These variables can be removed from the dependencies of expressions in ascendent (subsequent) clauses, because their values are provided in the tuples rather than the dynamic context object.
      Returns:
      the set of variable names that are bound by descendant clauses.
    • getEvaluationDepthLimit

      public int getEvaluationDepthLimit()
      Returns the limit on how deep the evaluation occurs. If it is 0, the clause ignores its child (this is for join purposes).
      Returns:
      The evaluation depth limit. -1 if none.
    • setEvaluationDepthLimit

      public void setEvaluationDepthLimit(int limit)
      Sets the limit on how deep the evaluation occurs. 0 to stop here.
      Parameters:
      limit - the limit to set. Must be between 0 and getHeight(), inclusive.
    • canSetEvaluationDepthLimit

      public boolean canSetEvaluationDepthLimit(int limit)
      Tells whether it is possible to set the limit on how deep the evaluation occurs. 0 to stop here.
      Parameters:
      limit - the limit to set. Must be between 0 and getHeight(), inclusive.
    • getSubtreeBeyondLimit

      public TupleRuntimePlan getSubtreeBeyondLimit(int limit)
      Returns the clause subtree at the specified offset. The parameter is compatible with setEvaluationDepthLimit, i.e., it returns the subtree right below where the evaluation stops with the same limit.
      Returns:
      The evaluation depth limit. -1 if none.
    • getHeight

      public int getHeight()
      Returns the height of the clause within the current FLWOR expression, i.e., the number of descendant clauses.
      Returns:
      The number of descendant clauses. 0 if it is a starting clause.
    • containsClause

      public abstract boolean containsClause(FLWOR_CLAUSES kind)
      Says whether or not the clause and its descendants include a clause of the specified kind.
      Parameters:
      kind - the kind of clause to test for.
      Returns:
      true if there is one. False otherwise.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • print

      public void print(StringBuilder buffer, int indent)
    • isSparkJobNeeded

      public abstract boolean isSparkJobNeeded()
      Says whether this expression evaluation triggers a Spark job.
      Returns:
      true if the execution triggers a Spark, false otherwise, null if undetermined yet.
    • generateNativeQuery

      public NativeClauseContext generateNativeQuery(NativeClauseContext nativeClauseContext)
      This function generate (if possible) a native spark-sql query that maps the inner working of the iterator
      Specified by:
      generateNativeQuery in interface NativeQueryRuntimePlan
      Parameters:
      nativeClauseContext - context information to generate the native query
      Returns:
      a native clause context with the spark-sql native query to get an equivalent result of the iterator, or [NativeClauseContext.NoNativeQuery] if it is not possible
    • getStaticContext

      public RuntimeStaticContext getStaticContext()
      Returns the runtime static context of the clause.
      Returns:
      the static context of the clause.