[XQuery] Sharing a value between expressions?

Wednesday, 16 January 2013 · 3 messages
JK
Johannes Krampf16 Jan 2013 11:31 #
Hello, I would like to assign a sequence to a variable and then share this variable between two expressions. Particularly I want to create a list of documents to delete from the db and then return the number of deleted documents. Code sketch of what I am trying:
let $nodes := [...]

let $base-uris := for $node in $nodes
return base-uri($node)

let $distinct-base-uris := distinct-values($base-uris)

for $base-uri in $distinct-base-uris
return db:delete("db", $base-uri),
return count($distinct-base-uris) --- The problem with this approach is that $distinct-base-uris is local to the first expressions and not in scope for the count call. I tried to just duplicate all code, but then I get an error message that "no updating expression [is] allowed". Is there any way to achieve what I want and put my value in a scope accessible by both expressions? Regards, Johannes
LW
Leo Wörteler16 Jan 2013 15:44 #
Hi Johannes,
Quoted text · Johannes Krampf · 5 lines
Am 16.01.2013 11:31, schrieb Johannes Krampf: > I would like to assign a sequence to a variable and then share this > variable between two expressions. Particularly I want to create a list > of documents to delete from the db and then return the number of deleted > documents.
[...]
Quoted text · Johannes Krampf · 2 lines
> Is there any way to achieve what I want and put my value in a scope > accessible by both expressions?
try this:
  let $nodes := ...,
      $base-uris := $nodes/base-uri(),
      $distinct-base-uris := distinct-values($base-uris)
  return (
    for $base-uri in $distinct-base-uris
    return db:delete("db", $base-uri),
    db:output(count($distinct-base-uris))
  )
Hope that helps, cheers, Leo
JK
Johannes Krampf16 Jan 2013 17:39 #
Hi Leo, this worked like a charm, thank you! (And is also documented in the wiki, shame on me for not seeing this.) - Johannes
Quoted text · Leo Wörteler · 26 lines
On 01/16/2013 03:44 PM, Leo Wörteler wrote: > Hi Johannes, > > Am 16.01.2013 11:31, schrieb Johannes Krampf: >> I would like to assign a sequence to a variable and then share this >> variable between two expressions. Particularly I want to create a list >> of documents to delete from the db and then return the number of deleted >> documents. > [...] >> Is there any way to achieve what I want and put my value in a scope >> accessible by both expressions? > > try this: > > let $nodes := ..., > $base-uris := $nodes/base-uri(), > $distinct-base-uris := distinct-values($base-uris) > return ( > for $base-uri in $distinct-base-uris > return db:delete("db", $base-uri), > db:output(count($distinct-base-uris)) > ) > > Hope that helps, > cheers, Leo >

⚡Generated with XQuery