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/10/09 15:28:48 UTC

svn commit: r1630441 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query: QueryImpl.java ast/AndImpl.java ast/ConstraintImpl.java ast/FullTextSearchImpl.java ast/OrImpl.java ast/SelectorImpl.java

Author: thomasm
Date: Thu Oct  9 13:28:47 2014
New Revision: 1630441

URL: http://svn.apache.org/r1630441
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/QueryImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ConstraintImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/OrImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java?rev=1630441&r1=1630440&r2=1630441&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java Thu Oct  9 13:28:47 2014
@@ -639,6 +639,11 @@ public class QueryImpl implements Query 
                         rowIndex++;
                         break;
                     }
+                    if (constraint != null && constraint.evaluateStop()) {
+                        current = null;
+                        end = true;
+                        break;
+                    }
                 } else {
                     current = null;
                     end = true;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java?rev=1630441&r1=1630440&r2=1630441&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AndImpl.java Thu Oct  9 13:28:47 2014
@@ -129,6 +129,18 @@ public class AndImpl extends ConstraintI
         }
         return true;
     }
+    
+    @Override
+    public boolean evaluateStop() {
+        // the logic is reversed here:
+        // if one of the conditions is to stop, then we stop
+        for (ConstraintImpl constraint : constraints) {
+            if (constraint.evaluateStop()) {
+                return true;
+            }
+        }
+        return false;
+    }
 
     @Override
     boolean accept(AstVisitor v) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ConstraintImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ConstraintImpl.java?rev=1630441&r1=1630440&r2=1630441&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ConstraintImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ConstraintImpl.java Thu Oct  9 13:28:47 2014
@@ -44,6 +44,19 @@ public abstract class ConstraintImpl ext
     public abstract boolean evaluate();
     
     /**
+     * Whether this condition will, from now on, always evaluate to false. This
+     * is the case for example for full-text constraints if there is no
+     * full-text index (unless FullTextComparisonWithoutIndex is enabled). This
+     * will also allow is to add conditions that stop further processing for
+     * other reasons, similar to "WHERE ROWNUM < 10" in Oracle.
+     * 
+     * @return true if further processing should be stopped
+     */
+    public boolean evaluateStop() {
+        return false;
+    }
+    
+    /**
      * Get the set of property existence conditions that can be derived for this
      * condition. For example, for the condition "x=1 or x=2", the property
      * existence condition is "x is not null". For the condition "x=1 or y=2",

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=1630441&r1=1630440&r2=1630441&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 Oct  9 13:28:47 2014
@@ -210,6 +210,19 @@ public class FullTextSearchImpl extends 
         return getFullTextConstraint(selector).evaluate(buff.toString());
     }
     
+    @Override
+    public boolean evaluateStop() {
+        // if a fulltext index is used, then we are fine
+        if (selector.getIndex() instanceof FulltextQueryIndex) {
+            return false;
+        }
+        // OAK-2050
+        if (!query.getSettings().getFullTextComparisonWithoutIndex()) {
+            return true;
+        }
+        return false;
+    }
+
     private static void appendString(StringBuilder buff, PropertyValue p) {
         if (p.isArray()) {
             if (p.getType() == Type.BINARIES) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/OrImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/OrImpl.java?rev=1630441&r1=1630440&r2=1630441&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/OrImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/OrImpl.java Thu Oct  9 13:28:47 2014
@@ -177,7 +177,18 @@ public class OrImpl extends ConstraintIm
         }
         return false;
     }
-
+    
+    @Override
+    public boolean evaluateStop() {
+        // the logic is reversed here:
+        // we stop only if both conditions say we need to
+        for (ConstraintImpl constraint : constraints) {
+            if (!constraint.evaluateStop()) {
+                return false;
+            }
+        }
+        return true;
+    }
 
     @Override
     boolean accept(AstVisitor v) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1630441&r1=1630440&r2=1630441&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java Thu Oct  9 13:28:47 2014
@@ -441,6 +441,10 @@ public class SelectorImpl extends Source
         }
         for (ConstraintImpl constraint : selectorConstraints) {
             if (!constraint.evaluate()) {
+                if (constraint.evaluateStop()) {
+                    // stop processing from now on
+                    cursor = null;
+                }
                 return false;
             }
         }