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 2016/02/25 11:53:30 UTC
svn commit: r1732285 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/index/property/
main/java/org/apache/jackrabbit/oak/query/index/
main/java/org/apache/jackrabbit/oak/spi/query/
test/java/org/apache/jackrabbit/oa...
Author: thomasm
Date: Thu Feb 25 10:53:30 2016
New Revision: 1732285
URL: http://svn.apache.org/viewvc?rev=1732285&view=rev
Log:
OAK-4038 o.a.j.o.spi.query.Filter exposes unexported class o.a.j.o.query.ast.SelectorImpl
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/MultiPropertyOrTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java?rev=1732285&r1=1732284&r2=1732285&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java Thu Feb 25 10:53:30 2016
@@ -192,7 +192,7 @@ class PropertyIndex implements QueryInde
// not an appropriate index for native search
return Double.POSITIVE_INFINITY;
}
- if (filter.getPropertyRestrictions().isEmpty() && filter.getSelector().getSelectorConstraints().isEmpty()) {
+ if (filter.getPropertyRestrictions().isEmpty()) {
// not an appropriate index for no property restrictions & selector constraints
return Double.POSITIVE_INFINITY;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java?rev=1732285&r1=1732284&r2=1732285&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java Thu Feb 25 10:53:30 2016
@@ -35,14 +35,6 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.index.property.strategy.IndexStoreStrategy;
import org.apache.jackrabbit.oak.plugins.index.property.strategy.UniqueEntryStoreStrategy;
import org.apache.jackrabbit.oak.query.QueryEngineSettings;
-import org.apache.jackrabbit.oak.query.ast.ComparisonImpl;
-import org.apache.jackrabbit.oak.query.ast.ConstraintImpl;
-import org.apache.jackrabbit.oak.query.ast.DynamicOperandImpl;
-import org.apache.jackrabbit.oak.query.ast.InImpl;
-import org.apache.jackrabbit.oak.query.ast.Operator;
-import org.apache.jackrabbit.oak.query.ast.OrImpl;
-import org.apache.jackrabbit.oak.query.ast.PropertyValueImpl;
-import org.apache.jackrabbit.oak.query.ast.StaticOperandImpl;
import org.apache.jackrabbit.oak.spi.query.Cursor;
import org.apache.jackrabbit.oak.spi.query.Cursors;
import org.apache.jackrabbit.oak.spi.query.Filter;
@@ -72,8 +64,6 @@ public class PropertyIndexPlan {
private static final IndexStoreStrategy UNIQUE =
new UniqueEntryStoreStrategy();
- private final NodeState root;
-
private final NodeState definition;
private final String name;
@@ -98,7 +88,6 @@ public class PropertyIndexPlan {
PropertyIndexPlan(String name, NodeState root, NodeState definition, Filter filter) {
this.name = name;
- this.root = root;
this.definition = definition;
this.properties = newHashSet(definition.getNames(PROPERTY_NAMES));
pathFilter = PathFilter.from(definition.builder());
@@ -162,24 +151,6 @@ public class PropertyIndexPlan {
}
}
}
-
- // OAK-1965: let's see if we can find a (x='...' OR y='...')
- // constraint where both x and y are covered by this index
- // TODO: avoid repeated scans through the constraints
- for (ConstraintImpl constraint
- : filter.getSelector().getSelectorConstraints()) {
- if (constraint instanceof OrImpl) {
- Set<String> values = findMultiProperty((OrImpl) constraint);
- if (values != null) {
- double cost = strategy.count(filter, root, definition, values, MAX_COST);
- if (cost < bestCost) {
- bestDepth = 1;
- bestValues = values;
- bestCost = cost;
- }
- }
- }
- }
}
this.depth = bestDepth;
@@ -187,46 +158,6 @@ public class PropertyIndexPlan {
this.cost = COST_OVERHEAD + bestCost;
}
- private Set<String> findMultiProperty(OrImpl or) {
- Set<String> values = newLinkedHashSet();
- for (ConstraintImpl constraint : or.getConstraints()) {
- if (constraint instanceof ComparisonImpl) {
- ComparisonImpl comparison = (ComparisonImpl) constraint;
- if (isIndexed(comparison.getOperand1())
- && comparison.getOperator() == Operator.EQUAL) {
- values.addAll(encode(comparison.getOperand2().currentValue()));
- } else {
- return null;
- }
- } else if (constraint instanceof InImpl) {
- InImpl in = (InImpl) constraint;
- if (isIndexed(in.getOperand1())) {
- for (StaticOperandImpl operand : in.getOperand2()) {
- values.addAll(encode(operand.currentValue()));
- }
- } else {
- return null;
- }
- } else {
- return null;
- }
- }
- return values;
- }
-
- /**
- * Checks whether the given dynamic operand is a property
- * covered by this index.
- */
- private boolean isIndexed(DynamicOperandImpl operand) {
- if (operand instanceof PropertyValueImpl) {
- PropertyValueImpl property = (PropertyValueImpl) operand;
- return properties.contains(property.getPropertyName());
- } else {
- return false;
- }
- }
-
private static Set<String> getValues(PropertyRestriction restriction) {
if (restriction.firstIncluding
&& restriction.lastIncluding
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java?rev=1732285&r1=1732284&r2=1732285&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java Thu Feb 25 10:53:30 2016
@@ -218,7 +218,6 @@ public class FilterImpl implements Filte
return alwaysFalse;
}
- @Override
public SelectorImpl getSelector() {
return selector;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java?rev=1732285&r1=1732284&r2=1732285&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java Thu Feb 25 10:53:30 2016
@@ -28,7 +28,6 @@ import javax.jcr.PropertyType;
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.query.QueryEngineSettings;
-import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
import org.apache.jackrabbit.oak.query.fulltext.FullTextExpression;
/**
@@ -45,13 +44,6 @@ import org.apache.jackrabbit.oak.query.f
public interface Filter {
/**
- * Get the selector associated with this filter.
- *
- * @return selector
- */
- SelectorImpl getSelector();
-
- /**
* Get the list of property restrictions, if any. Each property may contain
* multiple restrictions, for example x=1 and x=2. For this case, only
* multi-valued properties match that contain both 1 and 2.
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/MultiPropertyOrTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/MultiPropertyOrTest.java?rev=1732285&r1=1732284&r2=1732285&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/MultiPropertyOrTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/MultiPropertyOrTest.java Thu Feb 25 10:53:30 2016
@@ -99,7 +99,8 @@ public class MultiPropertyOrTest extends
Query.JCR_SQL2);
assertEquals(1, lines.size());
// make sure it used the property index
- assertTrue(lines.get(0), lines.get(0).contains("property xyz IN (foo, bar)"));
+ assertTrue(lines.get(0), lines.get(0).contains("property xyz = foo"));
+ assertTrue(lines.get(0), lines.get(0).contains("property xyz = bar"));
assertQuery(
"select [jcr:path] from [nt:base] where [x] = 'foo' OR [y] = 'foo'",