You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jackrabbit.apache.org by Rakesh Vidyadharan <ra...@sptci.com> on 2009/11/08 05:30:11 UTC

Equivalent JCR_SQL2 statement

Since XPath is deprecated in JCR 2.0, I am trying to move to JCR_SQL2  
(JR-2.0-beta1).  I have the following XPath query:

//unitTestPage[@cms:nodeType = 'page']

I tried writing the query in SQL as:

select * from nt:unstructured where jcr:path like '/%/unitTestPage'  
and cms:nodeType = 'page'

This statement however fails with an exception:

javax.jcr.query.InvalidQueryException: Query:
select * from nt:(*)unstructured where jcr:path like '/%/ 
unitTestFolder' and cms:nodeType = 'page'; expected: <end>
	at org.apache.jackrabbit.commons.query.sql2.Parser.getSyntaxError 
(Parser.java:968)
	at  
org.apache.jackrabbit.commons.query.sql2.Parser.createQueryObjectModel 
(Parser.java:124)
	at  
org.apache.jackrabbit.commons.query.sql2 
.SQL2QOMBuilder.createQueryObjectModel(SQL2QOMBuilder.java:55)
	at org.apache.jackrabbit.core.query.QOMQueryFactory.createQuery 
(QOMQueryFactory.java:69)
	at org.apache.jackrabbit.core.query.CompoundQueryFactory.createQuery 
(CompoundQueryFactory.java:67)
	at org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery 
(QueryManagerImpl.java:98)

Can some one tell me what I am missing?

Thanks
Rakesh



Re: Equivalent JCR_SQL2 statement

Posted by Rakesh Vidyadharan <ra...@sptci.com>.
On 11 Nov 2009, at 3:23:42 AM, Marcel Reutegger wrote:

> Hi,
> 
> please note that there are no plans to abandon XPath support in
> jackrabbit. the deprecation status is only with the specification.
> therefore I suggest you stick with XPath unless you need functionality
> that requires JQOM or SQL-2.

Thanks, that is good news.  I will stick to XPath for now.

> 
> On Mon, Nov 9, 2009 at 14:32, Rakesh Vidyadharan <ra...@sptci.com> wrote:
>> On 9 Nov 2009, at 1:36:25 AM, Thomas Müller wrote:
>> select * from ['nt:unstructured'] where ['jcr:path'] like '/%/unitTestPage'
>> and ['cms:nodeType'] = 'page'
> 
> that doesn't work because SQL-2 does not support the jcr:path pseudo
> property, which is only present in JCR 1.0 SQL.
> 
> what you rather want is:
> 
> select * from [nt:base] where name() = 'unitTestPage' and
> [cms:nodeType] = 'page'
> 
> regards
> marcel

I tested this as well and still get back no results.  Strange, since I found the SQL2 unit tests in the QOM package of JR, and I was able to verify my syntax against those.  Anyway, XPath for me until later.

Thanks
Rakesh

Re: Equivalent JCR_SQL2 statement

Posted by Marcel Reutegger <ma...@gmx.net>.
Hi,

please note that there are no plans to abandon XPath support in
jackrabbit. the deprecation status is only with the specification.
therefore I suggest you stick with XPath unless you need functionality
that requires JQOM or SQL-2.

On Mon, Nov 9, 2009 at 14:32, Rakesh Vidyadharan <ra...@sptci.com> wrote:
> On 9 Nov 2009, at 1:36:25 AM, Thomas Müller wrote:
> select * from ['nt:unstructured'] where ['jcr:path'] like '/%/unitTestPage'
> and ['cms:nodeType'] = 'page'

that doesn't work because SQL-2 does not support the jcr:path pseudo
property, which is only present in JCR 1.0 SQL.

what you rather want is:

select * from [nt:base] where name() = 'unitTestPage' and
[cms:nodeType] = 'page'

regards
 marcel

> select * from [nt:unstructured] where [jcr:path] like '/%/unitTestPage' and
> [cms:nodeType] = 'page'
>
> Rakesh
>>
>>
>>
>> On Mon, Nov 9, 2009 at 8:20 AM, Thomas Müller <th...@day.com>
>> wrote:
>>>
>>> Hi,
>>>
>>> Try:
>>>
>>> select * from [nt:unstructured] where [jcr:path] like
>>> '/%/unitTestPage' and [cms:nodeType] = 'page'
>>>
>>> Regards,
>>> Thomas
>>>
>>>
>>> On Sun, Nov 8, 2009 at 5:30 AM, Rakesh Vidyadharan <ra...@sptci.com>
>>> wrote:
>>>>
>>>> Since XPath is deprecated in JCR 2.0, I am trying to move to JCR_SQL2
>>>> (JR-2.0-beta1).  I have the following XPath query:
>>>>
>>>> //unitTestPage[@cms:nodeType = 'page']
>>>>
>>>> I tried writing the query in SQL as:
>>>>
>>>> select * from nt:unstructured where jcr:path like '/%/unitTestPage' and
>>>> cms:nodeType = 'page'
>>>>
>>>> This statement however fails with an exception:
>>>>
>>>> javax.jcr.query.InvalidQueryException: Query:
>>>> select * from nt:(*)unstructured where jcr:path like '/%/unitTestFolder'
>>>> and
>>>> cms:nodeType = 'page'; expected: <end>
>>>>       at
>>>>
>>>> org.apache.jackrabbit.commons.query.sql2.Parser.getSyntaxError(Parser.java:968)
>>>>       at
>>>>
>>>> org.apache.jackrabbit.commons.query.sql2.Parser.createQueryObjectModel(Parser.java:124)
>>>>       at
>>>>
>>>> org.apache.jackrabbit.commons.query.sql2.SQL2QOMBuilder.createQueryObjectModel(SQL2QOMBuilder.java:55)
>>>>       at
>>>>
>>>> org.apache.jackrabbit.core.query.QOMQueryFactory.createQuery(QOMQueryFactory.java:69)
>>>>       at
>>>>
>>>> org.apache.jackrabbit.core.query.CompoundQueryFactory.createQuery(CompoundQueryFactory.java:67)
>>>>       at
>>>>
>>>> org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery(QueryManagerImpl.java:98)
>>>>
>>>> Can some one tell me what I am missing?
>>>>
>>>> Thanks
>>>> Rakesh
>>>>
>>>>
>>>>
>>>
>
> Rakesh Vidyadharan
> President & CEO
> Sans Pareil Technologies, Inc.
> http://sptci.com/
>
>
> | 100 W. Chestnut, Suite 1305 | Chicago, IL 60610-3296 USA |
> | Ph: +1 (312) 212 3933 | Mobile: +1 (312) 315-1596 (US), +91  949 611 0873
> (IN) | Fax: +1 (312) 276-4410 | E-mail: rakesh@sptci.com
>
>
>
>
>

Re: Equivalent JCR_SQL2 statement

Posted by Rakesh Vidyadharan <ra...@sptci.com>.
On 9 Nov 2009, at 1:36:25 AM, Thomas Müller wrote:

> Hi,
>
> I found the relevant section of the spec:
> http://www.day.com/specs/jcr/2.0/6_Query.html#6.7.4%20Name
> Name ::= '[' quotedName ']' | '[' simpleName ']' | simpleName
> simpleName ::= /* A JCR Name that is also a legal SQL identifier  */
> See the SQL:92 rules for <regular identifier> (in ISO/IEC 9075:1992 §
> 5.2 <token> and <separator>).
> As far as I read the SQL-92 spec, this basically means the same rules
> as for Java identifiers apply.

Just to clarify, I tried the following variants of the query:

select * from ['nt:unstructured'] where ['jcr:path'] like '/%/ 
unitTestPage' and ['cms:nodeType'] = 'page'
select * from [nt:unstructured] where [jcr:path] like '/%/ 
unitTestPage' and [cms:nodeType] = 'page'

Rakesh
>
>
>
> On Mon, Nov 9, 2009 at 8:20 AM, Thomas Müller  
> <th...@day.com> wrote:
>> Hi,
>>
>> Try:
>>
>> select * from [nt:unstructured] where [jcr:path] like
>> '/%/unitTestPage' and [cms:nodeType] = 'page'
>>
>> Regards,
>> Thomas
>>
>>
>> On Sun, Nov 8, 2009 at 5:30 AM, Rakesh Vidyadharan  
>> <ra...@sptci.com> wrote:
>>> Since XPath is deprecated in JCR 2.0, I am trying to move to  
>>> JCR_SQL2
>>> (JR-2.0-beta1).  I have the following XPath query:
>>>
>>> //unitTestPage[@cms:nodeType = 'page']
>>>
>>> I tried writing the query in SQL as:
>>>
>>> select * from nt:unstructured where jcr:path like '/%/ 
>>> unitTestPage' and
>>> cms:nodeType = 'page'
>>>
>>> This statement however fails with an exception:
>>>
>>> javax.jcr.query.InvalidQueryException: Query:
>>> select * from nt:(*)unstructured where jcr:path like '/%/ 
>>> unitTestFolder' and
>>> cms:nodeType = 'page'; expected: <end>
>>>        at
>>> org.apache.jackrabbit.commons.query.sql2.Parser.getSyntaxError 
>>> (Parser.java:968)
>>>        at
>>> org.apache.jackrabbit.commons.query.sql2 
>>> .Parser.createQueryObjectModel(Parser.java:124)
>>>        at
>>> org.apache.jackrabbit.commons.query.sql2 
>>> .SQL2QOMBuilder.createQueryObjectModel(SQL2QOMBuilder.java:55)
>>>        at
>>> org.apache.jackrabbit.core.query.QOMQueryFactory.createQuery 
>>> (QOMQueryFactory.java:69)
>>>        at
>>> org.apache.jackrabbit.core.query.CompoundQueryFactory.createQuery 
>>> (CompoundQueryFactory.java:67)
>>>        at
>>> org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery 
>>> (QueryManagerImpl.java:98)
>>>
>>> Can some one tell me what I am missing?
>>>
>>> Thanks
>>> Rakesh
>>>
>>>
>>>
>>

Rakesh Vidyadharan
President & CEO
Sans Pareil Technologies, Inc.
http://sptci.com/


| 100 W. Chestnut, Suite 1305 | Chicago, IL 60610-3296 USA |
| Ph: +1 (312) 212 3933 | Mobile: +1 (312) 315-1596 (US), +91  949 611  
0873 (IN) | Fax: +1 (312) 276-4410 | E-mail: rakesh@sptci.com





Re: Equivalent JCR_SQL2 statement

Posted by Rakesh Vidyadharan <ra...@sptci.com>.
Hi Thomas,

Thanks for the clarifications.  The query now "compiles" but I get  
back no results (the XPath versions work as I would expect as these  
are part of a unit test suite).  I had looked into the JR 2 unit test  
suite before I posted, but I think all of those are based on the older  
SQL/XPath standards.

Rakesh

On 9 Nov 2009, at 1:36:25 AM, Thomas Müller wrote:

> Hi,
>
> I found the relevant section of the spec:
> http://www.day.com/specs/jcr/2.0/6_Query.html#6.7.4%20Name
> Name ::= '[' quotedName ']' | '[' simpleName ']' | simpleName
> simpleName ::= /* A JCR Name that is also a legal SQL identifier  */
> See the SQL:92 rules for <regular identifier> (in ISO/IEC 9075:1992 §
> 5.2 <token> and <separator>).
> As far as I read the SQL-92 spec, this basically means the same rules
> as for Java identifiers apply.
>
> I guess we should have railroad diagrams. I will try to create them.
>
> Regards,
> Thomas
>
>
>
>
> On Mon, Nov 9, 2009 at 8:20 AM, Thomas Müller  
> <th...@day.com> wrote:
>> Hi,
>>
>> Try:
>>
>> select * from [nt:unstructured] where [jcr:path] like
>> '/%/unitTestPage' and [cms:nodeType] = 'page'
>>
>> Regards,
>> Thomas
>>
>>
>> On Sun, Nov 8, 2009 at 5:30 AM, Rakesh Vidyadharan  
>> <ra...@sptci.com> wrote:
>>> Since XPath is deprecated in JCR 2.0, I am trying to move to  
>>> JCR_SQL2
>>> (JR-2.0-beta1).  I have the following XPath query:
>>>
>>> //unitTestPage[@cms:nodeType = 'page']
>>>
>>> I tried writing the query in SQL as:
>>>
>>> select * from nt:unstructured where jcr:path like '/%/ 
>>> unitTestPage' and
>>> cms:nodeType = 'page'
>>>
>>> This statement however fails with an exception:
>>>
>>> javax.jcr.query.InvalidQueryException: Query:
>>> select * from nt:(*)unstructured where jcr:path like '/%/ 
>>> unitTestFolder' and
>>> cms:nodeType = 'page'; expected: <end>
>>>        at
>>> org.apache.jackrabbit.commons.query.sql2.Parser.getSyntaxError 
>>> (Parser.java:968)
>>>        at
>>> org.apache.jackrabbit.commons.query.sql2 
>>> .Parser.createQueryObjectModel(Parser.java:124)
>>>        at
>>> org.apache.jackrabbit.commons.query.sql2 
>>> .SQL2QOMBuilder.createQueryObjectModel(SQL2QOMBuilder.java:55)
>>>        at
>>> org.apache.jackrabbit.core.query.QOMQueryFactory.createQuery 
>>> (QOMQueryFactory.java:69)
>>>        at
>>> org.apache.jackrabbit.core.query.CompoundQueryFactory.createQuery 
>>> (CompoundQueryFactory.java:67)
>>>        at
>>> org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery 
>>> (QueryManagerImpl.java:98)
>>>
>>> Can some one tell me what I am missing?
>>>
>>> Thanks
>>> Rakesh
>>>
>>>
>>>
>>

Rakesh Vidyadharan
President & CEO
Sans Pareil Technologies, Inc.
http://sptci.com/


| 100 W. Chestnut, Suite 1305 | Chicago, IL 60610-3296 USA |
| Ph: +1 (312) 212 3933 | Mobile: +1 (312) 315-1596 (US), +91  949 611  
0873 (IN) | Fax: +1 (312) 276-4410 | E-mail: rakesh@sptci.com





Re: Equivalent JCR_SQL2 statement

Posted by Thomas Müller <th...@day.com>.
Hi,

I found the relevant section of the spec:
http://www.day.com/specs/jcr/2.0/6_Query.html#6.7.4%20Name
Name ::= '[' quotedName ']' | '[' simpleName ']' | simpleName
simpleName ::= /* A JCR Name that is also a legal SQL identifier  */
See the SQL:92 rules for <regular identifier> (in ISO/IEC 9075:1992 §
5.2 <token> and <separator>).
As far as I read the SQL-92 spec, this basically means the same rules
as for Java identifiers apply.

I guess we should have railroad diagrams. I will try to create them.

Regards,
Thomas




On Mon, Nov 9, 2009 at 8:20 AM, Thomas Müller <th...@day.com> wrote:
> Hi,
>
> Try:
>
> select * from [nt:unstructured] where [jcr:path] like
> '/%/unitTestPage' and [cms:nodeType] = 'page'
>
> Regards,
> Thomas
>
>
> On Sun, Nov 8, 2009 at 5:30 AM, Rakesh Vidyadharan <ra...@sptci.com> wrote:
>> Since XPath is deprecated in JCR 2.0, I am trying to move to JCR_SQL2
>> (JR-2.0-beta1).  I have the following XPath query:
>>
>> //unitTestPage[@cms:nodeType = 'page']
>>
>> I tried writing the query in SQL as:
>>
>> select * from nt:unstructured where jcr:path like '/%/unitTestPage' and
>> cms:nodeType = 'page'
>>
>> This statement however fails with an exception:
>>
>> javax.jcr.query.InvalidQueryException: Query:
>> select * from nt:(*)unstructured where jcr:path like '/%/unitTestFolder' and
>> cms:nodeType = 'page'; expected: <end>
>>        at
>> org.apache.jackrabbit.commons.query.sql2.Parser.getSyntaxError(Parser.java:968)
>>        at
>> org.apache.jackrabbit.commons.query.sql2.Parser.createQueryObjectModel(Parser.java:124)
>>        at
>> org.apache.jackrabbit.commons.query.sql2.SQL2QOMBuilder.createQueryObjectModel(SQL2QOMBuilder.java:55)
>>        at
>> org.apache.jackrabbit.core.query.QOMQueryFactory.createQuery(QOMQueryFactory.java:69)
>>        at
>> org.apache.jackrabbit.core.query.CompoundQueryFactory.createQuery(CompoundQueryFactory.java:67)
>>        at
>> org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery(QueryManagerImpl.java:98)
>>
>> Can some one tell me what I am missing?
>>
>> Thanks
>> Rakesh
>>
>>
>>
>

Re: Equivalent JCR_SQL2 statement

Posted by Thomas Müller <th...@day.com>.
Hi,

Try:

select * from [nt:unstructured] where [jcr:path] like
'/%/unitTestPage' and [cms:nodeType] = 'page'

Regards,
Thomas


On Sun, Nov 8, 2009 at 5:30 AM, Rakesh Vidyadharan <ra...@sptci.com> wrote:
> Since XPath is deprecated in JCR 2.0, I am trying to move to JCR_SQL2
> (JR-2.0-beta1).  I have the following XPath query:
>
> //unitTestPage[@cms:nodeType = 'page']
>
> I tried writing the query in SQL as:
>
> select * from nt:unstructured where jcr:path like '/%/unitTestPage' and
> cms:nodeType = 'page'
>
> This statement however fails with an exception:
>
> javax.jcr.query.InvalidQueryException: Query:
> select * from nt:(*)unstructured where jcr:path like '/%/unitTestFolder' and
> cms:nodeType = 'page'; expected: <end>
>        at
> org.apache.jackrabbit.commons.query.sql2.Parser.getSyntaxError(Parser.java:968)
>        at
> org.apache.jackrabbit.commons.query.sql2.Parser.createQueryObjectModel(Parser.java:124)
>        at
> org.apache.jackrabbit.commons.query.sql2.SQL2QOMBuilder.createQueryObjectModel(SQL2QOMBuilder.java:55)
>        at
> org.apache.jackrabbit.core.query.QOMQueryFactory.createQuery(QOMQueryFactory.java:69)
>        at
> org.apache.jackrabbit.core.query.CompoundQueryFactory.createQuery(CompoundQueryFactory.java:67)
>        at
> org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery(QueryManagerImpl.java:98)
>
> Can some one tell me what I am missing?
>
> Thanks
> Rakesh
>
>
>