Author: thomasm
Date: Tue Jul  8 06:39:10 2014
New Revision: 1608671

URL: http://svn.apache.org/r1608671
Log:
OAK-1933 Query: UnsupportedOperationException for some combinations of "or" and 
"and" conditions

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java
    
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java?rev=1608671&r1=1608670&r2=1608671&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java
 Tue Jul  8 06:39:10 2014
@@ -110,7 +110,13 @@ public class AndImpl extends ConstraintI
         for (Entry<DynamicOperandImpl, Set<StaticOperandImpl>> e2 : 
m2.entrySet()) {
             Set<StaticOperandImpl> s = result.get(e2.getKey());
             if (s != null) {
-                s.retainAll(e2.getValue());
+                // OAK-1933
+                // a property can have multiple values at the same time,
+                // so that "where a=1 and a=2" needs to be kept and can not
+                // be reduced to "where false" - in fact, we could 
+                // extend it to "where a in (1, 2)" so that an index can be 
used,
+                // but we might as well keep it at "where a = 1" as that would
+                // also use an index
             } else {
                 result.put(e2.getKey(), e2.getValue());
             }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java?rev=1608671&r1=1608670&r2=1608671&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/QueryIndex.java
 Tue Jul  8 06:39:10 2014
@@ -194,8 +194,8 @@ public interface QueryIndex {
         double getCostPerEntry();
 
         /**
-         * The estimated number of entries. This value does not have to be
-         * accurate.
+         * The estimated number of entries in the cursor that is returned by 
the query method,
+         * when using this plan. This value does not have to be accurate.
          * 
          * @return the estimated number of entries
          */

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt?rev=1608671&r1=1608670&r2=1608671&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
 Tue Jul  8 06:39:10 2014
@@ -29,6 +29,9 @@
 
 commit / + "test": { "a": { "name": "Hello" }, "b": { "name" : "World" }}
 
+select * from [nt:base] 
+  where [a] = 1 and [b] = 2 and [b] = 3 or [c] = 4
+
 select [jcr:path]
   from [nt:base]
   where [a/name] = 'Hello' or [b/name] = 'World'


Reply via email to