This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
The following commit(s) were added to refs/heads/master by this push:
new c7bdc4d SLING-12205: ResourceResolver: switch sling:alias query to
JCR-SQL2 (#109)
c7bdc4d is described below
commit c7bdc4d6a5e360623b0ad3c117f1728e26c12e8e
Author: Julian Reschke <[email protected]>
AuthorDate: Thu Dec 21 09:10:03 2023 +0100
SLING-12205: ResourceResolver: switch sling:alias query to JCR-SQL2 (#109)
---
.../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();
}
});