Hi,

On 26/11/10 16:36, Juan Diego Botiva Leon wrote:
I'm upgrading Jackrabbit from 1.6.1 to 2.1.1 and I need to translate
an XPath query to JCR-SQL2, the query is as follows:

/jcr:root/some_node//element(*,
mynt:document)[jcr:contains(jcr:content, 'textToFind')]

I tried the following (removing the path constraint because I
couldn't find how to do it)

SELECT * FROM [mynt:document] AS doc WHERE CONTAINS(doc.*,
'textToFind')

But I get no results and the original query returns 23 nodes. Can you
help me with this as I checked the JCR 2.0 SQL-2 Grammar (Railroad
diagrams) and the jackrabbit-spi-commons test cases but still I'm not
sure how to use CONTAINS and how to restrict the query to a specific
path. Thanks in advance.

You can use the ISDESCENDANTNODE constraint [1] in SQL2 to limit your query to a specific subtree.

Note that this constraint is slightly different from the descendant-or-self axis ("//") in XPath, as it doesn't match the ancestor node under which you're querying. To duplicate the descendant-or-self axis functionality in SQL2 you can combine ISDESCENDANTNODE and ISSAMENODE [2] constraints like this:

    SELECT * FROM [mynt:document]
    WHERE ISDESCENDANTNODE('/some_node') OR ISSAMENODE('/some_node')

Can you please try the SQL2 query with the latest Jackrabbit snapshot to see if you're still having problem getting the same results as with the XPath query? Full text queries with SQL2 should work much better now with the JCR-2715 improvements.

[1] http://www.day.com/specs/jcr/2.0/6_Query.html#DescendantNode
[2] http://www.day.com/specs/jcr/2.0/6_Query.html#SameNode

BR,

Jukka Zitting

Reply via email to