You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by re...@apache.org on 2024/07/17 12:57:56 UTC

(sling-org-apache-sling-resourceresolver) 01/01: SLING-12384: ResourceResolver: paged query for sling:alias will miss entries where 'first(sling:alias)' is empty

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 <re...@apache.org>
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);