kDB: Knowledge DataBase
Loading...
Searching...
No Matches
TriplesStore.h
1#pragma once
2
3#include <functional>
4
5#include <QList>
6#include <QSharedPointer>
7
8#include <knowCore/ReturnValue.h>
9
10#include "RDFDataset.h"
11#include "Transaction.h"
12
13class TestTripleStore;
14
15namespace kDB::Repository
16{
17 class TriplesStore : public RDFDataset
18 {
19 friend class ::TestTripleStore;
20 friend class GraphsManager;
21 friend class VersionControl::Manager;
22 friend class VersionControl::Transaction;
25 public:
26 enum class Option : quint32
27 {
28 None = 0x0,
29 Versioning = 0x1,
30 Notifications = 0x2
31 };
32 Q_DECLARE_FLAGS(Options, Option)
33 private:
34 struct Definition;
36 public:
38 TriplesStore(const TriplesStore& _rhs);
39 TriplesStore& operator=(const TriplesStore& _rhs);
44 TriplesStore detach() const;
45 QString tablename() const;
46 Options options() const;
47 template<typename _ObjectType_>
48 knowCore::ReturnVoid insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicateBase, const QString& _predicateSuffix, const _ObjectType_& _object, const Transaction& _transaction = Transaction())
49 {
50 return insert(_subject, knowCore::Uri(_predicateBase, _predicateSuffix), _object, _transaction);
51 }
52 template<typename _TUri_>
54 knowCore::ReturnVoid insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const _TUri_& _value, const Transaction& _transaction = Transaction());
55 knowCore::ReturnVoid insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const knowCore::Uri& _value, const Transaction& _transaction = Transaction());
56 knowCore::ReturnVoid insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const knowRDF::Object& _object, const Transaction& _transaction = Transaction());
57 knowCore::ReturnVoid insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const knowCore::Uri& _type, const knowCore::Value& _value, const QString& _lang = QString(), const Transaction& _transaction = Transaction());
58 knowCore::ReturnVoid insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const knowRDF::BlankNode& _value, const Transaction& _transaction = Transaction());
59 template<typename _TPredicate_0_, typename _TObject_0_, typename... _TPredicteObjects_>
60 knowCore::ReturnVoid insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const std::tuple<_TPredicate_0_, _TObject_0_, _TPredicteObjects_...>& _objects, const Transaction& _transaction);
61 knowCore::ReturnVoid insert(const knowRDF::Triple& _triple, const Transaction& _transaction = Transaction());
62 knowCore::ReturnVoid insert(const QList<knowRDF::Triple>& _triple, const Transaction& _transaction = Transaction());
63
64 template<typename _TObject_, typename... _TArgs_>
65 knowCore::ReturnVoid insert(const Transaction& _transaction,
66 const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const _TObject_& _object,
67 const _TArgs_&...);
68 template<typename _TObject_, typename... _TArgs_>
69 inline knowCore::ReturnVoid insert(
70 const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const _TObject_& _object,
71 const knowCore::Uri& _predicate_next, const _TArgs_&... _args);
72 private:
73 // Thiss functions is only used as part of the end recursion for the variadic insert above
74 knowCore::ReturnVoid insert(const Transaction&,
75 const knowRDF::Subject&);
76 public:
77 knowCore::ReturnValue<bool> hasTriple(const knowRDF::Triple& _triple, const Transaction& _transaction = Transaction());
78
79 knowCore::ReturnVoid remove(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const knowCore::Uri& _value, const Transaction& _transaction = Transaction());
80 knowCore::ReturnVoid remove(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const knowRDF::Object& _object, const Transaction& _transaction = Transaction());
81 knowCore::ReturnVoid remove(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const knowCore::Uri& _type, const knowCore::Value& _value, const QString& _lang = QString(), const Transaction& _transaction = Transaction());
82 knowCore::ReturnVoid remove(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const knowRDF::BlankNode& _value, const Transaction& _transaction = Transaction());
83 knowCore::ReturnVoid remove(const knowRDF::Triple& _triple, const Transaction& _transaction = Transaction());
84 knowCore::ReturnVoid remove(const QList<knowRDF::Triple>& _triple, const Transaction& _transaction = Transaction());
85
90 knowCore::ReturnValue<QList<knowRDF::Triple>> triples2() const;
91
95 knowRDF::Triple triple(std::size_t _r) const;
96
100 std::size_t triplesCount() const;
104 QString generateInsertDataQuery(bool _blankNodeAsUri = false) const;
105
109 knowCore::ReturnVoid clear(const Transaction& _transaction = Transaction());
110
111 knowCore::ReturnVoid enableVersioning();
112 knowCore::ReturnVoid disableVersioning();
113
114 knowCore::ReturnVoid enableNotifications();
115 knowCore::ReturnVoid disableNotifications();
116
117 QMetaObject::Connection listen(const QObject *receiver, const char *member, Qt::ConnectionType _type = Qt::AutoConnection);
118 QMetaObject::Connection listen(const std::function<void(const QByteArray&)>& _receiver);
119
120 QMetaObject::Connection listenOptionsChanged(const QObject *receiver, const char *member, Qt::ConnectionType _type = Qt::AutoConnection);
121 QMetaObject::Connection listenOptionsChanged(const std::function<void()>& _receiver);
122
123 QMetaObject::Connection listenMetaChanged(const QObject *receiver, const char *member, Qt::ConnectionType _type = Qt::AutoConnection);
124 QMetaObject::Connection listenMetaChanged(const std::function<void()>& _receiver);
125
126 bool unlisten(QMetaObject::Connection _connection);
127
133
137 QByteArray contentHash() const;
138 QByteArray contentHash(const Transaction& _transaction) const; // TODO merge with previous function
139 private:
141 KNOWCORE_D_DECL();
142 };
143 inline knowCore::ReturnVoid TriplesStore::insert(const Transaction&, const knowRDF::Subject&)
144 {
145 return kCrvSuccess();
146 }
147 template<typename _TUri_>
149 inline knowCore::ReturnVoid TriplesStore::insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const _TUri_& _value, const Transaction& _transaction)
150 {
151 return insert(_subject, _predicate, knowCore::Uri(_value), _transaction);
152 }
153
154 template<typename _TObject_, typename... _TArgs_>
155 inline knowCore::ReturnVoid TriplesStore::insert(const Transaction& _transaction,
156 const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const _TObject_& _object,
157 const _TArgs_&... _args)
158 {
159 KNOWCORE_RETURN_VALUE_TRY_VOID(insert(_subject, _predicate, _object, _transaction));
160 return insert(_transaction, _subject, _args...);
161 }
162 template<typename _TObject_, typename... _TArgs_>
163 inline knowCore::ReturnVoid TriplesStore::insert(
164 const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const _TObject_& _object,
165 const knowCore::Uri& _predicate_next, const _TArgs_&... _args)
166 {
167 Transaction t(connection());
168 KNOWCORE_RETURN_VALUE_TRY_VOID(insert(t, _subject, knowCore::Uri(_predicate), _object, _predicate_next, _args...));
169 return t.commit();
170 }
171 template<typename _TPredicate_0_, typename _TObject_0_, typename... _TPredicteObjects_>
172 knowCore::ReturnVoid TriplesStore::insert(const knowRDF::Subject& _subject, const knowCore::Uri& _predicate, const std::tuple<_TPredicate_0_, _TObject_0_, _TPredicteObjects_...>& _objects, const Transaction& _transaction)
173 {
175 KNOWCORE_RETURN_VALUE_TRY_VOID(insert(_subject, _predicate, bn, _transaction));
176 using IFT = knowCore::ReturnVoid (TriplesStore::*)(const Transaction&,
177 const knowRDF::Subject&, const knowCore::Uri&, const _TObject_0_&,
178 const _TPredicteObjects_&...);
179 return std::apply(static_cast<IFT>(&TriplesStore::insert<_TObject_0_, _TPredicteObjects_...>),
180 std::tuple_cat(std::make_tuple(this, _transaction, bn), _objects));
181 }
182
183}
184
185Q_DECLARE_OPERATORS_FOR_FLAGS(kDB::Repository::TriplesStore::Options)
Definition Revision.h:9
Definition Forward.h:6
Definition TestTripleStore.h:4
Definition Connection.h:25
Definition GraphsManager.h:10
Definition RDFDataset.h:13
Definition Transaction.h:19
Definition TriplesStore.h:18
QByteArray contentHash() const
Definition TriplesStore.cpp:417
std::size_t triplesCount() const
Definition TriplesStore.cpp:312
VersionControl::Manager * versionControlManager()
Definition TriplesStore.cpp:403
QList< knowRDF::Triple > triples() const
Definition TriplesStore.cpp:287
knowCore::ReturnVoid clear(const Transaction &_transaction=Transaction())
Definition TriplesStore.cpp:344
QString generateInsertDataQuery(bool _blankNodeAsUri=false) const
Definition TriplesStore.cpp:333
knowRDF::Triple triple(std::size_t _r) const
Definition TriplesStore.cpp:319
TriplesStore detach() const
Definition TriplesStore.cpp:146
Definition Uri.h:15
Definition Value.h:21
Definition BlankNode.h:25
Definition Object.h:11
Definition Subject.h:21
Definition Triple.h:19
Definition TriplesStore_p.h:23