Hi all,

with the basex 10.7 version (but even in 9.6 version I have the same issue)
I found that the following code wont work as expected:
(: It wont work :)
let $files := map {"hello1.txt" : xs:base64Binary('SGVsbG8gd29ybGQ='),
"hello2.txt" : xs:base64Binary('SGVsbG8gd29ybGQ=')}
let $w := map:for-each($files, function($filename, $content) {
  file:write-binary($filename, $content, 0)
})
return ()

that is, it will not write the two files hello1.txt and hello2.txt in the
basex_home/bin folder.

But, if you return $w instead:
(: It works :)
let $files := map {"hello1.txt" : xs:base64Binary('SGVsbG8gd29ybGQ='),
"hello2.txt" : xs:base64Binary('SGVsbG8gd29ybGQ=')}
let $w := map:for-each($files, function($filename, $content) {
  file:write-binary($filename, $content, 0)
})
return $w

With a similar implementation, with the classic FLWOR, the issue does not
arise, even if I return the empty sequence:
(: It works :)
let $files := map {"hello1.txt" : xs:base64Binary('SGVsbG8gd29ybGQ='),
"hello2.txt" : xs:base64Binary('SGVsbG8gd29ybGQ=')}
let $w := for $filename in map:keys($files)
  return file:write-binary($filename, map:get($files, $filename), 0)
return ()

that is it will write two files hello1.txt and hello2.txt in basex_home/bin
folder.

Note that the files in the examples above are for demonstration purposes,
however in my code they are actually binary files.
My java version is a Oracle JDK 17

This problem also occur to others?

Thanks,
Vincenzo

Reply via email to