public class ForEachGroupAdjunct extends StreamingAdjunct
At present streamed grouping always starts by copying the selected nodes, so the memory required is limited by the maximum size of these nodes. (However, Saxon does not take advantage of the fact that the nodes are copied in doing the streamability analysis: for example, the grouping key for the streamed nodes must be a motionless expression). Hopefully this limitation will be removed at some stage.
Grouping works only if the new 3.0 syntax for binding a grouping variable is used; it is not possible to use the 2.0 current-group() function, because of the impossibility of static analysis.
The "streaming route" starts with a CopyOfWatch. This recognizes the elements selected in the select expression of the for-each-group instruction, and feeds these into a GroupingFeed. The GroupingFeed examines successive items and decides when to start and end groups. This is done by calling the open() and close() methods of the Feed for the xsl:for-each-group instruction itself.
Constructor and Description |
---|
ForEachGroupAdjunct() |
Modifier and Type | Method and Description |
---|---|
WatchMaker |
getWatchMaker(Expression expression,
List<String> reasonsForFailure)
Get a WatchMaker, a factory class that creates a Watch to evaluate this expression
in streaming mode.
|
getConfiguration, getFeedMaker, makeStreamingAdjunct, setConfiguration
public WatchMaker getWatchMaker(Expression expression, List<String> reasonsForFailure) throws XPathException
StreamingAdjunct
Expression.WATCH_METHOD
getWatchMaker
in class StreamingAdjunct
expression
- the expression to be evaluated in streaming modereasonsForFailure
- if non-null, this is a list supplied by the caller which will be populated
by the callee with one or more messages indicating why it was not possible to allocate a WatchMaker.
Normally if the list is non-empty on return, the return value from the method will be null.XPathException
- in the event of a failureCopyright (c) 2004-2013 Saxonica Limited. All rights reserved.