[xquery-talk] flowrrr - how to structure a function?
dflorescu at mac.com
Wed Oct 18 15:31:39 PDT 2006
That's the kind of use case that the scripting extension of XQuery
(XQueryP) that Jonathan was mentioning here is supposed to solve.
This is not an isolated use case, that's a more and more frequent use
case scenario, and the current XQuery 1.0, nor the Update spec do
no good for it.
The scripting extension of XQuery should help though, it applies the
side-effects right away and guarantees a deterministic evaluation order
for subexpressions with side-effects (among other things).
On Oct 18, 2006, at 1:56 PM, Martin Probst wrote:
>> Martin Probst wrote:
>>> I think Wolfgang's function library in eXist
>>> (http://demo.exist-db.org/xquery/functions.xq) also includes
>>> functions to create user sessions, this might be more difficult to
>>> make side-effect free. I.e. if session:create(),
>>> session:set-current-user() and session:invalidate() return values if
>>> called in the right order, but give errors if called in the wrong
>>> order, it's much more difficult because you need to provide access
>>> to those values. I'm not picking on you Wolfgang, I rather think
>>> your library is a good example of what one does need in webapps.
>> All that would need to be done to make functions like that
>> side-effect free is to postpone the actual changes until after the
>> query has exited. You would then only have to define what would
>> happen if two such postponed changes contradicted each other. This is
>> the approach that XQuery Update seems to be taking.
> I think that's not enough - if your function has a side effect _and_
> returns a value (based on the side effect), you cannot postpone
> evaluation like in XQuery Updates, because the user needs his values
> right now. Also you'd still need to ensure correct call order in some
> way, which is (at least at the moment) not relevant to XQuery Updates.
> Martin Probst
> X-Hive Corporation
> martin at x-hive.com
> talk at x-query.com
More information about the talk