Author: alexparvulescu Date: Wed Nov 20 21:15:02 2013 New Revision: 1543951
URL: http://svn.apache.org/r1543951 Log: OAK-1208 Lucene Index should ignore property existence checks Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java?rev=1543951&r1=1543950&r2=1543951&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndex.java Wed Nov 20 21:15:02 2013 @@ -475,6 +475,13 @@ public class LuceneIndex implements Full } for (PropertyRestriction pr : filter.getPropertyRestrictions()) { + + if (pr.first == null && pr.last == null) { + // ignore property existence checks, Lucene can't to 'property + // is not null' queries (OAK-1208) + continue; + } + String name = pr.propertyName; if (name.contains("/")) { // lucene cannot handle child-level property restrictions Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java?rev=1543951&r1=1543950&r2=1543951&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java Wed Nov 20 21:15:02 2013 @@ -58,7 +58,7 @@ public class QueryFulltextTest extends A // "where contains([nt:base].[text], cast('hello OR hallo' as string)) */", // getResult(q.execute(), "plan")); assertEquals("[nt:base] as [nt:base] /* " + - "aggregate +(:fulltext:hallo :fulltext:hello) +text:{* TO *} " + + "aggregate :fulltext:hallo :fulltext:hello " + "ft:(text:\"hallo\" OR text:\"hello\") " + "where contains([nt:base].[text], cast('hello OR hallo' as string)) */", getResult(q.execute(), "plan")); @@ -98,7 +98,7 @@ public class QueryFulltextTest extends A // "and (contains([nt:base].[text], cast('hallo' as string))) */", // getResult(q.execute(), "plan")); assertEquals("[nt:base] as [nt:base] /* " + - "aggregate +:fulltext:hallo* +:path:/testroot/* +text:{* TO *} " + + "aggregate +:fulltext:hallo* +:path:/testroot/* +text:{* TO *}" + "ft:(text:\"hallo\") " + "where (ischildnode([nt:base], [/testroot])) " + "and (contains([nt:base].[text], cast('hallo' as string))) */", Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java?rev=1543951&r1=1543950&r2=1543951&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java (original) +++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java Wed Nov 20 21:15:02 2013 @@ -200,4 +200,30 @@ public class LuceneIndexQueryTest extend } + /** + * OAK-1208 property existence constraints break queries + */ + @Test + public void testOAK1208() throws Exception { + Tree t = root.getTree("/").addChild("containsWithMultipleOr"); + Tree one = t.addChild("one"); + one.setProperty("p", "dam/smartcollection"); + one.setProperty("t", "media"); + + Tree two = t.addChild("two"); + two.setProperty("p", "dam/collection"); + two.setProperty("t", "media"); + + Tree three = t.addChild("three"); + three.setProperty("p", "dam/hits"); + three.setProperty("t", "media"); + + root.commit(); + + StringBuffer stmt = new StringBuffer(); + stmt.append("//*[jcr:contains(., 'media') and (@p = 'dam/smartcollection' or @p = 'dam/collection') ]"); + assertQuery(stmt.toString(), "xpath", + ImmutableList.of(one.getPath(), two.getPath())); + } + }
