You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by al...@apache.org on 2011/10/05 11:40:32 UTC

svn commit: r1179124 - in /jackrabbit/trunk: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java

Author: alexparvulescu
Date: Wed Oct  5 09:40:29 2011
New Revision: 1179124

URL: http://svn.apache.org/viewvc?rev=1179124&view=rev
Log:
JCR-3089 javax.jcr.RepositoryException when a JOIN SQL2 query is send via Davex and has results

Modified:
    jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java
    jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java

Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java?rev=1179124&r1=1179123&r2=1179124&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java Wed Oct  5 09:40:29 2011
@@ -241,9 +241,16 @@ public class SearchResourceImpl implemen
                 values.add(rv.getValue(row));
             }
 
-            // get the path for the first selector and build
-            // a webdav compliant resource path of it.
-            String itemPath = row.getPath();
+            /*
+             * get the path for the first selector and build a webdav compliant
+             * resource path based on it.
+             * 
+             * Use Row#getPath(String) which works for both simple rows and join
+             * rows (in contrast to Row#getPath()).
+             * 
+             * see also https://issues.apache.org/jira/browse/JCR-3089
+             */
+            final String itemPath = row.getPath(sn.get(0));
             // create a new ms-response for this row of the result set
             DavResourceLocator loc = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), itemPath, false);
             String href = loc.getHref(true);

Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java?rev=1179124&r1=1179123&r2=1179124&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/query/QueryTest.java Wed Oct  5 09:40:29 2011
@@ -22,6 +22,8 @@ import javax.jcr.RepositoryException;
 import javax.jcr.NodeIterator;
 import javax.jcr.Node;
 import javax.jcr.NamespaceRegistry;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
 import java.util.List;
 import java.util.ArrayList;
 
@@ -55,7 +57,7 @@ public class QueryTest extends AbstractQ
         }
 
         Node n = testRootNode.addNode("spiTest:node");
-        testRootNode.save();
+        superuser.save();
 
         for (int i = 0; i < 10; i++) {
             String prefix = defaultPrefix + i;
@@ -63,4 +65,42 @@ public class QueryTest extends AbstractQ
             executeXPathQuery(superuser, testPath + "/" + prefix + ":node", new Node[]{n});
         }
     }
+
+    /**
+     * https://issues.apache.org/jira/browse/JCR-3089
+     */
+    public void testSQL2Simple() throws Exception {
+        Query q = qm.createQuery("SELECT * FROM [nt:unstructured]",
+                Query.JCR_SQL2);
+        QueryResult r = q.execute();
+        assertTrue(r.getNodes().hasNext());
+    }
+
+    /**
+     * https://issues.apache.org/jira/browse/JCR-2543
+     */
+    public void testSQL2Limit() throws Exception {
+        Query q = qm.createQuery("SELECT * FROM [nt:unstructured]",
+                Query.JCR_SQL2);
+        q.setLimit(1);
+        QueryResult r = q.execute();
+
+        NodeIterator it = r.getNodes();
+        assertTrue(it.hasNext());
+        it.next();
+        assertFalse(it.hasNext());
+    }
+
+    /**
+     * https://issues.apache.org/jira/browse/JCR-3089
+     */
+    public void testSQL2Join() throws Exception {
+        // he query is not supposed to return anything, it will just check that
+        // the back and forth between the client and the server works
+        Query q = qm
+                .createQuery(
+                        "SELECT * FROM [nt:unstructured] AS a INNER JOIN [nt:unstructured] AS b ON b.[refid] = a.[jcr:uuid]",
+                        Query.JCR_SQL2);
+        assertNotNull(q.execute());
+    }
 }