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

Reply via email to