Hi --I'm using 8.4.4.So I'm got a 15 MiB XML file . It consists of a bunch of definitions, which reference other definitions in the same file. It's not guaranteed to not be circular in the general case but I expect it isn't in my particular use case. (And I've stuck a "don't get too deep" check in anyway, which is currently sitting at 1 in the hopes that wouldn't blow up.)The idea is to find the paths to some particular values by started at those values and climbing up the references until a magic "this is the top of a chain of references" point is reached. (Which can be detected via a pattern in the name of the definition.)I stuffed the things I expect to care about into maps, since that way I process it once, and can hopefully reference it thereafter.The downside is that the stack dies instantly when I attempt to recurse up the (virtual, rather than XML-document-actual) tree. (I've never seen BaseX run the query plan along the bottom bar in lieu of an error message before.)I've attached the full query info. I can't attach the data because it's somebody else's. (entry has relationship children; an entry describes an XSD schema, and a relationship element describes (possibly through reference to another entry element than its ancestor) either a complex type or a simple type that goes in that schema. There's only one entry with a given @name but many relationship elements may reference it. As a result, the scope of what's being climbed expands rapidly; this first test "do one name" turns into 20 names on the first pass. )The query looks like:declare function local:climb($relByType as map(*), $built as xs:string*, $name as xs:string){for $path in $relByType($name)return if (matches($path,'^\p{Lu}{4}_IN') or count($path) gt 1)then ($name,$built)else local:climb($relByType,($name,$built),$path)};let $relationships as element(relationship)+ := //relationship[@type]let $relByType as map(*) := map:merge(for $x in $relationshipslet $key := $x/@typegroup by $keyreturn map:entry($key,$x/ancestor::entry[1]/@name))let $fixedRelationships as element(relationship)+ := //relationship[@type][@fixedValue]let $fixed := map:merge(for $x in $fixedRelationshipslet $key := $x/string-join((@name,@type,@fixedValue),'|')group by $keyreturn map:entry($key,$x/ancestor::entry[1]))(:trying a single fixed value as the start of the climb for testing:)let $eventNames := map:get($fixed,'moodCode|CS|EVN.CRT')/@name(: so we can get the relationship element, but we want its event ancestor's name :)return for $x in $eventNames return local:climb($relByType,'',$x)My suspicion is that passing a big map to the function is causing the problem. But I don't know, and I don't think there's a way to declare a function with an external variable. ("take this value from the function declaration's context and put it in scope for the function").Any suggestions?-- Graydon