# Package com.saxonica.expr.flwor

This package contains classes responsible for evaluation of FLWOR expressions, in particular, those clauses of FLWOR expressions that are not supported in Saxon-HE.

See: Description

- Class Summary
  Class | Description
  --- | ---
  CountClause | A "count" clause in a FLWOR expression
  CountClausePull | A tuple stream that implements a "count" clause in an XQuery 3.0 FLWOR expression
  CountClausePush | A tuple stream in push mode that implements a "count" clause in an XQuery 3.0 FLWOR expression
  GroupByClause | This class represents an "group by" clause in a FLWOR expression
  GroupByClause.ObjectToBeGrouped | Inner class representing the contents of a tuple from the pre-grouping tuple stream; a set of such objects consitutes a group.
  GroupByClausePull | Represents the tuple stream delivered by an "group by" clause.
  GroupByClausePush | Represents the tuple stream delivered by an "group by" clause.
  WindowClause | Implements an XQuery 3.0 sliding or tumbling window clause within a FLWOR expression
  WindowClause.Window | Information about a window: the items making up the window, as well as the variables relating to the start and end of the window, and the status of the winoow in relation to the processing of the current input sequence.
  WindowClausePull | Implement a sliding or tumbling window clause of a FLWOR expression in tuple-pull mode.
  WindowClausePush | Implement a sliding or tumbling window clause of a FLWOR expression in tuple-push mode.

## Package com.saxonica.expr.flwor Description

This package contains classes responsible for evaluation of FLWOR expressions, in particular, those clauses of FLWOR expressions that are not supported in Saxon-HE.

FLWOR expressions are implemented as a pipeline of clauses, much as described in the specification. The pipeline can be evaluated in push or pull mode: in push mode, the supplier of tuples activates the consumer of tuples when a tuple is ready to be processed, while in pull mode, the consumer of tuples calls the supplier to request the next tuple. In both cases the "tuple" is not actually passed as an argument or result of this call, but is represented by the state of local variables in the XPathContext stack on completion of the call. The only time tuples are represented as real objects is when the processing is not pipelined, for example when tuples need to be sorted or grouped.

Simple "for" and "let" expressions do not use this mechanism: instead, they are compiled to a ForExpression or LetExpression.

Michael H. Kay
Saxonica Limited
28 November 2011

Copyright (c) 2004-2013 Saxonica Limited. All rights reserved.