Author: thomasm
Date: Tue Feb 24 09:24:42 2015
New Revision: 1661869
URL: http://svn.apache.org/r1661869
Log:
OAK-2529 Index usage for "not equals" conditions
Modified:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexQueryTest.java
jackrabbit/oak/branches/1.0/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
Modified:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java?rev=1661869&r1=1661868&r2=1661869&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
(original)
+++
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
Tue Feb 24 09:24:42 2015
@@ -117,17 +117,18 @@ public class PropertyValueImpl extends D
@Override
public void restrict(FilterImpl f, Operator operator, PropertyValue v) {
if (f.getSelector().equals(selector)) {
- if (operator == Operator.NOT_EQUAL && v != null) {
- // not supported
- return;
- }
String pn = normalizePropertyName(propertyName);
if (pn.equals(QueryImpl.JCR_PATH)) {
if (operator == Operator.EQUAL) {
f.restrictPath(v.getValue(Type.STRING),
PathRestriction.EXACT);
}
} else {
- f.restrictProperty(pn, operator, v, propertyType);
+ if (operator == Operator.NOT_EQUAL && v != null) {
+ // "x <> 1" also means "x is not null"
+ f.restrictProperty(pn, Operator.NOT_EQUAL, null,
propertyType);
+ } else {
+ f.restrictProperty(pn, operator, v, propertyType);
+ }
}
}
}
Modified:
jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexQueryTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexQueryTest.java?rev=1661869&r1=1661868&r2=1661869&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexQueryTest.java
(original)
+++
jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexQueryTest.java
Tue Feb 24 09:24:42 2015
@@ -33,7 +33,6 @@ import org.apache.jackrabbit.oak.api.Con
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.api.ResultRow;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.plugins.index.nodetype.NodeTypeIndexProvider;
import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
import org.apache.jackrabbit.oak.query.AbstractQueryTest;
import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
Modified:
jackrabbit/oak/branches/1.0/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt?rev=1661869&r1=1661868&r2=1661869&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.0/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
(original)
+++
jackrabbit/oak/branches/1.0/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
Tue Feb 24 09:24:42 2015
@@ -24,6 +24,10 @@
# * new tests are typically be added on top, after the syntax docs
# * use ascii character only
+explain select * from [nt:base] where [jcr:uuid] <> '1'
+[nt:base] as [nt:base] /* property jcr:uuid
+ where [nt:base].[jcr:uuid] <> cast('1' as string) */
+
explain select * from [nt:base] as a
left outer join [nt:base] as b on a.x=b.y
where a.y is null and b.z = 1