diff options
Diffstat (limited to 'common/entitystorage.h')
-rw-r--r-- | common/entitystorage.h | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/common/entitystorage.h b/common/entitystorage.h index a62d474..516a889 100644 --- a/common/entitystorage.h +++ b/common/entitystorage.h | |||
@@ -45,9 +45,9 @@ protected: | |||
45 | virtual Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr copy(const Akonadi2::ApplicationDomain::ApplicationDomainType &) = 0; | 45 | virtual Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr copy(const Akonadi2::ApplicationDomain::ApplicationDomainType &) = 0; |
46 | virtual ResultSet queryIndexes(const Akonadi2::Query &query, const QByteArray &resourceInstanceIdentifier, QSet<QByteArray> &appliedFilters) = 0; | 46 | virtual ResultSet queryIndexes(const Akonadi2::Query &query, const QByteArray &resourceInstanceIdentifier, QSet<QByteArray> &appliedFilters) = 0; |
47 | 47 | ||
48 | void readValue(const QSharedPointer<Akonadi2::Storage> &storage, const QByteArray &key, const std::function<void(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &)> &resultCallback); | 48 | void readValue(const Akonadi2::Storage::Transaction &transaction, const QByteArray &key, const std::function<void(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &)> &resultCallback); |
49 | ResultSet filteredSet(const ResultSet &resultSet, const std::function<bool(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> &filter, const QSharedPointer<Akonadi2::Storage> &storage, qint64 baseRevision, qint64 topRevision); | 49 | ResultSet filteredSet(const ResultSet &resultSet, const std::function<bool(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> &filter, const Akonadi2::Storage::Transaction &transaction, qint64 baseRevision, qint64 topRevision); |
50 | ResultSet getResultSet(const Akonadi2::Query &query, const QSharedPointer<Akonadi2::Storage> &storage, qint64 baseRevision, qint64 topRevision); | 50 | ResultSet getResultSet(const Akonadi2::Query &query, const Akonadi2::Storage::Transaction &transaction, qint64 baseRevision, qint64 topRevision); |
51 | 51 | ||
52 | protected: | 52 | protected: |
53 | QByteArray mResourceInstanceIdentifier; | 53 | QByteArray mResourceInstanceIdentifier; |
@@ -85,23 +85,21 @@ public: | |||
85 | 85 | ||
86 | virtual void read(const Akonadi2::Query &query, const QPair<qint64, qint64> &revisionRange, const QSharedPointer<Akonadi2::ResultProvider<typename DomainType::Ptr> > &resultProvider) | 86 | virtual void read(const Akonadi2::Query &query, const QPair<qint64, qint64> &revisionRange, const QSharedPointer<Akonadi2::ResultProvider<typename DomainType::Ptr> > &resultProvider) |
87 | { | 87 | { |
88 | auto storage = QSharedPointer<Akonadi2::Storage>::create(Akonadi2::Store::storageLocation(), mResourceInstanceIdentifier); | 88 | Akonadi2::Storage storage(Akonadi2::Store::storageLocation(), mResourceInstanceIdentifier); |
89 | storage->setDefaultErrorHandler([](const Akonadi2::Storage::Error &error) { | 89 | storage.setDefaultErrorHandler([](const Akonadi2::Storage::Error &error) { |
90 | Warning() << "Error during query: " << error.store << error.message; | 90 | Warning() << "Error during query: " << error.store << error.message; |
91 | }); | 91 | }); |
92 | 92 | ||
93 | storage->startTransaction(Akonadi2::Storage::ReadOnly); | 93 | auto transaction = storage.createTransaction(Akonadi2::Storage::ReadOnly); |
94 | //TODO start transaction on indexes as well | ||
95 | 94 | ||
96 | Log() << "Querying" << revisionRange.first << revisionRange.second; | 95 | Log() << "Querying" << revisionRange.first << revisionRange.second; |
97 | auto resultSet = getResultSet(query, storage, revisionRange.first, revisionRange.second); | 96 | auto resultSet = getResultSet(query, transaction, revisionRange.first, revisionRange.second); |
98 | while(resultSet.next([this, resultProvider](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &value) -> bool { | 97 | while(resultSet.next([this, resultProvider](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &value) -> bool { |
99 | auto cloned = copy(*value); | 98 | auto cloned = copy(*value); |
100 | resultProvider->add(cloned.template staticCast<DomainType>()); | 99 | resultProvider->add(cloned.template staticCast<DomainType>()); |
101 | return true; | 100 | return true; |
102 | })){}; | 101 | })){}; |
103 | //TODO replay removals and modifications | 102 | //TODO replay removals and modifications |
104 | storage->abortTransaction(); | ||
105 | } | 103 | } |
106 | 104 | ||
107 | }; | 105 | }; |