Howdy, all --
First, a note that bears saying -- I'm very, *very* excited by BaseX; this is my first use of the database, and I'm already extremely impressed.
My immediate use case centers around the following pair of functions:
declare function local:immediate_requirements($e as element(project)) as element(project)* { doc("inventory.xml")/report/project[ ./classifiers/ivy/publications/artifact/@name = $e/classifiers/ivy/dependencies/dependency/@name ] };
declare function local:requirements($e as element(project)) as element(project)* { let $direct := local:immediate_requirements($e) return $direct | $direct/local:requirements(.) };
However -- while evaluating immediate_requirements() is very fast (on the scale of 72ms for one of the larger project elements in my sample corpus, and a total under 1600ms ms to evaluate for _every_ project element in said corpus), evaluating the recursive requirements() function for even a single top-level project can require as much as two minutes to execute.
Should I be writing this function differently?
My expectation was that, due to XQuery's functional nature, the database should be able to avoid needing to evaluate local:immediate_requirements more than once for a single input element, capping the worst-case execution time not far over the cost of evaluating that single-stage evaluation once over every possible project element in the document; however, true worst-case execution time is obviously far worse.
Thank you very much for any guidance on offer, and for this excellent tool.