exist
exist copied to clipboard
[BUG] xs:dateTimeStamp should promote to xs:dateTime (base type)
Describe the bug I'm upgrading an app from existdb 4.11 to 6.2 Comparing database values with fn:current-dateTime() produces an error: XPTY0004.
Expected behavior I'm not an expert in XSD1.1, but type promotion should be expectable in my eyes. I don't have Saxon or BaseX.
To Reproduce eval in eXide:
xquery version "3.1";
declare function local:less($a as xs:string, $b as xs:dateTime) as xs:boolean
{
if ($a="")
then true()
else xs:dateTime($a) <= $b
};
local:less("2024-01-01T00:00:00Z", fn:current-dateTime())
or eval
local:less("2024-01-01T00:00:00Z", xs:dateTimeStamp("2024-02-01T00:00:00.000Z"))
Context (please always complete the following information)
- Build: [eXist-6.2.0 master]
- Java: [1.8.0_352]
- OS: [Ubuntu 24.0.1]
Additional context
- How is eXist-db installed? [e.g. JAR installer, DMG, … ]
- Any custom changes in e.g.
conf.xml?
Hi @pherk!
Thank you for opening this issue. While the coercion from xs:dateTimestamp to xs:dateTime is done for the function parameter, the comparison fails.
xs:dateTime("2024-01-01T00:00:00") <= current-dateTime()
I also tested this agains latest develop-6.x.x and develop branches. The issue is there as well.
The error description is:
It is a type error if, during the static analysis phase, an expression is found to have a static type that is not appropriate for the context in which the expression occurs, or during the dynamic evaluation phase, the dynamic type of a value does not match a required type as specified by the matching rules in 2.5.4 SequenceType Matching. Type error: cannot compare xs:dateTime to xs:dateTimeStamp
I think I recall fixing this in 7.0.0-SNAPSHOT already
The fix must be in an unmerged PR as latest develop is affected.