Author: thomasm
Date: Thu Oct 15 08:28:13 2020
New Revision: 1882515

URL: http://svn.apache.org/viewvc?rev=1882515&view=rev
Log:
OAK-9252 Query: multi-valued property condition can fail

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java?rev=1882515&r1=1882514&r2=1882515&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElement.java
 Thu Oct 15 08:28:13 2020
@@ -121,9 +121,6 @@ abstract class AstElement {
     }
     
     protected PropertyValue convertValueToType(PropertyValue v, PropertyValue 
targetType) {
-        if (targetType.count() == 0) {
-            return v;
-        }
         int type = targetType.getType().tag();
         if (v.getType().tag() == type) {
             return v;

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java?rev=1882515&r1=1882514&r2=1882515&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java
 Thu Oct 15 08:28:13 2020
@@ -34,6 +34,7 @@ import java.util.Set;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
+import javax.jcr.Property;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -948,6 +949,30 @@ public class QueryTest extends AbstractR
         session.logout();
     }
 
+    @Test
+    public void emptyMixin() throws RepositoryException {
+        Session session = createAdminSession();
+        Node p = session.getRootNode().addNode("etc");
+        Node r = p.addNode("r", "nt:unstructured");
+        r.addMixin("mix:referenceable");
+        session.save();
+        r.removeMixin("mix:referenceable");
+        session.save();
+        assertTrue(r.hasProperty("jcr:mixinTypes"));
+        Property mix = r.getProperty("jcr:mixinTypes");
+        assertTrue(mix.isMultiple());
+        assertEquals(0, mix.getValues().length);
+        session.save();
+        Query q = session.getWorkspace().getQueryManager().createQuery(
+                "select * from [nt:base] where isdescendantnode('/etc') " +
+                "and [jcr:mixinTypes] = 'mix:referenceable' " +
+                "option(index name [x])", Query.JCR_SQL2);
+        QueryResult qr = q.execute();
+        NodeIterator ni = qr.getNodes();
+        assertFalse(ni.hasNext());
+        session.logout();
+    }
+
     private static void assertPlan(String plan, String planPrefix) {
         assertTrue("Unexpected plan: " + plan, plan.startsWith(planPrefix));
     }


Reply via email to