Hi,
Nice work. I wonder if the BaseX query optimizer could not spot the
idioms for the set operations and rewrite the query to something
similar for the cases:

distinct-values(($arg1, $arg2))
distinct-values($arg1[.=$arg2])
distinct-values($arg1[not(.=$arg2)])


>From : http://www.xqueryfunctions.com/xq/c0015.html#c0075

Regards
/Andy

On Wed, Sep 25, 2013 at 8:04 PM, Arve Gengelbach <a...@basex.org> wrote:
> Hej Arto,
>
> One can even improve your map2 by using the [Simple map operator].
>
> declare function local:difference-map-2-excl($a, $b) {
>   let $m2 := map:new($b ! map:entry(., true()))
>   return $a ! (if($m2(.)) then () else .)
> };
>
> - map 299.47 ms
> - map2 290.96 ms
> - map2 + ! 128.25 ms
>
> cheers
> Arve
>
> [Simple map operator] http://www.w3.org/TR/xquery-30/#id-map-operator
>
> Am 25.09.13 10:41 schrieb Arto Viitanen:
>>
>>
>> -----Original Message-----
>> From: Arve Gengelbach [mailto:a...@basex.org]
>> Sent: 25. syyskuuta 2013 9:08
>> To: Arto Viitanen
>> Cc: basex-talk@mailman.uni-konstanz.de
>> Subject: Re: [basex-talk] Set Operator Examples
>>
>> Hej Arto,
>>
>> just being interested:
>> How does it compare to a FLOWR expression?
>>
>> declare function local:difference-flowr($a, $b) {
>>   for $x in $a
>>   where not($x = $b)
>>   group by $x
>>   return $x[1]
>> };
>>
>> pred 51787.06 ms
>> map 485.16 ms
>> map2 325.09 ms
>> flowr 45275.97 ms
>>
>> --
>> Arto Viitanen
>> Finland
>>
> _______________________________________________
> BaseX-Talk mailing list
> BaseX-Talk@mailman.uni-konstanz.de
> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
_______________________________________________
BaseX-Talk mailing list
BaseX-Talk@mailman.uni-konstanz.de
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk

Reply via email to