Changes

Jump to navigation Jump to search
993 bytes added ,  14:40, 16 April 2019
This [[Module Library|XQuery Module]] contains functions for handling ''streamablelazy'' items.
In contrast to standard XQuery items, a streamable lazy item contains only a reference to the actual data. The , and the data itself will only be retrieved if it is requested by an expression, or if the item is to be serialized. Hence, a streamable item only uses a few bytespossible errors will be postponed, and no additional memory is will be occupied during serializationby a lazy item as long as its content has not been requested yet.
The following BaseX functions return streamable lazy items:
* Lazy Base64 binaries:** <code>[[Database Module#db:retrieve|db:retrieve]]</code>** <code>[[Fetch Module#fetch:binary|fetch:binary]]</code>* <code>[[Fetch Module#fetch:text|fetch:text]]</code>* <code>[[File Module#file:read-binary|file:read-binary]]</code>* <code>[[File Module#file:read-text|file:read-text]]</code>
Some functions are capable of consuming items in a ''streamable'' fashion* Lazy strings: data will never be cached, but instead passed on to another target (** <code>[[Fetch Module#fetch:text|fetch:text]]</code>** <code>[[File Module#file:read-text|file, the calling expression, etc.). The following streaming functions are currently available:read-text]]</code>
* <code>[[Conversion Module#convertSome functions are capable of consuming the contents of lazy items in a ''streamable'' fashion:binary-data will not be cached, but instead passed on to-bytes|convert:binary-to-bytes]]</code>* <code>[[Database Module#db:store|db:store]]</code>* <code>[[File Module#file:write-binary|file:write-binary]]</code>* <code>[[Fetch Module#file:write-text|another target (file, the calling expression, etc.). The following streaming functions are currently available:write-text]]</code>
* [[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', fetch:binary('http://files.basex.org/xml/xmark111mb.zip'))
</pre>
 
If lazy items are serialized, they will be streamed 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 />* if an item is streamable, its value data of lazy items will be retrieved, and a new cached inside the item containing the value will be returned.* other, non-streamable lazy items , or lazy items with cached data, will simply be passed through.Materialization * If {{Code|$lazy}} is set to {{Code|true()}}, caching will be deferred until the data is helpful if eventually requested. Streaming will be disabled: Data will always be cached before a value stream is returned.Caching is to advisable if an item will be processed more than once. It is even mandatory , or if the data may not be available anymore at a value will be invalidated before it is processed (see the example below)later stage.
|-
| '''Example'''
|In the following example, a file will be deleted before its content is returned. To avoid a "file “file not found" found” errorwhen serializing the result, the content will first must be materializedcached:
<pre class="brush:xquery">
let $file := 'data.txt'
let $data text := streamlazy:materializecache(file:read-text($file))return (file:delete($file), $datatext)
</pre>
|}
==streamlazy:is-streamablelazy== {| width='100%'|-| width='120' | '''Signatures'''|{{Func|lazy:is-lazy|$item as item()|xs:boolean}}|-| '''Summary'''|Checks whether the specified {{Code|$item}} is lazy.|} ==lazy:is-cached== 
{| width='100%'
|-
| width='90120' | '''Signatures'''|{{Func|streamlazy:is-streamablecached|$item as item()|item()xs:boolean}}
|-
| '''Summary'''
|Checks if whether the contents of the specified {{Code|$item}} is streamableare 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