Thanks for the bug report! In your example code, I have additionally prefixed the function call with the 'updating' keyword (otherwise, it won’t be detected as updating expression), and the return type of the RESTXQ function had to replaced with empty-sequence().
As the updating return clause returns an empty sequence, the full FLWOR expression was optimized away – which was obviously wrong, due to the side-effecting nature of the update function. If prof:void('') is added, the code was preserved because this function was detected as a non-deterministic function. With the latest snapshot, I am now checking for both updating and non-deterministic expressions [1,2]. Until BaseX 9.1.1 will be released, it will be a good escape to additionally call prof:void(''). Hope this helps Christian [1] https://github.com/BaseXdb/basex/issues/1636 [2] http://files.basex.org/releases/latest/ On Sat, Nov 3, 2018 at 4:39 PM Dieter Zanzinger <dieter.zanzin...@icloud.com> wrote: > > Dear BaseX-Team, > > I encountered some unexpected behavour, maybe a bug? > > I declare a collection of function-signatures. > Then I iterate over the collection inside a copy/modify-construct. Each > function adds a node to the database. > > This works as expected: > > declare variable $_:abschlussqueries := (_:f1#2 , _:f2#2); > > declare %updating > %rest:path('treez/ab4') > function _:abschluss4() as element() { > <Postabschluss>{ ( > > try{ > let $db := doc('FGfax')/Dateien/Datei > for $d in $db > return ( > > copy $c := $d > modify ( > for $funct at $counter in $_:abschlussqueries > return ( > (: prof:dump("bla: " || $counter) , :) > prof:void(""), > $funct($c, $counter) > ) > ) > return ( > $c > ) > ) > > } catch * { > let $db := doc('FGfax')/Dateien > return > error(xs:QName("dieter:norights10"), "Error: "|| > $err:code || ': ' || $err:description , 418 ) > } > > ) }</Postabschluss> > }; > > declare %updating function _:f1($c, $counter ) { > > try {( > > filepath:copy-to("C:\Users\Win7ProUser\Documents\FGscan_ScanDocs\bla.xml","C:\Users\Win7ProUser\Documents\FGscan_ScanDocs\bla1.xml"), > insert node <f1>function1 </f1> as last into $c > )} catch * { > insert node <f1>{"Error: "|| $err:code || ': ' || > $err:description}</f1> as last into $c > } > }; > > declare %updating function _:f2($c, $counter ) { > > try {( > > filepath:copy-to("C:\Users\Win7ProUser\Documents\FGscan_ScanDocs\bla.xml","C:\Users\Win7ProUser\Documents\FGscan_ScanDocs\bla1.xml"), > insert node <f2>function2 </f2> as last into $c > )} catch * { > insert node <f2>{"Error: "|| $err:code || ': ' || > $err:description}</f2> as last into $c > } > }; > > > ————————————— > Result: > > <?xml version="1.0" encoding="ISO-8859-1"?> > <Postabschluss> > <Datei uuid="8ad03f50-4b9c-461a-b818-1a97dc5735e9"> > <sortedPath > znen="">@SMB10.211.55.6/netzlaufwerktestF/sortierter_Posteingang/OHNE/#Fax_OHNE_AZ--201803061002-154925-00498171251x1800.pdf</sortedPath> > <f1>function1 </f1> > <f2>function2 </f2> > </Datei> > <Datei uuid="26a3aee7-a0d8-4b8d-acd4-90554c8ab28c"> > <sortedPath > znen="">@SMB10.211.55.6/netzlaufwerktestF/sortierter_Posteingang/OHNE/#Fax_OHNE_AZ--201803061003-154928-0049242344x1801.pdf</sortedPath> > <f1>function1 </f1> > <f2>function2 </f2> > </Datei> > <Datei uuid="af0548aa-08cf-464a-839d-421363f452ce"> > <sortedPath > znen="">@SMB10.211.55.6/netzlaufwerktestF/sortierter_Posteingang/OHNE/#Fax_OHNE_AZ--201803061220-154966-004999429025.pdf</sortedPath> > <f1>function1 </f1> > <f2>function2 </f2> > </Datei> > —————— > > > But if remove the line: prof:void("“),the result is: > > <?xml version="1.0" encoding="ISO-8859-1"?> > > <Postabschluss> > > <Datei uuid="8ad03f50-4b9c-461a-b818-1a97dc5735e9"> > > <sortedPath > znen="">@SMB10.211.55.6/netzlaufwerktestF/sortierter_Posteingang/OHNE/#Fax_OHNE_AZ--201803061002-154925-00498171251x1800.pdf</sortedPath></Datei> > > <Datei uuid="26a3aee7-a0d8-4b8d-acd4-90554c8ab28c"> > > <sortedPath > znen="">@SMB10.211.55.6/netzlaufwerktestF/sortierter_Posteingang/OHNE/#Fax_OHNE_AZ--201803061003-154928-0049242344x1801.pdf</sortedPath> > > </Datei> > > <Datei uuid="af0548aa-08cf-464a-839d-421363f452ce"> > > <sortedPath > znen="">@SMB10.211.55.6/netzlaufwerktestF/sortierter_Posteingang/OHNE/#Fax_OHNE_AZ--201803061220-154966-004999429025.pdf</sortedPath> > > </Datei> > > </Postabschluss> > > > Do you have any explanation for this behavour?Some other updating expression > instead of prof:void(„“) works as well. But if my only call is to the > functions, it does not work. > SincerelyDieter Zanzinger