With the 6.0 released version of BaseX.exe in Windows 7 (x64) I am encountering a serious problem, or problems. All of them relate to handling of empty sequences.
A simple example is of the form:
let $vcheck:=($versions,$v0)
If, e.g., $versions is a non-empty sequence, but $v0 is an empty sequence, I get [XPTY0004] Invalid cast from empty-sequence to node: ()
To try to route around this problem I even tried something such as:
let $vcheck:=if (empty($v0)) then $versions else($versions,$v0)
Not even this works - I get the same error originating from the 'else' clause. In my view this probably exposes a second bug as well: the "else" clause is clearly being evaluated despite the fact that the 'if' test is true. In addition to being inefficient, this is guaranteed to cause problems in many cases, e.g., if the result of the 'else' evaluation led to something such as division by zero.
Right now, I can't figure out a way to get around the problem of handling an empty sequence in any way as a workaround. (The 'union' operator also fails when one of the operands is an empty sequence, which also seems wrong.) I've tested the () sequencing in Altova XMLSpy (as an XPath 2.0 expression against a document) and it behaves as expected, simply ignoring empty sequences.
Because I can't find a way to work around it presently, I would classify this as a major problem.