Don't assume that the last step of the XPath is an element name
authorJan Arve Saether <jan-arve.saether@digia.com>
Thu, 4 Jul 2013 10:14:44 +0000 (12:14 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 9 Jul 2013 08:25:34 +0000 (10:25 +0200)
commitddcf9fc80e074c5a9d1ecbbf3c60ca27f250ce98
tree693ce9ea643a8e3db6b4089cc4a8db8bce6a316b
parentcc2d34486360a1a65312f72ca4959228b9ab0c75
Don't assume that the last step of the XPath is an element name

In order to find the number of items in the model, the model did a
second query on the document representing the result set.
So, suppose the user queried for //a/b/c, the result set would contain
all the 'c' elements from the input document.
In order to find the number of items in the result set, it did a second
query with the expression  "count(/dummy:items/c)", where 'c' was
extracted from the last step in the original XPath expression

For simple expressions, this worked fine.

However, if the last step had a predicate such as "//c/parent::b" it
didn't work.

The solution is to not filter *again* the last step when we query for
the count, since we know that all result items are direct children of
"dummy:items", and instead just execute the query
"count(dummy::items/*)".

This should also potentially improve performance.

Task-number: QTBUG-17588
Change-Id: Ib2fdf1ec8b91022df0597e089ad34d34b04428b0
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
src/imports/xmllistmodel/qqmlxmllistmodel.cpp
tests/auto/quick/qquickxmllistmodel/data/groups.qml [new file with mode: 0644]
tests/auto/quick/qquickxmllistmodel/data/groups.xml [new file with mode: 0644]
tests/auto/quick/qquickxmllistmodel/qquickxmllistmodel.pro
tests/auto/quick/qquickxmllistmodel/tst_qquickxmllistmodel.cpp