Hi Martin, Thanks for the analysis. As you’ve already indicated, the combination of documents with and without namespaces triggered an optimization that should only take effect if all documents of a database have the same default namespace
The bug has been fixed; a new snapshot is online [1,2]. Best, Christian [1] https://github.com/BaseXdb/basex/issues/1831 [2] http://files.basex.org/releases/latest/ On Mon, Mar 30, 2020 at 11:26 AM Martin Honnen <martin.hon...@gmx.de> wrote: > > Am 29.03.2020 um 16:26 schrieb Martin Honnen: > > Using BaseX 9.3.2, why does a query > > > > collection('/test-db-1/bib')//Q{}libro > > > > return 6 items while > > > > collection('/test-db-1/bib')//libro > > > > gives 0 items? > > > > If I run > > > > collection('/test-db-1/bib')//Q{}libro, collection('/test-db-1/bib')//libro > > > > the info window shows > > > > > > Compiling: > > - rewrite fn:collection([uri]) to document-node() item: > > collection("/test-db-1/bib") -> db:open-pre("test-db-1", 12000002) > > - merge steps: descendant::element(libro) > > - rewrite fn:collection([uri]) to document-node() item: > > collection("/test-db-1/bib") -> db:open-pre("test-db-1", 12000002) > > - remove step without results: element(libro) > > - rewrite iter step to empty sequence: element(libro) -> () > > - rewrite cached path to empty sequence: db:open-pre("test-db-1", > > 12000002)/descendant-or-self::node()/() -> () > > - rewrite expression list to iter path: (db:open-pre("test-db-1", > > 12000002)/descendant::element(libro), ()) -> db:open-pre("test-db-1", > > 12000002)/descendant::element(libro) > > Optimized Query: > > db:open-pre("test-db-1", 12000002)/descendant::element(libro) > > Query: > > collection('/test-db-1/bib')//Q{}libro, collection('/test-db-1/bib')//libro > > Result: > > - Hit(s): 6 Items > > - Updated: 0 Items > > - Printed: 1455 b > > - Read Locking: test-db-1 > > - Write Locking: (none) > > It seems the problems occurs if I have one document in the db that has > elements in a namespace and one with elements in no namespace. > > So if there is only one document with no namespaces then both > collection('/test-db-3/ex2')//foo and > collection('/test-db-3/ex2')//Q{}foo select the `foo` elements in no > namespace but if there is a document using a namespace as well in the db > then collection('/test-db-3/ex2')//foo does not select the `foo` > elements in no namespace. > > > Are there any db/namespace related settings in BaseX that cause that > behaviour? >