summaryrefslogtreecommitdiffstats
path: root/common/entitystorage.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/entitystorage.h')
-rw-r--r--common/entitystorage.h16
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
52protected: 52protected:
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};