Author: catholicon
Date: Mon Oct  2 01:20:12 2017
New Revision: 1810290

URL: http://svn.apache.org/viewvc?rev=1810290&view=rev
Log:
OAK-6734: IndexPlan: add supportsPathRestrictions

Lucene property index would expose support of path restriction while planning.

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java?rev=1810290&r1=1810289&r2=1810290&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
 Mon Oct  2 01:20:12 2017
@@ -653,6 +653,7 @@ class IndexPlanner {
                 .setIncludesNodeData(false) // we should not include node data
                 .setFilter(filter)
                 .setPathPrefix(getPathPrefix())
+                
.setSupportsPathRestriction(definition.evaluatePathRestrictions())
                 .setDelayed(true) //Lucene is always async
                 .setAttribute(LucenePropertyIndex.ATTR_PLAN_RESULT, result)
                 .setEstimatedEntryCount(estimatedEntryCount())

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java?rev=1810290&r1=1810289&r2=1810290&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
 Mon Oct  2 01:20:12 2017
@@ -26,6 +26,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.api.Type.STRINGS;
 import static 
org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES;
 import static 
org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
+import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.EVALUATE_PATH_RESTRICTION;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_DATA_CHILD_NAME;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_RULES;
 import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.ORDERED_PROP_NAMES;
@@ -951,6 +952,28 @@ public class IndexPlannerTest {
         assertFalse(pr.hasProperty("metadata/baz"));
     }
 
+    @Test
+    public void evaluatePathRestrictionExposesSupportCorrectly() throws 
Exception{
+        FilterImpl filter = createFilter("nt:base");
+        filter.restrictProperty("foo", Operator.EQUAL, 
PropertyValues.newString("bar"));
+
+        // Evaluates path restriction
+        NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", 
of("foo"), "async")
+                .setProperty(EVALUATE_PATH_RESTRICTION, true);
+        IndexNode node = createIndexNode(new IndexDefinition(root, 
defn.getNodeState(), "/foo"));
+        IndexPlanner planner = new IndexPlanner(node, "/foo", filter, 
Collections.<OrderEntry>emptyList());
+        QueryIndex.IndexPlan plan = planner.getPlan();
+        assertTrue(plan.getSupportsPathRestriction());
+
+        // Doesn't evaluate path restriction
+        defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), 
"async")
+                .setProperty(EVALUATE_PATH_RESTRICTION, false);
+        node = createIndexNode(new IndexDefinition(root, defn.getNodeState(), 
"/foo1"));
+        planner = new IndexPlanner(node, "/foo1", filter, 
Collections.<OrderEntry>emptyList());
+        plan = planner.getPlan();
+        assertFalse(plan.getSupportsPathRestriction());
+    }
+
     private IndexPlanner createPlannerForFulltext(NodeState defn, 
FullTextExpression exp) throws IOException {
         IndexNode node = createIndexNode(new IndexDefinition(root, defn, 
"/foo"));
         FilterImpl filter = createFilter("nt:base");


Reply via email to