Clio
develop
The XRP Ledger API server.
Theme:
Default
Round
Robot
Toggle main menu visibility
Loading...
Searching...
No Matches
CassandraSchema.hpp
1
#pragma once
2
3
#include "data/cassandra/Concepts.hpp"
4
#include "data/cassandra/Handle.hpp"
5
#include "data/cassandra/Schema.hpp"
6
#include "data/cassandra/SettingsProvider.hpp"
7
#include "data/cassandra/Types.hpp"
8
#include "util/log/Logger.hpp"
9
10
#include <boost/json/string.hpp>
11
#include <fmt/compile.h>
12
13
#include <functional>
14
#include <memory>
15
16
namespace
data::cassandra
{
17
21
template
<SomeSettingsProv
id
er SettingsProv
id
erType>
22
class
CassandraSchema
:
public
Schema<SettingsProvider> {
23
using
Schema::Schema
;
24
25
public
:
31
struct
CassandraStatements
:
public
Schema<SettingsProvider>
::Statements
{
32
using
Schema<
SettingsProvider
>::Statements::Statements;
33
34
//
35
// Update (and "delete") queries
36
//
37
PreparedStatement updateLedgerRange = [
this
] {
38
return
handle_.get().prepare(
39
fmt::format(
40
R
"(
41
UPDATE {}
42
SET sequence = ?
43
WHERE is_latest = ?
44
IF sequence IN (?, null)
45
)",
46
qualifiedTableName
(settingsProvider_.get(),
"ledger_range"
)
47
)
48
);
49
}();
50
51
//
52
// Select queries
53
//
54
55
PreparedStatement selectNFTIDsByIssuer = [
this
] {
56
return
handle_.get().prepare(
57
fmt::format(
58
R
"(
59
SELECT token_id
60
FROM {}
61
WHERE issuer = ?
62
AND (taxon, token_id) > ?
63
ORDER BY taxon ASC, token_id ASC
64
LIMIT ?
65
)",
66
qualifiedTableName
(settingsProvider_.get(),
"issuer_nf_tokens_v2"
)
67
)
68
);
69
}();
70
71
PreparedStatement selectAccountFromBeginning = [
this
] {
72
return
handle_.get().prepare(
73
fmt::format(
74
R
"(
75
SELECT account
76
FROM {}
77
WHERE token(account) > 0
78
PER PARTITION LIMIT 1
79
LIMIT ?
80
)",
81
qualifiedTableName
(settingsProvider_.get(),
"account_tx"
)
82
)
83
);
84
}();
85
86
PreparedStatement selectAccountFromToken = [
this
] {
87
return
handle_.get().prepare(
88
fmt::format(
89
R
"(
90
SELECT account
91
FROM {}
92
WHERE token(account) > token(?)
93
PER PARTITION LIMIT 1
94
LIMIT ?
95
)",
96
qualifiedTableName
(settingsProvider_.get(),
"account_tx"
)
97
)
98
);
99
}();
100
101
PreparedStatement selectLedgerPageKeys = [
this
] {
102
return
handle_.get().prepare(
103
fmt::format(
104
R
"(
105
SELECT key
106
FROM {}
107
WHERE TOKEN(key) >= ?
108
AND sequence <= ?
109
PER PARTITION LIMIT 1
110
LIMIT ?
111
ALLOW FILTERING
112
)",
113
qualifiedTableName
(settingsProvider_.get(),
"objects"
)
114
)
115
);
116
}();
117
118
PreparedStatement selectLedgerPage = [
this
] {
119
return
handle_.get().prepare(
120
fmt::format(
121
R
"(
122
SELECT object, key
123
FROM {}
124
WHERE TOKEN(key) >= ?
125
AND sequence <= ?
126
PER PARTITION LIMIT 1
127
LIMIT ?
128
ALLOW FILTERING
129
)",
130
qualifiedTableName
(settingsProvider_.get(),
"objects"
)
131
)
132
);
133
}();
134
};
135
136
void
137
prepareStatements
(
Handle
const
& handle)
override
138
{
139
LOG(log_.info()) <<
"Preparing cassandra statements"
;
140
statements_ = std::make_unique<CassandraStatements>(settingsProvider_, handle);
141
LOG(log_.info()) <<
"Finished preparing statements"
;
142
}
143
149
std::unique_ptr<CassandraStatements>
const
&
150
operator->
()
const
151
{
152
return
statements_;
153
}
154
155
private
:
156
std::unique_ptr<CassandraStatements> statements_{
nullptr
};
157
};
158
159
}
// namespace data::cassandra
data::cassandra::CassandraSchema
Manages the DB schema and provides access to prepared statements.
Definition
CassandraSchema.hpp:22
data::cassandra::CassandraSchema::operator->
std::unique_ptr< CassandraStatements > const & operator->() const
Provides access to statements.
Definition
CassandraSchema.hpp:150
data::cassandra::CassandraSchema::prepareStatements
void prepareStatements(Handle const &handle) override
Recreates the prepared statements.
Definition
CassandraSchema.hpp:137
data::cassandra::Handle
Represents a handle to the cassandra database cluster.
Definition
Handle.hpp:27
data::cassandra::Schema::Statements::Statements
Statements(SettingsProviderType const &settingsProvider, Handle const &handle)
Construct a new Statements object.
Definition
Schema.hpp:371
data::cassandra::Schema::Schema
Schema(SettingsProviderType const &settingsProvider)
Shared Schema's between all Schema classes (Cassandra and Keyspace).
Definition
Schema.hpp:54
data::cassandra::SettingsProvider
Provides settings for BasicCassandraBackend.
Definition
SettingsProvider.hpp:17
data::cassandra
This namespace implements a wrapper for the Cassandra C++ driver.
Definition
CassandraBackendFamily.hpp:47
data::cassandra::qualifiedTableName
std::string qualifiedTableName(SettingsProviderType const &provider, std::string_view name)
Returns the table name qualified with the keyspace and table prefix.
Definition
Schema.hpp:27
data::cassandra::CassandraSchema::CassandraStatements
Construct a new Cassandra Schema object.
Definition
CassandraSchema.hpp:31
src
data
cassandra
CassandraSchema.hpp
Generated by
1.17.0