[
https://issues.apache.org/jira/browse/OAK-1689?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Mueller updated OAK-1689:
--------------------------------
Priority: Critical (was: Major)
> XPath and union queries with "or" can return the same node multiple times
> -------------------------------------------------------------------------
>
> Key: OAK-1689
> URL: https://issues.apache.org/jira/browse/OAK-1689
> Project: Jackrabbit Oak
> Issue Type: Bug
> Components: query
> Reporter: Thomas Mueller
> Assignee: Thomas Mueller
> Priority: Critical
> Fix For: 1.0
>
>
> XPath queries that contain "or" with can in some cases return the same node
> twice. Those queries are converted to "union", as follows, where the same
> problem exists:
> {noformat}
> select [jcr:path], [jcr:score], * from ...
> where contains(*, 'square')
> union
> select [jcr:path], [jcr:score], * from ...
> where [x] = '1'
> {noformat}
> Currently, the results of both subqueries are combined with
> "Iterators.concat(left.getRows(), right.getRows())" (Iterators is from Google
> Guava). That means results of the first part of the union is executed, then
> the result of the second query. This result is wrapped / filtered using
> "FilterIterators.newCombinedFilter(it, distinct, limit, offset, orderBy,
> settings)", which is Oak code. "distinct" is true for "union" and false for
> "union all".
> Now, "distinct" operates on the result row object, which contains the path,
> the score, and all property values. In previous versions, the "jcr:score" was
> always a fixed value, but in the latest Oak version "jcr:score" is the value
> returned from the index, which means the two rows are not equal:
> {noformat}
> path: /test/a, score: 0.5 (from the first subquery; Lucene index)
> path: /test/a, score: 0.0 (from the second subquery; property index)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.2#6252)