You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2008/09/29 16:52:13 UTC

svn commit: r700143 - in /jackrabbit/branches/1.4/jackrabbit-core: ./ src/main/java/org/apache/jackrabbit/core/query/ src/test/java/org/apache/jackrabbit/core/query/

Author: jukka
Date: Mon Sep 29 07:52:12 2008
New Revision: 700143

URL: http://svn.apache.org/viewvc?rev=700143&view=rev
Log:
1.4: Merged revision 668086 to the 1.4 branch (JCR-1650)

Modified:
    jackrabbit/branches/1.4/jackrabbit-core/   (props changed)
    jackrabbit/branches/1.4/jackrabbit-core/RELEASE-NOTES.txt
    jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/   (props changed)
    jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/NAryQueryNode.java
    jackrabbit/branches/1.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/DerefTest.java

Propchange: jackrabbit/branches/1.4/jackrabbit-core/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Sep 29 07:52:12 2008
@@ -1 +1 @@
-/jackrabbit/trunk/jackrabbit-core:653417,654078,654514,655917,656240,656655,656664,658583,668147,672125,678788,679389,680135,681031,681287,682409,686688,691181,691550,694164,698200,698209
+/jackrabbit/trunk/jackrabbit-core:653417,654078,654514,655917,656240,656655,656664,658583,668086,668147,672125,678788,679389,680135,681031,681287,682409,686688,691181,691550,694164,698200,698209

Modified: jackrabbit/branches/1.4/jackrabbit-core/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/RELEASE-NOTES.txt?rev=700143&r1=700142&r2=700143&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/RELEASE-NOTES.txt (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/RELEASE-NOTES.txt Mon Sep 29 07:52:12 2008
@@ -53,6 +53,7 @@
   [JCR-1362] DatabaseJournal improperly finds tables in external schemas ...
   [JCR-1632] Mixin type loss
   [JCR-1644] make NamespaceContext#getPrefix(java.lang.String) iterative ...
+  [JCR-1650] XPathQueryBuilder may not handle multiple jcr:deref correctly
   [JCR-1651] Node.addNode(String, String) doesn't prevent use of mixin ...
   [JCR-1657] Cluster revision entries should be retrieved in order
   [JCR-1664] JNDI Referencable Issues
@@ -118,7 +119,6 @@
   [JCR-1634] In XA transaction session.addLockToken() does not have effect
   [JCR-1637] The GarbageCollector ignores InterruptedException and so ...
   [JCR-1648] Database reconnect during shutdown
-  [JCR-1650] XPathQueryBuilder may not handle multiple jcr:deref correctly
   [JCR-1660] Consistency check / fix skips system nodes
   [JCR-1666] After transaction rollback session may become 'corrupt'
   [JCR-1668] After RepositoryImpl instance has been created and shut ...

Propchange: jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Mon Sep 29 07:52:12 2008
@@ -0,0 +1,2 @@
+/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query:653417,654078,654514,655917,656240,656655,656664,658583,668086,668147,672125,678788,679389,680135,681031,681287,682409,686688,691181,691550,694164,698200,698209
+/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query:668086

Modified: jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/NAryQueryNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/NAryQueryNode.java?rev=700143&r1=700142&r2=700143&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/NAryQueryNode.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/NAryQueryNode.java Mon Sep 29 07:52:12 2008
@@ -85,7 +85,15 @@
         if (operands == null) {
             return false;
         }
-        return operands.remove(operand);
+        // JCR-1650 search the operand without relying on Object#equals(Object)
+        Iterator it = operands.iterator();
+        while (it.hasNext()) {
+            if (it.next() == operand) {
+                it.remove();
+                return true;
+            }
+        }
+        return false;
     }
 
     /**

Modified: jackrabbit/branches/1.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/DerefTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/DerefTest.java?rev=700143&r1=700142&r2=700143&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/DerefTest.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/DerefTest.java Mon Sep 29 07:52:12 2008
@@ -50,9 +50,9 @@
      *            + eric (worksfor -> company/sun)
      *      + frank (worksfor -> company/microsoft)
      *   + company
-     *      + sun
-     *      + microsoft
-     *      + ibm
+     *      + sun (eotm -> andrew)
+     *      + microsoft (eotm -> carl)
+     *      + ibm (eotm -> daren)
      * </pre>
      */
     protected void setUp() throws Exception {
@@ -72,18 +72,26 @@
         ibm.setProperty("ceo", "Palmisano");
 
         andrew = people.addNode("andrew");
+        andrew.addMixin(mixReferenceable);
         andrew.setProperty("worksfor", sun);
         bill = andrew.addNode("bill");
         bill.setProperty("worksfor", ibm);
         carl = people.addNode("carl");
+        carl.addMixin(mixReferenceable);
         carl.setProperty("worksfor", microsoft);
         daren = carl.addNode("daren");
+        daren.addMixin(mixReferenceable);
         daren.setProperty("worksfor", ibm);
         eric = daren.addNode("eric");
         eric.setProperty("worksfor", sun);
         frank = people.addNode("frank");
         frank.setProperty("worksfor", microsoft);
 
+        // Employees of the month
+        sun.setProperty("eotm", andrew);
+        microsoft.setProperty("eotm", carl);
+        ibm.setProperty("eotm", daren);
+
         testRootNode.save();
     }
 
@@ -155,4 +163,27 @@
             assertTrue(node.getProperty("jcr:frozenUuid").getString().equals(referenced.getUUID()));
         }
     }
+
+    /**
+     * Tests various XPath queries with multiple jcr:deref() function.
+     */
+    public void testMultipleDeref() throws RepositoryException {
+        executeXPathQuery(testPath + "/people/frank/jcr:deref(@worksfor, '*')/jcr:deref(@eotm, '*')",
+                new Node[]{carl});
+        executeXPathQuery(testPath + "/people/frank/jcr:deref(@worksfor, '*')/jcr:deref(@eotm, '*')[@jcr:uuid]",
+                new Node[]{carl});
+        executeXPathQuery(testPath + "/people/frank/jcr:deref(@worksfor, '*')[@jcr:uuid]/jcr:deref(@eotm, '*')[@jcr:uuid]",
+                new Node[]{carl});
+        executeXPathQuery(testPath + "/people/frank/jcr:deref(@worksfor, '*')[@jcr:uuid]/jcr:deref(@eotm, '*')",
+                new Node[]{carl});
+
+        executeXPathQuery(testPath + "/people//jcr:deref(@worksfor, '*')/jcr:deref(@eotm, '*')",
+                new Node[]{andrew, carl, daren});
+        executeXPathQuery(testPath + "/people//jcr:deref(@worksfor, '*')/jcr:deref(@eotm, '*')[@jcr:uuid]",
+                new Node[]{andrew, carl, daren});
+        executeXPathQuery(testPath + "/people//jcr:deref(@worksfor, '*')[@jcr:uuid]/jcr:deref(@eotm, '*')[@jcr:uuid]",
+                new Node[]{andrew, carl, daren});
+        executeXPathQuery(testPath + "/people//jcr:deref(@worksfor, '*')[@jcr:uuid]/jcr:deref(@eotm, '*')",
+                new Node[]{andrew, carl, daren});
+    }
 }