Author: alexparvulescu Date: Wed Nov 13 13:43:42 2013 New Revision: 1541517
URL: http://svn.apache.org/r1541517 Log: OAK-1171 Query fails unexpectedly when property conversion is not possible Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java?rev=1541517&r1=1541516&r2=1541517&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java Wed Nov 13 13:43:42 2013 @@ -95,7 +95,12 @@ public class ComparisonImpl extends Cons } // "the value of operand2 is converted to the // property type of the value of operand1" - p2 = convertValueToType(p2, p1); + try { + p2 = convertValueToType(p2, p1); + } catch (IllegalArgumentException ex) { + // unable to convert, just skip this node + return false; + } return evaluate(p1, p2); } Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java?rev=1541517&r1=1541516&r2=1541517&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java Wed Nov 13 13:43:42 2013 @@ -412,5 +412,24 @@ public class QueryTest extends AbstractR Node n = ni.nextNode(); assertEquals("/etc/p2/r", n.getPath()); } - + + @Test + public void testOak1171() throws RepositoryException { + Session session = createAdminSession(); + Node p = session.getRootNode().addNode("etc"); + p.addNode("p1").setProperty("title", "test"); + p.addNode("p2").setProperty("title", 1); + session.save(); + + Query q = session.getWorkspace().getQueryManager() + .createQuery("//*[@title = 'test']", "xpath"); + QueryResult qr = q.execute(); + + NodeIterator ni = qr.getNodes(); + assertTrue(ni.hasNext()); + Node n = ni.nextNode(); + assertEquals("/etc/p1", n.getPath()); + assertFalse(ni.hasNext()); + } + }
