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


Reply via email to