You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by Sergey Kabashnyuk <ks...@gmail.com> on 2008/04/18 12:22:44 UTC
Invalid combination of jcr:path clauses
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
Re: Invalid combination of jcr:path clauses
Posted by Marcel Reutegger <ma...@gmx.net>.
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
>