Hey, team!
Just simple question. How to pass sequence of string to the java class?
let $values := for $i in (1 to 3) return $i cast to xs:string return j:exec($values)
In case when local function returns one item all is good. Otherwise j:exec takes array of item()+, but not the array of stings.
If you just call j:exec(("1","2")) than all works as expected.
Any thoughts? Is it bug or feature? ;)
BaseX 9.0
Thanks!
Hey, team!
Just simple question. How to pass sequence of string to the java class?
let $values := for $i in (1 to 3) return $i cast to xs:string return j:exec($values)
In case when local function returns one item all is good. Otherwise j:exec takes array of item()+, but not the array of stings.
If you just call j:exec(("1","2")) than all works as expected.
Any thoughts? Is it bug or feature? ;)
BaseX 9.0
Thanks!
Hi Alex,
How does the signature of the invoked Java function look like?
Best, Christian
On Mon, Jun 18, 2018 at 9:43 PM Alexander Shpack shadowkin@gmail.com wrote:
Hey, team!
Just simple question. How to pass sequence of string to the java class?
let $values := for $i in (1 to 3) return $i cast to xs:string return j:exec($values)
In case when local function returns one item all is good. Otherwise j:exec takes array of item()+, but not the array of stings.
If you just call j:exec(("1","2")) than all works as expected.
Any thoughts? Is it bug or feature? ;)
BaseX 9.0
Thanks!
-- s0rr0w
Hi Christian,
Right now we are using the next code
public static String exec(String key) { return ... }
public static String exec(Object... keys) { return ... }
The code that doesn't work:
public static String exec(*String*... keys)
On Fri, Jun 29, 2018 at 10:51 AM Christian Grün christian.gruen@gmail.com wrote:
Hi Alex,
How does the signature of the invoked Java function look like?
Best, Christian
On Mon, Jun 18, 2018 at 9:43 PM Alexander Shpack shadowkin@gmail.com wrote:
Hey, team!
Just simple question. How to pass sequence of string to the java class?
let $values := for $i in (1 to 3) return $i cast to xs:string return j:exec($values)
In case when local function returns one item all is good. Otherwise
j:exec takes array of item()+, but not the array of stings.
If you just call j:exec(("1","2")) than all works as expected.
Any thoughts? Is it bug or feature? ;)
BaseX 9.0
Thanks!
-- s0rr0w
I see! As XQuery sequences may contain items of arbitrary type, it is not always possible to decide at compile time which Java function needs to be chosen for evaluation. I recommend you to stick with the "Object..." declaration.
Nevertheless, I will check if we can optimize the static function selection without compromising performance.
Best, Christian
On Fri, Jun 29, 2018 at 12:30 PM Alexander Shpack shadowkin@gmail.com wrote:
Hi Christian,
Right now we are using the next code
public static String exec(String key) { return ... }
public static String exec(Object... keys) { return ... }
The code that doesn't work:
public static String exec(String... keys)
On Fri, Jun 29, 2018 at 10:51 AM Christian Grün christian.gruen@gmail.com wrote:
Hi Alex,
How does the signature of the invoked Java function look like?
Best, Christian
On Mon, Jun 18, 2018 at 9:43 PM Alexander Shpack shadowkin@gmail.com wrote:
Hey, team!
Just simple question. How to pass sequence of string to the java class?
let $values := for $i in (1 to 3) return $i cast to xs:string return j:exec($values)
In case when local function returns one item all is good. Otherwise j:exec takes array of item()+, but not the array of stings.
If you just call j:exec(("1","2")) than all works as expected.
Any thoughts? Is it bug or feature? ;)
BaseX 9.0
Thanks!
-- s0rr0w
-- s0rr0w
Thanks!
On Fri, Jun 29, 2018 at 1:34 PM Christian Grün christian.gruen@gmail.com wrote:
I see! As XQuery sequences may contain items of arbitrary type, it is not always possible to decide at compile time which Java function needs to be chosen for evaluation. I recommend you to stick with the "Object..." declaration.
Nevertheless, I will check if we can optimize the static function selection without compromising performance.
Best, Christian
On Fri, Jun 29, 2018 at 12:30 PM Alexander Shpack shadowkin@gmail.com wrote:
Hi Christian,
Right now we are using the next code
public static String exec(String key) { return ... }
public static String exec(Object... keys) { return ... }
The code that doesn't work:
public static String exec(String... keys)
On Fri, Jun 29, 2018 at 10:51 AM Christian Grün <
christian.gruen@gmail.com> wrote:
Hi Alex,
How does the signature of the invoked Java function look like?
Best, Christian
On Mon, Jun 18, 2018 at 9:43 PM Alexander Shpack shadowkin@gmail.com
wrote:
Hey, team!
Just simple question. How to pass sequence of string to the java
class?
let $values := for $i in (1 to 3) return $i cast to xs:string return j:exec($values)
In case when local function returns one item all is good. Otherwise
j:exec takes array of item()+, but not the array of stings.
If you just call j:exec(("1","2")) than all works as expected.
Any thoughts? Is it bug or feature? ;)
BaseX 9.0
Thanks!
-- s0rr0w
-- s0rr0w
Hi Alex,
I found a solution indeed to improve type checking for Java function calls. Your code should now work with the latest snapshot [1].
There is a minor overhead when calling Java functions if the type is not statically known, but as long as your arrays don’t have millions of entries, you shouldn’t really notice the difference. I mostly revised the type checking process to reduce memory (e.g., a large byte array will be much smaller if passed on as byte[] instead of Object[]), so it is likely that most invocations will even be faster than before.
The dynamic item type detection currently works for primitive types (double, float, boolean, int, short, byte) and Strings.
Cheers, Christian
[1] http://files.basex.org/releases/latest/
On Fri, Jun 29, 2018 at 12:37 PM Alexander Shpack shadowkin@gmail.com wrote:
Thanks!
On Fri, Jun 29, 2018 at 1:34 PM Christian Grün christian.gruen@gmail.com wrote:
I see! As XQuery sequences may contain items of arbitrary type, it is not always possible to decide at compile time which Java function needs to be chosen for evaluation. I recommend you to stick with the "Object..." declaration.
Nevertheless, I will check if we can optimize the static function selection without compromising performance.
Best, Christian
On Fri, Jun 29, 2018 at 12:30 PM Alexander Shpack shadowkin@gmail.com wrote:
Hi Christian,
Right now we are using the next code
public static String exec(String key) { return ... }
public static String exec(Object... keys) { return ... }
The code that doesn't work:
public static String exec(String... keys)
On Fri, Jun 29, 2018 at 10:51 AM Christian Grün <
christian.gruen@gmail.com> wrote:
Hi Alex,
How does the signature of the invoked Java function look like?
Best, Christian
On Mon, Jun 18, 2018 at 9:43 PM Alexander Shpack shadowkin@gmail.com
wrote:
Hey, team!
Just simple question. How to pass sequence of string to the java
class?
let $values := for $i in (1 to 3) return $i cast to xs:string return j:exec($values)
In case when local function returns one item all is good. Otherwise
j:exec takes array of item()+, but not the array of stings.
If you just call j:exec(("1","2")) than all works as expected.
Any thoughts? Is it bug or feature? ;)
BaseX 9.0
Thanks!
-- s0rr0w
-- s0rr0w
-- s0rr0w
Hi Christian,
Thanks for the quick fix!
Best wishes, Oleksandr
On Tue, Jul 3, 2018 at 12:52 PM Christian Grün christian.gruen@gmail.com wrote:
Hi Alex,
I found a solution indeed to improve type checking for Java function calls. Your code should now work with the latest snapshot [1].
There is a minor overhead when calling Java functions if the type is not statically known, but as long as your arrays don’t have millions of entries, you shouldn’t really notice the difference. I mostly revised the type checking process to reduce memory (e.g., a large byte array will be much smaller if passed on as byte[] instead of Object[]), so it is likely that most invocations will even be faster than before.
The dynamic item type detection currently works for primitive types (double, float, boolean, int, short, byte) and Strings.
Cheers, Christian
[1] http://files.basex.org/releases/latest/
On Fri, Jun 29, 2018 at 12:37 PM Alexander Shpack shadowkin@gmail.com wrote:
Thanks!
On Fri, Jun 29, 2018 at 1:34 PM Christian Grün christian.gruen@gmail.com wrote:
I see! As XQuery sequences may contain items of arbitrary type, it is not always possible to decide at compile time which Java function needs to be chosen for evaluation. I recommend you to stick with the "Object..." declaration.
Nevertheless, I will check if we can optimize the static function selection without compromising performance.
Best, Christian
On Fri, Jun 29, 2018 at 12:30 PM Alexander Shpack shadowkin@gmail.com wrote:
Hi Christian,
Right now we are using the next code
public static String exec(String key) { return ... }
public static String exec(Object... keys) { return ... }
The code that doesn't work:
public static String exec(String... keys)
On Fri, Jun 29, 2018 at 10:51 AM Christian Grün <
christian.gruen@gmail.com> wrote:
Hi Alex,
How does the signature of the invoked Java function look like?
Best, Christian
On Mon, Jun 18, 2018 at 9:43 PM Alexander Shpack shadowkin@gmail.com
wrote:
Hey, team!
Just simple question. How to pass sequence of string to the java
class?
let $values := for $i in (1 to 3) return $i cast to xs:string return j:exec($values)
In case when local function returns one item all is good.
Otherwise j:exec takes array of item()+, but not the array of stings.
If you just call j:exec(("1","2")) than all works as expected.
Any thoughts? Is it bug or feature? ;)
BaseX 9.0
Thanks!
-- s0rr0w
-- s0rr0w
-- s0rr0w
basex-talk@mailman.uni-konstanz.de