You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2008/02/29 14:01:44 UTC
svn commit: r632309 - in /jackrabbit/trunk:
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/
jackrabbit-spi-...
Author: mreutegg
Date: Fri Feb 29 05:01:42 2008
New Revision: 632309
URL: http://svn.apache.org/viewvc?rev=632309&view=rev
Log:
JCR-1104: JSR 283 support
- support for prepared queries has been moved to existing Query interface
- removed PreparedQuery again
Added:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java (with props)
Removed:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ExecutablePreparedQuery.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/PreparedQueryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PreparedQueryImpl.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/jsr283/PreparedQuery.java
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ExecutableQuery.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractQueryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JQOM2LuceneQueryBuilder.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/jsr283/qom/QueryObjectModel.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java Fri Feb 29 05:01:42 2008
@@ -26,14 +26,12 @@
import org.apache.jackrabbit.core.query.QueryHandler;
import org.apache.jackrabbit.core.query.QueryHandlerContext;
import org.apache.jackrabbit.core.query.QueryImpl;
-import org.apache.jackrabbit.core.query.PreparedQueryImpl;
import org.apache.jackrabbit.core.query.QueryObjectModelImpl;
import org.apache.jackrabbit.core.state.ItemStateException;
import org.apache.jackrabbit.core.state.ItemStateManager;
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.NodeStateIterator;
import org.apache.jackrabbit.spi.commons.conversion.MalformedPathException;
-import org.apache.jackrabbit.spi.commons.query.jsr283.PreparedQuery;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.QueryObjectModel;
import org.apache.jackrabbit.spi.commons.query.qom.QueryObjectModelTree;
import org.apache.jackrabbit.spi.Path;
@@ -92,12 +90,6 @@
private static final String PARAM_QUERY_IMPL = "queryClass";
/**
- * Name of the parameter that indicates the prepared query implementation
- * class.
- */
- private static final String PARAM_PREPARED_QUERY_IMPL = "preparedQueryClass";
-
- /**
* Name of the parameter that specifies the idle time for a query handler.
*/
private static final String PARAM_IDLE_TIME = "idleTime";
@@ -108,11 +100,6 @@
private static final String DEFAULT_QUERY_IMPL_CLASS = QueryImpl.class.getName();
/**
- * Name of the default prepared query implementation class.
- */
- private static final String DEFAULT_PREPARED_QUERY_IMPL_CLASS = PreparedQueryImpl.class.getName();
-
- /**
* The search configuration.
*/
private final SearchConfig config;
@@ -171,13 +158,6 @@
private final String queryImplClassName;
/**
- * Fully qualified name of the prepared query implementation class.
- * This class must extend {@link org.apache.jackrabbit.core.query.AbstractQueryImpl}
- * and implement {@link PreparedQuery}!
- */
- private final String preparedQueryImplClassName;
-
- /**
* Creates a new <code>SearchManager</code>.
*
* @param config the search configuration.
@@ -237,7 +217,6 @@
Properties params = config.getParameters();
queryImplClassName = params.getProperty(PARAM_QUERY_IMPL, DEFAULT_QUERY_IMPL_CLASS);
- preparedQueryImplClassName = params.getProperty(PARAM_PREPARED_QUERY_IMPL, DEFAULT_PREPARED_QUERY_IMPL_CLASS);
if (params.containsKey(PARAM_IDLE_TIME)) {
String msg = "Parameter 'idleTime' is not supported anymore. "
+ "Please use 'maxIdleTime' in the repository configuration.";
@@ -296,29 +275,6 @@
}
/**
- * Creates a prepared query object that can be executed on the workspace.
- *
- * @param session the session of the user executing the query.
- * @param itemMgr the item manager of the user executing the query. Needed
- * to return <code>Node</code> instances in the result set.
- * @param statement the actual query statement.
- * @param language the syntax of the query statement.
- * @return a <code>Query</code> instance to execute.
- * @throws InvalidQueryException if the query is malformed or the
- * <code>language</code> is unknown.
- * @throws RepositoryException if any other error occurs.
- */
- public PreparedQuery createPreparedQuery(SessionImpl session,
- ItemManager itemMgr,
- String statement,
- String language)
- throws InvalidQueryException, RepositoryException {
- AbstractQueryImpl query = createPreparedQueryInstance();
- query.init(session, itemMgr, handler, statement, language);
- return (PreparedQuery) query;
- }
-
- /**
* Creates a query object model that can be executed on the workspace.
*
* @param session the session of the user executing the query.
@@ -525,33 +481,6 @@
}
} catch (Throwable t) {
throw new RepositoryException("Unable to create query: " + t.toString());
- }
- }
-
- /**
- * Creates a new instance of an {@link AbstractQueryImpl}, which also
- * implements {@link PreparedQuery} and is not initialized.
- *
- * @return an new query instance.
- * @throws RepositoryException if an error occurs while creating a new query
- * instance.
- */
- protected AbstractQueryImpl createPreparedQueryInstance()
- throws RepositoryException {
- try {
- Object obj = Class.forName(preparedQueryImplClassName).newInstance();
- if (!(obj instanceof AbstractQueryImpl)) {
- throw new IllegalArgumentException(preparedQueryImplClassName
- + " is not of type " + AbstractQueryImpl.class.getName());
- } else if (!(obj instanceof PreparedQuery)) {
- throw new IllegalArgumentException(preparedQueryImplClassName
- + " is not of type " + PreparedQuery.class.getName());
- } else {
- return (AbstractQueryImpl) obj;
- }
- } catch (Throwable t) {
- throw new RepositoryException("Unable to create prepared query: "
- + t.toString(), t);
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java Fri Feb 29 05:01:42 2008
@@ -83,17 +83,4 @@
addNode(add.nextNodeState());
}
}
-
- /**
- * {@inheritDoc}
- * <p/>
- * Throws {@link UnsupportedOperationException}.
- */
- public ExecutablePreparedQuery createExecutablePreparedQuery(
- SessionImpl session,
- ItemManager itemMgr,
- QueryObjectModelTree qomTree) throws InvalidQueryException {
- throw new UnsupportedOperationException(
- "This query handler does not support prepared queries");
- }
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ExecutableQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ExecutableQuery.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ExecutableQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ExecutableQuery.java Fri Feb 29 05:01:42 2008
@@ -16,7 +16,10 @@
*/
package org.apache.jackrabbit.core.query;
+import org.apache.jackrabbit.spi.Name;
+
import javax.jcr.RepositoryException;
+import javax.jcr.Value;
import javax.jcr.query.QueryResult;
/**
@@ -35,4 +38,17 @@
* @throws RepositoryException if an error occurs
*/
QueryResult execute(long offset, long limit) throws RepositoryException;
+
+ /**
+ * Binds the given <code>value</code> to the variable named
+ * <code>varName</code>.
+ *
+ * @param varName name of variable in query
+ * @param value value to bind
+ * @throws IllegalArgumentException if <code>varName</code> is not a
+ * valid variable in this query.
+ * @throws javax.jcr.RepositoryException if an error occurs.
+ */
+ void bindValue(Name varName, Value value)
+ throws IllegalArgumentException, RepositoryException;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java Fri Feb 29 05:01:42 2008
@@ -105,9 +105,10 @@
* @return A <code>Query</code> object.
*/
ExecutableQuery createExecutableQuery(SessionImpl session,
- ItemManager itemMgr,
- String statement,
- String language) throws InvalidQueryException;
+ ItemManager itemMgr,
+ String statement,
+ String language)
+ throws InvalidQueryException;
/**
* Creates a new query by specifying the query object model. If the query
@@ -121,8 +122,8 @@
* @return A <code>Query</code> object.
* @throws InvalidQueryException if the query object model tree is invalid.
*/
- ExecutablePreparedQuery createExecutablePreparedQuery(
- SessionImpl session,
- ItemManager itemMgr,
- QueryObjectModelTree qomTree) throws InvalidQueryException;
+ ExecutableQuery createExecutableQuery(SessionImpl session,
+ ItemManager itemMgr,
+ QueryObjectModelTree qomTree)
+ throws InvalidQueryException;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryImpl.java Fri Feb 29 05:01:42 2008
@@ -29,6 +29,7 @@
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.Value;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.query.InvalidQueryException;
@@ -242,6 +243,26 @@
return node;
} catch (NameException e) {
throw new RepositoryException(e.getMessage(), e);
+ }
+ }
+
+ /**
+ * Binds the given <code>value</code> to the variable named
+ * <code>varName</code>.
+ *
+ * @param varName name of variable in query
+ * @param value value to bind
+ * @throws IllegalArgumentException if <code>varName</code> is not a
+ * valid variable in this query.
+ * @throws javax.jcr.RepositoryException if an error occurs.
+ */
+ public void bindValue(String varName, Value value)
+ throws IllegalArgumentException, RepositoryException {
+ checkInitialized();
+ try {
+ query.bindValue(session.getQName(varName), value);
+ } catch (NameException e) {
+ throw new RepositoryException(e.getMessage());
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java Fri Feb 29 05:01:42 2008
@@ -22,7 +22,6 @@
import org.apache.jackrabbit.spi.commons.query.QueryTreeBuilderRegistry;
import org.apache.jackrabbit.spi.commons.query.qom.QueryObjectModelFactoryImpl;
import org.apache.jackrabbit.spi.commons.query.qom.QueryObjectModelTree;
-import org.apache.jackrabbit.spi.commons.query.jsr283.PreparedQuery;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.QueryObjectModelFactory;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.QueryObjectModel;
@@ -120,30 +119,6 @@
}
//---------------------------< JSR 283 >------------------------------------
-
- /**
- * Creates a new prepared query by specifying the query
- * <code>statement</code> itself and the <code>language</code> in which the
- * query is stated. If the query statement is syntactically invalid, given
- * the language specified, an <code>InvalidQueryException</code> is thrown.
- * The language parameter must be a string from among those returned by
- * <code>QueryManager.getSupportedQueryLanguages()</code>; if it is not,
- * then an <code>InvalidQueryException</code> is thrown.
- *
- * @param statement a <code>String</code>
- * @param language a <code>String</code>
- * @return a <code>PreparedQuery</code> object
- * @throws InvalidQueryException if the query statement is syntactically
- * invalid or the specified language is not
- * supported
- * @throws RepositoryException if another error occurs
- * @since JCR 2.0
- */
- public PreparedQuery createPreparedQuery(String statement, String language)
- throws InvalidQueryException, RepositoryException {
- sanityCheck();
- return searchMgr.createPreparedQuery(session, itemMgr, statement, language);
- }
/**
* Returns a <code>QueryObjectModelFactory</code> with which a JCR-JQOM
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryObjectModelImpl.java Fri Feb 29 05:01:42 2008
@@ -21,13 +21,84 @@
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.Ordering;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.Constraint;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.Column;
+import org.apache.jackrabbit.spi.commons.query.qom.QueryObjectModelTree;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.ItemManager;
+
+import javax.jcr.query.InvalidQueryException;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
/**
* <code>QueryObjectModelImpl</code>...
*/
-public class QueryObjectModelImpl
- extends PreparedQueryImpl
- implements QueryObjectModel {
+public class QueryObjectModelImpl extends QueryImpl implements QueryObjectModel {
+
+ /**
+ * The query object model tree.
+ */
+ protected QueryObjectModelTree qomTree;
+
+ /**
+ * @inheritDoc
+ */
+ public void init(SessionImpl session,
+ ItemManager itemMgr,
+ QueryHandler handler,
+ String statement,
+ String language) throws InvalidQueryException {
+ checkNotInitialized();
+ this.session = session;
+ this.language = language;
+ this.handler = handler;
+ this.statement = statement;
+ this.query = handler.createExecutableQuery(session, itemMgr,
+ createQOMTree(statement, language));
+ setInitialized();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void init(SessionImpl session,
+ ItemManager itemMgr,
+ QueryHandler handler,
+ Node node) throws InvalidQueryException, RepositoryException {
+ checkNotInitialized();
+ this.session = session;
+ this.node = node;
+ this.handler = handler;
+
+ if (!node.isNodeType(session.getJCRName(NameConstants.NT_QUERY))) {
+ throw new InvalidQueryException("node is not of type nt:query");
+ }
+ this.statement = node.getProperty(session.getJCRName(NameConstants.JCR_STATEMENT)).getString();
+ this.language = node.getProperty(session.getJCRName(NameConstants.JCR_LANGUAGE)).getString();
+ this.query = handler.createExecutableQuery(session, itemMgr,
+ createQOMTree(statement, language));
+ setInitialized();
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void init(SessionImpl session,
+ ItemManager itemMgr,
+ QueryHandler handler,
+ QueryObjectModelTree qomTree,
+ String language)
+ throws InvalidQueryException, RepositoryException {
+ checkNotInitialized();
+ this.session = session;
+ this.language = language;
+ this.handler = handler;
+ this.qomTree = qomTree;
+ this.statement = null; // TODO: format qomTree into a SQL2 statement
+ this.query = handler.createExecutableQuery(session, itemMgr, qomTree);
+ setInitialized();
+ }
+
//-------------------------< QueryObjectModel >-----------------------------
@@ -65,5 +136,23 @@
*/
public Column[] getColumns() {
return qomTree.getColumns();
+ }
+
+ //------------------------------< internal >--------------------------------
+
+ /**
+ * Creates a {@link QueryObjectModelTree} representation for the query
+ * <code>statement</code>.
+ *
+ * @param statement the query statement.
+ * @param language the language of the query statement.
+ * @return the {@link QueryObjectModelTree} representation.
+ * @throws InvalidQueryException if the query statement is malformed.
+ */
+ private QueryObjectModelTree createQOMTree(String statement,
+ String language)
+ throws InvalidQueryException {
+ // TODO: implement
+ return null;
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractQueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractQueryImpl.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractQueryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractQueryImpl.java Fri Feb 29 05:01:42 2008
@@ -20,6 +20,15 @@
import org.apache.jackrabbit.core.query.PropertyTypeRegistry;
import org.apache.jackrabbit.core.SessionImpl;
import org.apache.jackrabbit.core.ItemManager;
+import org.apache.jackrabbit.spi.Name;
+
+import javax.jcr.Value;
+import javax.jcr.RepositoryException;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collections;
/**
* <code>AbstractQueryImpl</code> provides a base class for executable queries
@@ -54,6 +63,17 @@
private boolean documentOrder = true;
/**
+ * Set<Name>, where Name is a variable name in the query statement.
+ */
+ private final Set variableNames = new HashSet();
+
+ /**
+ * Binding of variable name to value. Maps {@link Name} to {@link Value}.
+ */
+ private final Map bindValues = new HashMap();
+
+
+ /**
* Creates a new query instance from a query string.
*
* @param session the session of the user executing this query.
@@ -96,6 +116,42 @@
*/
public void setRespectDocumentOrder(boolean documentOrder) {
this.documentOrder = documentOrder;
+ }
+
+ /**
+ * Binds the given <code>value</code> to the variable named
+ * <code>varName</code>.
+ *
+ * @param varName name of variable in query
+ * @param value value to bind
+ * @throws IllegalArgumentException if <code>varName</code> is not a valid
+ * variable in this query.
+ * @throws RepositoryException if an error occurs.
+ */
+ public void bindValue(Name varName, Value value)
+ throws IllegalArgumentException, RepositoryException {
+ if (!variableNames.contains(varName)) {
+ throw new IllegalArgumentException("not a valid variable in this query");
+ } else {
+ bindValues.put(varName, value);
+ }
+ }
+
+ /**
+ * Adds a name to the set of variables.
+ *
+ * @param varName the name of the variable.
+ */
+ protected void addVariableName(Name varName) {
+ variableNames.add(varName);
+ }
+
+ /**
+ * @return an unmodifieable map, which contains the variable names and their
+ * respective value.
+ */
+ protected Map getBindVariableValues() {
+ return Collections.unmodifiableMap(bindValues);
}
/**
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JQOM2LuceneQueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JQOM2LuceneQueryBuilder.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JQOM2LuceneQueryBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/JQOM2LuceneQueryBuilder.java Fri Feb 29 05:01:42 2008
@@ -555,6 +555,7 @@
public Object visit(PropertyExistenceImpl node, Object data) throws Exception {
String propName = npResolver.getJCRName(node.getPropertyQName());
+ // TODO respect index version
return new MatchAllQuery(propName);
}
Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java?rev=632309&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java Fri Feb 29 05:01:42 2008
@@ -0,0 +1,129 @@
+/*
+ * 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.core.query.lucene;
+
+import org.apache.jackrabbit.core.query.PropertyTypeRegistry;
+import org.apache.jackrabbit.spi.commons.query.jsr283.qom.QueryObjectModelConstants;
+import org.apache.jackrabbit.spi.commons.query.qom.QueryObjectModelTree;
+import org.apache.jackrabbit.spi.commons.query.qom.ColumnImpl;
+import org.apache.jackrabbit.spi.commons.query.qom.OrderingImpl;
+import org.apache.jackrabbit.spi.commons.query.qom.DefaultTraversingQOMTreeVisitor;
+import org.apache.jackrabbit.spi.commons.query.qom.BindVariableValueImpl;
+import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.ItemManager;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.lucene.search.Query;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.query.QueryResult;
+
+/**
+ * <code>QueryObjectModelImpl</code>...
+ */
+public class QueryObjectModelImpl extends AbstractQueryImpl {
+
+ /**
+ * The query object model tree.
+ */
+ private final QueryObjectModelTree qomTree;
+
+ /**
+ * Creates a new query instance from a query string.
+ *
+ * @param session the session of the user executing this query.
+ * @param itemMgr the item manager of the session executing this query.
+ * @param index the search index.
+ * @param propReg the property type registry.
+ * @param qomTree the query object model tree.
+ */
+ public QueryObjectModelImpl(SessionImpl session,
+ ItemManager itemMgr,
+ SearchIndex index,
+ PropertyTypeRegistry propReg,
+ QueryObjectModelTree qomTree) {
+ super(session, itemMgr, index, propReg);
+ this.qomTree = qomTree;
+ extractBindVariableNames();
+ }
+
+ /**
+ * Returns <code>true</code> if this query node needs items under
+ * /jcr:system to be queried.
+ *
+ * @return <code>true</code> if this query node needs content under
+ * /jcr:system to be queried; <code>false</code> otherwise.
+ */
+ public boolean needsSystemTree() {
+ // TODO: analyze QOM tree
+ return true;
+ }
+
+ //-------------------------< ExecutableQuery >------------------------------
+
+ /**
+ * Executes this query and returns a <code>{@link javax.jcr.query.QueryResult}</code>.
+ *
+ * @param offset the offset in the total result set
+ * @param limit the maximum result size
+ * @return a <code>QueryResult</code>
+ * @throws RepositoryException if an error occurs
+ */
+ public QueryResult execute(long offset, long limit)
+ throws RepositoryException {
+ Query query = JQOM2LuceneQueryBuilder.createQuery(qomTree, session,
+ index.getContext().getItemStateManager(),
+ index.getNamespaceMappings(), index.getTextAnalyzer(),
+ propReg, index.getSynonymProvider(), getBindVariableValues());
+
+ ColumnImpl[] columns = qomTree.getColumns();
+ Name[] selectProps = new Name[columns.length];
+ for (int i = 0; i < columns.length; i++) {
+ selectProps[i] = columns[i].getPropertyQName();
+ }
+ OrderingImpl[] orderings = qomTree.getOrderings();
+ // TODO: there are many kinds of DynamicOperand that can be ordered by
+ Name[] orderProps = new Name[orderings.length];
+ boolean[] orderSpecs = new boolean[orderings.length];
+ for (int i = 0; i < orderings.length; i++) {
+ orderSpecs[i] = orderings[i].getOrder() == QueryObjectModelConstants.ORDER_ASCENDING;
+ }
+ return new QueryResultImpl(index, itemMgr,
+ session, session.getAccessManager(),
+ // TODO: spell suggestion missing
+ this, query, null, selectProps, orderProps, orderSpecs,
+ getRespectDocumentOrder(), offset, limit);
+ }
+
+ //--------------------------< internal >------------------------------------
+
+ /**
+ * Extracts all {@link BindVariableValueImpl} from the {@link #qomTree}
+ * and adds it to the set of known variable names.
+ */
+ private void extractBindVariableNames() {
+ try {
+ qomTree.accept(new DefaultTraversingQOMTreeVisitor() {
+ public Object visit(BindVariableValueImpl node, Object data) {
+ addVariableName(node.getBindVariableQName());
+ return data;
+ }
+ }, null);
+ } catch (Exception e) {
+ // will never happen
+ }
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java Fri Feb 29 05:01:42 2008
@@ -25,7 +25,6 @@
import org.apache.jackrabbit.core.fs.FileSystemException;
import org.apache.jackrabbit.core.fs.local.LocalFileSystem;
import org.apache.jackrabbit.core.query.AbstractQueryHandler;
-import org.apache.jackrabbit.core.query.ExecutablePreparedQuery;
import org.apache.jackrabbit.core.query.ExecutableQuery;
import org.apache.jackrabbit.core.query.QueryHandler;
import org.apache.jackrabbit.core.query.QueryHandlerContext;
@@ -589,13 +588,13 @@
* @return A <code>Query</code> object.
* @throws javax.jcr.query.InvalidQueryException
* if the query object model tree is invalid.
- * @see QueryHandler#createExecutablePreparedQuery(SessionImpl, ItemManager, QueryObjectModelTree)
+ * @see QueryHandler#createExecutableQuery(SessionImpl, ItemManager, QueryObjectModelTree)
*/
- public ExecutablePreparedQuery createExecutablePreparedQuery(
+ public ExecutableQuery createExecutableQuery(
SessionImpl session,
ItemManager itemMgr,
QueryObjectModelTree qomTree) throws InvalidQueryException {
- PreparedQueryImpl query = new PreparedQueryImpl(session, itemMgr, this,
+ QueryObjectModelImpl query = new QueryObjectModelImpl(session, itemMgr, this,
getContext().getPropertyTypeRegistry(), qomTree);
query.setRespectDocumentOrder(documentOrder);
return query;
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/jsr283/qom/QueryObjectModel.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/jsr283/qom/QueryObjectModel.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/jsr283/qom/QueryObjectModel.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/jsr283/qom/QueryObjectModel.java Fri Feb 29 05:01:42 2008
@@ -16,7 +16,7 @@
*/
package org.apache.jackrabbit.spi.commons.query.jsr283.qom;
-import org.apache.jackrabbit.spi.commons.query.jsr283.PreparedQuery;
+import javax.jcr.query.Query;
/**
* A query in the JCR query object model.
@@ -55,7 +55,7 @@
*
* @since JCR 2.0
*/
-public interface QueryObjectModel extends PreparedQuery {
+public interface QueryObjectModel extends Query {
/**
* Gets the node-tuple source for this query.
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java?rev=632309&r1=632308&r2=632309&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java Fri Feb 29 05:01:42 2008
@@ -16,7 +16,6 @@
*/
package org.apache.jackrabbit.spi.commons.query.sql2;
-import org.apache.jackrabbit.spi.commons.query.jsr283.PreparedQuery;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.BindVariableValue;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.Column;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.Constraint;
@@ -31,6 +30,7 @@
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.Selector;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.Source;
import org.apache.jackrabbit.spi.commons.query.jsr283.qom.StaticOperand;
+import org.apache.jackrabbit.spi.commons.query.jsr283.qom.QueryObjectModel;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -43,7 +43,7 @@
import javax.jcr.query.InvalidQueryException;
/**
- * The SQL2 parser can convert a JCR-SQL2 query to a PreparedQuery.
+ * The SQL2 parser can convert a JCR-SQL2 query to a QueryObjectModel.
*/
public class Parser {
@@ -93,14 +93,14 @@
}
/**
- * Parse a JCR-SQL2 query and return the prepared query.
+ * Parse a JCR-SQL2 query and return the query object model
*
* @param query the query string
- * @return the prepared query
+ * @return the query object model
* @throws RepositoryException if parsing failed
*/
// Page 125
- public PreparedQuery createPreparedQuery(String query) throws RepositoryException {
+ public QueryObjectModel createQueryObjectModel(String query) throws RepositoryException {
initialize(query);
selectors = new ArrayList();
expected = new ArrayList();
Re: svn commit: r632309 - in /jackrabbit/trunk: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/
jackrabbit-spi-...
Posted by Marcel Reutegger <ma...@gmx.net>.
Julian Reschke wrote:
> mreutegg@apache.org wrote:
>> Author: mreutegg
>> Date: Fri Feb 29 05:01:42 2008
>> New Revision: 632309
>>
>> URL: http://svn.apache.org/viewvc?rev=632309&view=rev
>> Log:
>> JCR-1104: JSR 283 support
>> - support for prepared queries has been moved to existing Query interface
>> - removed PreparedQuery again
>
> Seems this broke the build:
> <http://jackrabbit.zones.apache.org:8080/continuum/component/buildResult.action?buildId=2823&projecGroupId=6&projectId=6&projectGroupId=6>.
my bad, I forgot to check in the changes for that test case.
regards
marcel
Re: svn commit: r632309 - in /jackrabbit/trunk: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/
jackrabbit-spi-...
Posted by Julian Reschke <ju...@gmx.de>.
mreutegg@apache.org wrote:
> Author: mreutegg
> Date: Fri Feb 29 05:01:42 2008
> New Revision: 632309
>
> URL: http://svn.apache.org/viewvc?rev=632309&view=rev
> Log:
> JCR-1104: JSR 283 support
> - support for prepared queries has been moved to existing Query interface
> - removed PreparedQuery again
Seems this broke the build:
<http://jackrabbit.zones.apache.org:8080/continuum/component/buildResult.action?buildId=2823&projecGroupId=6&projectId=6&projectGroupId=6>.
BR, Julian