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/04/01 15:59:36 UTC

svn commit: r643404 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/query/lucene/ test/java/org/apache/jackrabbit/core/query/qom/

Author: mreutegg
Date: Tue Apr  1 06:59:27 2008
New Revision: 643404

URL: http://svn.apache.org/viewvc?rev=643404&view=rev
Log:
JCR-1104: JSR 283 support
- query (work in progress)

Added:
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/PropertyExistenceTest.java   (with props)
Modified:
    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/QueryObjectModelImpl.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/TestAll.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/UpperLowerCaseTest.java

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=643404&r1=643403&r2=643404&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 Tue Apr  1 06:59:27 2008
@@ -155,6 +155,11 @@
     private final Map selectors = new HashMap();
 
     /**
+     * The index format version.
+     */
+    private final IndexFormatVersion version;
+
+    /**
      * Creates a new <code>LuceneQueryBuilder</code> instance.
      *
      * @param qomTree            the root of the query object model.
@@ -168,6 +173,7 @@
      * @param synonymProvider    the synonym provider or <code>null</code> if
      *                           node is configured.
      * @param bindVariableValues the bind variable values.
+     * @param version            the index format version.
      */
     private JQOM2LuceneQueryBuilder(QueryObjectModelTree qomTree,
                                     SessionImpl session,
@@ -177,7 +183,8 @@
                                     Analyzer analyzer,
                                     PropertyTypeRegistry propReg,
                                     SynonymProvider synonymProvider,
-                                    Map bindVariableValues) {
+                                    Map bindVariableValues,
+                                    IndexFormatVersion version) {
         this.qomTree = qomTree;
         this.session = session;
         this.ism = ism;
@@ -188,6 +195,7 @@
         this.propRegistry = propReg;
         this.synonymProvider = synonymProvider;
         this.bindVariableValues = bindVariableValues;
+        this.version = version;
     }
 
     /**
@@ -206,6 +214,7 @@
      * @param synonymProvider    the synonym provider or <code>null</code> if
      *                           node is configured.
      * @param bindVariableValues the bind variable values.
+     * @param version            the index format version.
      * @return the lucene query tree.
      * @throws RepositoryException if an error occurs during the translation.
      */
@@ -216,15 +225,16 @@
                                     Analyzer analyzer,
                                     PropertyTypeRegistry propReg,
                                     SynonymProvider synonymProvider,
-                                    Map bindVariableValues)
+                                    Map bindVariableValues,
+                                    IndexFormatVersion version)
             throws RepositoryException {
 
         NodeId id = ((NodeImpl) session.getRootNode()).getNodeId();
         HierarchyManager hmgr = new HierarchyManagerImpl(
                 id, sharedItemMgr, session);
         JQOM2LuceneQueryBuilder builder = new JQOM2LuceneQueryBuilder(
-                qomTree, session, sharedItemMgr, hmgr, nsMappings,
-                analyzer, propReg, synonymProvider, bindVariableValues);
+                qomTree, session, sharedItemMgr, hmgr, nsMappings, analyzer,
+                propReg, synonymProvider, bindVariableValues, version);
 
         return builder.createLuceneQuery();
     }
@@ -507,8 +517,7 @@
 
     public Object visit(PropertyExistenceImpl node, Object data) throws Exception {
         String propName = npResolver.getJCRName(node.getPropertyQName());
-        // TODO respect index version
-        return new MatchAllQuery(propName);
+        return createMatchAllQuery(propName);
     }
 
     public Object visit(PropertyValueImpl node, Object data) throws Exception {
@@ -765,6 +774,22 @@
             throw new InvalidQueryException(
                     "lower/upper-case not supported on operand "
                     + operand.getClass().getName());
+        }
+    }
+
+    /**
+     * Depending on the index format this method returns
+     * a query that matches all nodes that have a property named 'field'
+     *
+     * @param field
+     * @return Query that matches all nodes that have a property named 'field'
+     */
+    private Query createMatchAllQuery(String field) {
+        if (version.getVersion() >= IndexFormatVersion.V2.getVersion()) {
+            // new index format style
+            return new TermQuery(new Term(FieldNames.PROPERTIES_SET, field));
+        } else {
+            return new MatchAllQuery(field);
         }
     }
 }

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=643404&r1=643403&r2=643404&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 Tue Apr  1 06:59:27 2008
@@ -100,7 +100,8 @@
         Query query = JQOM2LuceneQueryBuilder.createQuery(qomTree, session,
                 index.getContext().getItemStateManager(),
                 index.getNamespaceMappings(), index.getTextAnalyzer(),
-                propReg, index.getSynonymProvider(), getBindVariableValues());
+                propReg, index.getSynonymProvider(), getBindVariableValues(),
+                index.getIndexFormatVersion());
 
         ColumnImpl[] columns = qomTree.getColumns();
         Name[] selectProps = new Name[columns.length];

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/PropertyExistenceTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/PropertyExistenceTest.java?rev=643404&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/PropertyExistenceTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/PropertyExistenceTest.java Tue Apr  1 06:59:27 2008
@@ -0,0 +1,52 @@
+/*
+ * 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.qom;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Node;
+import javax.jcr.query.QueryResult;
+
+/**
+ * <code>PropertyExistenceTest</code> performs a test with
+ * <code>PropertyExistence</code>.
+ */
+public class PropertyExistenceTest extends AbstractQOMTest {
+
+    public void testPropertyExistence() throws RepositoryException {
+        Node n1 = testRootNode.addNode(nodeName1, testNodeType);
+        n1.setProperty(propertyName1, "abc");
+        Node n2 = testRootNode.addNode(nodeName2, testNodeType);
+        n2.setProperty(propertyName2, "abc");
+        testRootNode.save();
+
+        QueryResult result = qomFactory.createQuery(
+                qomFactory.selector(testNodeType, "s"),
+                qomFactory.and(
+                        qomFactory.childNode("s", testRoot),
+                        qomFactory.propertyExistence("s", propertyName1)
+                ), null, null).execute();
+        checkResult(result, new Node[]{n1});
+
+        result = qomFactory.createQuery(
+                qomFactory.selector(testNodeType, "s"),
+                qomFactory.and(
+                        qomFactory.childNode("s", testRoot),
+                        qomFactory.propertyExistence("s", propertyName2)
+                ), null, null).execute();
+        checkResult(result, new Node[]{n2});
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/PropertyExistenceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/TestAll.java?rev=643404&r1=643403&r2=643404&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/TestAll.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/TestAll.java Tue Apr  1 06:59:27 2008
@@ -33,9 +33,11 @@
         suite.addTestSuite(ChildNodeTest.class);
         suite.addTestSuite(DescendantNodeTest.class);
         suite.addTestSuite(NodeNameTest.class);
+        suite.addTestSuite(PropertyExistenceTest.class);
         suite.addTestSuite(QueryObjectModelFactoryTest.class);
         suite.addTestSuite(SameNodeTest.class);
         suite.addTestSuite(SelectorTest.class);
+        suite.addTestSuite(UpperLowerCaseTest.class);
 
         return suite;
     }

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/UpperLowerCaseTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/UpperLowerCaseTest.java?rev=643404&r1=643403&r2=643404&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/UpperLowerCaseTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/qom/UpperLowerCaseTest.java Tue Apr  1 06:59:27 2008
@@ -38,7 +38,7 @@
     protected void setUp() throws Exception {
         super.setUp();
         vf = superuser.getValueFactory();
-        node = testRootNode.addNode(nodeName1);
+        node = testRootNode.addNode(nodeName1, testNodeType);
         node.setProperty(propertyName1, "abc");
         node.setProperty(propertyName2, "ABC");
         testRootNode.save();