Decentralised Art Server
High-performance C++ backend that exposes HTML interface and a secure REST API for managing Performative Transactions entities
Loading...
Searching...
No Matches
sqlite_registry_store.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
4#include <string>
5#include <vector>
6
7#include "registry_store.hpp"
8
9struct sqlite3;
10
11namespace dcn::registry
12{
14 {
15 public:
16 explicit SQLiteRegistryStore(const std::string & db_path);
17 ~SQLiteRegistryStore() override;
18
21
24
25 bool hasConnector(const std::string & name) const override;
26
27 std::optional<ConnectorRecordHandle> getConnectorRecordHandle(const std::string & name) const override;
28
29 std::optional<evmc::bytes32> getConnectorFormatHash(const std::string & name) const override;
30
31 bool addConnector(
32 const chain::Address & address,
33 const ConnectorRecord & record,
34 const evmc::bytes32 & format_hash,
35 const std::vector<ScalarLabel> & canonical_scalar_labels) override;
36
37 bool addConnectorsBatch(const std::vector<ConnectorBatchItem> & items, bool all_or_nothing = true) override;
38
39 std::size_t getFormatConnectorNamesCount(const evmc::bytes32 & format_hash) const override;
40
42 const evmc::bytes32 & format_hash,
43 const std::optional<NameCursor> & after,
44 std::size_t limit) const override;
45
46 std::size_t getFormatsCount() const override;
47
49 const std::optional<evmc::bytes32> & after,
50 std::size_t limit) const override;
51
52 std::optional<std::vector<ScalarLabel>> getScalarLabelsByFormatHash(const evmc::bytes32 & format_hash) const override;
53
54 bool hasTransformation(const std::string & name) const override;
55
56 std::optional<TransformationRecordHandle> getTransformationRecordHandle(
57 const std::string & name) const override;
58
60 const chain::Address & address,
61 const TransformationRecord & record) override;
62
64 const std::vector<TransformationBatchItem> & items,
65 bool all_or_nothing = true) override;
66
67 bool hasCondition(const std::string & name) const override;
68
69 std::optional<ConditionRecordHandle> getConditionRecordHandle(
70 const std::string & name) const override;
71
72 bool addCondition(
73 const chain::Address & address,
74 const ConditionRecord & record) override;
75
77 const std::vector<ConditionBatchItem> & items,
78 bool all_or_nothing = true) override;
79
81 const chain::Address & owner,
82 const std::optional<NameCursor> & after,
83 std::size_t limit) const override;
84
86 const chain::Address & owner,
87 const std::optional<NameCursor> & after,
88 std::size_t limit) const override;
89
91 const chain::Address & owner,
92 const std::optional<NameCursor> & after,
93 std::size_t limit) const override;
94
95 std::size_t getAccountsCount() const override;
96
98 const std::optional<chain::Address> & after,
99 std::size_t limit) const override;
100
101 bool checkpointWal(storage::sqlite::WalCheckpointMode mode) const override;
102
103 // Materialization cursor: persists the last change_seq consumed from the
104 // hot-store changelog, so RegistryProjector survives restarts.
105 std::int64_t getMaterializationCursor() const override;
106 bool setMaterializationCursor(std::int64_t last_change_seq) override;
107
108 private:
109 sqlite3 * _db = nullptr;
110
111 bool _initializeSchema() const;
112 bool _exec(const char * sql) const;
113 bool _beginTransaction() const;
114 bool _commitTransaction() const;
115 void _rollbackTransaction() const;
116
117 // Persists a connector and its normalized child rows (dimensions, bindings,
118 // transformation defs + args, condition args, static running instances) using explicit
119 // columns. Must be called inside an active transaction/savepoint.
120 bool _insertConnectorRows(
121 const chain::Address & owner,
122 const evmc::bytes32 & format_hash,
123 const ConnectorRecord & record,
124 const std::vector<ScalarLabel> & canonical_scalar_labels) const;
125
126 // Reassembles a ConnectorRecord from its explicit columns / child tables.
127 std::optional<ConnectorRecord> _readConnectorRecord(const std::string & name) const;
128
129 NameCursorPage _getOwnedCursorFromTable(
130 const char * table_name,
131 const chain::Address & owner,
132 const std::optional<NameCursor> & after,
133 std::size_t limit) const;
134 };
135}
Definition registry_store.hpp:57
bool addConditionsBatch(const std::vector< ConditionBatchItem > &items, bool all_or_nothing=true) override
Definition sqlite_registry_store.cpp:1504
std::optional< evmc::bytes32 > getConnectorFormatHash(const std::string &name) const override
Definition sqlite_registry_store.cpp:665
bool setMaterializationCursor(std::int64_t last_change_seq) override
Definition sqlite_registry_store.cpp:292
NameCursorPage getOwnedConditionsCursor(const chain::Address &owner, const std::optional< NameCursor > &after, std::size_t limit) const override
Definition sqlite_registry_store.cpp:1729
std::int64_t getMaterializationCursor() const override
Definition sqlite_registry_store.cpp:273
SQLiteRegistryStore(const SQLiteRegistryStore &)=delete
std::size_t getAccountsCount() const override
Definition sqlite_registry_store.cpp:1734
std::size_t getFormatConnectorNamesCount(const evmc::bytes32 &format_hash) const override
Definition sqlite_registry_store.cpp:861
NameCursorPage getFormatsCursor(const std::optional< evmc::bytes32 > &after, std::size_t limit) const override
Definition sqlite_registry_store.cpp:969
~SQLiteRegistryStore() override
Definition sqlite_registry_store.cpp:109
bool addConnector(const chain::Address &address, const ConnectorRecord &record, const evmc::bytes32 &format_hash, const std::vector< ScalarLabel > &canonical_scalar_labels) override
Definition sqlite_registry_store.cpp:684
NameCursorPage getAccountsCursor(const std::optional< chain::Address > &after, std::size_t limit) const override
Definition sqlite_registry_store.cpp:1760
bool hasTransformation(const std::string &name) const override
Definition sqlite_registry_store.cpp:1081
SQLiteRegistryStore & operator=(SQLiteRegistryStore &&)=delete
SQLiteRegistryStore(SQLiteRegistryStore &&)=delete
bool addCondition(const chain::Address &address, const ConditionRecord &record) override
Definition sqlite_registry_store.cpp:1440
std::optional< ConditionRecordHandle > getConditionRecordHandle(const std::string &name) const override
Definition sqlite_registry_store.cpp:1396
SQLiteRegistryStore & operator=(const SQLiteRegistryStore &)=delete
bool hasCondition(const std::string &name) const override
Definition sqlite_registry_store.cpp:1361
bool hasConnector(const std::string &name) const override
Definition sqlite_registry_store.cpp:607
bool addTransformation(const chain::Address &address, const TransformationRecord &record) override
Definition sqlite_registry_store.cpp:1160
NameCursorPage getOwnedTransformationsCursor(const chain::Address &owner, const std::optional< NameCursor > &after, std::size_t limit) const override
Definition sqlite_registry_store.cpp:1724
bool checkpointWal(storage::sqlite::WalCheckpointMode mode) const override
Definition sqlite_registry_store.cpp:1842
std::size_t getFormatsCount() const override
Definition sqlite_registry_store.cpp:951
bool addConnectorsBatch(const std::vector< ConnectorBatchItem > &items, bool all_or_nothing=true) override
Definition sqlite_registry_store.cpp:745
std::optional< std::vector< ScalarLabel > > getScalarLabelsByFormatHash(const evmc::bytes32 &format_hash) const override
Definition sqlite_registry_store.cpp:1039
SQLiteRegistryStore(const std::string &db_path)
Definition sqlite_registry_store.cpp:76
NameCursorPage getFormatConnectorNamesCursor(const evmc::bytes32 &format_hash, const std::optional< NameCursor > &after, std::size_t limit) const override
Definition sqlite_registry_store.cpp:883
std::optional< ConnectorRecordHandle > getConnectorRecordHandle(const std::string &name) const override
Definition sqlite_registry_store.cpp:642
std::optional< TransformationRecordHandle > getTransformationRecordHandle(const std::string &name) const override
Definition sqlite_registry_store.cpp:1116
NameCursorPage getOwnedConnectorsCursor(const chain::Address &owner, const std::optional< NameCursor > &after, std::size_t limit) const override
Definition sqlite_registry_store.cpp:1719
bool addTransformationsBatch(const std::vector< TransformationBatchItem > &items, bool all_or_nothing=true) override
Definition sqlite_registry_store.cpp:1224
evmc::address Address
Definition address.hpp:18
Definition registry.hpp:23
WalCheckpointMode
Definition wal.hpp:9
Definition registry_store.hpp:50