From bddf5aea31f3ed34b43d26133de1671b2acbcc46 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" <bronee@gmail.com> Date: Wed, 27 Sep 2006 23:51:49 +0000 Subject: Add support for faster full count. --- .../com/amazon/carbonado/qe/FullScanQueryExecutor.java | 15 +++++++++++++++ .../com/amazon/carbonado/repo/indexed/IndexedStorage.java | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/src/main/java/com/amazon/carbonado/qe/FullScanQueryExecutor.java b/src/main/java/com/amazon/carbonado/qe/FullScanQueryExecutor.java index dbf5690..b8035f0 100644 --- a/src/main/java/com/amazon/carbonado/qe/FullScanQueryExecutor.java +++ b/src/main/java/com/amazon/carbonado/qe/FullScanQueryExecutor.java @@ -51,6 +51,15 @@ public class FullScanQueryExecutor<S extends Storable> extends AbstractQueryExec mSupport = support; } + @Override + public long count(FilterValues<S> values) throws FetchException { + long count = mSupport.countAll(); + if (count == -1) { + count = super.count(values); + } + return count; + } + /** * Returns an open filter. */ @@ -82,6 +91,12 @@ public class FullScanQueryExecutor<S extends Storable> extends AbstractQueryExec public static interface Support<S extends Storable> { Class<S> getStorableType(); + /** + * Counts all Storables. Implementation may return -1 to indicate that + * default count algorithm should be used. + */ + long countAll() throws FetchException; + /** * Perform a full scan of all Storables. */ diff --git a/src/main/java/com/amazon/carbonado/repo/indexed/IndexedStorage.java b/src/main/java/com/amazon/carbonado/repo/indexed/IndexedStorage.java index 1fa1244..2901ea0 100644 --- a/src/main/java/com/amazon/carbonado/repo/indexed/IndexedStorage.java +++ b/src/main/java/com/amazon/carbonado/repo/indexed/IndexedStorage.java @@ -297,6 +297,10 @@ class IndexedStorage<S extends Storable> implements Storage<S>, StorageAccess<S> return new MergeSortBuffer<S>(mRootStorage); } + public long countAll() throws FetchException { + return mMasterStorage.query().count(); + } + public Cursor<S> fetchAll() throws FetchException { return mMasterStorage.query().fetch(); } -- cgit v1.2.3