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.