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