Hi Sergey,

SQL expressions on jcr:path in jackrabbit are very restricted because it isn't a real property.

see section 6.6.3.4 'Path Constraint' of JSR 170.

with XPath you can use the fn:name() function:

test/*[fn:name() = 'live' or fn:name() = 'draft']//element(*, nt:base)

regards
 marcel

Sergey Kabashnyuk wrote:
Hi all.
How can we create an XPath or SQL query to retrieve two things in the JCR?
We can do :
select * from nt:base where jcr:path like '/test/live/%'

but can we do ?
select * from nt:base where
jcr:path like '/test/live/%'
or jcr:path like '/test/draft/%'

I have created a small test to check this issue.
And looks like it can't be done.
I check both 1.4 and 1.4.2



Node testRoot = superuser.getRootNode().addNode("test");

Node draftNode = testRoot.addNode("draft");
draftNode.addNode("sub1");
draftNode.addNode("sub2");

Node liveNode = testRoot.addNode("live");
Node c1 = liveNode.addNode("child1");
Node c2 = liveNode.addNode("child2");
superuser.save();

executeSqlQuery(superuser, " select * from nt:base "
+ " where jcr:path like '/test/live/%' or jcr:path like '/test/draft/%'", new Node[] { c1,
c2 });

With

javax.jcr.query.InvalidQueryException: Invalid combination of jcr:path clauses at org.apache.jackrabbit.core.query.sql.JCRSQLQueryBuilder.createQuery(JCRSQLQueryBuilder.java:168) at org.apache.jackrabbit.core.query.sql.QueryBuilder.createQueryTree(QueryBuilder.java:39) at org.apache.jackrabbit.core.query.QueryParser.parse(QueryParser.java:57) at org.apache.jackrabbit.core.query.lucene.QueryImpl.<init>(QueryImpl.java:91) at org.apache.jackrabbit.core.query.lucene.SearchIndex.createExecutableQuery(SearchIndex.java:573)
    at org.apache.jackrabbit.core.query.QueryImpl.init(QueryImpl.java:127)
at org.apache.jackrabbit.core.SearchManager.createQuery(SearchManager.java:295) at org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery(QueryManagerImpl.java:94) at org.apache.jackrabbit.test.api.query.AbstractQueryTest.executeSqlQuery(AbstractQueryTest.java:264)

Thanks

Sergey Kabashnyuk
eXo Platform SAS


Reply via email to