You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2013/11/20 22:15:02 UTC

svn commit: r1543951 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ test/java/org/apache/jackrabbit/oak/jcr/query/ test/java/org/apache/jackrabbit/oak/plugins/index/lucene/

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()));
+    }
+
 }