I'm just learning myself so I figured I'd take a crack at it. It appears
that PATH() isn't implemented, so I went more along the lines of your 2nd
approach. I'm able to get a list of all the dates and able to filter by
date, but not sure how to filter by length of name considering I only know
how to get the name by dynamic operands, and I can't nest it inside the
length operand.
This gets me all the dates:
SELECT days.* FROM [nt:unstructured] AS issues
INNER JOIN [nt: unstructured] AS years ON ISCHILDNODE(years,issues)
INNER JOIN [nt:unstructured] AS months ON ISCHILDNODE(months,years)
INNER JOIN [nt:unstructured] AS days ON ISCHILDNODE(days,months)
WHERE NAME(issues) = 'issues'
Easy enough to filter on a day:
SELECT days.* FROM [nt:unstructured] AS issues
INNER JOIN [nt: unstructured] AS years ON ISCHILDNODE(years,issues)
INNER JOIN [nt:unstructured] AS months ON ISCHILDNODE(months,years)
INNER JOIN [nt:unstructured] AS days ON ISCHILDNODE(days,months)
WHERE NAME(issues) = 'issues'
AND NAME(months) = '08'
What I would like to do is:
SELECT days.* FROM [nt:unstructured] AS issues
INNER JOIN [nt: unstructured] AS years ON ISCHILDNODE(years,issues)
INNER JOIN [nt:unstructured] AS months ON ISCHILDNODE(months,years)
INNER JOIN [nt:unstructured] AS days ON ISCHILDNODE(days,months)
WHERE NAME(issues) = 'issues'
AND LENGTH(NAME(years)) = 4
AND LENGTH(NAME(months)) = 2
AND LENGTH(NAME(days)) = 2
But that failed. From what I can tell the grammar doesn't allow nested
dynamic operands.
Depends on your use case, but it might just be easier to put a property on
your days (or create a new node type) and just search for that. Alternately
you could go by a property on your "foo" and "bar" and join with the parent.
-----Original Message-----
From: Lukas Kahwe Smith [mailto:[email protected]]
Sent: Tuesday, August 09, 2011 10:18 AM
To: [email protected]
Subject: SQL2 (via davex)
Hi,
I am undergoing some frustrations with SQL2, which hopefully someone on this
list can resolve.
I have a structure like follows
/issues
/issues/2011
/issues/2011/08
/issues/2011/08/09
/issues/2011/08/09/foo
/issues/2011/08/09/bar
/issues/2011/08/02
/issues/2011/08/02/foo
/issues/2011/08/02/bar
now I am trying to get a list of all the "dates"
aka fetch all nodes that match LIKE '/issues/____/__/__' (not sure if
underscore is supported in SQL)
I tried two approaches.
The first the obvious one just trying to match the PATH (note for now I
hardcoded the 2011 and 08 but eventually I would want those to be place
holders):
HTTP 400: Query:
SELECT * FROM [nt:unstructured] WHERE PATH()(*)LIKE '/issue/2011/08/%';
expected: LENGTH, NAME, LOCALNAME, SCORE, LOWER, UPPER, or CAST
Passing [nt:unstructured] to PATH() doesnt help. Nor does using jcr:path.
The other approach I tried was finding the node by matching the child nodes
aka (/issues/2011/08/09/*) using an INNER JOIN ON ISDECENDENTNODE() but that
either got me no matches or a 403. Not sure if I am getting the 403 if there
are too many matches because if I remove certain conditions the 403 happend
if I left all relevant conditions in I got no result. But without the join
just looking without filters I get results, so I was pretty certain my
queries worked.
Any tipps? I am also wondering if there are any tools that can help debug the
internals of whats going on inside Jackrabbit when sending SQL2 queries via
davex.
regards,
Lukas Kahwe Smith
[email protected]