Hi Andy, > I thought you say something like this :-) > One thing I don't understand is how the existing facilities handle the > current looseness of sequentiality. > > For example I can mix Xquery updates and document db:replace or document > db:add or I could use the http module to do a REST interface create request > in the middle of a larger Xquery script
I have update our documentation on XQuery Update; it now lists all update primitives in the order they will be executed [1]. Similar to util:eval/evil(), http:send-request() will be evaluated in place, which means you can easily create deadlock situations. Just one more reason why those functions should be handled with care, or completely avoided. But I know we still need a nice alternative to make things handier. Christian [1] http://docs.basex.org/wiki/XQuery_Update#Pending_Update_List > > > > > On Wed, May 23, 2012 at 1:59 PM, Andreas Weiler > <[email protected]> wrote: >> >> You still could use the Java Bindings. >> >> -- Andreas >> >> Am 23.05.2012 um 14:23 schrieb Christian Grün: >> >> >> I sometimes find myself, in code, wanting to create a database, or more >> >> specifically test if a database exists and create it if does not. The >> >> database module appears not have functions to create (or delete >> >> databases). >> >> Is this a deliberate design decision? >> > >> > Indeed it is; but we are still looking for a good solution to fill >> > this obvious gap. Even if databases are pretty light-weight entities >> > in BaseX, the creation of a new database within an XQuery expression >> > may trigger numerous side effects related to other database >> > operations. The main reason for that is the functional nature of >> > XQuery and the "pending update list" of XQuery Update: all updating >> > commands will become effective after the query itself has been >> > evaluated. However, commands like db:add() or db:delete() commands >> > will (currently) only end up on the list if the addressed database >> > already exists. Another example: db:create() could overwrite a >> > database that already existed, and some commands would possibly refer >> > to the old instance, while other updating commands would access the >> > new one. >> > >> > One general solution to this challenge would be the XQuery Scripting >> > Extension [1], which allows you to execute commands sequentially >> > (i.e., in an imperative manner). XQSE is definitely on our list, but >> > which will require considerable time to realize -- mainly because a >> > straightforward implementation would sabotage many of the existing >> > functional optimizations in the code (some of the functional and >> > imperative optimizations are even diametrical). >> > >> > In summary, I cannot give a satifsying answer yet except for the >> > advice to use the BaseX commands, REST or XQJ (via >> > XQExpression.executeCommand()), but I'm very open to ideas and >> > proposals how to tackle this challenge. >> > >> > Christian >> > >> > [1] http://www.w3.org/TR/xquery-sx-10/ >> > _______________________________________________ >> > BaseX-Talk mailing list >> > [email protected] >> > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk >> > _______________________________________________ BaseX-Talk mailing list [email protected] https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk

