You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2006/10/16 14:34:57 UTC

svn commit: r464466 - in /jackrabbit/trunk/jackrabbit/src: main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java

Author: mreutegg
Date: Mon Oct 16 05:34:56 2006
New Revision: 464466

URL: http://svn.apache.org/viewvc?view=rev&rev=464466
Log:
JCR-562: 'OR' in XPath query badly interpreted

Modified:
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java
    jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java?view=diff&rev=464466&r1=464465&r2=464466
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java Mon Oct 16 05:34:56 2006
@@ -402,17 +402,17 @@
                 break;
             case JJTOREXPR:
                 NAryQueryNode parent = (NAryQueryNode) queryNode;
-                queryNode = new OrQueryNode(parent);
-                parent.addOperand(queryNode);
+                QueryNode orQueryNode = new OrQueryNode(parent);
+                parent.addOperand(orQueryNode);
                 // traverse
-                node.childrenAccept(this, queryNode);
+                node.childrenAccept(this, orQueryNode);
                 break;
             case JJTANDEXPR:
                 parent = (NAryQueryNode) queryNode;
-                queryNode = new AndQueryNode(parent);
-                parent.addOperand(queryNode);
+                QueryNode andQueryNode = new AndQueryNode(parent);
+                parent.addOperand(andQueryNode);
                 // traverse
-                node.childrenAccept(this, queryNode);
+                node.childrenAccept(this, andQueryNode);
                 break;
             case JJTCOMPARISONEXPR:
                 createExpression(node, (NAryQueryNode) queryNode);

Modified: jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java?view=diff&rev=464466&r1=464465&r2=464466
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java (original)
+++ jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java Mon Oct 16 05:34:56 2006
@@ -480,4 +480,29 @@
         checkResult(result, new Node[]{foo, blu});
     }
 
+    public void testLogicalExpression() throws Exception {
+        Node foo = testRootNode.addNode("foo");
+        foo.setProperty("a", 1);
+        foo.setProperty("b", 2);
+        foo.setProperty("c", 3);
+        Node bar = testRootNode.addNode("bar");
+        bar.setProperty("a", 0);
+        bar.setProperty("b", 2);
+        bar.setProperty("c", 0);
+        Node bla = testRootNode.addNode("bla");
+        bla.setProperty("a", 1);
+        bla.setProperty("b", 0);
+        bla.setProperty("c", 3);
+        testRootNode.save();
+
+        String sql = "SELECT * FROM nt:unstructured WHERE a=1 and b=2 or c=3";
+        Query q = superuser.getWorkspace().getQueryManager().createQuery(sql, Query.SQL);
+        QueryResult result = q.execute();
+        checkResult(result, new Node[]{foo, bla});
+
+        String xpath = "//*[@a=1 and @b=2 or @c=3] ";
+        q = superuser.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH);
+        result = q.execute();
+        checkResult(result, new Node[]{foo, bla});
+    }
 }