Changes

Jump to navigation Jump to search
2,667 bytes added ,  14:40, 16 April 2019
This [[Module Library|XQuery Module]] contains functions for handling ''streamablelazy'' items.
In contrast to conventional standard XQuery items, streamable items may take up much less space, because they only contain 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: * Lazy Base64 binaries:** <code>[[Database Module#db:retrieve|db:retrieve]]</code>** <code>[[Fetch Module#fetch:binary|fetch:binary]]</code>** <code>[[File Module#file:read-binary|file:read-binary]]</code> * Lazy strings:** <code>[[Fetch Module#fetch:text|fetch:text]]</code>** <code>[[File Module#file:read-text|file:read-text]]</code> Some functions are capable of consuming the contents of lazy items in a ''streamable'' fashion: data will not be retrieved until cached, but instead passed on to another target (file, the item is requiredcalling expression, eetc.g). The following streaming functions are currently available: * [[Archive Module]] (most functions)* Conversion Module: <code>[[Conversion Module#convert:binary-to-bytes|convert:binary-to-bytes]]</code>, <code>[[Conversion Module#convert:binary-to-string|convert:binary-to-string]]</code>* Database Module: <code>[[Database Module#db:store|db:store]]</code>* File Module: <code>[[File Module#file:write-binary|file:write-binary]]</code>, <code>[[File Module#file:write-text|file:write-text]] </code> (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: <pre class="brush:xquery">file:write-binary('output.data needs to ', fetch:binary('http://files.basex.org/xml/xmark111mb.zip'))</pre> If lazy items are serialized, they will be serialized or processed by another expressionstreamed as well.
=Conventions=
All functions and errors in this module are assigned to the {{Code|<code><nowiki>http://basex.org/modules/stream}} lazy</nowiki></code> namespace, which is statically bound to the {{Code|streamlazy}} prefix.<br/>All errors are assigned to the {{Code|http://basex.org/errors}} namespace, which is statically bound to the {{Code|bxerr}} prefix.
=Functions=
==streamlazy:materializecache== 
{| width='100%'
|-
| width='90120' | '''Signatures'''|{{Func|streamlazy:materializecache|$items as item ()*|item()*}}<br/>{{Func|lazy:cache|$items as item()*, $lazy as xs:boolean|item()*}}
|-
| '''Summary'''
|Returns a materialized instance Caches the data of the specified lazy {{Code|$itemitems}}.in a sequence:<br />* data of lazy items will be retrieved and cached inside the item.* non-lazy items, or lazy items with cached data, will simply be passed through.* If an item {{Code|$lazy}} is streamableset to {{Code|true()}}, its content caching will be retrieved, and a new item containing its deferred until the data is eventually requested. Streaming will be disabled: Data will always be cached before a stream is returned. OtherCaching is advisable if an item will be processed more than once, nonor if the data may not be available anymore at a later stage.|-streamable items | '''Example'''|In the following example, a file will simply be deleted before its content is returned.To avoid a “file not found” error when serializing the result, the content must be cached:<pre class="brush:xquery">let $file := 'data.txt'let $text := lazy:cache(file:read-text($file))return (file:delete($file), $text)</pre>
|}
==streamlazy:is-streamablelazy== 
{| width='100%'
|-
| width='90120' | '''Signatures'''|{{Func|streamlazy:is-streamablelazy|$item as item()|item()xs:boolean}}
|-
| '''Summary'''
|Checks if whether the specified {{Code|$item}} is streamablelazy.|} ==lazy:is-cached== {| width='100%'|-| width='120' | '''Signatures'''|{{Func|lazy:is-cached|$item as item()|xs:boolean}}|-| '''Summary'''|Checks whether the contents of the specified {{Code|$item}} are cached. The function will always return {{Code|true}} for non-lazy items.
|}
=Changelog=
 
;Version 9.1
 
* Updated: [[#lazy:cache|lazy:cache]]: {{Code|$lazy}} argument added; support for sequences.
 
;Version 9.0
 
* Updated: Renamed from Streaming Module to Lazy Module.
* Added: [[#lazy:is-cached|lazy:is-cached]]
 
;Version 8.0
 
* Updated: [[#stream:materialize|stream:materialize]] extended to sequences.
This module was introduced with Version 7.7.
 
[[Category:XQuery]]
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu