Dear Christian,
Thanks for the suggestion, the map is certainly cleaner looking than the switch 
statement.  

Is support for updating statements in an eval something that would be 
considered for the future, for example by postponing the application of the 
updates to after the calling function finishes?

Cheers,
-carl



On Feb 22, 2014, at 4:12 PM, Christian Grün <[email protected]> wrote:

> Hi Carl,
> 
>> As  I would ideally like to be able to manage the associations
>> between UUID and function names dynamically, I do not see immediately how to
>> apply your suggestion.
> 
> Would sth. like the following code help?
> 
>  declare variable $FUNCTIONS := map {
>    '69bfbe73-23ac-4033-b60b-6672fd67b937': function() { 12345 },
>    '0d22d6a8-035b-46bf-a396-00471c840a08': function() { 67890 }
>  };
> 
>  let $uuid := '69bfbe73-23ac-4033-b60b-6672fd67b937'
>  return $FUNCTIONS($uuid)()
> 
> You could as well move this map, or the functions declared inside,
> into another module, etc.
> 
>> So maybe my question is, how evil is evil?
> 
> One drawback of using xquery:eval (and xquery:evaluate) is that your
> code will only be evaluated at runtime, which is why the compiler has
> no chance to detect syntax and type errors at compile time. This is
> also the reason why updates operations are not allowed inside
> xquery:eval, because an updating eval query may change nodes that are
> referenced in the calling query.
> 
> However, if you know exactly what your code is doing, the xquery:eval
> function won't cause any trouble (this is also the reason why we are
> offering the functions at all... And it may even be officially
> introduced with XQuery 3.1).
> 
> Christian
> 
> 
>> On Feb 22, 2014, at 11:24 AM, Christian Grün <[email protected]>
>> wrote:
>> 
>> Hi Carl,
>> 
>> it would be generally possible to optimize the current implementation
>> of function-lookup and related reflective functions, but I think it
>> will take us some more time.
>> 
>> Instead, I rather recommend you to use function items, because these
>> will always give you better performance and are less error-prone (they
>> can be optimized much better than function calls based on string
>> references).
>> 
>> I'm not sure how your complete code looks like (and it would probably
>> be too complex to serve as example here), but the following code might
>> give you a hint how this could look like:
>> 
>> let $add := function($a) { $a + $a }
>> let $multiply := function($a) { $a * 2 }
>> for $f in ($add, $multiply)
>> return $f(2)
>> 
>> If you have already worked with function items... Sorry for teaching ;)
>> 
>> Christian
>> 
>> 
>> 
>> On Fri, Feb 21, 2014 at 5:06 PM, Carl Leitner <[email protected]> wrote:
>> 
>> Hi,
>> I noticed a significant performance degradation in the function-lookup
>> method introduced at:
>> 
>> https://github.com/BaseXdb/basex/commit/4aeb4bdc74d980b4c8f2e27546d21fdc1ebaeb77
>> 
>> Where as at: b8b3dd2bee205303aeab3e8a0967b371a2ad7ef7 I have:
>> 
>> xquery import module namespace csd_bsq =
>> "https://github.com/his-interop/openinfoman/csd_bsq"; at
>> "/Users/litlfred/pulsar_cats/openinfoman/repo/csd_base_stored_queries.xqm";
>> let $r:= function-lookup(xs:QName('csd_bsq:facility_search'),2) return ()
>> 
>> Query executed in 22.57 ms.
>> 
>> At 4aeb4bdc74d980b4c8f2e27546d21fdc1ebaeb77 I have:
>> 
>> xquery import module namespace csd_bsq =
>> "https://github.com/his-interop/openinfoman/csd_bsq"; at
>> "/Users/litlfred/pulsar_cats/openinfoman/repo/csd_base_stored_queries.xqm";
>> ()
>> 
>> Query executed in 17.48 ms.
>> 
>> xquery import module namespace csd_bsq =
>> "https://github.com/his-interop/openinfoman/csd_bsq"; at
>> "/Users/litlfred/pulsar_cats/openinfoman/repo/csd_base_stored_queries.xqm";
>> let $r:= xs:QName('csd_bsq:facility_search') return ()
>> 
>> Query executed in 20.44 ms.
>> 
>> xquery import module namespace csd_bsq =
>> "https://github.com/his-interop/openinfoman/csd_bsq"; at
>> "/Users/litlfred/pulsar_cats/openinfoman/repo/csd_base_stored_queries.xqm";
>> let $r:= function-lookup(xs:QName('csd_bsq:facility_search'),2) return ()
>> 
>> Query executed in 716.18 ms.
>> 
>> Any suggestions on how to avoid this?
>> 
>> Thanks so much.
>> 
>> Cheers,
>> -carl
>> 
>> 
>> 
>> _______________________________________________
>> 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

Reply via email to