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 2014/09/17 18:09:04 UTC

svn commit: r1625638 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/ oak-core/src/test/resourc...

Author: thomasm
Date: Wed Sep 17 16:09:04 2014
New Revision: 1625638

URL: http://svn.apache.org/r1625638
Log:
OAK-2050 Query engine: disable or restrict built-in full-text engine

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java
    jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
    jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineSettings.java Wed Sep 17 16:09:04 2014
@@ -31,10 +31,16 @@ public class QueryEngineSettings impleme
     private static final int DEFAULT_QUERY_LIMIT_READS = 
             Integer.getInteger("oak.queryLimitReads", Integer.MAX_VALUE);    
     
+    private static final boolean DEFAULT_FULL_TEXT_COMPARISON_WITHOUT_INDEX = 
+            Boolean.getBoolean("oak.queryFullTextComparisonWithoutIndex");
+    
     private long limitInMemory = DEFAULT_QUERY_LIMIT_IN_MEMORY;
     
     private long limitReads = DEFAULT_QUERY_LIMIT_READS;
     
+    private boolean fullTextComparisonWithoutIndex = 
+            DEFAULT_FULL_TEXT_COMPARISON_WITHOUT_INDEX;
+    
     /**
      * Get the limit on how many nodes a query may read at most into memory, for
      * "order by" and "distinct" queries. If this limit is exceeded, the query
@@ -79,4 +85,12 @@ public class QueryEngineSettings impleme
         this.limitReads = limitReads;
     }
     
+    public void setFullTextComparisonWithoutIndex(boolean fullTextComparisonWithoutIndex) {
+        this.fullTextComparisonWithoutIndex = fullTextComparisonWithoutIndex;
+    }
+    
+    public boolean getFullTextComparisonWithoutIndex() {
+        return fullTextComparisonWithoutIndex;
+    }
+    
 }

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=1625638&r1=1625637&r2=1625638&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 Wed Sep 17 16:09:04 2014
@@ -48,7 +48,7 @@ public class FullTextSearchImpl extends 
      * instead, as in the spec, using double quotes.
      */
     public static final boolean JACKRABBIT_2_SINGLE_QUOTED_PHRASE = true;
-
+    
     private final String selectorName;
     private final String relativePath;
     private final String propertyName;
@@ -167,7 +167,10 @@ public class FullTextSearchImpl extends 
             }
             return true;
         }
-
+        // OAK-2050
+        if (!query.getSettings().getFullTextComparisonWithoutIndex()) {
+            return false;
+        }
         StringBuilder buff = new StringBuilder();
         if (relativePath == null && propertyName != null) {
             PropertyValue p = selector.currentProperty(propertyName);
@@ -209,11 +212,21 @@ public class FullTextSearchImpl extends 
     
     private static void appendString(StringBuilder buff, PropertyValue p) {
         if (p.isArray()) {
-            for (String v : p.getValue(STRINGS)) {
-                buff.append(v).append(' ');
+            if (p.getType() == Type.BINARIES) {
+                // OAK-2050: don't try to load binaries as this would 
+                // run out of memory
+            } else {
+                for (String v : p.getValue(STRINGS)) {
+                    buff.append(v).append(' ');
+                }
             }
         } else {
-            buff.append(p.getValue(STRING)).append(' ');
+            if (p.getType() == Type.BINARY) {
+                // OAK-2050: don't try to load binaries as this would 
+                // run out of memory
+            } else {
+                buff.append(p.getValue(STRING)).append(' ');
+            }
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingIndexQueryTest.java Wed Sep 17 16:09:04 2014
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
 import org.apache.jackrabbit.oak.query.AbstractQueryTest;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -64,6 +65,7 @@ public class TraversingIndexQueryTest ex
     }
 
     @Test
+    @Ignore("OAK-2050")
     public void testFullTextTerm() throws Exception {
         //OAK-1024 allow '/' in a full-text query 
         Tree node = root.getTree("/").addChild("content");
@@ -74,6 +76,7 @@ public class TraversingIndexQueryTest ex
     }
 
     @Test
+    @Ignore("OAK-2050")
     public void testFullTextTermName() throws Exception {
         Tree c = root.getTree("/").addChild("content");
         c.addChild("testFullTextTermNameSimple");

Modified: jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2.txt Wed Sep 17 16:09:04 2014
@@ -173,22 +173,6 @@ select [jcr:path]
 
 commit / - "test"
 
-# fulltext search
-
-commit / + "test": { "name": "hello world" }
-
-select [jcr:path]
-  from [nt:base]
-  where contains(name, 'hello')
-/test
-
-select [jcr:path]
-  from [nt:base]
-  where contains(*, 'hello')
-/test
-
-commit / - "test"
-
 # other tests
 
 select [jcr:path]

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java Wed Sep 17 16:09:04 2014
@@ -43,6 +43,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
 import org.apache.jackrabbit.oak.plugins.observation.CommitRateLimiter;
 import org.apache.jackrabbit.oak.plugins.version.VersionEditorProvider;
+import org.apache.jackrabbit.oak.query.QueryEngineSettings;
 import org.apache.jackrabbit.oak.security.SecurityProviderImpl;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
@@ -184,6 +185,12 @@ public class Jcr {
         this.commitRateLimiter = commitRateLimiter;
         return this;
     }
+    
+    @Nonnull
+    public Jcr with(QueryEngineSettings qs) {
+        oak.with(qs);
+        return this;
+    }
 
     public Repository createRepository() {
         return new RepositoryImpl(

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AbstractRepositoryTest.java Wed Sep 17 16:09:04 2014
@@ -18,8 +18,6 @@ package org.apache.jackrabbit.oak.jcr;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
 import java.util.Set;
 
 import javax.jcr.GuestCredentials;
@@ -32,6 +30,7 @@ import javax.jcr.security.Privilege;
 import org.apache.jackrabbit.api.JackrabbitRepository;
 import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
 import org.apache.jackrabbit.oak.jcr.FixturesHelper.Fixture;
+import org.apache.jackrabbit.oak.query.QueryEngineSettings;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.After;
@@ -105,8 +104,12 @@ public abstract class AbstractRepository
     protected Repository getRepository() throws RepositoryException {
         if (repository == null) {
             nodeStore = createNodeStore(fixture);
+            QueryEngineSettings qs = new QueryEngineSettings();
+            qs.setFullTextComparisonWithoutIndex(true);
             repository  = new Jcr(nodeStore)
                     .withObservationQueueLength(observationQueueLength)
+                    .withAsyncIndexing()
+                    .with(qs)
                     .createRepository();
         }
         return repository;

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/OakTarMKRepositoryStub.java Wed Sep 17 16:09:04 2014
@@ -33,6 +33,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.query.QueryEngineSettings;
 import org.apache.jackrabbit.test.NotExecutableException;
 import org.apache.jackrabbit.test.RepositoryStub;
 
@@ -60,6 +61,9 @@ public class OakTarMKRepositoryStub exte
                     new File("target", "tarmk-" + System.currentTimeMillis());
             this.store = new FileStore(directory, 1, false);
             Jcr jcr = new Jcr(new Oak(new SegmentNodeStore(store)));
+            QueryEngineSettings qs = new QueryEngineSettings();
+            qs.setFullTextComparisonWithoutIndex(true);
+            jcr.with(qs);
             preCreateRepository(jcr);
             this.repository = jcr.createRepository();
 

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=1625638&r1=1625637&r2=1625638&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 Sep 17 16:09:04 2014
@@ -69,6 +69,11 @@ public class LuceneIndexQueryTest extend
     public void sql2() throws Exception {
         test("sql2.txt");
     }
+    
+    @Test
+    public void sql2FullText() throws Exception {
+        test("sql2-fulltext.txt");
+    }
 
     @Test
     public void descendantTest() throws Exception {

Modified: jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java?rev=1625638&r1=1625637&r2=1625638&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrIndexQueryTestIT.java Wed Sep 17 16:09:04 2014
@@ -92,6 +92,11 @@ public class SolrIndexQueryTestIT extend
     public void sql2() throws Exception {
         test("sql2.txt");
     }
+    
+    @Test
+    public void sql2FullText() throws Exception {
+        test("sql2-fulltext.txt");
+    }
 
     @Test
     @Ignore("OAK-420")