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;
}
}