On Thu, Jul 17, 2008 at 03:14:41PM +0200, Andreas Meinl wrote:
On 17.07.2008, at 12:52, Stefan Manegold wrote:
My second question is that I cannot execute this kind of queries, which runs well in eXist and Sedna:
<average> { fn:round(fn:avg( for $doc in fn:collection("samples") return $doc/example/@sum )) } </average>
For MonetDB/XQuery I have to pull out pf:collection and add a second return statement:
let $col := pf:collection("samples")/child::document-node() return <average> { fn:round(fn:avg( for $doc in $col return $doc/example/@sum )) } </average>
Why can't you use "pf:collection("samples")/child::document-node()" in the for loop? Do you get any error? If so which?
When I use pf:collection in the for loop, I get this output:
xquery><average> { more>fn:round(fn:avg( more>for $doc in pf:collection("samples")/child::document-node() more>return $doc/example/@sum more>)) } </average> more><> MAPI = monetdb@localhost:50000 QUERY = <average> { ERROR = !parse error: syntax error, unexpected /, expecting QName on line 5, column 9 (next token is `/') !parse error: XQuery parsing failed xquery>
The expected result is "<average>12345</average>" like it is in eXist and Sedna.
wouldn't
<average> { fn:round(fn:avg( pf:collection("samples")//example/@sum )) } </average>
do the same job? --- that compiles fine with me ...
Indeed, this version seems to work - but not, when I replace "//" by "/child::document-node()/". Then I get the same error message:
xquery><average> { more>fn:round(fn:avg( more>pf:collection("samples")/child::document-node()/example/@sum more>)) } </average> more><> MAPI = monetdb@localhost:50000 QUERY = <average> { ERROR = !parse error: syntax error, unexpected /, expecting QName on line 4, column 9 (next token is `/') !parse error: XQuery parsing failed xquery>
The first version (the one with the "let" statement) works fine even with "/child::document-node()/". And there are no further differences... So why is "/child::document-node()/" working outside the "<average>" element, but not inside?
I honestly don't know. Could you please file a bug report via the SF bug tracker to document it? Then we / "someone" will have a look at it once there is time ...
(As performance matters I want to avoid the double slashes.)
I see --- what about the following to also avoid the for loop (although that should not make too much of a performance difference thanks to loop-lifting in MonetDB/XQuery): let $sums := pf:collection("samples")/child::document-node()/example/@sum return <average> { fn:round(fn:avg( $sums )) } </average> Stefan
Regards,
Andreas Meinl
------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ MonetDB-users mailing list MonetDB-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/monetdb-users
-- | Dr. Stefan Manegold | mailto:Stefan.Manegold@cwi.nl | | CWI, P.O.Box 94079 | http://www.cwi.nl/~manegold/ | | 1090 GB Amsterdam | Tel.: +31 (20) 592-4212 | | The Netherlands | Fax : +31 (20) 592-4312 |