Skip to content
This repository was archived by the owner on Mar 4, 2023. It is now read-only.

Commit 60b4f61

Browse files
committed
added "contains" to all stores
1 parent 435674d commit 60b4f61

File tree

8 files changed

+68
-0
lines changed

8 files changed

+68
-0
lines changed

src/datasync/datastore.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ QVariantList DataStore::loadAll(int metaTypeId) const
5858
return resList;
5959
}
6060

61+
bool DataStore::contains(int metaTypeId, const QString &key) const
62+
{
63+
return d->store->contains({d->typeName(metaTypeId), key});
64+
}
65+
6166
QVariant DataStore::load(int metaTypeId, const QString &key) const
6267
{
6368
auto data = d->store->load({d->typeName(metaTypeId), key});

src/datasync/datastore.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ class Q_DATASYNC_EXPORT DataStore : public QObject
4747
QStringList keys(int metaTypeId) const;
4848
//! @copybrief DataStore::loadAll() const
4949
QVariantList loadAll(int metaTypeId) const;
50+
bool contains(int metaTypeId, const QString &key) const;
51+
inline bool contains(int metaTypeId, const QVariant &key) const {
52+
return contains(metaTypeId, key.toString());
53+
}
5054
//! @copybrief DataStore::load(const QString &) const
5155
QVariant load(int metaTypeId, const QString &key) const;
5256
//! @copybrief DataStore::load(int, const QString &) const
@@ -89,6 +93,10 @@ class Q_DATASYNC_EXPORT DataStore : public QObject
8993
QList<T> loadAll() const;
9094
//! Loads the dataset with the given key for the given type
9195
template<typename T>
96+
bool contains(const QString &key) const;
97+
template<typename T, typename K>
98+
bool contains(const K &key) const;
99+
template<typename T>
92100
T load(const QString &key) const;
93101
//! @copybrief DataStore::load(const QString &) const
94102
template<typename T, typename K>
@@ -254,6 +262,20 @@ QList<T> DataStore::loadAll() const
254262
return rList;
255263
}
256264

265+
template<typename T>
266+
bool DataStore::contains(const QString &key) const
267+
{
268+
QTDATASYNC_STORE_ASSERT(T);
269+
return contains(qMetaTypeId<T>(), key);
270+
}
271+
272+
template<typename T, typename K>
273+
bool DataStore::contains(const K &key) const
274+
{
275+
QTDATASYNC_STORE_ASSERT(T);
276+
return contains(qMetaTypeId<T>(), QVariant::fromValue(key));
277+
}
278+
257279
template<typename T>
258280
T DataStore::load(const QString &key) const
259281
{

src/datasync/datatypestore.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class DataTypeStore : public DataTypeStoreBase
5151
QList<TKey> keys() const;
5252
//! @copybrief DataStore::loadAll() const
5353
QList<TType> loadAll() const;
54+
bool contains(const TKey &key) const;
5455
//! @copybrief DataStore::load(const K &) const
5556
TType load(const TKey &key) const;
5657
//! @copybrief DataStore::save(const T &)
@@ -237,6 +238,12 @@ QList<TType> DataTypeStore<TType, TKey>::loadAll() const
237238
return _store->loadAll<TType>();
238239
}
239240

241+
template<typename TType, typename TKey>
242+
bool DataTypeStore<TType, TKey>::contains(const TKey &key) const
243+
{
244+
return _store->contains<TType>(key);
245+
}
246+
240247
template <typename TType, typename TKey>
241248
TType DataTypeStore<TType, TKey>::load(const TKey &key) const
242249
{

src/datasync/localstore.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,16 @@ QList<QJsonObject> LocalStore::loadAll(const QByteArray &typeName) const
168168
}
169169
}
170170

171+
bool LocalStore::contains(const ObjectKey &key) const
172+
{
173+
QSqlQuery existsQuery(_database);
174+
existsQuery.prepare(QStringLiteral("SELECT 1 FROM DataIndex WHERE Type = ? AND Id = ?"));
175+
existsQuery.addBindValue(key.typeName);
176+
existsQuery.addBindValue(key.id);
177+
exec(existsQuery, key);
178+
return existsQuery.first();
179+
}
180+
171181
QJsonObject LocalStore::load(const ObjectKey &key) const
172182
{
173183
//check if cached

src/datasync/localstore_p.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class Q_DATASYNC_EXPORT LocalStore : public QObject
6464
QStringList keys(const QByteArray &typeName) const;
6565
QList<QJsonObject> loadAll(const QByteArray &typeName) const;
6666

67+
bool contains(const ObjectKey &key) const;
6768
QJsonObject load(const ObjectKey &key) const;
6869
void save(const ObjectKey &key, const QJsonObject &data);
6970
bool remove(const ObjectKey &key);

tests/auto/datasync/TestDataStore/tst_datastore.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ private Q_SLOTS:
1818
void testSave();
1919
void testSaveInvalid();
2020
void testAll();
21+
void testContains();
2122
void testFind();
2223
void testRemove_data();
2324
void testRemove();
@@ -117,6 +118,16 @@ void TestDataStore::testAll()
117118
}
118119
}
119120

121+
void TestDataStore::testContains()
122+
{
123+
try {
124+
QVERIFY(store->contains<TestData>(TestLib::generateDataKey(430)));
125+
QVERIFY(!store->contains<TestData>(TestLib::generateDataKey(440)));
126+
} catch(QException &e) {
127+
QFAIL(e.what());
128+
}
129+
}
130+
120131
void TestDataStore::testFind()
121132
{
122133
const QList<TestData> objects {

tests/auto/datasync/TestDataTypeStore/tst_datatypestore.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void TestDataTypeStore::testSimple()
6464
store.save(data);
6565
QCOMPARE(dataStore->load<TestData>(i), data);
6666
QCOMPARE(store.load(i), data);
67+
QVERIFY(store.contains(i));
6768

6869
QCOMPARE(changeSpy.size(), 1);
6970
auto sig = changeSpy.takeFirst();

tests/auto/datasync/TestLocalStore/tst_localstore.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ private Q_SLOTS:
2020
void testSave_data();
2121
void testSave();
2222
void testAll();
23+
void testContains();
2324
void testFind_data();
2425
void testFind();
2526
void testRemove_data();
@@ -126,6 +127,16 @@ void TestLocalStore::testAll()
126127
}
127128
}
128129

130+
void TestLocalStore::testContains()
131+
{
132+
try {
133+
QVERIFY(store->contains(TestLib::generateKey(430)));
134+
QVERIFY(!store->contains(TestLib::generateKey(440)));
135+
} catch(QException &e) {
136+
QFAIL(e.what());
137+
}
138+
}
139+
129140
void TestLocalStore::testFind_data()
130141
{
131142
QTest::addColumn<QString>("query");

0 commit comments

Comments
 (0)