Hi Christian,
thank you very much for your very quick response and for fixing the issue.
Greetings

Il giorno lun 19 feb 2024 alle ore 19:20 Christian Grün <
christian.gr...@gmail.com> ha scritto:

> Hi Vincenzo,
>
> Thanks for your observation and the easily reproducible test case; we’ve
> uploaded a new stable snapshot with a bug fix.
>
> Please note that it’s generally risky to explicitly return empty
> sequences, as the optimizer will always try to get rid of code that may not
> contribute to the final result (we try hard, though, to keep code alive
> that has side effects, such as file:write-binary). In the given case, you
> could simply rewrite your code as follows:
>
> let $files := map {"hello1.txt" : ... }
> return map:for-each($files, function($filename, $content) {
>   file:write-binary($filename, $content, 0)
> })
>
> Ciao,
> Christian
>
> [1] https://files.basex.org/releases/latest/
>
>
>
> On Mon, Feb 19, 2024 at 4:51 PM Vincenzo Cestone <v.cest...@gmail.com>
> wrote:
>
>> 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