This is an automated email from the ASF dual-hosted git repository. reschke pushed a commit to branch SLING-12384 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
commit 9d04953af64e4510febfbc8a342994693e060c95 Author: Julian Reschke <[email protected]> AuthorDate: Wed Jul 17 13:57:36 2024 +0100 SLING-12384: ResourceResolver: paged query for sling:alias will miss entries where 'first(sling:alias)' is empty --- .../sling/resourceresolver/impl/mapping/MapEntries.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java index ee62ea1..3372fd6 100644 --- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java +++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java @@ -1156,7 +1156,7 @@ public class MapEntries implements Iterator<Resource> it; try { - final String queryStringWithSort = baseQueryString + " AND FIRST([sling:alias]) > '%s' ORDER BY FIRST([sling:alias])"; + final String queryStringWithSort = baseQueryString + " AND FIRST([sling:alias]) %s '%s' ORDER BY FIRST([sling:alias])"; it = new PagedQueryIterator("alias", "sling:alias", resolver, queryStringWithSort, 2000); } catch (QuerySyntaxException ex) { log.debug("sort with first() not supported, falling back to base query", ex); @@ -1317,7 +1317,7 @@ public class MapEntries implements /** * @param subject name of the query, will be used only for logging - * @param propertyName name of multivalued string property to query on + * @param propertyName name of multivalued string property to query on (used for diagnostics) * @param resolver resource resolver * @param query query string in SQL2 syntax * @param pageSize page size (start a new query after page size is exceeded) @@ -1333,7 +1333,10 @@ public class MapEntries implements private void nextPage() { count = 0; - String tquery = String.format(query, queryLiteral(lastValue)); + // first query is ">=" to include empty property values, subsequent + // queries then use ">" + String op = lastValue.isEmpty() ? ">=" : ">"; + String tquery = String.format(query, op, queryLiteral(lastValue)); log.debug("start {} query (page {}): {}", subject, page, tquery); long queryStart = System.nanoTime(); this.it = resolver.findResources(tquery, "JCR-SQL2"); @@ -1399,7 +1402,7 @@ public class MapEntries implements boolean supportsSort = true; Iterator<Resource> it; try { - final String queryStringWithSort = baseQueryString + " AND FIRST([sling:vanityPath]) > '%s' ORDER BY FIRST([sling:vanityPath])"; + final String queryStringWithSort = baseQueryString + " AND FIRST([sling:vanityPath]) %s '%s' ORDER BY FIRST([sling:vanityPath])"; it = new PagedQueryIterator("vanity path", PROP_VANITY_PATH, resolver, queryStringWithSort, 2000); } catch (QuerySyntaxException ex) { log.debug("sort with first() not supported, falling back to base query", ex);
