This XQuery Module contains functions for handling lazy items.
In contrast to standard XQuery items, a lazy item contains a reference to the actual data, and the data itself will only be retrieved if it is requested. Hence, possible errors will be postponed, and no memory will be occupied by a lazy item as long as its content has not been requested yet.
The following BaseX functions return lazy items:
Some functions are capable of consuming the contents of lazy items in a streamable fashion: data will not be cached, but instead passed on to another target (file, the calling expression, etc.). The following streaming functions are currently available:
- Archive Module (most functions)
- Conversion Module:
- Database Module:
- File Module:
file:write-text(if no encoding is specified)
- Hashing Module (all functions)
The XQuery expression below serves as an example on how large files can be downloaded and written to a file with constant memory consumption:
If lazy items are serialized, they will be streamed as well.
All functions and errors in this module are assigned to the
http://basex.org/modules/lazy namespace, which is statically bound to the
|Summary||Caches the data of lazy |
Caching is advisable if an item will be processed more than once, or if the data may not be available anymore at a later stage.
|Example||In the following example, a file will be deleted before its content is returned. To avoid a “file not found” error when serializing the result, the content must be cached:
let $file := 'data.txt' let $text := lazy:cache(file:read-text($file)) return (file:delete($file), $text)
|Summary||Checks whether the specified |
|Summary||Checks whether the contents of the specified |
- Version 9.1
- Updated: lazy:cache:
$lazyargument added; support for sequences.
- Version 9.0
- Updated: Renamed from Streaming Module to Lazy Module.
- Added: lazy:is-cached
- Version 8.0
- Updated: stream:materialize extended to sequences.
This module was introduced with Version 7.7.