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(); } });