You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2014/01/13 14:10:45 UTC

svn commit: r1557703 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/query/ast/ test/java/org/apache/jackrabbit/oak/query/index/ test/resources/org/apache/jackrabbit/oak/query/

Author: alexparvulescu
Date: Mon Jan 13 13:10:44 2014
New Revision: 1557703

URL: http://svn.apache.org/r1557703
Log:
OAK-1301 Path conditions not respected in XPath query
 - fix + test for the initial query


Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeJoinConditionImpl.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java
    jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeJoinConditionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeJoinConditionImpl.java?rev=1557703&r1=1557702&r2=1557703&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeJoinConditionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DescendantNodeJoinConditionImpl.java Mon Jan 13 13:10:44 2014
@@ -83,7 +83,7 @@ public class DescendantNodeJoinCondition
                 a = KNOWN_PATH;
             }
             if (a != null) {
-                f.restrictPath(a, Filter.PathRestriction.DIRECT_CHILDREN);
+                f.restrictPath(a, Filter.PathRestriction.ALL_CHILDREN);
             }
         }
     }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java?rev=1557703&r1=1557702&r2=1557703&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java Mon Jan 13 13:10:44 2014
@@ -156,4 +156,52 @@ public class TraversingIndexQueryTest ex
                 "//*[(jcr:like(child/@prop, 'aaa%') and jcr:like(child/@prop, 'bbb%') and jcr:like(child/@prop, 'ccc%'))]",
                 "xpath", ImmutableList.of("/content/two"));
     }
+
+    @Test
+    public void testOak1301() throws Exception {
+        Tree t1 = root.getTree("/").addChild("home").addChild("users")
+                .addChild("testing").addChild("socialgraph_test_user_4");
+        t1.setProperty("jcr:primaryType", "rep:User");
+        t1.setProperty("rep:authorizableId", "socialgraph_test_user_4");
+
+        Tree s = t1.addChild("social");
+        s.setProperty("jcr:primaryType", "sling:Folder");
+
+        Tree r = s.addChild("relationships");
+        r.setProperty("jcr:primaryType", "sling:Folder");
+
+        Tree f = r.addChild("friend");
+        f.setProperty("jcr:primaryType", "sling:Folder");
+
+        Tree sg = f.addChild("socialgraph_test_group");
+        sg.setProperty("jcr:primaryType", "nt:unstructured");
+        sg.setProperty("id", "socialgraph_test_group");
+
+        Tree t2 = root.getTree("/").addChild("home").addChild("groups")
+                .addChild("testing").addChild("socialgraph_test_group");
+        root.commit();
+
+        // select [jcr:path], [jcr:score], * from [nt:base] as a where [id/*] =
+        // 'socialgraph_test_group' and isdescendantnode(a, '/home') /* xpath:
+        // /jcr:root/home//*[id='socialgraph_test_group'] */
+        assertQuery(
+                "/jcr:root/home//*[id='socialgraph_test_group']",
+                "xpath",
+                ImmutableList
+                        .of("/home/users/testing/socialgraph_test_user_4/social/relationships/friend/socialgraph_test_group"));
+
+        // sql2 select c.[jcr:path] as [jcr:path], c.[jcr:score] as [jcr:score],
+        // c.* from [nt:base] as a inner join [nt:base] as b on ischildnode(b,
+        // a) inner join [nt:base] as c on isdescendantnode(c, b) where name(a)
+        // = 'social' and isdescendantnode(a, '/home') and name(b) =
+        // 'relationships' and c.[id/*] = 'socialgraph_test_group' /* xpath:
+        // /jcr:root/home//social/relationships//*[id='socialgraph_test_group']
+        // */
+        assertQuery(
+                "/jcr:root/home//social/relationships//*[id='socialgraph_test_group']",
+                "xpath",
+                ImmutableList
+                        .of("/home/users/testing/socialgraph_test_user_4/social/relationships/friend/socialgraph_test_group"));
+
+    }
 }

Modified: jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt?rev=1557703&r1=1557702&r2=1557703&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt Mon Jan 13 13:10:44 2014
@@ -65,7 +65,7 @@ explain select * from [nt:base] as a inn
 [nt:base] as [a] /* property jcr:uuid where ([a].[jcr:uuid] is not null) and ([a].[jcr:uuid] in(cast('1' as long), cast('2' as long))) */ inner join [nt:base] as [b] /* property jcr:uuid where ([b].[jcr:uuid] is not null) and ([b].[jcr:uuid] in(cast('3' as long), cast('4' as long))) */ on isdescendantnode([b], [a])
 
 explain select * from [nt:base] as a inner join [nt:base] as b on isdescendantnode(b, a) where a.[jcr:uuid] is not null and b.[x] is not null
-[nt:base] as [a] /* property jcr:uuid where [a].[jcr:uuid] is not null */ inner join [nt:base] as [b] /* traverse "/path/from/the/join/selector/*" where [b].[x] is not null */ on isdescendantnode([b], [a])
+[nt:base] as [a] /* property jcr:uuid where [a].[jcr:uuid] is not null */ inner join [nt:base] as [b] /* traverse "/path/from/the/join/selector//*" where [b].[x] is not null */ on isdescendantnode([b], [a])
 
 explain select [rep:excerpt] from [nt:base] where [jcr:uuid] is not null
 [nt:base] as [nt:base] /* property jcr:uuid (rep:excerpt) where [nt:base].[jcr:uuid] is not null */