Difference between revisions of "Update Module"
Jump to navigation
Jump to search
Andy Bunce (talk | contribs) (update:for-each sig add comma) |
m (Text replacement - "<syntaxhighlight lang="xquery">" to "<pre lang='xquery'>") |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 25: | Line 25: | ||
| | | | ||
* Creates a new database with an initial document and adds a document to an existing database. | * Creates a new database with an initial document and adds a document to an existing database. | ||
− | < | + | <pre lang='xquery'> |
declare %updating function local:update( | declare %updating function local:update( | ||
$database as xs:string, | $database as xs:string, | ||
Line 35: | Line 35: | ||
local:update('new-db', 'doc.xml', db:create#2), | local:update('new-db', 'doc.xml', db:create#2), | ||
local:update('existing-db', 'doc.xml', db:add#2) | local:update('existing-db', 'doc.xml', db:add#2) | ||
− | </ | + | </pre> |
|} | |} | ||
Line 45: | Line 45: | ||
|<pre>update:for-each( | |<pre>update:for-each( | ||
$input as item()*, | $input as item()*, | ||
− | $action as function(item()) | + | $action as function(item()) as item()* |
) as empty-sequence()</pre> | ) as empty-sequence()</pre> | ||
|- valign="top" | |- valign="top" | ||
Line 54: | Line 54: | ||
| | | | ||
* Creates two databases: | * Creates two databases: | ||
− | < | + | <pre lang='xquery'> |
let $names := ('db1', 'db2') | let $names := ('db1', 'db2') | ||
return update:for-each($names, db:create#1) | return update:for-each($names, db:create#1) | ||
− | </ | + | </pre> |
|} | |} | ||
Line 68: | Line 68: | ||
$input1 as item()*, | $input1 as item()*, | ||
$input2 as item()*, | $input2 as item()*, | ||
− | $action as function(item()) | + | $action as function(item()) as item()* |
) as empty-sequence()</pre> | ) as empty-sequence()</pre> | ||
|- valign="top" | |- valign="top" | ||
Line 77: | Line 77: | ||
| | | | ||
* Renames nodes in an XML snippets: | * Renames nodes in an XML snippets: | ||
− | < | + | <pre lang='xquery'> |
copy $xml := <xml><a/><b/></xml> | copy $xml := <xml><a/><b/></xml> | ||
modify update:for-each-pair( | modify update:for-each-pair( | ||
Line 88: | Line 88: | ||
) | ) | ||
return $xml | return $xml | ||
− | </ | + | </pre> |
|} | |} | ||
Line 106: | Line 106: | ||
| | | | ||
* Inserts attributes into a document: | * Inserts attributes into a document: | ||
− | < | + | <pre lang='xquery'> |
copy $doc := <xml/> | copy $doc := <xml/> | ||
modify update:map-for-each( | modify update:map-for-each( | ||
Line 117: | Line 117: | ||
} | } | ||
) | ) | ||
− | return $doc</ | + | return $doc</pre> |
|} | |} | ||
Line 149: | Line 149: | ||
|- valign="top" | |- valign="top" | ||
| '''Summary''' | | '''Summary''' | ||
− | |Returns the items that have been cached by {{Function||update:output}}. The output cache can optionally be {{Code|$reset}}. The function can be used to check which items will eventually be returned as the result of an updating function.<br/>This function is '' | + | |Returns the items that have been cached by {{Function||update:output}}. The output cache can optionally be {{Code|$reset}}. The function can be used to check which items will eventually be returned as the result of an updating function.<br/>This function is ''nondeterministic'': It will return different results before and after items have been cached. The function can be useful for writing [[Unit Module|unit tests]]. |
|} | |} | ||
Latest revision as of 18:36, 1 December 2023
This XQuery Module provides additional functions for performing updates and returning results in updating expressions.
Contents
Conventions[edit]
All functions in this module are assigned to the http://basex.org/modules/update
namespace, which is statically bound to the update
prefix.
Except for update:output-cache
, all functions are updating and thus comply to the XQuery Update constraints.
Updates[edit]
update:apply[edit]
Signature | update:apply( $function as function(*), $arguments as array(*) ) as empty-sequence() |
Summary | The updating variant of fn:apply applies the specified updating $function to the specified $arguments .
|
Examples |
declare %updating function local:update(
$database as xs:string,
$path as xs:string,
$function as %updating function(item(), xs:string) as empty-sequence()
) as empty-sequence() {
update:apply($function, [ $database, $path ])
};
local:update('new-db', 'doc.xml', db:create#2),
local:update('existing-db', 'doc.xml', db:add#2)
|
update:for-each[edit]
Signature | update:for-each( $input as item()*, $action as function(item()) as item()* ) as empty-sequence() |
Summary | The updating variant of fn:for-each applies the specified updating $action to every item of $input .
|
Examples |
let $names := ('db1', 'db2')
return update:for-each($names, db:create#1)
|
update:for-each-pair[edit]
Signature | update:for-each-pair( $input1 as item()*, $input2 as item()*, $action as function(item()) as item()* ) as empty-sequence() |
Summary | The updating variant of fn:for-each-pair applies the specified updating $action to the successive pairs of items of $input1 and $input2 . Evaluation is stopped if one sequence yields no more items.
|
Examples |
copy $xml := <xml><a/><b/></xml>
modify update:for-each-pair(
('a', 'b'),
('d', 'e'),
function($source, $target) {
for $e in $xml/*[name() = $source]
return rename node $e as $target
}
)
return $xml
|
update:map-for-each[edit]
Signature | update:map-for-each( $map as map(*), $action as function(xs:anyAtomicType, item()*) as item()* ) as item()* |
Summary | The updating variant of map:for-each applies the specified $action to every key/value pair of the supplied $map and returns the results as a sequence.
|
Examples |
copy $doc := <xml/>
modify update:map-for-each(
map {
'id': 'id0',
'value': 456
},
function($key, $value) {
insert node attribute { $key } { $value } into $doc
}
)
return $doc
|
Output[edit]
update:output[edit]
Signature | update:output( $input as item()* ) as empty-sequence() |
Summary | This function can be used if MIXUPDATES is not enabled, and if values need to be returned within an updating expression: The supplied $input will be cached and returned at the very end, i.e., after all updates on the pending update list have been processed. If one of the supplied items is affected by an update, a copy will be created and cached instead.
|
Examples |
|
update:cache[edit]
Signature | update:cache( $reset as xs:boolean? := false() ) as item()* |
Summary | Returns the items that have been cached by update:output . The output cache can optionally be $reset . The function can be used to check which items will eventually be returned as the result of an updating function.This function is nondeterministic: It will return different results before and after items have been cached. The function can be useful for writing unit tests. |
Changelog[edit]
- Version 9.3
update:cache
:$reset
parameter added.
- Version 9.1
update:output
: Maps and arrays can be cached if they contain no persistent database nodes or function items.
- Version 9.0
- Updated: db:output renamed to
update:output
, db:output-cache renamed toupdate:cache
This module was introduced with Version 9.0.