This is an automated email from the ASF dual-hosted git repository.

reschke pushed a commit to branch SLING-12205
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git

commit 03db31c3e9a21884858e584325322069b34ac025
Author: Julian Reschke <resc...@apache.org>
AuthorDate: Wed Dec 20 17:40:52 2023 +0100

    SLING-12205: ResourceResolver: switch sling:alias query to JCR-SQL2
---
 .../sling/resourceresolver/impl/mapping/MapEntries.java   | 15 ++++++---------
 .../impl/mapping/InMemoryResourceProvider.java            |  2 +-
 .../resourceresolver/impl/mapping/MapEntriesTest.java     |  6 +++---
 3 files changed, 10 insertions(+), 13 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 4aef222..a6b010e 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
@@ -112,8 +112,6 @@ public class MapEntries implements
 
     private static final String JCR_SYSTEM_PREFIX = JCR_SYSTEM_PATH + '/';
 
-    static final String ALIAS_BASE_QUERY_DEFAULT = "SELECT sling:alias FROM 
nt:base AS page";
-
     static final String ANY_SCHEME_HOST = "[^/]+/[^/]+";
 
     /** default log */
@@ -1154,7 +1152,7 @@ public class MapEntries implements
 
         log.debug("start alias query: {}", queryString);
         long queryStart = System.nanoTime();
-        final Iterator<Resource> i = resolver.findResources(queryString, 
"sql");
+        final Iterator<Resource> i = resolver.findResources(queryString, 
"JCR-SQL2");
         long queryElapsed = System.nanoTime() - queryStart;
         log.debug("end alias query; elapsed {}ms", 
TimeUnit.NANOSECONDS.toMillis(queryElapsed));
 
@@ -1178,25 +1176,24 @@ public class MapEntries implements
     private String generateAliasQuery() {
         final Set<String> allowedLocations = 
this.factory.getAllowedAliasLocations();
 
-        StringBuilder baseQuery = new StringBuilder(ALIAS_BASE_QUERY_DEFAULT);
-        baseQuery.append(" ").append("WHERE");
+        StringBuilder baseQuery = new StringBuilder("SELECT [sling:alias] FROM 
[nt:base] WHERE");
 
         if (allowedLocations.isEmpty()) {
             String jcrSystemPath = StringUtils.removeEnd(JCR_SYSTEM_PREFIX, 
"/");
-            baseQuery.append(" (").append("NOT 
ISDESCENDANTNODE(page,'").append(queryLiteral(jcrSystemPath)).append("'))");
+            baseQuery.append(" NOT 
isdescendantnode('").append(queryLiteral(jcrSystemPath)).append("')");
         } else {
             Iterator<String> pathIterator = allowedLocations.iterator();
-            baseQuery.append("(");
+            baseQuery.append(" (");
             String sep = "";
             while (pathIterator.hasNext()) {
                 String prefix = pathIterator.next();
-                
baseQuery.append(sep).append("ISDESCENDANTNODE(page,'").append(queryLiteral(prefix)).append("')");
+                
baseQuery.append(sep).append("isdescendantnode('").append(queryLiteral(prefix)).append("')");
                 sep = " OR ";
             }
             baseQuery.append(")");
         }
 
-        baseQuery.append(" AND sling:alias IS NOT NULL");
+        baseQuery.append(" AND [sling:alias] IS NOT NULL");
         return baseQuery.toString();
     }
 
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
index 4f63a85..889166d 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
@@ -105,7 +105,7 @@ public class InMemoryResourceProvider extends 
ResourceProvider<Void>{
 
                 // we don't explicitly filter paths under jcr:system, but we 
don't expect to have such resources either
                 // and this stub provider is not the proper location to test 
JCR queries
-                if  ( "sql".equals(language) && "SELECT sling:alias FROM 
nt:base AS page WHERE (NOT ISDESCENDANTNODE(page,'/jcr:system')) AND 
sling:alias IS NOT NULL".equals(query) ) {
+                if  ( "JCR-SQL2".equals(language) && "SELECT [sling:alias] 
FROM [nt:base] WHERE NOT isdescendantnode('/jcr:system') AND [sling:alias] IS 
NOT NULL".equals(query) ) {
                     return resourcesWithProperty(ctx, "sling:alias")
                         .iterator();
                 }
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
index f5d842a..5c7c421 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
@@ -187,7 +187,7 @@ public class MapEntriesTest extends 
AbstractMappingMapEntriesTest {
         when(result.getName()).thenReturn("child");
         
when(result.getValueMap()).thenReturn(buildValueMap(ResourceResolverImpl.PROP_ALIAS,
 "alias"));
 
-        when(resourceResolver.findResources(anyString(), 
eq("sql"))).thenAnswer(new Answer<Iterator<Resource>>() {
+        when(resourceResolver.findResources(anyString(), 
eq("JCR-SQL2"))).thenAnswer(new Answer<Iterator<Resource>>() {
 
             @Override
             public Iterator<Resource> answer(InvocationOnMock invocation) 
throws Throwable {
@@ -224,7 +224,7 @@ public class MapEntriesTest extends 
AbstractMappingMapEntriesTest {
         when(secondResult.getName()).thenReturn("child2");
         
when(secondResult.getValueMap()).thenReturn(buildValueMap(ResourceResolverImpl.PROP_ALIAS,
 "alias"));
 
-        when(resourceResolver.findResources(anyString(), 
eq("sql"))).thenAnswer(new Answer<Iterator<Resource>>() {
+        when(resourceResolver.findResources(anyString(), 
eq("JCR-SQL2"))).thenAnswer(new Answer<Iterator<Resource>>() {
 
             @Override
             public Iterator<Resource> answer(InvocationOnMock invocation) 
throws Throwable {
@@ -2279,7 +2279,7 @@ public class MapEntriesTest extends 
AbstractMappingMapEntriesTest {
             @Override
             public Iterator<Resource> answer(InvocationOnMock invocation) 
throws Throwable {
                 String query = 
StringUtils.trim((String)invocation.getArguments()[0]);
-                assertEquals("SELECT sling:alias FROM nt:base AS page WHERE 
(NOT ISDESCENDANTNODE(page,'/jcr:system')) AND sling:alias IS NOT NULL", query);
+                assertEquals("SELECT [sling:alias] FROM [nt:base] WHERE NOT 
isdescendantnode('/jcr:system') AND [sling:alias] IS NOT NULL", query);
                 return Collections.<Resource> emptySet().iterator();
             }
         });

Reply via email to