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 2010/02/08 15:04:03 UTC
svn commit: r907659 - in /jackrabbit/trunk/jackrabbit-core/src:
main/java/org/apache/jackrabbit/core/query/lucene/
test/java/org/apache/jackrabbit/core/query/
Author: mreutegg
Date: Mon Feb 8 14:04:02 2010
New Revision: 907659
URL: http://svn.apache.org/viewvc?rev=907659&view=rev
Log:
JCR-2417: RepositoryException when using BindVariables in JCR-SQL2 CONTAINS
Added:
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextSQL2QueryTest.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java?rev=907659&r1=907658&r2=907659&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/LuceneQueryFactoryImpl.java Mon Feb 8 14:04:02 2010
@@ -16,37 +16,41 @@
*/
package org.apache.jackrabbit.core.query.lucene;
-import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
-import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeIterator;
+import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.query.InvalidQueryException;
import javax.jcr.query.qom.Literal;
import javax.jcr.query.qom.StaticOperand;
-import javax.jcr.RepositoryException;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.BooleanClause;
-import org.apache.lucene.search.SortComparatorSource;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.queryParser.ParseException;
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.jackrabbit.spi.commons.query.qom.SelectorImpl;
+import org.apache.jackrabbit.core.HierarchyManager;
+import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.query.qom.BindVariableValueImpl;
+import org.apache.jackrabbit.spi.commons.query.qom.DefaultQOMTreeVisitor;
import org.apache.jackrabbit.spi.commons.query.qom.FullTextSearchImpl;
+import org.apache.jackrabbit.spi.commons.query.qom.JoinConditionImpl;
+import org.apache.jackrabbit.spi.commons.query.qom.JoinImpl;
import org.apache.jackrabbit.spi.commons.query.qom.PropertyExistenceImpl;
+import org.apache.jackrabbit.spi.commons.query.qom.SelectorImpl;
import org.apache.jackrabbit.spi.commons.query.qom.SourceImpl;
-import org.apache.jackrabbit.spi.commons.query.qom.JoinImpl;
-import org.apache.jackrabbit.spi.commons.query.qom.DefaultQOMTreeVisitor;
-import org.apache.jackrabbit.spi.commons.query.qom.JoinConditionImpl;
-import org.apache.jackrabbit.spi.commons.name.NameConstants;
-import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
-import org.apache.jackrabbit.spi.Name;
-import org.apache.jackrabbit.core.SessionImpl;
-import org.apache.jackrabbit.core.HierarchyManager;
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.SortComparatorSource;
/**
* <code>LuceneQueryFactoryImpl</code> implements a lucene query factory.
@@ -94,6 +98,11 @@
private final IndexFormatVersion version;
/**
+ * The Bind Variable values.
+ */
+ private final Map<Name, Value> bindVariables;
+
+ /**
* Creates a new lucene query factory.
*
* @param session the session that executes the query.
@@ -103,6 +112,7 @@
* @param analyzer the analyzer of the index.
* @param synonymProvider the synonym provider of the index.
* @param version the version of the index format.
+ * @param bindVariables the bind variable values of the query
*/
public LuceneQueryFactoryImpl(SessionImpl session,
SortComparatorSource scs,
@@ -110,7 +120,8 @@
NamespaceMappings nsMappings,
Analyzer analyzer,
SynonymProvider synonymProvider,
- IndexFormatVersion version) {
+ IndexFormatVersion version,
+ Map<Name, Value> bindVariables) {
this.session = session;
this.scs = scs;
this.hmgr = hmgr;
@@ -119,6 +130,7 @@
this.synonymProvider = synonymProvider;
this.version = version;
this.npResolver = NamePathResolverImpl.create(nsMappings);
+ this.bindVariables = bindVariables;
}
/**
@@ -211,6 +223,13 @@
if (expr instanceof Literal) {
return parser.parse(
((Literal) expr).getLiteralValue().getString());
+ } else if (expr instanceof BindVariableValueImpl) {
+ Value value = this.bindVariables.get(
+ ((BindVariableValueImpl) expr).getBindVariableQName());
+ if (value == null) {
+ throw new InvalidQueryException("Bind variable not bound");
+ }
+ return parser.parse(value.getString());
} else {
throw new RepositoryException(
"Unknown static operand type: " + expr);
Modified: 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=907659&r1=907658&r2=907659&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryObjectModelImpl.java Mon Feb 8 14:04:02 2010
@@ -101,7 +101,8 @@
index.getSortComparatorSource(),
index.getContext().getHierarchyManager(),
index.getNamespaceMappings(), index.getTextAnalyzer(),
- index.getSynonymProvider(), index.getIndexFormatVersion());
+ index.getSynonymProvider(), index.getIndexFormatVersion(),
+ getBindVariableValues());
MultiColumnQuery query = factory.create(qomTree.getSource());
Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextSQL2QueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextSQL2QueryTest.java?rev=907659&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextSQL2QueryTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextSQL2QueryTest.java Mon Feb 8 14:04:02 2010
@@ -0,0 +1,60 @@
+/*
+ * 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;
+
+import javax.jcr.Node;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
+
+/**
+ * Performs tests with the <code>CONTAINS</code> function in JCR_SQL2 queries.
+ */
+public class FulltextSQL2QueryTest extends AbstractQueryTest {
+
+ public void testFulltextSimpleSQL() throws Exception {
+ Node foo = testRootNode.addNode("foo");
+ foo.setProperty("mytext", new String[]{"the quick brown fox jumps over the lazy dog."});
+
+ testRootNode.save();
+
+ String sql = "SELECT * FROM [nt:unstructured]"
+ + " WHERE ISCHILDNODE([" + testRoot + "])"
+ + " AND CONTAINS(mytext, 'fox')";
+ Query q = superuser.getWorkspace().getQueryManager().createQuery(sql, Query.JCR_SQL2);
+ QueryResult result = q.execute();
+ checkResult(result, 1);
+ }
+
+ public void testFulltextBindVariableSQL() throws Exception {
+ Node foo = testRootNode.addNode("foo");
+ foo.setProperty("mytext", new String[]{"the quick brown fox jumps over the lazy dog."});
+
+ testRootNode.save();
+
+ String sql = "SELECT * FROM [nt:unstructured]"
+ + " WHERE ISCHILDNODE([" + testRoot + "])"
+ + " AND CONTAINS(mytext, $searchExpression)";
+ Query q = superuser.getWorkspace().getQueryManager().createQuery(sql, Query.JCR_SQL2);
+ assertEquals("Expected exactly 1 bind variable", 1, q.getBindVariableNames().length);
+ assertEquals("searchExpression", q.getBindVariableNames()[0]);
+
+ q.bindValue("searchExpression", superuser.getValueFactory().createValue("fox"));
+ QueryResult result = q.execute();
+ checkResult(result, 1);
+ }
+
+}
Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/FulltextSQL2QueryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java?rev=907659&r1=907658&r2=907659&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java Mon Feb 8 14:04:02 2010
@@ -62,6 +62,7 @@
suite.addTestSuite(ShareableNodeTest.class);
suite.addTestSuite(ParentNodeTest.class);
suite.addTestSuite(SimilarQueryTest.class);
+ suite.addTestSuite(FulltextSQL2QueryTest.class);
return suite;
}