Hi Karl,
At least with a simple document, this works for me. Maybe there is something
about the data in that document that is causing this? Are you using a recent
version of MarkLogic Server? Here is what I tried:
1) Create dateTime range indexes for AdmissionDate and DischargeDate (I made
these in no namespace and made my document and query in no namespace as well).
2) Create the following document:
xquery version "1.0-ml";
xdmp:document-insert("/karl.xml",
<Encounter>
<AdmissionDate>2008-10-14T10:43:00</AdmissionDate>
<DischargeDate>2008-10-17T10:43:00</DischargeDate>
</Encounter>)
3) Run the following query:
xquery version "1.0-ml";
cts:search( doc(),
cts:and-query(
cts:element-query(fn:QName("", "Encounter"),
cts:and-query((
cts:element-range-query(fn:QName("",
"AdmissionDate"), ">=", xs:dateTime("2008-10-14T10:43:00"), (), 1),
cts:element-range-query(fn:QName("",
"DischargeDate"), "<=", xs:dateTime("2008-10-17T10:43:00"), (), 1)
))))
)
It returned the document as expected.
Maybe there is something different about the data in your document?
-Danny
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Karl Erisman
Sent: Friday, January 08, 2010 2:31 PM
To: General Mark Logic Developer Discussion
Subject: [MarkLogic Dev General] Bizarre cts:query behavior
I noticed a cts:query not doing what I expected. To track down the
problem, I simplified it to the most minimal form that still exhibits
the problem. While experimenting with the query, I found two
nearly-identical queries that together appear to contradict a simple
logical property...
There is a certain document in my database that satisfies the following query:
=======
let $d := cts:search( doc(),
cts:and-query(
cts:element-query(fn:QName("my-ns", "Encounter"),
cts:and-query((
cts:element-range-query(fn:QName("my-ns",
"AdmissionDate"), ">=", xs:dateTime("2008-10-14T10:43:00"), (), 1),
cts:element-range-query(fn:QName("my-ns",
"DischargeDate"), "=", xs:dateTime("2008-10-17T10:43:00"), (), 1)
))))
)
return for $i in $d
return $i
=======
...but if I change only the operator in the second line of the nested
and-query as follows:
=======
cts:element-range-query(fn:QName("my-ns", "DischargeDate"), "<=",
xs:dateTime("2008-10-17T10:43:00"), (), 1)
=======
...there are no results.
So nothing changed except that instead of requiring that DischargeDate
be EQUAL TO a certain date, I require that it be LESS THAN OR EQUAL TO
that same date. In the first case, the document is matched, but not
in the second case.
Note that I have a dateTime range index on DischargeDate (obviously,
or I'd get an exception in either case). The document has
DischargeDate equal to the date I am using here, so <=, =, and >=
operators should all result in a match.
What's going on? I don't often entertain the idea that there may be a
bug in MarkLogic, but this one makes me wonder.
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general