This is an automated email from the ASF dual-hosted git repository. thomasm pushed a commit to branch OAK-9653 in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit 994cba6f0dbca777d3bd01116a288c8568c0c128 Author: Thomas Mueller <[email protected]> AuthorDate: Thu Jan 6 15:13:33 2022 +0100 OAK-9653 Adding the index tag option interferes with regex properties --- .../plugins/index/lucene/LucenePropertyIndex.java | 6 ++++ .../index/lucene/LuceneIndexQueryCommonTest.java | 14 ++++++++ .../index/elastic/query/ElasticRequestHandler.java | 6 ++++ .../index/elastic/ElasticIndexQueryCommonTest.java | 18 +++++++++++ .../oak/plugins/index/IndexQueryCommonTest.java | 37 +++++++++++++++++----- 5 files changed, 73 insertions(+), 8 deletions(-) diff --git a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java index 0e13b7c..61eff9f 100644 --- a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java +++ b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java @@ -54,6 +54,7 @@ import org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants; import org.apache.jackrabbit.oak.plugins.index.search.IndexDefinition; import org.apache.jackrabbit.oak.plugins.index.search.IndexDefinition.IndexingRule; import org.apache.jackrabbit.oak.plugins.index.search.IndexDefinition.SecureFacetConfiguration; +import org.apache.jackrabbit.oak.plugins.index.IndexConstants; import org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexLookup; import org.apache.jackrabbit.oak.plugins.index.lucene.reader.LuceneIndexReader; import org.apache.jackrabbit.oak.plugins.index.lucene.spi.FulltextQueryTermsProvider; @@ -1123,6 +1124,11 @@ public class LucenePropertyIndex extends FulltextIndex { continue; } + if (IndexConstants.INDEX_TAG_OPTION.equals(name) || + IndexConstants.INDEX_NAME_OPTION.equals(name)) { + continue; + } + if (pr.first != null && pr.first.equals(pr.last) && pr.firstIncluding && pr.lastIncluding) { String first = pr.first.getValue(STRING); diff --git a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryCommonTest.java b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryCommonTest.java index f77ed78..e158d2f 100644 --- a/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryCommonTest.java +++ b/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryCommonTest.java @@ -23,12 +23,18 @@ import org.apache.jackrabbit.oak.plugins.index.LuceneIndexOptions; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore; import org.junit.After; import org.junit.Rule; +import org.junit.Test; import org.junit.rules.TemporaryFolder; +import static org.junit.Assert.assertEquals; + import java.io.File; +import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import javax.jcr.query.Query; + /** * Tests the query engine using the default index implementation: the * {@link LuceneIndexProvider} @@ -53,4 +59,12 @@ public class LuceneIndexQueryCommonTest extends IndexQueryCommonTest { executorService.shutdown(); } + @Test + public void descendantTestWithIndexTagExplain() throws Exception { + List<String> result = executeQuery( + "explain select [jcr:path] from [nt:base] where isdescendantnode('/test') option (index tag x)", Query.JCR_SQL2); + assertEquals("[[nt:base] as [nt:base] /* lucene:test-index(/oak:index/test-index) :ancestors:/test\n" + + " where isdescendantnode([nt:base], [/test]) */]", result.toString()); + } + } diff --git a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java index 3848ca5..25fb93e 100644 --- a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java +++ b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/ElasticRequestHandler.java @@ -34,6 +34,7 @@ import org.apache.jackrabbit.oak.plugins.index.search.spi.binary.BlobByteSource; import org.apache.jackrabbit.oak.plugins.index.search.spi.query.FulltextIndex; import org.apache.jackrabbit.oak.plugins.index.search.spi.query.FulltextIndexPlanner; import org.apache.jackrabbit.oak.plugins.index.search.spi.query.FulltextIndexPlanner.PlanResult; +import org.apache.jackrabbit.oak.plugins.index.IndexConstants; import org.apache.jackrabbit.oak.spi.query.Filter; import org.apache.jackrabbit.oak.spi.query.QueryConstants; import org.apache.jackrabbit.oak.spi.query.QueryIndex; @@ -668,6 +669,11 @@ public class ElasticRequestHandler { continue; } + if (IndexConstants.INDEX_TAG_OPTION.equals(name) || + IndexConstants.INDEX_NAME_OPTION.equals(name)) { + continue; + } + if (pr.first != null && pr.first.equals(pr.last) && pr.firstIncluding && pr.lastIncluding) { String first = pr.first.getValue(Type.STRING); first = first.replace("\\", ""); diff --git a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexQueryCommonTest.java b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexQueryCommonTest.java index 4ec7a00..5da4a6a 100644 --- a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexQueryCommonTest.java +++ b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexQueryCommonTest.java @@ -21,6 +21,13 @@ import org.apache.jackrabbit.oak.api.ContentRepository; import org.apache.jackrabbit.oak.plugins.index.IndexQueryCommonTest; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore; import org.junit.ClassRule; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +import java.util.List; + +import javax.jcr.query.Query; public class ElasticIndexQueryCommonTest extends IndexQueryCommonTest { @@ -39,4 +46,15 @@ public class ElasticIndexQueryCommonTest extends IndexQueryCommonTest { repositoryOptionsUtil = elasticTestRepositoryBuilder.build(); return repositoryOptionsUtil.getOak().createContentRepository(); } + + @Test + public void descendantTestWithIndexTagExplain() throws Exception { + List<String> result = executeQuery( + "explain select [jcr:path] from [nt:base] where isdescendantnode('/test') option (index tag x)", Query.JCR_SQL2); + assertEquals("[[nt:base] as [nt:base] /* elasticsearch:test-index(/oak:index/test-index) " + + "{\"bool\":{\"filter\":[{\"term\":{\":ancestors\":{\"value\":\"/test\",\"boost\":1.0}}}]," + + "\"adjust_pure_negative\":true,\"boost\":1.0}}\n" + + " where isdescendantnode([nt:base], [/test]) */]", result.toString()); + } + } diff --git a/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexQueryCommonTest.java b/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexQueryCommonTest.java index 42a1e06..e05d89e 100644 --- a/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexQueryCommonTest.java +++ b/oak-search/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexQueryCommonTest.java @@ -26,6 +26,8 @@ import org.junit.Test; import java.util.*; +import javax.jcr.query.Query; + import static java.util.Collections.singletonList; import static java.util.Arrays.asList; import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; @@ -55,6 +57,7 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { indexDefn = createTestIndexNode(index, indexOptions.getIndexType()); TestUtil.useV2(indexDefn); indexDefn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, true); + indexDefn.setProperty("tags", "x"); Tree props = TestUtil.newRulePropTree(indexDefn, "nt:base"); props.getParent().setProperty(FulltextIndexConstants.INDEX_NODE_NAME, true); @@ -103,7 +106,7 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { final String query = "select [jcr:path] from [nt:base] where isdescendantnode('/test') and contains(*, 'hello')"; assertEventually(() -> { - Iterator<String> result = executeQuery(query, "JCR-SQL2").iterator(); + Iterator<String> result = executeQuery(query, Query.JCR_SQL2).iterator(); List<String> paths = new ArrayList<>(); result.forEachRemaining(paths::add); assertEquals(2, paths.size()); @@ -116,7 +119,7 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { root.commit(); assertEventually(() -> { - Iterator<String> result = executeQuery(query, "JCR-SQL2").iterator(); + Iterator<String> result = executeQuery(query, Query.JCR_SQL2).iterator(); List<String> paths = new ArrayList<>(); result.forEachRemaining(paths::add); assertEquals(1, paths.size()); @@ -134,7 +137,25 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { assertEventually(() -> { Iterator<String> result = executeQuery( "select [jcr:path] from [nt:base] where isdescendantnode('/test')", - "JCR-SQL2").iterator(); + Query.JCR_SQL2).iterator(); + assertTrue(result.hasNext()); + assertEquals("/test/a", result.next()); + assertEquals("/test/b", result.next()); + assertFalse(result.hasNext()); + }); + } + + @Test + public void descendantTestWithIndexTag() throws Exception { + Tree test = root.getTree("/").addChild("test"); + test.addChild("a"); + test.addChild("b"); + root.commit(); + + assertEventually(() -> { + Iterator<String> result = executeQuery( + "select [jcr:path] from [nt:base] where isdescendantnode('/test') option (index tag x)", + Query.JCR_SQL2).iterator(); assertTrue(result.hasNext()); assertEquals("/test/a", result.next()); assertEquals("/test/b", result.next()); @@ -152,7 +173,7 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { assertEventually(() -> { Iterator<String> result = executeQuery( "select [jcr:path] from [nt:base] where isdescendantnode('/test') and name='World'", - "JCR-SQL2").iterator(); + Query.JCR_SQL2).iterator(); assertTrue(result.hasNext()); assertEquals("/test/a", result.next()); assertFalse(result.hasNext()); @@ -178,7 +199,7 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { assertEventually(() -> { Iterator<String> result = executeQuery( "select p.[jcr:path], p2.[jcr:path] from [nt:base] as p inner join [nt:base] as p2 on ischildnode(p2, p) where p.[jcr:path] = '/'", - "JCR-SQL2").iterator(); + Query.JCR_SQL2).iterator(); assertTrue(result.hasNext()); assertEquals("/, /children", result.next()); assertEquals("/, /jcr:system", result.next()); @@ -308,7 +329,7 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { root.commit(); assertEventually(() -> { - Iterator<String> result = executeQuery(nativeQueryString, "JCR-SQL2").iterator(); + Iterator<String> result = executeQuery(nativeQueryString, Query.JCR_SQL2).iterator(); assertTrue(result.hasNext()); assertEquals("/test/a", result.next()); assertFalse(result.hasNext()); @@ -325,7 +346,7 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { test.addChild("c").setProperty("text", "He said Hi."); root.commit(); assertEventually(() -> { - Iterator<String> result = executeQuery(nativeQueryString, "JCR-SQL2").iterator(); + Iterator<String> result = executeQuery(nativeQueryString, Query.JCR_SQL2).iterator(); assertTrue(result.hasNext()); assertEquals("/test/a", result.next()); assertTrue(result.hasNext()); @@ -348,7 +369,7 @@ public abstract class IndexQueryCommonTest extends AbstractQueryTest { test.addChild("h").setProperty("text", "Hello"); root.commit(); assertEventually(() -> { - Iterator<String> result = executeQuery(query, "JCR-SQL2").iterator(); + Iterator<String> result = executeQuery(query, Query.JCR_SQL2).iterator(); assertTrue(result.hasNext()); assertEquals("/test/a", result.next()); assertTrue(result.hasNext());
