Author: chetanm Date: Mon Oct 16 08:06:11 2017 New Revision: 1812254 URL: http://svn.apache.org/viewvc?rev=1812254&view=rev Log: OAK-6832 - Synchronous nodetype lucene index support
Prepration step for nodetype support Remove usage of property definition from lookup as its not required in lookup flow Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.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=1812254&r1=1812253&r2=1812254&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 16 08:06:11 2017 @@ -641,7 +641,7 @@ class IndexPlanner { PropertyDefinition pd = result.propDefns.get(pr.propertyName); if (pd != null) { - PropertyIndexResult e = new PropertyIndexResult(pd, propertyName, pr); + PropertyIndexResult e = new PropertyIndexResult(propertyName, pr); if (pd.unique) { unique.add(e); } else { @@ -974,12 +974,10 @@ class IndexPlanner { } public static class PropertyIndexResult { - final PropertyDefinition pd; final String propertyName; final PropertyRestriction pr; - public PropertyIndexResult(PropertyDefinition pd, String propertyName, PropertyRestriction pr) { - this.pd = pd; + public PropertyIndexResult(String propertyName, PropertyRestriction pr) { this.propertyName = propertyName; this.pr = pr; } Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java?rev=1812254&r1=1812253&r2=1812254&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java Mon Oct 16 08:06:11 2017 @@ -1563,7 +1563,7 @@ public class LucenePropertyIndex impleme HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(pr.indexPath, NodeStateUtils.getNode(rootState, pr.indexPath), plan.getPathPrefix(), false); PropertyIndexResult pir = pr.getPropertyIndexResult(); - Iterable<String> paths = lookup.query(plan.getFilter(), pir.pd, pir.propertyName, pir.pr); + Iterable<String> paths = lookup.query(plan.getFilter(), pir.propertyName, pir.pr); //No need for path restriction evaluation as thats taken care by PropertyIndex impl itself //via content mirror strategy Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java?rev=1812254&r1=1812253&r2=1812254&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java Mon Oct 16 08:06:11 2017 @@ -23,8 +23,9 @@ import java.util.Collections; import java.util.Set; import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; import org.apache.jackrabbit.oak.api.PropertyValue; -import org.apache.jackrabbit.oak.plugins.index.lucene.PropertyDefinition; +import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexUtil; import org.apache.jackrabbit.oak.plugins.index.property.ValuePatternUtil; import org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy; @@ -39,6 +40,7 @@ import static org.apache.jackrabbit.oak. import static org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexUtil.PROPERTY_INDEX; import static org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexUtil.PROP_HEAD_BUCKET; import static org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexUtil.PROP_PREVIOUS_BUCKET; +import static org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexUtil.uniquePropertyIndex; import static org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexUtil.encode; public class HybridPropertyIndexLookup { @@ -64,30 +66,27 @@ public class HybridPropertyIndexLookup { * Performs query based on provided property restriction * * @param filter filter from the query being performed - * @param pd property definition as per index definition * @param propertyName actual property name which may or may not be same as * property name in property restriction * @param restriction property restriction matching given property * @return iterable consisting of absolute paths as per index content */ - public Iterable<String> query(Filter filter, PropertyDefinition pd, - String propertyName, Filter.PropertyRestriction restriction) { + public Iterable<String> query(Filter filter, String propertyName, Filter.PropertyRestriction restriction) { //The propertyName may differ from name in restriction. For e.g. for relative properties //the restriction property name can be 'jcr:content/status' while the index has indexed //for 'status' Set<String> values = ValuePatternUtil.getAllValues(restriction); Set<String> encodedValues = PropertyIndexUtil.encode(values); - return query(filter, pd, propertyName, encodedValues); + return query(filter, propertyName, encodedValues); } - public Iterable<String> query(Filter filter, PropertyDefinition pd, - String propertyName, PropertyValue value) { - return query(filter, pd, propertyName, encode(value, pd.valuePattern)); + public Iterable<String> query(Filter filter, String propertyName, PropertyValue value) { + Set<String> values = Sets.newHashSet(value.getValue(Type.STRINGS)); + return query(filter, propertyName, encode(values)); } - private Iterable<String> query(Filter filter, PropertyDefinition pd, - String propertyName, Set<String> encodedValues) { + private Iterable<String> query(Filter filter, String propertyName, Set<String> encodedValues) { String propIdxNodeName = HybridPropertyIndexUtil.getNodeName(propertyName); NodeState propIndexRootNode = indexState.getChildNode(PROPERTY_INDEX); NodeState propIndexNode = propIndexRootNode.getChildNode(propIdxNodeName); @@ -97,7 +96,7 @@ public class HybridPropertyIndexLookup { String indexName = indexPath + "(" + propertyName + ")"; Iterable<String> result; - if (pd.unique) { + if (uniquePropertyIndex(propIndexNode)) { result = queryUnique(filter, indexName, propIndexRootNode, propIdxNodeName, encodedValues); } else { result = querySimple(filter, indexName, propIndexNode, encodedValues); Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java?rev=1812254&r1=1812253&r2=1812254&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java Mon Oct 16 08:06:11 2017 @@ -108,7 +108,7 @@ public class HybridPropertyIndexLookupTe filter.restrictProperty("foo", Operator.EQUAL, newString("bar")); HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState()); - Iterable<String> paths = lookup.query(filter, pd(propertyName), propertyName, + Iterable<String> paths = lookup.query(filter, propertyName, filter.getPropertyRestriction(propertyName)); assertThat(ImmutableList.copyOf(paths), containsInAnyOrder("/a")); @@ -128,14 +128,14 @@ public class HybridPropertyIndexLookupTe HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState(), "/content", false); - Iterable<String> paths = lookup.query(filter, pd(propertyName), propertyName, + Iterable<String> paths = lookup.query(filter, propertyName, filter.getPropertyRestriction(propertyName)); assertThat(ImmutableList.copyOf(paths), containsInAnyOrder("/a")); lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState(), "/content", true); - paths = lookup.query(filter, pd(propertyName), propertyName, + paths = lookup.query(filter, propertyName, filter.getPropertyRestriction(propertyName)); assertThat(ImmutableList.copyOf(paths), containsInAnyOrder("/content/a")); @@ -158,7 +158,7 @@ public class HybridPropertyIndexLookupTe private List<String> query(Filter filter, String propertyName, String propertyRestrictionName) { HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState()); - Iterable<String> paths = lookup.query(filter, pd(propertyName), propertyName, + Iterable<String> paths = lookup.query(filter, propertyName, filter.getPropertyRestriction(propertyRestrictionName)); return ImmutableList.copyOf(paths); } Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java?rev=1812254&r1=1812253&r2=1812254&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java Mon Oct 16 08:06:11 2017 @@ -207,7 +207,7 @@ public class HybridPropertyIndexStorageT private List<String> query(String propertyName, PropertyValue value) { HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState()); FilterImpl filter = createFilter(root, "nt:base"); - Iterable<String> paths = lookup.query(filter, pd(propertyName), propertyName, value); + Iterable<String> paths = lookup.query(filter, propertyName, value); return ImmutableList.copyOf(paths); } Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java?rev=1812254&r1=1812253&r2=1812254&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java Mon Oct 16 08:06:11 2017 @@ -329,8 +329,7 @@ public class PropertyIndexCleanerTest { NodeState root = nodeStore.getRoot(); HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, getNode(root, indexPath)); FilterImpl filter = FilterImpl.newTestInstance(); - Iterable<String> paths = lookup.query(filter, pd(indexPath, propertyName), propertyName, - PropertyValues.newString(value)); + Iterable<String> paths = lookup.query(filter, propertyName, PropertyValues.newString(value)); return ImmutableList.copyOf(paths); }