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 2012/03/28 11:08:24 UTC
svn commit: r1306221 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/query/
main/java/org/apache/jackrabbit/oak/query/ast/
main/java/org/apache/jackrabbit/oak/query/index/
test/java/org/apache/jackrabbit/oak/query/ test/jav...
Author: thomasm
Date: Wed Mar 28 09:08:23 2012
New Revision: 1306221
URL: http://svn.apache.org/viewvc?rev=1306221&view=rev
Log:
OAK-28 Query implementation (renaming classes/interfaces to not collide with other modules; slightly changed API)
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/CoreValueFactory.java
- copied, changed from r1305825, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Result.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java
- copied, changed from r1305825, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndex.java
- copied, changed from r1305822, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/NodeReader.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java
- copied, changed from r1305822, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingReader.java
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/NodeReader.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingReader.java
Modified:
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/QueryEngine.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.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/Filter.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/FilterTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/CoreValueFactory.java (from r1305825, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/CoreValueFactory.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/CoreValueFactory.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java&r1=1305825&r2=1306221&rev=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ScalarFactory.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/CoreValueFactory.java Wed Mar 28 09:08:23 2012
@@ -18,7 +18,7 @@ package org.apache.jackrabbit.oak.query;
import java.math.BigDecimal;
-public class ScalarFactory {
+public class CoreValueFactory {
public CoreValue createValue(String value) {
return new CoreValue(value, CoreValue.STRING);
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=1306221&r1=1306220&r2=1306221&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 Wed Mar 28 09:08:23 2012
@@ -63,7 +63,7 @@ public class Query {
private long limit;
private long offset;
private boolean prepared;
- private final ScalarFactory valueFactory = new ScalarFactory();
+ private final CoreValueFactory valueFactory = new CoreValueFactory();
Query(SourceImpl source, ConstraintImpl constraint, OrderingImpl[] orderings,
ColumnImpl[] columns) {
@@ -252,7 +252,7 @@ public class Query {
this.offset = offset;
}
- public ScalarFactory getValueFactory() {
+ public CoreValueFactory getValueFactory() {
return valueFactory;
}
@@ -260,26 +260,29 @@ public class Query {
this.explain = explain;
}
- public Iterator<Row> executeQuery(String revisionId) {
+ public Result executeQuery(String revisionId) {
prepare();
+ Iterator<ResultRow> it;
if (explain) {
String plan = source.getPlan();
columns = new ColumnImpl[] { new ColumnImpl("explain", "plan", "plan")};
- Row r = new Row(this, new String[0], new CoreValue[] { valueFactory.createValue(plan) }, null);
- return Arrays.asList(r).iterator();
- }
- RowIterator it = new RowIterator(revisionId);
- if (orderings == null) {
- return it;
- }
- // TODO "order by" is not necessary if the used index returns rows in the same order
- ArrayList<Row> list = new ArrayList<Row>();
- while (it.hasNext()) {
- Row r = it.next();
- list.add(r);
+ ResultRow r = new ResultRow(this, new String[0], new CoreValue[] { valueFactory.createValue(plan) }, null);
+ it = Arrays.asList(r).iterator();
+ } else {
+ it = new RowIterator(revisionId);
+ if (orderings != null) {
+ // TODO "order by" is not necessary if the used index returns
+ // rows in the same order
+ ArrayList<ResultRow> list = new ArrayList<ResultRow>();
+ while (it.hasNext()) {
+ ResultRow r = it.next();
+ list.add(r);
+ }
+ Collections.sort(list);
+ it = list.iterator();
+ }
}
- Collections.sort(list);
- return list.iterator();
+ return new Result(this, it);
}
public int compareRows(CoreValue[] orderValues, CoreValue[] orderValues2) {
@@ -316,10 +319,10 @@ public class Query {
source.prepare(mk);
}
- class RowIterator implements Iterator<Row> {
+ class RowIterator implements Iterator<ResultRow> {
private final String revisionId;
- private Row current;
+ private ResultRow current;
private boolean started, end;
RowIterator(String revisionId) {
@@ -360,14 +363,14 @@ public class Query {
}
@Override
- public Row next() {
+ public ResultRow next() {
if (end) {
return null;
}
if (current == null) {
fetchNext();
}
- Row r = current;
+ ResultRow r = current;
current = null;
return r;
}
@@ -379,7 +382,7 @@ public class Query {
}
- Row currentRow() {
+ ResultRow currentRow() {
int selectorCount = selectors.size();
String[] paths = new String[selectorCount];
for (int i = 0; i < selectorCount; i++) {
@@ -402,7 +405,7 @@ public class Query {
orderValues[i] = orderings[i].getOperand().currentValue();
}
}
- return new Row(this, paths, values, orderValues);
+ return new ResultRow(this, paths, values, orderValues);
}
public int getSelectorIndex(String selectorName) {
@@ -444,4 +447,8 @@ public class Query {
return Collections.unmodifiableList(selectors);
}
+ public List<String> getBindVariableNames() {
+ return new ArrayList<String>(bindVariableMap.keySet());
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java?rev=1306221&r1=1306220&r2=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java Wed Mar 28 09:08:23 2012
@@ -17,7 +17,7 @@
package org.apache.jackrabbit.oak.query;
import java.text.ParseException;
-import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.jackrabbit.mk.api.MicroKernel;
@@ -28,29 +28,44 @@ public class QueryEngine {
public static final String SQL2 = "sql2";
private final MicroKernel mk;
- private final ScalarFactory vf = new ScalarFactory();
+ private final CoreValueFactory vf = new CoreValueFactory();
private final SQL2Parser parserSQL2;
- private QueryEngine(MicroKernel mk) {
+ public QueryEngine(MicroKernel mk) {
this.mk = mk;
parserSQL2 = new SQL2Parser(vf);
}
- public static QueryEngine getInstance(MicroKernel mk) {
- return new QueryEngine(mk);
+ /**
+ * Parse the query (check if it's valid) and get the list of bind variable names.
+ *
+ * @param statement
+ * @param language
+ * @return the list of bind variable names
+ * @throws ParseException
+ */
+ public List<String> parse(String statement, String language) throws ParseException {
+ Query q = parseQuery(statement, language);
+ return q.getBindVariableNames();
+
}
- public Iterator<Row> executeQuery(String language, String query, Map<String, CoreValue> bindings) throws ParseException {
+ private Query parseQuery(String statement, String language) throws ParseException {
Query q;
if (SQL2.equals(language)) {
- q = parserSQL2.parse(query);
+ q = parserSQL2.parse(statement);
} else if (XPATH.equals(language)) {
XPathToSQL2Converter converter = new XPathToSQL2Converter();
- String sql2 = converter.convert(query);
+ String sql2 = converter.convert(statement);
q = parserSQL2.parse(sql2);
} else {
throw new ParseException("Unsupported language: " + language, 0);
}
+ return q;
+ }
+
+ public Result executeQuery(String statement, String language, Map<String, CoreValue> bindings) throws ParseException {
+ Query q = parseQuery(statement, language);
q.setMicroKernel(mk);
if (bindings != null) {
for (Entry<String, CoreValue> e : bindings.entrySet()) {
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Result.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Result.java?rev=1306221&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Result.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Result.java Wed Mar 28 09:08:23 2012
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.query;
+
+import java.util.Iterator;
+import java.util.List;
+import org.apache.jackrabbit.oak.query.ast.ColumnImpl;
+import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
+
+/**
+ * A query result.
+ */
+public class Result {
+
+ private final Query query;
+ private final Iterator<ResultRow> it;
+
+ Result(Query query, Iterator<ResultRow> it) {
+ this.query = query;
+ this.it = it;
+ }
+
+ public String[] getColumnNames() {
+ ColumnImpl[] cols = query.getColumns();
+ String[] names = new String[cols.length];
+ for (int i = 0; i < cols.length; i++) {
+ names[i] = cols[i].getColumnName();
+ }
+ return names;
+ }
+
+ public String[] getSelectorNames() {
+ List<SelectorImpl> selectors = query.getSelectors();
+ String[] names = new String[selectors.size()];
+ for (int i = 0; i < selectors.size(); i++) {
+ names[i] = selectors.get(i).getSelectorName();
+ }
+ return names;
+ }
+
+ public Iterator<ResultRow> getRows() {
+ return it;
+ }
+
+}
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java (from r1305825, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java&r1=1305825&r2=1306221&rev=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java Wed Mar 28 09:08:23 2012
@@ -22,14 +22,14 @@ import org.apache.jackrabbit.oak.query.a
/**
* A query result row that keeps all data in memory.
*/
-public class Row implements Comparable<Row> {
+public class ResultRow implements Comparable<ResultRow> {
private final Query query;
private final String[] paths;
private final CoreValue[] values;
private final CoreValue[] orderValues;
- Row(Query query, String[] paths, CoreValue[] values, CoreValue[] orderValues) {
+ ResultRow(Query query, String[] paths, CoreValue[] values, CoreValue[] orderValues) {
this.query = query;
this.paths = paths;
this.values = values;
@@ -62,7 +62,7 @@ public class Row implements Comparable<R
}
@Override
- public int compareTo(Row o) {
+ public int compareTo(ResultRow o) {
return query.compareRows(orderValues, o.orderValues);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1306221&r1=1306220&r2=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java Wed Mar 28 09:08:23 2012
@@ -75,14 +75,14 @@ public class SQL2Parser {
private boolean allowNumberLiterals = true;
private final AstElementFactory factory = new AstElementFactory();
- private final ScalarFactory valueFactory;
+ private final CoreValueFactory valueFactory;
/**
* Create a new parser. A parser can be re-used, but it is not thread safe.
*
* @param valueFactory the value factory
*/
- public SQL2Parser(ScalarFactory valueFactory) {
+ public SQL2Parser(CoreValueFactory valueFactory) {
this.valueFactory = valueFactory;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java?rev=1306221&r1=1306220&r2=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java Wed Mar 28 09:08:23 2012
@@ -19,7 +19,7 @@
package org.apache.jackrabbit.oak.query.ast;
import org.apache.jackrabbit.oak.query.CoreValue;
-import org.apache.jackrabbit.oak.query.ScalarFactory;
+import org.apache.jackrabbit.oak.query.CoreValueFactory;
import org.apache.jackrabbit.oak.query.index.Filter;
public class ComparisonImpl extends ConstraintImpl {
@@ -266,7 +266,7 @@ public class ComparisonImpl extends Cons
if (lowerBound == null && upperBound == null) {
// ignore
} else {
- ScalarFactory vf = query.getValueFactory();
+ CoreValueFactory vf = query.getValueFactory();
if (lowerBound != null) {
operand1.apply(f, Operator.GREATER_OR_EQUAL, vf.createValue(lowerBound));
}
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=1306221&r1=1306220&r2=1306221&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 Wed Mar 28 09:08:23 2012
@@ -25,15 +25,15 @@ import org.apache.jackrabbit.oak.query.Q
import org.apache.jackrabbit.oak.query.CoreValue;
import org.apache.jackrabbit.oak.query.index.Cursor;
import org.apache.jackrabbit.oak.query.index.Filter;
-import org.apache.jackrabbit.oak.query.index.NodeReader;
-import org.apache.jackrabbit.oak.query.index.TraversingReader;
+import org.apache.jackrabbit.oak.query.index.QueryIndex;
+import org.apache.jackrabbit.oak.query.index.TraversingIndex;
public class SelectorImpl extends SourceImpl {
// TODO jcr:path isn't an official feature, support it?
private static final String PATH = "jcr:path";
- protected NodeReader reader;
+ protected QueryIndex index;
private final String nodeTypeName, selectorName;
private Cursor cursor;
@@ -65,17 +65,17 @@ public class SelectorImpl extends Source
@Override
public void prepare(MicroKernel mk) {
- reader = new TraversingReader(mk);
+ index = new TraversingIndex(mk);
}
@Override
public void execute(String revisionId) {
- cursor = reader.query(createFilter(), revisionId);
+ cursor = index.query(createFilter(), revisionId);
}
@Override
public String getPlan() {
- return nodeTypeName + " AS " + getSelectorName() + " /* " + reader.getPlan(createFilter()) + " */";
+ return nodeTypeName + " AS " + getSelectorName() + " /* " + index.getPlan(createFilter()) + " */";
}
private Filter createFilter() {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java?rev=1306221&r1=1306220&r2=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java Wed Mar 28 09:08:23 2012
@@ -26,7 +26,7 @@ import org.apache.jackrabbit.oak.query.a
import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
/**
- * An index filter / lookup condition.
+ * A filter or lookup condition.
*/
public class Filter {
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndex.java (from r1305822, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/NodeReader.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndex.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndex.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/NodeReader.java&r1=1305822&r2=1306221&rev=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/NodeReader.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndex.java Wed Mar 28 09:08:23 2012
@@ -19,13 +19,13 @@
package org.apache.jackrabbit.oak.query.index;
/**
- * A node reader. The reader should use the data in the filter if possible to
- * speed up reading.
+ * Represents an index. The index should use the data in the filter if possible
+ * to speed up reading.
*/
-public interface NodeReader {
+public interface QueryIndex {
/**
- * Estimate the cost to use this reader with the given filter. The returned
+ * Estimate the cost to query with the given filter. The returned
* cost is a value between 1 (very fast; lookup of a unique node) and the
* estimated number of nodes to traverse.
*
@@ -35,7 +35,7 @@ public interface NodeReader {
double getCost(Filter filter);
/**
- * Start reading nodes.
+ * Start a query.
*
* @param filter the filter
* @param revisionId the revision
@@ -44,7 +44,7 @@ public interface NodeReader {
Cursor query(Filter filter, String revisionId);
/**
- * Get the query plan for the given reader.
+ * Get the query plan for the given filter.
*
* @param filter the filter
* @return the query plan
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java (from r1305822, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingReader.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingReader.java&r1=1305822&r2=1306221&rev=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingReader.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/TraversingIndex.java Wed Mar 28 09:08:23 2012
@@ -21,12 +21,12 @@ package org.apache.jackrabbit.oak.query.
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.util.PathUtils;
-public class TraversingReader implements NodeReader {
+public class TraversingIndex implements QueryIndex {
private final MicroKernel mk;
private int childBlockSize = 2000;
- public TraversingReader(MicroKernel mk) {
+ public TraversingIndex(MicroKernel mk) {
this.mk = mk;
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java?rev=1306221&r1=1306220&r2=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java Wed Mar 28 09:08:23 2012
@@ -43,7 +43,7 @@ public class QueryTest {
public void setUp() {
mk = MicroKernelFactory.getInstance("simple:/target/temp;clear");
head = mk.getHeadRevision();
- qe = QueryEngine.getInstance(mk);
+ qe = new QueryEngine(mk);
}
@After
@@ -65,20 +65,20 @@ public class QueryTest {
public void bindVariableTest() throws Exception {
head = mk.commit("/", "+ \"test\": { \"hello\": {\"id\": \"1\"}, \"world\": {\"id\": \"2\"}}", null, null);
HashMap<String, CoreValue> sv = new HashMap<String, CoreValue>();
- ScalarFactory vf = new ScalarFactory();
+ CoreValueFactory vf = new CoreValueFactory();
sv.put("id", vf.createValue("1"));
- Iterator<Row> result;
- result = qe.executeQuery(QueryEngine.SQL2, "select * from [nt:base] where id = $id", sv);
+ Iterator<ResultRow> result;
+ result = qe.executeQuery("select * from [nt:base] where id = $id", QueryEngine.SQL2, sv).getRows();
assertTrue(result.hasNext());
assertEquals("/test/hello", result.next().getPath());
sv.put("id", vf.createValue("2"));
- result = qe.executeQuery(QueryEngine.SQL2, "select * from [nt:base] where id = $id", sv);
+ result = qe.executeQuery("select * from [nt:base] where id = $id", QueryEngine.SQL2, sv).getRows();
assertTrue(result.hasNext());
assertEquals("/test/world", result.next().getPath());
- qe.executeQuery(QueryEngine.SQL2, "explain select * from [nt:base] where id = 1 order by id", null);
+ qe.executeQuery("explain select * from [nt:base] where id = 1 order by id", QueryEngine.SQL2, null);
@@ -115,10 +115,10 @@ public class QueryTest {
}
} else if (line.startsWith("select") || line.startsWith("explain")) {
w.println(line);
- Iterator<Row> result = qe.executeQuery(QueryEngine.SQL2, line, null);
+ Iterator<ResultRow> result = qe.executeQuery(line, QueryEngine.SQL2, null).getRows();
boolean readEnd = true;
while (result.hasNext()) {
- Row row = result.next();
+ ResultRow row = result.next();
String resultLine = readRow(line, row);
w.println(resultLine);
if (readEnd) {
@@ -168,7 +168,7 @@ public class QueryTest {
}
}
- private String readRow(String query, Row row) {
+ private String readRow(String query, ResultRow row) {
StringBuilder buff = new StringBuilder();
CoreValue[] values = row.getValues();
for (int i = 0; i < values.length; i++) {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/FilterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/FilterTest.java?rev=1306221&r1=1306220&r2=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/FilterTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/FilterTest.java Wed Mar 28 09:08:23 2012
@@ -24,7 +24,7 @@ import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Random;
import org.apache.jackrabbit.oak.query.CoreValue;
-import org.apache.jackrabbit.oak.query.ScalarFactory;
+import org.apache.jackrabbit.oak.query.CoreValueFactory;
import org.apache.jackrabbit.oak.query.ast.Operator;
import org.apache.jackrabbit.oak.query.index.Filter.PathRestriction;
import org.junit.Test;
@@ -36,8 +36,8 @@ public class FilterTest {
@Test
public void propertyRestriction() {
- CoreValue one = new ScalarFactory().createValue("1");
- CoreValue two = new ScalarFactory().createValue("2");
+ CoreValue one = new CoreValueFactory().createValue("1");
+ CoreValue two = new CoreValueFactory().createValue("2");
Filter f = new Filter(null);
assertTrue(null == f.getPropertyRestriction("x"));
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java?rev=1306221&r1=1306220&r2=1306221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/index/TraversingCursorTest.java Wed Mar 28 09:08:23 2012
@@ -48,24 +48,24 @@ public class TraversingCursorTest {
@Test
public void traverse() throws Exception {
- TraversingReader r = new TraversingReader(mk);
- traverse(r);
+ TraversingIndex t = new TraversingIndex(mk);
+ traverse(t);
}
@Test
public void traverseBlockwise() throws Exception {
- TraversingReader r = new TraversingReader(mk);
- r.setChildBlockSize(2);
- traverse(r);
+ TraversingIndex t = new TraversingIndex(mk);
+ t.setChildBlockSize(2);
+ traverse(t);
}
- private void traverse(TraversingReader r) {
+ private void traverse(TraversingIndex t) {
head = mk.commit("/", "+ \"parents\": { \"p0\": {\"id\": \"0\"}, \"p1\": {\"id\": \"1\"}, \"p2\": {\"id\": \"2\"}}", head, "");
head = mk.commit("/", "+ \"children\": { \"c1\": {\"p\": \"1\"}, \"c2\": {\"p\": \"1\"}, \"c3\": {\"p\": \"2\"}, \"c4\": {\"p\": \"3\"}}", head, "");
Filter f = new Filter(null);
Cursor c;
f.setPath("/");
- c = r.query(f, head);
+ c = t.query(f, head);
String[] list = {"/", "/parents", "/parents/p0", "/parents/p1", "/parents/p2",
"/children", "/children/c1", "/children/c2", "/children/c3", "/children/c4"};
for (String s : list) {
@@ -75,7 +75,7 @@ public class TraversingCursorTest {
assertFalse(c.next());
assertFalse(c.next());
f.setPath("/nowhere");
- c = r.query(f, head);
+ c = t.query(f, head);
assertFalse(c.next());
assertFalse(c.next());
}