Hello Antoine,
this appears to be a bug in most recent BaseX version. The optimizer
seems to think the where clause is equivilant to the position
predicate and it is rewritten to
for $d_0 in
document-node()()/descendant::fund/properties/domain[position() = 1]
return data($d_0/@reference)
i.e. without a where clause but with the position() predicate. Also,
if you return something like "return data($d/@reference) || $i" it
works as expected.
Hence, I created a new issue for this at
https://github.com/BaseXdb/basex/issues/1189.
Thanks for reporting this. Please be aware that our main developer
Christian is currently on vacation (until next week), so it will
take slightly longer to get this fixed (as I know Christian usually
this would be fixed by the end of the day). I hope this doesn't
influence your decision making process in your evaluation.
Cheers
Dirk
On 09/09/2015 11:22 AM, Antoine WOLF
wrote:
Hi,
We are in the process of
evaluating BaseX and recently upgraded from version 7.9
to 8.2.3
We have a DB “TESTDB” with 50 xml files, named
Fund1.xml, Fund2.xml, Fund3.xml,…. each having the same
structure:
Fund1.xml
--------------
< fund>
…
<properties>
…
<domain reference=”fund1”>
…
</domain>
…
</properties>
…
</fund>
Fund2.xml
--------------
< fund>
…
<properties>
…
<domain reference=”fund2”>
…
</domain>
…
</properties>
…
</fund>
….
….
The following query does not behave the same on both
versions :
For $d at $i in db:open(“TESTDB”)/fund/properties/domain
where $i < 2
return data($d/@reference)
Result in 7.9
------------------
“Fund1”
Result in 8.2.3
-----------------
“Fund1 Fund2 Fund3 Fund4 …”
Is this a bug or is there something wrong with the query
?
Best Regards,
Antoine Wolf
--
Dirk Kirsten, BaseX GmbH, http://basexgmbh.de
|-- Firmensitz: Blarerstrasse 56, 78462 Konstanz
|-- Registergericht Freiburg, HRB: 708285, Geschäftsführer:
| Dr. Christian Grün, Dr. Alexander Holupirek, Michael Seiferle
`-- Phone: 0049 7531 28 28 676, Fax: 0049 7531 20 05 22