Search code examples
jcrjackrabbit

UnsupportedRepositoryOperationException when using OR and LOWER()


I am just getting started to use JackRabbit queries and facing this issue. This query is semantically rational but it shows Unsupportedxxx. Remove LOWER(), it runs without error. Is this a bug of JackRabbit? How can I fix it?

Query

SELECT t.*
FROM [nt:base] AS t
WHERE t.[jcr:primaryType] = 'someType'
    OR (LOWER(NAME(t)) = 'a')

Exceptions

javax.jcr.UnsupportedRepositoryOperationException: null
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.getNodeNameQuery(LuceneQueryFactory.java:639) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.getComparisonQuery(LuceneQueryFactory.java:625) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.create(LuceneQueryFactory.java:430) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.addBooleanConstraint(LuceneQueryFactory.java:556) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.getOrQuery(LuceneQueryFactory.java:532) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.create(LuceneQueryFactory.java:422) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.mapConstraintToQueryAndFilter(LuceneQueryFactory.java:409) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.mapConstraintToQueryAndFilter(LuceneQueryFactory.java:361) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.LuceneQueryFactory.execute(LuceneQueryFactory.java:210) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.join.QueryEngine.execute(QueryEngine.java:465) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.join.QueryEngine.execute(QueryEngine.java:126) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.lucene.join.QueryEngine.execute(QueryEngine.java:115) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.QueryObjectModelImpl$2.perform(QueryObjectModelImpl.java:129) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.QueryObjectModelImpl$2.perform(QueryObjectModelImpl.java:124) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216) ~[jackrabbit-core-2.12.4.jar:2.12.4]
    at org.apache.jackrabbit.core.query.QueryObjectModelImpl.execute(QueryObjectModelImpl.java:123) ~[jackrabbit-core-2.12.4.jar:2.12.4]

Solution

  • Ticket filed at https://issues.apache.org/jira/browse/JCR-4234

    A workaround is to use

    ... OR LOWER(LOCALNAME(t)) LIKE ...