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));
}