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 da...@apache.org on 2015/03/20 18:29:50 UTC

svn commit: r1668104 - in /jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene: LuceneIndexQueryTest.java TestUtil.java

Author: davide
Date: Fri Mar 20 17:29:50 2015
New Revision: 1668104

URL: http://svn.apache.org/r1668104
Log:
OAK-2660 - wrong resultset multiple ORs, lucene index, full-text

- ignore UT reproducing the issue

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/TestUtil.java

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=1668104&r1=1668103&r2=1668104&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 Fri Mar 20 17:29:50 2015
@@ -17,11 +17,15 @@
 package org.apache.jackrabbit.oak.plugins.index.lucene;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 
+import java.util.Calendar;
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
 import org.apache.jackrabbit.oak.query.AbstractQueryTest;
@@ -33,6 +37,10 @@ import org.junit.Test;
 
 import static java.util.Arrays.asList;
 import static junit.framework.Assert.assertEquals;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
 import static org.apache.jackrabbit.oak.api.Type.STRINGS;
 import static org.apache.jackrabbit.oak.plugins.index.lucene.TestUtil.useV2;
 import static org.junit.Assert.assertFalse;
@@ -362,4 +370,117 @@ public class LuceneIndexQueryTest extend
                 ImmutableList.of(one.getPath()));
     }
 
+    @Test
+    @Ignore
+    public void oak2660() throws Exception {
+        final String name = "name";
+        final String surname = "surname";
+        final String description = "description";
+        final String added = "added";
+        final String yes = "yes";
+        
+        Tree t;
+        
+        // re-define the lucene index
+        t = root.getTree("/oak:index/" + TEST_INDEX_NAME);
+        assertTrue(t.exists());
+        t.remove();
+        root.commit();
+        assertFalse(root.getTree("/oak:index/" + TEST_INDEX_NAME).exists());
+        
+        t = root.getTree("/");
+        Tree indexDefn = createTestIndexNode(t, LuceneIndexConstants.TYPE_LUCENE);
+        useV2(indexDefn);
+        indexDefn.setProperty(LuceneIndexConstants.TEST_MODE, true);
+
+        Tree props = TestUtil.newRulePropTree(indexDefn, NT_UNSTRUCTURED);
+        TestUtil.enablePropertyIndex(props, name, false);
+        TestUtil.enableForFullText(props, surname, false);
+        TestUtil.enableForFullText(props, description, false);
+        TestUtil.enableForOrdered(props, added);
+        
+        root.commit();
+                
+        // creating the dataset
+        List<String> expected = Lists.newArrayList();
+        Tree content = root.getTree("/").addChild("content");
+        t = content.addChild("test1");
+        t.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
+        t.setProperty(name, yes);
+        t.setProperty(surname, yes);
+        t.setProperty(description, yes);
+        t.setProperty(added, Calendar.getInstance());
+        expected.add(t.getPath());
+
+        t = content.addChild("test2");
+        t.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
+        t.setProperty(name, yes);
+        t.setProperty(surname, yes);
+        t.setProperty(description, "no");
+        t.setProperty(added, Calendar.getInstance());
+        expected.add(t.getPath());
+
+        t = content.addChild("test3");
+        t.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
+        t.setProperty(name, yes);
+        t.setProperty(surname, "no");
+        t.setProperty(description, "no");
+        t.setProperty(added, Calendar.getInstance());
+        expected.add(t.getPath());
+
+        t = content.addChild("test4");
+        t.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
+        t.setProperty(name, "no");
+        t.setProperty(surname, yes);
+        t.setProperty(description, "no");
+        t.setProperty(added, Calendar.getInstance());
+        expected.add(t.getPath());
+
+        t = content.addChild("test5");
+        t.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
+        t.setProperty(name, "no");
+        t.setProperty(surname, "no");
+        t.setProperty(description, yes);
+        t.setProperty(added, Calendar.getInstance());
+        expected.add(t.getPath());
+
+        t = content.addChild("test6");
+        t.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
+        t.setProperty(name, "no");
+        t.setProperty(surname, "no");
+        t.setProperty(description, "no");
+        t.setProperty(added, Calendar.getInstance());
+
+        root.commit();
+
+        // asserting the initial state
+        for (String s : expected) {
+            assertTrue("wrong initial state", root.getTree(s).exists());
+        }
+        
+        final String statement = 
+            "SELECT * " + 
+            "FROM [" + NT_UNSTRUCTURED + "] AS c " +
+            "WHERE " +
+            "( " +
+            "c.[" + name + "] = '" + yes + "' " +
+            "OR CONTAINS(c.[" + surname + "], '" + yes + "') " + 
+            "OR CONTAINS(c.[" + description + "], '" + yes + "') " + 
+            ") " + 
+            "AND ISDESCENDANTNODE(c, '" + content.getPath() + "') " +
+            "ORDER BY " + added + " DESC ";
+     
+        assertQuery(statement, SQL2, expected);
+    }
+    
+    @SuppressWarnings("unused")
+    private static void walktree(final Tree t) {
+        System.out.println("+ " + t.getPath());
+        for (PropertyState p : t.getProperties()) {
+            System.out.println("  -" + p.getName() + "=" + p.getValue(STRING));
+        }
+        for (Tree t1 : t.getChildren()) {
+            walktree(t1);
+        }
+    }
 }

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/TestUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/TestUtil.java?rev=1668104&r1=1668103&r2=1668104&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/TestUtil.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/TestUtil.java Fri Mar 20 17:29:50 2015
@@ -89,6 +89,12 @@ public class TestUtil {
         prop.setProperty(LuceneIndexConstants.PROP_USE_IN_SPELLCHECK, true);
         return prop;
     }
+    
+    public static Tree enableForOrdered(Tree props, String propName) {
+        Tree prop = enablePropertyIndex(props, propName, false);
+        prop.setProperty("ordered", true);
+        return prop;
+    }
 
     public static Tree enablePropertyIndex(Tree props, String propName,  boolean regex) {
         Tree prop = props.addChild(unique("prop"));