You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2022/01/06 14:13:46 UTC

[jackrabbit-oak] branch OAK-9653 created (now 994cba6)

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

thomasm pushed a change to branch OAK-9653
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git.


      at 994cba6  OAK-9653 Adding the index tag option interferes with regex properties

This branch includes the following new commits:

     new 994cba6  OAK-9653 Adding the index tag option interferes with regex properties

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[jackrabbit-oak] 01/01: OAK-9653 Adding the index tag option interferes with regex properties

Posted by th...@apache.org.
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 <th...@apache.org>
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());