Pull processing

The experimental facility for pull processing, first introduced in Saxon 8.3, has been significantly enhanced. It should still be regarded as experimental. It is now possible to execute a query or transformation in "lazy construction" mode. This means that if the query constructs a tree, the tree is not actually instantiated in memory: instead, the application may read the events comprising the tree (startElement, endElement, and so on) using the PullProvider interface directly.

There is a new option called LazyConstruction defined in the Configuration. By default, this is switched off. If switched on, a document or element constructor instruction that is evaluated in "pull" mode is evaluated lazily, so the tree is not immediately constructed. Some operations on the resulting virtual node (for example, use of any path expression) will cause the construction to take place, but other operations are possible without ever constructing the node.

The option can be switched on from the Java API for both XSLT and XQuery. For XQuery it can also be switched on from the command line using the -pull option.

The performance benefits of this mode have yet to be fully assessed. For most queries, it has little effect. There seem to be some queries that benefit greatly, but others where the performance is worse.