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/04/03 10:24:17 UTC
svn commit: r1308742 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-core/src/main/java/org/apache/jackrabbit/oak/query/
oak-core/src/test/java/org/apache/jack...
Author: thomasm
Date: Tue Apr 3 08:24:16 2012
New Revision: 1308742
URL: http://svn.apache.org/viewvc?rev=1308742&view=rev
Log:
OAK-34 Define query API (prototype)
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Result.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ResultRow.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
- copied, changed from r1308726, 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/ResultImpl.java
- copied, changed from r1308726, 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/ResultRowImpl.java
- copied, changed from r1308726, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java
Removed:
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/Result.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/RepositoryService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/QueryTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/RowImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java?rev=1308742&r1=1308741&r2=1308742&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Connection.java Tue Apr 3 08:24:16 2012
@@ -87,8 +87,13 @@ public interface Connection extends Clos
NodeStateEditor getNodeStateEditor(NodeState state);
- // TODO : add versioning operations
+ /**
+ * Get the query engine.
+ *
+ * @return the query engine
+ */
+ QueryEngine getQueryEngine();
- // TODO : add query execution operations
+ // TODO : add versioning operations
}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java?rev=1308742&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java Tue Apr 3 08:24:16 2012
@@ -0,0 +1,64 @@
+/*
+ * 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.api;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+import org.apache.jackrabbit.oak.query.CoreValue;
+
+/**
+ * The query engine allows to parse and execute queries.
+ * <p>
+ * At least the query languages {@code QueryEngine.XPATH} and {@code
+ * QueryEngine.SQL2} are supported. Other query languages might be supported
+ * depending on the configured query parsers.
+ */
+public interface QueryEngine {
+
+ /**
+ * The XPath query language.
+ */
+ String XPATH = "xpath";
+
+ /**
+ * The SQL-2 query language.
+ */
+ String SQL2 = "sql2";
+
+ /**
+ * 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
+ */
+ List<String> getBindVariableNames(String statement, String language) throws ParseException;
+
+ /**
+ * Execute a query and get the result.
+ *
+ * @param statement the query statement
+ * @param language the language
+ * @param bindings the bind variable value bindings
+ * @return the result
+ * @throws ParseException if the statement could not be parsed
+ */
+ Result executeQuery(String statement, String language, Map<String, CoreValue> bindings) throws ParseException;
+
+}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/RepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/RepositoryService.java?rev=1308742&r1=1308741&r2=1308742&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/RepositoryService.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/RepositoryService.java Tue Apr 3 08:24:16 2012
@@ -37,7 +37,7 @@ public interface RepositoryService {
*
* @param credentials
* @param workspaceName
- * @return
+ * @return the connection
* @throws LoginException
* @throws NoSuchWorkspaceException
*/
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Result.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Result.java?rev=1308742&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Result.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Result.java Tue Apr 3 08:24:16 2012
@@ -0,0 +1,32 @@
+/*
+ * 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.api;
+
+import java.util.Iterator;
+
+/**
+ * A result from executing a query.
+ */
+public interface Result {
+
+ String[] getColumnNames();
+
+ String[] getSelectorNames();
+
+ Iterator<? extends ResultRow> getRows();
+
+}
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ResultRow.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ResultRow.java?rev=1308742&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ResultRow.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/ResultRow.java Tue Apr 3 08:24:16 2012
@@ -0,0 +1,18 @@
+package org.apache.jackrabbit.oak.api;
+
+import org.apache.jackrabbit.oak.query.CoreValue;
+
+/**
+ * A query result row.
+ */
+public interface ResultRow {
+
+ String getPath();
+
+ String getPath(String selectorName);
+
+ CoreValue getValue(String columnName);
+
+ CoreValue[] getValues();
+
+}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java?rev=1308742&r1=1308741&r2=1308742&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ConnectionImpl.java Tue Apr 3 08:24:16 2012
@@ -23,7 +23,9 @@ import org.apache.jackrabbit.mk.model.No
import org.apache.jackrabbit.oak.api.AuthInfo;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.Connection;
+import org.apache.jackrabbit.oak.api.QueryEngine;
import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
+import org.apache.jackrabbit.oak.query.QueryEngineImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,15 +46,17 @@ public class ConnectionImpl implements C
private final SimpleCredentials credentials;
private final String workspaceName;
private final NodeStore store;
+ private final QueryEngine queryEngine;
private NodeState root;
public ConnectionImpl(SimpleCredentials credentials, String workspaceName,
- NodeStore store, NodeState root) {
+ NodeStore store, NodeState root, QueryEngine queryEngine) {
this.credentials = credentials;
this.workspaceName = workspaceName;
this.store = store;
this.root = root;
+ this.queryEngine = queryEngine;
}
static Connection createWorkspaceConnection(SimpleCredentials credentials,
@@ -63,8 +67,9 @@ public class ConnectionImpl implements C
if (wspRoot == null) {
throw new NoSuchWorkspaceException(workspace);
}
+ QueryEngine queryEngine = new QueryEngineImpl(microKernel);
- return new ConnectionImpl(credentials, workspace, store, wspRoot);
+ return new ConnectionImpl(credentials, workspace, store, wspRoot, queryEngine);
}
@Override
@@ -122,6 +127,12 @@ public class ConnectionImpl implements C
@Override
public Connection getRepositoryConnection() {
- return new ConnectionImpl(credentials, null, store, store.getRoot());
+ return new ConnectionImpl(credentials, null, store, store.getRoot(), queryEngine);
}
+
+ @Override
+ public QueryEngine getQueryEngine() {
+ return queryEngine;
+ }
+
}
\ No newline at end of file
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=1308742&r1=1308741&r2=1308742&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 Apr 3 08:24:16 2012
@@ -260,29 +260,29 @@ public class Query {
this.explain = explain;
}
- public Result executeQuery(String revisionId) {
+ public ResultImpl executeQuery(String revisionId) {
prepare();
- Iterator<ResultRow> it;
+ Iterator<ResultRowImpl> it;
if (explain) {
String plan = source.getPlan();
columns = new ColumnImpl[] { new ColumnImpl("explain", "plan", "plan")};
- ResultRow r = new ResultRow(this, new String[0], new CoreValue[] { valueFactory.createValue(plan) }, null);
+ ResultRowImpl r = new ResultRowImpl(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>();
+ ArrayList<ResultRowImpl> list = new ArrayList<ResultRowImpl>();
while (it.hasNext()) {
- ResultRow r = it.next();
+ ResultRowImpl r = it.next();
list.add(r);
}
Collections.sort(list);
it = list.iterator();
}
}
- return new Result(this, it);
+ return new ResultImpl(this, it);
}
public int compareRows(CoreValue[] orderValues, CoreValue[] orderValues2) {
@@ -319,10 +319,10 @@ public class Query {
source.prepare(mk);
}
- class RowIterator implements Iterator<ResultRow> {
+ class RowIterator implements Iterator<ResultRowImpl> {
private final String revisionId;
- private ResultRow current;
+ private ResultRowImpl current;
private boolean started, end;
RowIterator(String revisionId) {
@@ -363,14 +363,14 @@ public class Query {
}
@Override
- public ResultRow next() {
+ public ResultRowImpl next() {
if (end) {
return null;
}
if (current == null) {
fetchNext();
}
- ResultRow r = current;
+ ResultRowImpl r = current;
current = null;
return r;
}
@@ -382,7 +382,7 @@ public class Query {
}
- ResultRow currentRow() {
+ ResultRowImpl currentRow() {
int selectorCount = selectors.size();
String[] paths = new String[selectorCount];
for (int i = 0; i < selectorCount; i++) {
@@ -405,7 +405,7 @@ public class Query {
orderValues[i] = orderings[i].getOperand().currentValue();
}
}
- return new ResultRow(this, paths, values, orderValues);
+ return new ResultRowImpl(this, paths, values, orderValues);
}
public int getSelectorIndex(String selectorName) {
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java (from r1308726, 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/QueryEngineImpl.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java&r1=1308726&r2=1308742&rev=1308742&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/QueryEngineImpl.java Tue Apr 3 08:24:16 2012
@@ -21,17 +21,15 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.QueryEngine;
-public class QueryEngine {
-
- public static final String XPATH = "xpath";
- public static final String SQL2 = "sql2";
+public class QueryEngineImpl implements QueryEngine {
private final MicroKernel mk;
private final CoreValueFactory vf = new CoreValueFactory();
private final SQL2Parser parserSQL2;
- public QueryEngine(MicroKernel mk) {
+ public QueryEngineImpl(MicroKernel mk) {
this.mk = mk;
parserSQL2 = new SQL2Parser(vf);
}
@@ -44,7 +42,8 @@ public class QueryEngine {
* @return the list of bind variable names
* @throws ParseException
*/
- public List<String> parse(String statement, String language) throws ParseException {
+ @Override
+ public List<String> getBindVariableNames(String statement, String language) throws ParseException {
Query q = parseQuery(statement, language);
return q.getBindVariableNames();
@@ -64,7 +63,8 @@ public class QueryEngine {
return q;
}
- public Result executeQuery(String statement, String language, Map<String, CoreValue> bindings) throws ParseException {
+ @Override
+ public ResultImpl executeQuery(String statement, String language, Map<String, CoreValue> bindings) throws ParseException {
Query q = parseQuery(statement, language);
q.setMicroKernel(mk);
if (bindings != null) {
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultImpl.java (from r1308726, 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/ResultImpl.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultImpl.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Result.java&r1=1308726&r2=1308742&rev=1308742&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Result.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultImpl.java Tue Apr 3 08:24:16 2012
@@ -18,22 +18,25 @@ package org.apache.jackrabbit.oak.query;
import java.util.Iterator;
import java.util.List;
+import org.apache.jackrabbit.oak.api.Result;
+import org.apache.jackrabbit.oak.api.ResultRow;
import org.apache.jackrabbit.oak.query.ast.ColumnImpl;
import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
/**
* A query result.
*/
-public class Result {
+public class ResultImpl implements Result {
private final Query query;
- private final Iterator<ResultRow> it;
+ private final Iterator<ResultRowImpl> it;
- Result(Query query, Iterator<ResultRow> it) {
+ ResultImpl(Query query, Iterator<ResultRowImpl> it) {
this.query = query;
this.it = it;
}
+ @Override
public String[] getColumnNames() {
ColumnImpl[] cols = query.getColumns();
String[] names = new String[cols.length];
@@ -43,6 +46,7 @@ public class Result {
return names;
}
+ @Override
public String[] getSelectorNames() {
List<SelectorImpl> selectors = query.getSelectors();
String[] names = new String[selectors.size()];
@@ -52,7 +56,8 @@ public class Result {
return names;
}
- public Iterator<ResultRow> getRows() {
+ @Override
+ public Iterator<? extends ResultRow> getRows() {
return it;
}
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java (from r1308726, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java&r1=1308726&r2=1308742&rev=1308742&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRow.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ResultRowImpl.java Tue Apr 3 08:24:16 2012
@@ -16,26 +16,28 @@
*/
package org.apache.jackrabbit.oak.query;
+import org.apache.jackrabbit.oak.api.ResultRow;
import org.apache.jackrabbit.oak.query.ast.ColumnImpl;
import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
/**
* A query result row that keeps all data in memory.
*/
-public class ResultRow implements Comparable<ResultRow> {
+public class ResultRowImpl implements ResultRow, Comparable<ResultRowImpl> {
private final Query query;
private final String[] paths;
private final CoreValue[] values;
private final CoreValue[] orderValues;
- ResultRow(Query query, String[] paths, CoreValue[] values, CoreValue[] orderValues) {
+ ResultRowImpl(Query query, String[] paths, CoreValue[] values, CoreValue[] orderValues) {
this.query = query;
this.paths = paths;
this.values = values;
this.orderValues = orderValues;
}
+ @Override
public String getPath() {
if (paths.length > 1) {
throw new IllegalArgumentException("More than one selector");
@@ -43,6 +45,7 @@ public class ResultRow implements Compar
return paths[0];
}
+ @Override
public String getPath(String selectorName) {
int index = query.getSelectorIndex(selectorName);
if (paths == null || index >= paths.length) {
@@ -51,10 +54,12 @@ public class ResultRow implements Compar
return paths[index];
}
+ @Override
public CoreValue getValue(String columnName) {
return values[query.getColumnIndex(columnName)];
}
+ @Override
public CoreValue[] getValues() {
CoreValue[] v2 = new CoreValue[values.length];
System.arraycopy(values, 0, v2, 0, v2.length);
@@ -62,7 +67,7 @@ public class ResultRow implements Compar
}
@Override
- public int compareTo(ResultRow o) {
+ public int compareTo(ResultRowImpl o) {
return query.compareRows(orderValues, o.orderValues);
}
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=1308742&r1=1308741&r2=1308742&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 Tue Apr 3 08:24:16 2012
@@ -26,6 +26,8 @@ import java.util.HashMap;
import java.util.Iterator;
import org.apache.jackrabbit.mk.MicroKernelFactory;
import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.QueryEngine;
+import org.apache.jackrabbit.oak.api.ResultRow;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -37,13 +39,13 @@ public class QueryTest {
MicroKernel mk;
String head;
- QueryEngine qe;
+ QueryEngineImpl qe;
@Before
public void setUp() {
mk = MicroKernelFactory.getInstance("simple:/target/temp;clear");
head = mk.getHeadRevision();
- qe = new QueryEngine(mk);
+ qe = new QueryEngineImpl(mk);
}
@After
@@ -67,7 +69,7 @@ public class QueryTest {
HashMap<String, CoreValue> sv = new HashMap<String, CoreValue>();
CoreValueFactory vf = new CoreValueFactory();
sv.put("id", vf.createValue("1"));
- Iterator<ResultRow> result;
+ Iterator<? extends 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());
@@ -78,9 +80,9 @@ public class QueryTest {
assertEquals("/test/world", result.next().getPath());
- qe.executeQuery("explain select * from [nt:base] where id = 1 order by id", QueryEngine.SQL2, null);
-
-
+ result = qe.executeQuery("explain select * from [nt:base] where id = 1 order by id", QueryEngine.SQL2, null).getRows();
+ assertTrue(result.hasNext());
+ assertEquals("nt:base AS nt:base /* traverse \"//*\" */", result.next().getValue("plan").getString());
}
@@ -115,7 +117,7 @@ public class QueryTest {
}
} else if (line.startsWith("select") || line.startsWith("explain")) {
w.println(line);
- Iterator<ResultRow> result = qe.executeQuery(line, QueryEngine.SQL2, null).getRows();
+ Iterator<? extends ResultRow> result = qe.executeQuery(line, QueryEngine.SQL2, null).getRows();
boolean readEnd = true;
while (result.hasNext()) {
ResultRow row = result.next();
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java?rev=1308742&r1=1308741&r2=1308742&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryManagerImpl.java Tue Apr 3 08:24:16 2012
@@ -18,14 +18,13 @@
*/
package org.apache.jackrabbit.oak.jcr.query;
-import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.QueryEngine;
+import org.apache.jackrabbit.oak.api.Result;
import org.apache.jackrabbit.oak.jcr.SessionContext;
import org.apache.jackrabbit.oak.jcr.SessionImpl;
import org.apache.jackrabbit.oak.jcr.WorkspaceImpl;
import org.apache.jackrabbit.oak.jcr.query.qom.QueryObjectModelFactoryImpl;
import org.apache.jackrabbit.oak.query.CoreValue;
-import org.apache.jackrabbit.oak.query.QueryEngine;
-import org.apache.jackrabbit.oak.query.Result;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
@@ -46,11 +45,10 @@ import java.util.Map.Entry;
public class QueryManagerImpl implements QueryManager {
private final QueryObjectModelFactoryImpl qomFactory = new QueryObjectModelFactoryImpl();
- private final QueryEngine qe;
+ private final QueryEngine queryEngine;
public QueryManagerImpl(WorkspaceImpl workspace, SessionContext<SessionImpl> sessionContext) {
- MicroKernel mk = sessionContext.getMicrokernel();
- qe = new QueryEngine(mk);
+ queryEngine = sessionContext.getConnection().getQueryEngine();
}
@Override
@@ -84,7 +82,7 @@ public class QueryManagerImpl implements
public List<String> parse(String statement, String language) throws InvalidQueryException {
try {
- return qe.parse(statement, convertLanguage(language));
+ return queryEngine.getBindVariableNames(statement, convertLanguage(language));
} catch (ParseException e) {
throw new InvalidQueryException(e);
}
@@ -94,7 +92,7 @@ public class QueryManagerImpl implements
HashMap<String, Value> bindVariableMap, long limit, long offset) throws RepositoryException {
try {
HashMap<String, CoreValue> bindMap = convertMap(bindVariableMap);
- Result r = qe.executeQuery(statement, convertLanguage(language), bindMap);
+ Result r = queryEngine.executeQuery(statement, convertLanguage(language), bindMap);
return new QueryResultImpl(r);
} catch (ParseException e) {
throw new InvalidQueryException(e);
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java?rev=1308742&r1=1308741&r2=1308742&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java Tue Apr 3 08:24:16 2012
@@ -24,8 +24,8 @@ import javax.jcr.RepositoryException;
import javax.jcr.query.QueryResult;
import javax.jcr.query.RowIterator;
import org.apache.jackrabbit.commons.iterator.RowIteratorAdapter;
-import org.apache.jackrabbit.oak.query.Result;
-import org.apache.jackrabbit.oak.query.ResultRow;
+import org.apache.jackrabbit.oak.api.Result;
+import org.apache.jackrabbit.oak.api.ResultRow;
/**
* The implementation of the corresponding JCR interface.
@@ -52,7 +52,7 @@ public class QueryResultImpl implements
public RowIterator getRows() throws RepositoryException {
Iterator<RowImpl> it = new Iterator<RowImpl>() {
- private Iterator<ResultRow> it = result.getRows();
+ private Iterator<? extends ResultRow> it = result.getRows();
@Override
public boolean hasNext() {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/RowImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/RowImpl.java?rev=1308742&r1=1308741&r2=1308742&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/RowImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/RowImpl.java Tue Apr 3 08:24:16 2012
@@ -23,8 +23,8 @@ import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.query.Row;
+import org.apache.jackrabbit.oak.api.ResultRow;
import org.apache.jackrabbit.oak.query.CoreValue;
-import org.apache.jackrabbit.oak.query.ResultRow;
/**
* The implementation of the corresponding JCR interface.