You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Thomas Mueller (Jira)" <ji...@apache.org> on 2020/10/06 15:21:00 UTC
[jira] [Created] (OAK-9252) Query: multi-valued property condition
can fail with "Type must be an array type"
Thomas Mueller created OAK-9252:
-----------------------------------
Summary: Query: multi-valued property condition can fail with "Type must be an array type"
Key: OAK-9252
URL: https://issues.apache.org/jira/browse/OAK-9252
Project: Jackrabbit Oak
Issue Type: Improvement
Reporter: Thomas Mueller
A condition of the form "property = 'literal'" can fail with the error messageĀ "Type must be an array type" if:
* the property is multi-value and has no entries (count 0)
* the property type is not String (e.g. Name)
Example query:
{noformat}
select * from [nt:base]
where isdescendantnode('/etc')
and [jcr:mixinTypes] = 'mix:referenceable'
{noformat}
This can fail if there is no index for this (e.g. by disabling the nodetype index), and if there is a node with an empty mixin type. Test case (org.apache.jackrabbit.oak.jcr.query.QueryTest):
{noformat}
@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();
}
{noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)