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 th...@apache.org on 2013/09/12 12:00:46 UTC

svn commit: r1522511 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/ oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/

Author: thomasm
Date: Thu Sep 12 10:00:46 2013
New Revision: 1522511

URL: http://svn.apache.org/r1522511
Log:
OAK-890 Query: advanced fulltext search conditions (remove old code)

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java?rev=1522511&r1=1522510&r2=1522511&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java Thu Sep 12 10:00:46 2013
@@ -41,13 +41,6 @@ import org.apache.jackrabbit.oak.spi.que
  * A fulltext "contains(...)" condition.
  */
 public class FullTextSearchImpl extends ConstraintImpl {
-    
-    /**
-     * Feature flag. 
-     * Disabled until OAK-890 is fully implemented.
-     * Enable for testing OAK-890 related changes.
-     */
-    public static final boolean OAK_890_ADVANCED_FT_SEARCH = true;
 
     /**
      * Compatibility for Jackrabbit 2.0 single quoted phrase queries.
@@ -87,13 +80,6 @@ public class FullTextSearchImpl extends 
             propertyName = propertyName.substring(slash + 1);
         }
 
-        if (!OAK_890_ADVANCED_FT_SEARCH) {
-            // temporary workaround to support using an index for
-            // "contains(a/*, 'x') or contains(a/a, x') or contains(a/b, 'x')"
-            // TODO this behavior does not match the specification
-            propertyName = null;
-        }
-
         if (propertyName == null || "*".equals(propertyName)) {
             this.propertyName = null;
         } else {
@@ -156,13 +142,11 @@ public class FullTextSearchImpl extends 
         PropertyValue v = fullTextSearchExpression.currentValue();
         try {
             String p = propertyName;
-            if (OAK_890_ADVANCED_FT_SEARCH) {
-                if (relativePath != null) {
-                    if (p == null) {
-                        p = "*";
-                    }
-                    p = PathUtils.concat(relativePath, p);
+            if (relativePath != null) {
+                if (p == null) {
+                    p = "*";
                 }
+                p = PathUtils.concat(relativePath, p);
             }
             return FullTextParser.parse(p, v.getValue(Type.STRING));
         } catch (ParseException e) {

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java?rev=1522511&r1=1522510&r2=1522511&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryFulltextTest.java Thu Sep 12 10:00:46 2013
@@ -32,7 +32,6 @@ import javax.jcr.query.RowIterator;
 
 import org.apache.jackrabbit.oak.jcr.AbstractRepositoryTest;
 import org.apache.jackrabbit.oak.jcr.NodeStoreFixture;
-import org.apache.jackrabbit.oak.query.ast.FullTextSearchImpl;
 import org.junit.Test;
 
 /**
@@ -110,15 +109,10 @@ public class QueryFulltextTest extends A
         Query q;
         
         q = qm.createQuery("explain " + sql2, Query.JCR_SQL2);
-        if (FullTextSearchImpl.OAK_890_ADVANCED_FT_SEARCH) {
-            assertEquals("[nt:base] as [nt:base] /* traverse \"*\" " + 
-                    "where contains([nt:base].[text], cast('hello OR hallo' as string)) */", 
-                    getResult(q.execute(), "plan"));
-        } else {
-            assertEquals("[nt:base] as [nt:base] /* traverse \"*\" " + 
-                    "where contains([nt:base].[*], cast('hello OR hallo' as string)) */", 
-                    getResult(q.execute(), "plan"));
-        }
+
+        assertEquals("[nt:base] as [nt:base] /* traverse \"*\" " + 
+                "where contains([nt:base].[text], cast('hello OR hallo' as string)) */", 
+                getResult(q.execute(), "plan"));
         
         // verify the result
         // uppercase "OR" mean logical "or"

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=1522511&r1=1522510&r2=1522511&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 Thu Sep 12 10:00:46 2013
@@ -27,7 +27,6 @@ import javax.jcr.query.QueryResult;
 import javax.jcr.query.RowIterator;
 
 import org.apache.jackrabbit.core.query.AbstractQueryTest;
-import org.apache.jackrabbit.oak.query.ast.FullTextSearchImpl;
 
 /**
  * Tests the fulltext index.
@@ -51,34 +50,19 @@ public class QueryFulltextTest extends A
         Query q;
         
         q = qm.createQuery("explain " + sql2, Query.JCR_SQL2);
-        if (FullTextSearchImpl.OAK_890_ADVANCED_FT_SEARCH) {
-            // TODO the plan should actually be:
+
+// TODO the plan should actually be:
 //            assertEquals("[nt:base] as [nt:base] /* " + 
 //                    "+((text:hallo text:hello)~1) +text:{* TO *} " + 
 //                    "ft:(text:\"hallo\" OR text:\"hello\") " +
 //                    "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 *} " + 
-                    "ft:(text:\"hallo\" OR text:\"hello\") " +
-                    "where contains([nt:base].[text], cast('hello OR hallo' as string)) */", 
-                    getResult(q.execute(), "plan"));
-        } else {
-            assertEquals("[nt:base] as [nt:base] /* " + 
-                    "+:fulltext:hello +:fulltext:or +:fulltext:hallo " + 
-                    "where contains([nt:base].[*], cast('hello OR hallo' as string)) */", 
-                    getResult(q.execute(), "plan"));
-            
-            // verify the result
-            // uppercase "OR" mean logical "or"
-            q = qm.createQuery(sql2, Query.JCR_SQL2);
-            if (FullTextSearchImpl.OAK_890_ADVANCED_FT_SEARCH) {
-                assertEquals("/testroot/node1, /testroot/node2, /testroot/node3",
-                        getResult(q.execute(), "path"));
-            }
-
-        }
-
+        assertEquals("[nt:base] as [nt:base] /* " + 
+                "aggregate +(:fulltext:hallo :fulltext:hello) +text:{* TO *} " + 
+                "ft:(text:\"hallo\" OR text:\"hello\") " +
+                "where contains([nt:base].[text], cast('hello OR hallo' as string)) */", 
+                getResult(q.execute(), "plan"));
+   
         // lowercase "or" mean search for the term "or"
         sql2 = "select [jcr:path] as [path] from [nt:base] " + 
                 "where contains([text], 'hello or hallo') order by [jcr:path]";
@@ -104,22 +88,21 @@ public class QueryFulltextTest extends A
         String sql2 = "select [jcr:path] as [path] from [nt:base] " + 
                 "where ISCHILDNODE([/testroot])" + 
                 " AND CONTAINS(text, 'hallo')";
-        if (FullTextSearchImpl.OAK_890_ADVANCED_FT_SEARCH) {
-            q = qm.createQuery("explain " + sql2, Query.JCR_SQL2);
-            // TODO the plan should actually be:
+
+        q = qm.createQuery("explain " + sql2, Query.JCR_SQL2);
+        // TODO the plan should actually be:
 //          assertEquals("[nt:base] as [nt:base] /* " + 
 //                  "+text:hallo +:path:/testroot/* +text:{* TO *} " + 
 //                  "ft:(text:\"hallo\") " + 
 //                  "where (ischildnode([nt:base], [/testroot])) " + 
 //                  "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 *} " + 
-                    "ft:(text:\"hallo\") " + 
-                    "where (ischildnode([nt:base], [/testroot])) " + 
-                    "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 *} " + 
+                "ft:(text:\"hallo\") " + 
+                "where (ischildnode([nt:base], [/testroot])) " + 
+                "and (contains([nt:base].[text], cast('hallo' as string))) */", 
+                getResult(q.execute(), "plan"));
         
         q = qm.createQuery(sql2, Query.JCR_SQL2);
         assertEquals("/testroot/node2, /testroot/node3", getResult(q.execute(), "path"));
@@ -136,56 +119,42 @@ public class QueryFulltextTest extends A
 //            getResult(q.execute(), "plan"));
 
         q = qm.createQuery(sql2, Query.JCR_SQL2);
-        if (FullTextSearchImpl.OAK_890_ADVANCED_FT_SEARCH) {
-            assertEquals("/testroot", getResult(q.execute(), "path"));
-        }
+        assertEquals("/testroot", getResult(q.execute(), "path"));
         
         sql2 = "select [jcr:path] as [path] from [nt:base] " + 
                 "where contains([node2/text], 'hello OR hallo') order by [jcr:path]";
         q = qm.createQuery("explain " + sql2, Query.JCR_SQL2);
-        if (FullTextSearchImpl.OAK_890_ADVANCED_FT_SEARCH) {
-            // TODO the plan should actually be:
+        // TODO the plan should actually be:
 //            assertEquals("[nt:base] as [nt:base] /* " + 
 //                    "(text:hallo text:hello)~1 " + 
 //                    "ft:(node2/text:\"hallo\" OR node2/text:\"hello\") " + 
 //                    "parent:node2 " + 
 //                    "where contains([nt:base].[node2/text], cast('hello OR hallo' as string)) */", 
 //                    getResult(q.execute(), "plan"));
-            assertEquals("[nt:base] as [nt:base] /* " + 
-                    "aggregate :fulltext:hallo* :fulltext:hello* " + 
-                    "ft:(node2/text:\"hallo\" OR node2/text:\"hello\") " + 
-                    "parent:node2 " + 
-                    "where contains([nt:base].[node2/text], cast('hello OR hallo' as string)) */", 
-          getResult(q.execute(), "plan"));
-            q = qm.createQuery(sql2, Query.JCR_SQL2);
-            assertEquals("/testroot", 
-                    getResult(q.execute(), "path"));            
-        } else {
-            assertEquals("[nt:base] as [nt:base] /* " + 
-                    "+:fulltext:hello +:fulltext:or +:fulltext:hallo " + 
-                    "where contains([nt:base].[node2/*], cast('hello OR hallo' as string)) */", 
-                    getResult(q.execute(), "plan"));
-            q = qm.createQuery(sql2, Query.JCR_SQL2);
-            assertEquals("", 
-                    getResult(q.execute(), "path"));            
-        }
+        assertEquals("[nt:base] as [nt:base] /* " + 
+                "aggregate :fulltext:hallo* :fulltext:hello* " + 
+                "ft:(node2/text:\"hallo\" OR node2/text:\"hello\") " + 
+                "parent:node2 " + 
+                "where contains([nt:base].[node2/text], cast('hello OR hallo' as string)) */", 
+      getResult(q.execute(), "plan"));
+        q = qm.createQuery(sql2, Query.JCR_SQL2);
+        assertEquals("/testroot", 
+                getResult(q.execute(), "path"));            
         
         sql2 = "select [jcr:path] as [path] from [nt:base] " + 
                 "where contains([node1/text], 'hello') " + 
                 "and contains([node2/text], 'hallo') " + 
                 "order by [jcr:path]";
         q = qm.createQuery("explain " + sql2, Query.JCR_SQL2);
-        if (FullTextSearchImpl.OAK_890_ADVANCED_FT_SEARCH) {
-            // TODO OAK-890
-            assertEquals("[nt:base] as [nt:base] /* " + 
-                    "aggregate Not yet implemented " + 
-                    "where (contains([nt:base].[node1/text], cast('hello' as string))) " + 
-                    "and (contains([nt:base].[node2/text], cast('hallo' as string))) */", 
-                    getResult(q.execute(), "plan"));
-            q = qm.createQuery(sql2, Query.JCR_SQL2);
-            // assertEquals("/testroot", 
-            //        getResult(q.execute(), "path"));            
-        }
+        // TODO OAK-890
+        assertEquals("[nt:base] as [nt:base] /* " + 
+                "aggregate Not yet implemented " + 
+                "where (contains([nt:base].[node1/text], cast('hello' as string))) " + 
+                "and (contains([nt:base].[node2/text], cast('hallo' as string))) */", 
+                getResult(q.execute(), "plan"));
+        q = qm.createQuery(sql2, Query.JCR_SQL2);
+        // assertEquals("/testroot", 
+        //        getResult(q.execute(), "path"));            
         
     }