From 972f3a4e96876e4c36162a11062e40863d88a2a1 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 15 Nov 2015 12:46:26 +0100 Subject: Cleanup --- common/CMakeLists.txt | 1 - common/entitystorage.cpp | 74 --------------------------- common/entitystorage.h | 126 ---------------------------------------------- common/facade.h | 3 +- common/resourceaccess.cpp | 2 +- 5 files changed, 3 insertions(+), 203 deletions(-) delete mode 100644 common/entitystorage.cpp delete mode 100644 common/entitystorage.h (limited to 'common') diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index f24ec46..bdb9eac 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -15,7 +15,6 @@ set(command_SRCS definitions.cpp log.cpp entitybuffer.cpp - entitystorage.cpp clientapi.cpp facadefactory.cpp commands.cpp diff --git a/common/entitystorage.cpp b/common/entitystorage.cpp deleted file mode 100644 index 5d4df9f..0000000 --- a/common/entitystorage.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2014 Christian Mollekopf - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "entitystorage.h" - -ResultSet EntityStorageBase::filteredSet(const ResultSet &resultSet, const std::function &filter, const Akonadi2::Storage::Transaction &transaction, bool initialQuery) -{ - auto resultSetPtr = QSharedPointer::create(resultSet); - - //Read through the source values and return whatever matches the filter - std::function)> generator = [this, resultSetPtr, &transaction, filter, initialQuery](std::function callback) -> bool { - while (resultSetPtr->next()) { - readEntity(transaction, resultSetPtr->id(), [this, filter, callback, initialQuery](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject, Akonadi2::Operation operation) { - //Always remove removals, they probably don't match due to non-available properties - if (filter(domainObject) || operation == Akonadi2::Operation_Removal) { - if (initialQuery) { - //We're not interested in removals during the initial query - if (operation != Akonadi2::Operation_Removal) { - callback(domainObject, Akonadi2::Operation_Creation); - } - } else { - callback(domainObject, operation); - } - } - }); - } - return false; - }; - return ResultSet(generator); -} - - -ResultSet EntityStorageBase::getResultSet(const Akonadi2::Query &query, Akonadi2::Storage::Transaction &transaction, qint64 baseRevision) -{ - QSet remainingFilters = query.propertyFilter.keys().toSet(); - ResultSet resultSet; - const bool initialQuery = (baseRevision == 1); - if (initialQuery) { - Trace() << "Initial result set update"; - resultSet = loadInitialResultSet(query, transaction, remainingFilters); - } else { - //TODO fallback in case the old revision is no longer available to clear + redo complete initial scan - Trace() << "Incremental result set update" << baseRevision; - resultSet = loadIncrementalResultSet(baseRevision, query, transaction, remainingFilters); - } - - auto filter = [remainingFilters, query, baseRevision](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject) -> bool { - for (const auto &filterProperty : remainingFilters) { - //TODO implement other comparison operators than equality - if (domainObject->getProperty(filterProperty) != query.propertyFilter.value(filterProperty)) { - return false; - } - } - return true; - }; - - return filteredSet(resultSet, filter, transaction, initialQuery); -} diff --git a/common/entitystorage.h b/common/entitystorage.h deleted file mode 100644 index 8e73083..0000000 --- a/common/entitystorage.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2014 Christian Mollekopf - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ -#pragma once - -#include - -#include "query.h" -#include "domainadaptor.h" -#include "entitybuffer.h" -#include "log.h" -#include "storage.h" -#include "resultset.h" -#include "resultprovider.h" -#include "definitions.h" - -/** - * Wraps storage, entity adaptor factory and indexes into one. - * - */ -class EntityStorageBase -{ -public: - typedef std::function &remainingFilters)> InitialResultLoader; - typedef std::function &remainingFilters)> IncrementalResultLoader; - typedef std::function &resultCallback)> EntityReader; - - /** - * Returns the initial result set that still needs to be filtered. - * - * To make this efficient indexes should be chosen that are as selective as possible. - */ - InitialResultLoader loadInitialResultSet; - /** - * Returns the incremental result set that still needs to be filtered. - */ - IncrementalResultLoader loadIncrementalResultSet; - - /** - * Loads a single entity by uid from storage. - */ - EntityReader readEntity; - -protected: - EntityStorageBase(const QByteArray &instanceIdentifier) - : mResourceInstanceIdentifier(instanceIdentifier) - { - - } - - virtual Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr copy(const Akonadi2::ApplicationDomain::ApplicationDomainType &) = 0; - - ResultSet getResultSet(const Akonadi2::Query &query, Akonadi2::Storage::Transaction &transaction, qint64 baseRevision); - - QByteArray mResourceInstanceIdentifier; - -private: - ResultSet filteredSet(const ResultSet &resultSet, const std::function &filter, const Akonadi2::Storage::Transaction &transaction, bool isInitialQuery); -}; - -template -class EntityStorage : public EntityStorageBase -{ - -public: - - EntityStorage(const QByteArray &instanceIdentifier) - : EntityStorageBase(instanceIdentifier) - { - } - -protected: - Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr copy(const Akonadi2::ApplicationDomain::ApplicationDomainType &object) Q_DECL_OVERRIDE - { - return Akonadi2::ApplicationDomain::ApplicationDomainType::getInMemoryRepresentation(object); - } - -public: - - virtual qint64 read(const Akonadi2::Query &query, qint64 baseRevision, const QSharedPointer > &resultProvider) - { - Akonadi2::Storage storage(Akonadi2::storageLocation(), mResourceInstanceIdentifier); - storage.setDefaultErrorHandler([](const Akonadi2::Storage::Error &error) { - Warning() << "Error during query: " << error.store << error.message; - }); - - auto transaction = storage.createTransaction(Akonadi2::Storage::ReadOnly); - - Log() << "Querying" << baseRevision << Akonadi2::Storage::maxRevision(transaction); - auto resultSet = getResultSet(query, transaction, baseRevision); - while(resultSet.next([this, resultProvider](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &value, Akonadi2::Operation operation) -> bool { - switch (operation) { - case Akonadi2::Operation_Creation: - Trace() << "Got creation"; - resultProvider->add(copy(*value).template staticCast()); - break; - case Akonadi2::Operation_Modification: - Trace() << "Got modification"; - resultProvider->modify(copy(*value).template staticCast()); - break; - case Akonadi2::Operation_Removal: - Trace() << "Got removal"; - resultProvider->remove(copy(*value).template staticCast()); - break; - } - return true; - })){}; - return Akonadi2::Storage::maxRevision(transaction); - } - -}; diff --git a/common/facade.h b/common/facade.h index 5be1c73..6e45e08 100644 --- a/common/facade.h +++ b/common/facade.h @@ -29,7 +29,8 @@ #include "domainadaptor.h" #include "log.h" #include "resultset.h" -#include "entitystorage.h" +#include "storage.h" +#include "definitions.h" /** * A QueryRunner runs a query and updates the corresponding result set. diff --git a/common/resourceaccess.cpp b/common/resourceaccess.cpp index bd9e2c9..88f785f 100644 --- a/common/resourceaccess.cpp +++ b/common/resourceaccess.cpp @@ -340,7 +340,7 @@ KAsync::Job ResourceAccess::sendRevisionReplayedCommand(qint64 revision) void ResourceAccess::open() { if (d->socket && d->socket->isValid()) { - log("Socket valid, so not opening again"); + Trace() << "Socket valid, so not opening again"; return; } if (d->openingSocket) { -- cgit v1.2.3