Class Clause

  • Direct Known Subclasses:
    ForClause, LetClause, OrderByClause, TraceClause, WhereClause

    public abstract class Clause
    extends java.lang.Object
    A "Clause" refers specifically to one of the clauses of a FLWOR expression, for example the "for" clause, the "let" clause, the "where" or "order by" clause. (The "return" clause, however, is not modelled as a Clause).
    • Constructor Detail

      • Clause

        public Clause()
    • Method Detail

      • getLocationId

        public int getLocationId()
        Get the location ID, which can be used in conjunction with a LocationProvider to determine the system ID and line number of the clause
        Returns:
        the location ID
      • setLocationId

        public void setLocationId​(int locationId)
        Set the location ID, which can be used in conjunction with a LocationProvider to determine the system ID and line number of the clause
        Parameters:
        locationId - the location ID
      • copy

        public abstract Clause copy()
        Create a copy of this clause
        Returns:
        the copied clause
      • typeCheck

        public void typeCheck​(ExpressionVisitor visitor)
                       throws XPathException
        Type-check any expression contained within this clause
        Parameters:
        visitor - the ExpressionVisitor, providing access to static context information
        Throws:
        XPathException - if any error is detected
      • getPullStream

        public abstract TuplePull getPullStream​(TuplePull base,
                                                XPathContext context)
        Get a pull-mode tuple stream that implements the functionality of this clause, taking its input from another tuple stream which this clause modifies
        Parameters:
        base - the input tuple stream
        context - the dynamic evaluation context
        Returns:
        the output tuple stream
      • getPushStream

        public abstract TuplePush getPushStream​(TuplePush destination,
                                                XPathContext context)
        Get a push-mode tuple stream that implements the functionality of this clause, supplying its output to another tuple stream
        Parameters:
        destination - the output tuple stream
        context - the dynamic evaluation context
        Returns:
        the push tuple stream that implements the functionality of this clause of the FLWOR expression
      • processSubExpressions

        public abstract void processSubExpressions​(ExpressionProcessor processor)
                                            throws XPathException
        Process the subexpressions of this clause
        Parameters:
        processor - the expression processor used to process the subexpressions
        Throws:
        XPathException - if any error is detected
      • explain

        public abstract void explain​(ExpressionPresenter out)
        Diagnostic print of expression structure. The abstract expression tree is written to the supplied output destination.
        Parameters:
        out - the expression presenter used to display the structure
      • getRangeVariables

        public LocalVariableBinding[] getRangeVariables()
        Get the variables bound by this clause
        Returns:
        the variable bindings
      • gatherVariableReferences

        public void gatherVariableReferences​(ExpressionVisitor visitor,
                                             Binding binding,
                                             java.util.List<VariableReference> refs)
        Build a list of all references to a variables declared in this clause
        Parameters:
        visitor - the expression visitor
        binding - a variable declared in this clause
        refs - the list of variable references, initially empty, to which the method will append
      • containsNonInlineableVariableReference

        public boolean containsNonInlineableVariableReference​(Binding binding)
        Determine whether the clause contains a reference to a local variable binding that cannot be inlined
        Parameters:
        binding - the binding for the local variable in question
        Returns:
        true if this clause uses the variable in a way that does not permit inlining
      • refineVariableType

        public void refineVariableType​(ExpressionVisitor visitor,
                                       java.util.List<VariableReference> references,
                                       Expression returnExpr)
        Supply improved type information to the expressions that contain references to the variables declared in this clause
        Parameters:
        visitor - the expression visitor
        references - the list of variable references
        returnExpr - the expression in the return clause
      • getClauseKey

        public abstract int getClauseKey()
        Get a keyword identifying what kind of clause this is
        Returns:
        the kind of clause