Index: src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java (revision 463414) +++ src/main/java/org/apache/jackrabbit/core/query/xpath/XPathQueryBuilder.java (working copy) @@ -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); Index: src/test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java (revision 463414) +++ src/test/java/org/apache/jackrabbit/core/query/SimpleQueryTest.java (working copy) @@ -479,5 +479,30 @@ result = q.execute(); 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}); + } }