[Monetdb-developers] [XQ] Mixing update/docmgmt/query

Jan Rittinger rittinge at in.tum.de
Tue Mar 18 15:09:07 CET 2008

On 03/18/2008 02:43 PM, Keulen, M. van (Maurice) wrote with possible 
> Hi,
> I know that the XQUF prohibits it, but for writing robust functions, it 
> is often necessary to mix query and update/docmgmt functionality. Some 
> examples:

Hi Maurice,

I don't think what you suggest is necessary. If you want to query with 
side effects -- which is certainly not what XQuery was initially 
introduced for -- and you want to simulate XQueryP then you can *always* 
use updating queries and return your results in a special result document.

>     * Expression that queries/updates document, but if the document does
>       not exist, adds an empty version of it:
>       let $name := "foo.xml"
>       let $emptydoc := <root/>
>       let $doc := if (empty(pf:documents()[.=$name])) then
>       (put($emptydoc,$name),$emptydoc) else doc("foo.xml")
>       return $doc//bar

Here you expect, that the document management stuff is done just in time 
and thus with side effects! Your query fails if the document management 
stuff is done after the query part.

>     * Expression that adds to a log-file:
>       let $log := doc("log.xml")
>       let $expr := ...some expression...
>       return (do insert <entry>...{$expr}...<entry> as last into $log,$expr)

You can also return a ``nested'' sequence and query the result to split 
up your query result and the log files. In my eyes you once more try to 
``cheat'' to have more than a single result stream.


Jan Rittinger
Database Systems
Technische Universität München (Germany)

More information about the developers-list mailing list