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 al...@apache.org on 2013/10/15 16:30:15 UTC
svn commit: r1532358 - 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/main/java/org/apache/jackrabbit/oak/query/index/
oak-core/src/main/java/or...
Author: alexparvulescu
Date: Tue Oct 15 14:30:15 2013
New Revision: 1532358
URL: http://svn.apache.org/r1532358
Log:
OAK-1052 Introduce execution context for executing queries
- improved javadocs on the contextand other tiny refactorings
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ExecutionContext.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
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/UnionQueryImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ExecutionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ExecutionContext.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ExecutionContext.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ExecutionContext.java Tue Oct 15 14:30:15 2013
@@ -44,6 +44,10 @@ public class ExecutionContext {
}
/**
+ *
+ * Used to evaluate the query (ie. read the existing node types, index
+ * definitions), doesn't need to be a secured version of a node state
+ *
* @return Root node state of the content tree against which the query runs.
*/
@Nonnull
@@ -52,6 +56,10 @@ public class ExecutionContext {
}
/**
+ *
+ * Used to create the actual query results from the indexed paths, needs to
+ * be a secured version of a tree to take into account ACLs
+ *
* @return Root tree of the content tree against which the query runs.
*/
@Nonnull
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java Tue Oct 15 14:30:15 2013
@@ -23,7 +23,6 @@ import org.apache.jackrabbit.oak.namepat
import org.apache.jackrabbit.oak.query.ast.ColumnImpl;
import org.apache.jackrabbit.oak.query.ast.OrderingImpl;
import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
/**
* A "select" or "union" query.
@@ -34,9 +33,7 @@ import org.apache.jackrabbit.oak.spi.sta
*/
public interface Query {
- void setRootTree(Tree rootTree);
-
- void setRootState(NodeState rootState);
+ void setExecutionContext(ExecutionContext context);
void setNamePathMapper(NamePathMapper namePathMapper);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java Tue Oct 15 14:30:15 2013
@@ -135,8 +135,7 @@ public abstract class QueryEngineImpl im
ExecutionContext context = getExecutionContext();
Query q = parseQuery(statement, language, context);
- q.setRootTree(context.getRootTree());
- q.setRootState(context.getRootState());
+ q.setExecutionContext(context);
q.setNamePathMapper(namePathMapper);
q.setLimit(limit);
q.setOffset(offset);
@@ -171,7 +170,7 @@ public abstract class QueryEngineImpl im
this.traversalFallback = traversal;
}
- public static QueryIndex getBestIndex(QueryImpl query, NodeState rootState, Filter filter,
+ public static QueryIndex getBestIndex(NodeState rootState, Filter filter,
QueryIndexProvider indexProvider) {
QueryIndex best = null;
if (LOG.isDebugEnabled()) {
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=1532358&r1=1532357&r2=1532358&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 Tue Oct 15 14:30:15 2013
@@ -103,8 +103,7 @@ public class QueryImpl implements Query
private long offset;
private long size = -1;
private boolean prepared;
- private Tree rootTree;
- private NodeState rootState;
+ private ExecutionContext context;
private NamePathMapper namePathMapper;
QueryImpl(String statement, SourceImpl source, ConstraintImpl constraint, ColumnImpl[] columns) {
@@ -375,7 +374,7 @@ public class QueryImpl implements Query
LOG.debug("query execute {} ", statement);
LOG.debug("query plan {}", getPlan());
}
- RowIterator rowIt = new RowIterator(rootState);
+ RowIterator rowIt = new RowIterator(context.getRootState());
Comparator<ResultRowImpl> orderBy = ResultRowImpl.getComparator(orderings);
Iterator<ResultRowImpl> it =
FilterIterators.newCombinedFilter(rowIt, distinct, limit, offset, orderBy);
@@ -414,7 +413,7 @@ public class QueryImpl implements Query
@Override
public String getPlan() {
- return source.getPlan(rootState);
+ return source.getPlan(context.getRootState());
}
@Override
@@ -577,23 +576,15 @@ public class QueryImpl implements Query
}
public QueryIndex getBestIndex(Filter filter) {
- return QueryEngineImpl.getBestIndex(this, rootState, filter, indexProvider);
+ return QueryEngineImpl.getBestIndex(context.getRootState(), filter,
+ indexProvider);
}
@Override
- public void setRootTree(Tree rootTree) {
- this.rootTree = rootTree;
+ public void setExecutionContext(ExecutionContext context) {
+ this.context = context;
}
-
- public Tree getRootTree() {
- return rootTree;
- }
-
- @Override
- public void setRootState(NodeState rootState) {
- this.rootState = rootState;
- }
-
+
@Override
public void setOrderings(OrderingImpl[] orderings) {
this.orderings = orderings;
@@ -610,7 +601,7 @@ public class QueryImpl implements Query
@Override
public Tree getTree(String path) {
- return TreeUtil.getTree(rootTree, PathUtils.isAbsolute(path) ? path.substring(1) : path);
+ return TreeUtil.getTree(context.getRootTree(), PathUtils.isAbsolute(path) ? path.substring(1) : path);
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java Tue Oct 15 14:30:15 2013
@@ -20,7 +20,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
-import com.google.common.collect.Iterators;
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.api.Result;
import org.apache.jackrabbit.oak.api.Tree;
@@ -29,10 +28,11 @@ import org.apache.jackrabbit.oak.query.a
import org.apache.jackrabbit.oak.query.ast.OrderingImpl;
import org.apache.jackrabbit.oak.spi.query.PropertyValues;
import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.collect.Iterators;
+
/**
* Represents a union query.
*/
@@ -57,18 +57,12 @@ public class UnionQueryImpl implements Q
}
@Override
- public void setRootTree(Tree rootTree) {
- left.setRootTree(rootTree);
- right.setRootTree(rootTree);
+ public void setExecutionContext(ExecutionContext context) {
+ left.setExecutionContext(context);
+ right.setExecutionContext(context);
}
@Override
- public void setRootState(NodeState rootState) {
- left.setRootState(rootState);
- right.setRootState(rootState);
- }
-
- @Override
public void setOrderings(OrderingImpl[] orderings) {
if (orderings == null) {
left.setOrderings(null);
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=1532358&r1=1532357&r2=1532358&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 Tue Oct 15 14:30:15 2013
@@ -227,7 +227,7 @@ public class SelectorImpl extends Source
* @return the filter
*/
private Filter createFilter(boolean preparing) {
- FilterImpl f = new FilterImpl(this, query.getStatement(), query.getRootTree());
+ FilterImpl f = new FilterImpl(this, query.getStatement());
f.setPreparing(preparing);
if (joinCondition != null) {
joinCondition.restrict(f);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/FilterImpl.java Tue Oct 15 14:30:15 2013
@@ -31,7 +31,6 @@ import javax.annotation.Nullable;
import javax.jcr.PropertyType;
import org.apache.jackrabbit.oak.api.PropertyValue;
-import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.query.ast.Operator;
import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
@@ -87,23 +86,16 @@ public class FilterImpl implements Filte
* Set during the prepare phase of a query.
*/
private boolean preparing;
-
- private Tree rootTree;
// TODO support "order by"
public FilterImpl() {
- this(null, null, null);
+ this(null, null);
}
public FilterImpl(SelectorImpl selector, String queryStatement) {
- this(selector, queryStatement, null);
- }
-
- public FilterImpl(SelectorImpl selector, String queryStatement, Tree rootTree) {
this.selector = selector;
this.queryStatement = queryStatement;
- this.rootTree = rootTree;
this.matchesAllTypes = selector != null ? selector.matchesAllTypes()
: false;
}
@@ -118,7 +110,6 @@ public class FilterImpl implements Filte
this.pathRestriction = impl.pathRestriction;
this.propertyRestrictions.putAll(impl.propertyRestrictions);
this.queryStatement = impl.queryStatement;
- this.rootTree = impl.rootTree;
this.selector = impl.selector;
this.matchesAllTypes = selector != null ? selector.matchesAllTypes()
: false;
@@ -158,11 +149,6 @@ public class FilterImpl implements Filte
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
-
- @Override
- public Tree getRootTree() {
- return rootTree;
- }
public void setAlwaysFalse() {
propertyRestrictions.clear();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java Tue Oct 15 14:30:15 2013
@@ -27,7 +27,6 @@ import javax.annotation.Nullable;
import javax.jcr.PropertyType;
import org.apache.jackrabbit.oak.api.PropertyValue;
-import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.query.fulltext.FullTextExpression;
/**
@@ -64,13 +63,6 @@ public interface Filter {
* @return the condition (null if none)
*/
FullTextExpression getFullTextConstraint();
-
- /**
- * Get the root tree to read data.
- *
- * @return the tree
- */
- Tree getRootTree();
/**
* Get the property restriction for the given property, if any.
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java Tue Oct 15 14:30:15 2013
@@ -200,7 +200,7 @@ public class IndexUpdateTest {
NodeState types = system.getChildNode(JCR_NODE_TYPES);
NodeState type = types.getChildNode(NT_BASE);
SelectorImpl selector = new SelectorImpl(type, NT_BASE);
- Filter filter = new FilterImpl(selector, "SELECT * FROM [nt:base]", null);
+ Filter filter = new FilterImpl(selector, "SELECT * FROM [nt:base]");
return Sets.newHashSet(lookup.query(filter, name,
PropertyValues.newString(value)));
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java Tue Oct 15 14:30:15 2013
@@ -103,7 +103,7 @@ public class NodeTypeIndexTest {
NodeState types = system.getChildNode(JCR_NODE_TYPES);
NodeState type = types.getChildNode(nodeTypeName);
SelectorImpl selector = new SelectorImpl(type, nodeTypeName);
- return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]", null);
+ return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]");
}
private static void checkCursor(Cursor cursor, String... matches) {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java Tue Oct 15 14:30:15 2013
@@ -240,7 +240,7 @@ public class PropertyIndexTest {
NodeState types = system.getChildNode(JCR_NODE_TYPES);
NodeState type = types.getChildNode(nodeTypeName);
SelectorImpl selector = new SelectorImpl(type, nodeTypeName);
- return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]", null);
+ return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]");
}
/**
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java?rev=1532358&r1=1532357&r2=1532358&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java Tue Oct 15 14:30:15 2013
@@ -145,8 +145,7 @@ public class LuceneIndexTest {
NodeState types = system.getChildNode(JCR_NODE_TYPES);
NodeState type = types.getChildNode(nodeTypeName);
SelectorImpl selector = new SelectorImpl(type, nodeTypeName);
- return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]",
- null);
+ return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]");
}
@Test