Clio
develop
The XRP Ledger API server.
Theme:
Default
Round
Robot
Toggle main menu visibility
Loading...
Searching...
No Matches
KeyspaceSchema.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
KeyspaceSchema
:
public
Schema
<SettingsProvider> {
23
public
:
24
using
Schema::Schema
;
25
31
struct
KeyspaceStatements
:
public
Schema
<SettingsProvider>
::Statements
{
32
using
Schema
<
SettingsProvider
>::Statements::Statements;
33
34
//
35
// Insert queries
36
//
37
PreparedStatement insertLedgerRange = [
this
] {
38
return
handle_.get().prepare(
39
fmt::format(
40
R
"(
41
INSERT INTO {} (is_latest, sequence) VALUES (?, ?) IF NOT EXISTS
42
)",
43
qualifiedTableName
(settingsProvider_.get(),
"ledger_range"
)
44
)
45
);
46
}();
47
48
//
49
// Update (and "delete") queries
50
//
51
PreparedStatement updateLedgerRange = [
this
] {
52
return
handle_.get().prepare(
53
fmt::format(
54
R
"(
55
UPDATE {}
56
SET sequence = ?
57
WHERE is_latest = ?
58
IF sequence = ?
59
)",
60
qualifiedTableName
(settingsProvider_.get(),
"ledger_range"
)
61
)
62
);
63
}();
64
65
PreparedStatement selectLedgerRange = [
this
] {
66
return
handle_.get().prepare(
67
fmt::format(
68
R
"(
69
SELECT sequence
70
FROM {}
71
WHERE is_latest in (True, False)
72
)",
73
qualifiedTableName
(settingsProvider_.get(),
"ledger_range"
)
74
)
75
);
76
}();
77
78
//
79
// Select queries
80
//
81
PreparedStatement selectNFTsAfterTaxonKeyspaces = [
this
] {
82
return
handle_.get().prepare(
83
fmt::format(
84
R
"(
85
SELECT token_id
86
FROM {}
87
WHERE issuer = ?
88
AND taxon > ?
89
ORDER BY taxon ASC, token_id ASC
90
LIMIT ?
91
)",
92
qualifiedTableName
(settingsProvider_.get(),
"issuer_nf_tokens_v2"
)
93
)
94
);
95
}();
96
};
97
98
void
99
prepareStatements
(
Handle
const
& handle)
override
100
{
101
LOG(log_.info()) <<
"Preparing aws keyspace statements"
;
102
statements_ = std::make_unique<KeyspaceStatements>(settingsProvider_, handle);
103
LOG(log_.info()) <<
"Finished preparing statements"
;
104
}
105
111
std::unique_ptr<KeyspaceStatements>
const
&
112
operator->
()
const
113
{
114
return
statements_;
115
}
116
117
private
:
118
std::unique_ptr<KeyspaceStatements> statements_{
nullptr
};
119
};
120
121
}
// namespace data::cassandra
data::cassandra::Handle
Represents a handle to the cassandra database cluster.
Definition
Handle.hpp:27
data::cassandra::KeyspaceSchema
Manages the DB schema and provides access to prepared statements.
Definition
KeyspaceSchema.hpp:22
data::cassandra::KeyspaceSchema::Schema
Schema(SettingsProviderType const &settingsProvider)
Shared Schema's between all Schema classes (Cassandra and Keyspace).
Definition
Schema.hpp:54
data::cassandra::KeyspaceSchema::operator->
std::unique_ptr< KeyspaceStatements > const & operator->() const
Provides access to statements.
Definition
KeyspaceSchema.hpp:112
data::cassandra::KeyspaceSchema::prepareStatements
void prepareStatements(Handle const &handle) override
Recreates the prepared statements.
Definition
KeyspaceSchema.hpp:99
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::KeyspaceSchema::KeyspaceStatements
Construct a new Keyspace Schema object.
Definition
KeyspaceSchema.hpp:31
src
data
cassandra
KeyspaceSchema.hpp
Generated by
1.17.0