From e068fb698b0f0e8d6bed2604ad350d725c3043f6 Mon Sep 17 00:00:00 2001 From: Jukka Zitting Date: Sat, 1 Dec 2012 10:05:45 +0000 Subject: [PATCH] JCR-3474: Add JackrabbitQueryResult.getTotalSize() git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/trunk@1415968 13f79535-47bb-0310-9956-ffa450edef68 --- .../api/query/JackrabbitQueryResult.java | 38 +++++++++++++++++++ .../core/query/lucene/QueryResultImpl.java | 12 +++--- .../core/query/AbstractQueryTest.java | 9 ----- .../core/query/LimitAndOffsetTest.java | 14 +++---- 4 files changed, 52 insertions(+), 21 deletions(-) create mode 100644 jackrabbit-api/src/main/java/org/apache/jackrabbit/api/query/JackrabbitQueryResult.java diff --git a/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/query/JackrabbitQueryResult.java b/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/query/JackrabbitQueryResult.java new file mode 100644 index 00000000000..101c4e95456 --- /dev/null +++ b/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/query/JackrabbitQueryResult.java @@ -0,0 +1,38 @@ +/* + * 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.api.query; + +import javax.jcr.query.QueryResult; + +/** + * The Jackrabbit query result interface. This interface contains the + * Jackrabbit-specific extensions to the JCR {@link QueryResult} interface. + * + * @since Jackrabbit 2.6 + */ +public interface JackrabbitQueryResult extends QueryResult { + + /** + * Returns the total number of hits. This is the number of results you + * would get without any limit or offset settings. This method may return + * -1 if the total size is unknown. + * + * @return the total number of hits, or -1 + */ + int getTotalSize(); + +} diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java index d9a8c4ae9e4..719f8d55366 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryResultImpl.java @@ -26,9 +26,9 @@ import javax.jcr.ItemNotFoundException; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; -import javax.jcr.query.QueryResult; import javax.jcr.query.RowIterator; +import org.apache.jackrabbit.api.query.JackrabbitQueryResult; import org.apache.jackrabbit.core.session.SessionContext; import org.apache.jackrabbit.spi.Name; import org.apache.jackrabbit.spi.commons.query.qom.ColumnImpl; @@ -38,7 +38,7 @@ /** * Implements the QueryResult interface. */ -public abstract class QueryResultImpl implements QueryResult { +public abstract class QueryResultImpl implements JackrabbitQueryResult { /** * The logger instance for this class @@ -364,10 +364,12 @@ private boolean isAccessGranted(ScoreNode[] nodes) /** * Returns the total number of hits. This is the number of results you - * will get get if you don't set any limit or offset. Keep in mind that this - * number may get smaller if nodes are found in the result set which the - * current session has no permission to access. This method may return + * will get get if you don't set any limit or offset. This method may return * -1 if the total size is unknown. + *

+ * Keep in mind that this number may get smaller if nodes are found in + * the result set which the current session has no permission to access. + * FIXME: This might be a security problem. * * @return the total number of hits. */ diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java index c5a524ba408..8b51baa571d 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java @@ -49,17 +49,8 @@ public class AbstractQueryTest extends AbstractJCRTest { protected QueryObjectModelFactory qomFactory; - /** - * true if this is a Jackrabbit JCR implementation - */ - boolean isJackrabbitImpl = true; - private static final String DESCRIPTOR_NAME = "jcr.repository.name"; - private static final String DESCRIPTOR_VALUE = "Jackrabbit"; - protected void setUp() throws Exception { super.setUp(); - isJackrabbitImpl = DESCRIPTOR_VALUE.equals(getHelper().getRepository() - .getDescriptor(DESCRIPTOR_NAME)); qm = superuser.getWorkspace().getQueryManager(); qomFactory = qm.getQOMFactory(); } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/LimitAndOffsetTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/LimitAndOffsetTest.java index 2cafd9d8898..d7225f75806 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/LimitAndOffsetTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/LimitAndOffsetTest.java @@ -22,7 +22,7 @@ import javax.jcr.query.Query; import javax.jcr.query.QueryResult; -import org.apache.jackrabbit.core.query.lucene.QueryResultImpl; +import org.apache.jackrabbit.api.query.JackrabbitQueryResult; public class LimitAndOffsetTest extends AbstractQueryTest { @@ -129,8 +129,8 @@ public void testOffsetAndLimitWithGetSize() throws Exception { QueryResult result = query.execute(); NodeIterator nodes = result.getNodes(); assertEquals(2, nodes.getSize()); - if (isJackrabbitImpl) { - assertEquals(3, ((QueryResultImpl) result).getTotalSize()); + if (result instanceof JackrabbitQueryResult) { + assertEquals(3, ((JackrabbitQueryResult) result).getTotalSize()); } // JCR-2684: offset higher than total result => size == 0 @@ -139,8 +139,8 @@ public void testOffsetAndLimitWithGetSize() throws Exception { nodes = result.getNodes(); assertFalse(nodes.hasNext()); assertEquals(0, nodes.getSize()); - if (isJackrabbitImpl) { - assertEquals(3, ((QueryResultImpl) result).getTotalSize()); + if (result instanceof JackrabbitQueryResult) { + assertEquals(3, ((JackrabbitQueryResult) result).getTotalSize()); } query.setOffset(1); @@ -148,8 +148,8 @@ public void testOffsetAndLimitWithGetSize() throws Exception { result = query.execute(); nodes = result.getNodes(); assertEquals(1, nodes.getSize()); - if (isJackrabbitImpl) { - assertEquals(3, ((QueryResultImpl) result).getTotalSize()); + if (result instanceof JackrabbitQueryResult) { + assertEquals(3, ((JackrabbitQueryResult) result).getTotalSize()); } }