Re: [basex-talk] Found problems with map:for-each

2024-02-20 Thread Vincenzo Cestone
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 
> 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
>>
>


[basex-talk] Found problems with map:for-each

2024-02-19 Thread Vincenzo Cestone
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


Re: [basex-talk] Issue with db:add via restxq in 8.4.2

2016-04-08 Thread Vincenzo Cestone
Hi Christian,
to give more details, I can tell you that with BaseX 8.4.2 doesn't happens.
Moreover in the BaseX843-20160407 release happens even if I call the restxq
with the 1 value: no recursion.

2016-04-08 14:42 GMT+02:00 Christian Grün :

> Hi Vincenzo,
>
> This looks like a classical stack overflow issue (the same would
> happen in Java). I am pretty sure it also happened with earlier
> releases of BaseX. To fix this, you’ll rewrite your query for tail
> recursion [1], use fold-left [2], or increase your Java stack trace
> with the -Xss flag [3].
>
> Hope this helps,
> Christian
>
> [1] https://en.wikipedia.org/wiki/Tail_call
> [2] http://docs.basex.org/wiki/Higher-Order_Functions#fn:fold-left
> [3]
> https://blogs.oracle.com/saas-fusion-app-performance/entry/how_set_stack_size_to
>
>
>
> On Fri, Apr 8, 2016 at 2:37 PM, Vincenzo Cestone 
> wrote:
> > Thank you Christian,
> >
> > I checked the issue of the subject with the latest release and now it is
> > working.
> > But the BaseX843-20160407 release introduces a different issue
> (supposedly),
> > that is a java.lang.StackOverflowError exception you can reproduce
> > implementing a restxq with a recursive function, as in the following
> > example:
> > ---
> > module namespace api = "urn:api";
> >
> > declare function api:fact($val) {
> >   if ($val = 1) then 1
> >   else $val * api:fact($val - 1)
> > };
> >
> > declare
> >   %rest:path('myapi/{$v}')
> >   %rest:GET
> > function api:impl_GET($v) {
> > {api:fact($v)}
> > };
> > ---
> > Regards,
> > Vincenzo
> >
> > 2016-04-06 15:48 GMT+02:00 Christian Grün :
> >>
> >> Il problema è risolto [1,2]; grazie di nuovo.
> >>
> >> [1] https://github.com/BaseXdb/basex/issues/1281
> >> [2] http://files.basex.org/releases/latest/
> >>
> >>
> >>
> >> On Tue, Apr 5, 2016 at 12:53 PM, Christian Grün
> >>  wrote:
> >> > Thanks Vincenzo,
> >> >
> >> > I could reproduce the problem [1], and we’ll fix it soon.
> >> >
> >> > Generally, I’d recommend you to avoid declaration of variables that
> >> > will never be used. You could rewrite your code as follows:
> >> >
> >> >db:add('testdb', , '111.xml'),
> >> >
> >> >
> >> > Hope this helps,
> >> > Christian
> >> >
> >> > [1] https://github.com/BaseXdb/basex/issues/1281
> >> >
> >> >
> >> >
> >> > On Mon, Apr 4, 2016 at 10:30 AM, Vincenzo Cestone <
> v.cest...@gmail.com>
> >> > wrote:
> >> >> Hi guys,
> >> >>
> >> >> in the new basex 8.4.2 version I cannot write on the db via restxq.
> >> >>
> >> >> For example if you create an empty 'testdb',
> >> >> set in the .basex conf file the option MIXUPDATES = true,
> >> >> and call the '/dbaddtest' restxq implemented as in the following:
> >> >> ---
> >> >> module namespace o = "test";
> >> >>
> >> >> declare
> >> >>   %rest:path("/dbaddtest")
> >> >>   %rest:GET
> >> >> function o:dbaddtest() {
> >> >>   let $o := db:add('testdb', , '111.xml')
> >> >>   return 
> >> >> };
> >> >> ---
> >> >> it will not work in the basex 8.4.2 i.e. the document is not added to
> >> >> the
> >> >> db, but it will return  without errors.
> >> >> On the contrary the db:add executed in the BaseX.jar client is
> working
> >> >> well.
> >> >>
> >> >> And also the above restxq code is working as expected in the basex
> >> >> 8.3.1
> >> >> version.
> >> >>
> >> >> Thank you in advance.
> >> >>
> >> >> Regards,
> >> >> Vincenzo
> >> >>
> >> >>
> >
> >
>


Re: [basex-talk] Issue with db:add via restxq in 8.4.2

2016-04-08 Thread Vincenzo Cestone
Thank you Christian,

I checked the issue of the subject with the latest release and now it is
working.
But the BaseX843-20160407 release introduces a different issue
(supposedly), that is a java.lang.StackOverflowError exception you can
reproduce implementing a restxq with a recursive function, as in the
following example:
---
module namespace api = "urn:api";

declare function api:fact($val) {
  if ($val = 1) then 1
  else $val * api:fact($val - 1)
};

declare
  %rest:path('myapi/{$v}')
  %rest:GET
function api:impl_GET($v) {
{api:fact($v)}
};
---
Regards,
Vincenzo

2016-04-06 15:48 GMT+02:00 Christian Grün :

> Il problema è risolto [1,2]; grazie di nuovo.
>
> [1] https://github.com/BaseXdb/basex/issues/1281
> [2] http://files.basex.org/releases/latest/
>
>
>
> On Tue, Apr 5, 2016 at 12:53 PM, Christian Grün
>  wrote:
> > Thanks Vincenzo,
> >
> > I could reproduce the problem [1], and we’ll fix it soon.
> >
> > Generally, I’d recommend you to avoid declaration of variables that
> > will never be used. You could rewrite your code as follows:
> >
> >db:add('testdb', , '111.xml'),
> >
> >
> > Hope this helps,
> > Christian
> >
> > [1] https://github.com/BaseXdb/basex/issues/1281
> >
> >
> >
> > On Mon, Apr 4, 2016 at 10:30 AM, Vincenzo Cestone 
> wrote:
> >> Hi guys,
> >>
> >> in the new basex 8.4.2 version I cannot write on the db via restxq.
> >>
> >> For example if you create an empty 'testdb',
> >> set in the .basex conf file the option MIXUPDATES = true,
> >> and call the '/dbaddtest' restxq implemented as in the following:
> >> ---
> >> module namespace o = "test";
> >>
> >> declare
> >>   %rest:path("/dbaddtest")
> >>   %rest:GET
> >> function o:dbaddtest() {
> >>   let $o := db:add('testdb', , '111.xml')
> >>   return 
> >> };
> >> ---
> >> it will not work in the basex 8.4.2 i.e. the document is not added to
> the
> >> db, but it will return  without errors.
> >> On the contrary the db:add executed in the BaseX.jar client is working
> well.
> >>
> >> And also the above restxq code is working as expected in the basex 8.3.1
> >> version.
> >>
> >> Thank you in advance.
> >>
> >> Regards,
> >> Vincenzo
> >>
> >>
>


[basex-talk] Issue with db:add via restxq in 8.4.2

2016-04-04 Thread Vincenzo Cestone
Hi guys,

in the new basex 8.4.2 version I cannot write on the db via restxq.

For example if you create an empty 'testdb',
set in the .basex conf file the option MIXUPDATES = true,
and call the '/dbaddtest' restxq implemented as in the following:
---
module namespace o = "test";

declare
  %rest:path("/dbaddtest")
  %rest:GET
function o:dbaddtest() {
  let $o := db:add('testdb', , '111.xml')
  return 
};
---
it will not work in the basex 8.4.2 i.e. the document is not added to the
db, but it will return  without errors.
On the contrary the db:add executed in the BaseX.jar client is working well.

And also the above restxq code is working as expected in the basex 8.3.1
version.

Thank you in advance.

Regards,
Vincenzo