Joedb 10.2.1
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Writable_Database.h
Go to the documentation of this file.
1/////////////////////////////////////////////////////////////////////////////
2//
3// This code was automatically generated by the joedb compiler
4// https://www.joedb.org/
5//
6// Path to compiler: /home/rcoulom/repos/joedb/compcmake/gcc_debug/joedbc
7// Version: 10.2.1
8// joedbc compilation time: Sep 15 2025 20:22:33
9// Generation of this file: 2025-09-15 18:23:01 GMT
10//
11/////////////////////////////////////////////////////////////////////////////
12#ifndef tutorial_rpc_population_Writable_Database_declared
13#define tutorial_rpc_population_Writable_Database_declared
14
15#include "joedb/Span.h"
16
17#include "Database_Writable.h"
18
20{
21 namespace detail
22 {
23 class Client_Data;
24 }
25
26 class Client;
27 class Multiplexer;
28 class Memory_Database;
29
30 /// A @ref Database that contains a @ref joedb::Writable_Journal and keeps them in sync
32 {
33 friend class detail::Client_Data;
34 friend class Client;
35 friend class Multiplexer;
36 friend class Memory_Database;
37
38 private:
40 bool ready_to_write;
41
42 void play_journal();
43 void auto_upgrade();
44 void check_single_row();
45 void initialize();
46
48 (
50 joedb::Recovery recovery,
51 bool perform_initialization
52 );
53
54 public:
56
58 (
60 joedb::Recovery recovery
61 );
62
63 const joedb::Readonly_Journal &get_journal() const {return journal;}
64
65 std::string read_blob(joedb::Blob blob) const
66 {
67 return journal.get_file().read_blob(blob);
68 }
69
70 joedb::Blob write_blob(const std::string &data) override
71 {
72 return journal.write_blob(data);
73 }
74
75 int64_t ahead_of_checkpoint() const
76 {
77 return journal.ahead_of_checkpoint();
78 }
79
80 void soft_checkpoint() override
81 {
82 journal.soft_checkpoint();
83 }
84
85 void hard_checkpoint() override
86 {
87 journal.hard_checkpoint();
88 }
89
90 void write_comment(const std::string &comment);
91 void write_timestamp();
92 void write_timestamp(int64_t timestamp);
93 void write_valid_data();
94 void flush() override {journal.flush();}
95
96 void clear_city_table();
97
99 {
100 id_of_city result(Record_Id(storage_of_city.freedom_keeper.get_free_record()));
101 storage_of_city.resize(storage_of_city.freedom_keeper.size());
103
104 journal.insert_into(Table_Id(1), result.get_record_id());
105 return result;
106 }
107
109 {
110 id_of_city result(Record_Id(storage_of_city.size()));
111 storage_of_city.resize(storage_of_city.size() + size);
113 journal.insert_vector(Table_Id(1), result.get_record_id(), size);
114 return result;
115 }
116
118 {
120 journal.delete_from(Table_Id(1), record.get_record_id());
121 }
122
124 {
125 for (size_t i = size; i > 0;)
126 internal_delete_city(v[--i].get_record_id());
127 journal.delete_vector(Table_Id(1), v.get_record_id(), size);
128 }
129
130
131 void clear_data_table();
132
134 {
135 id_of_data result(Record_Id(storage_of_data.freedom_keeper.get_free_record()));
136 storage_of_data.resize(storage_of_data.freedom_keeper.size());
138
139 journal.insert_into(Table_Id(2), result.get_record_id());
140 return result;
141 }
142
144 {
145 id_of_data result(Record_Id(storage_of_data.size()));
146 storage_of_data.resize(storage_of_data.size() + size);
148 journal.insert_vector(Table_Id(2), result.get_record_id(), size);
149 return result;
150 }
151
153 (
154 const std::string& field_value_of_city_name,
155 id_of_city field_value_of_city,
156 int64_t field_value_of_population
157 )
158 {
159 auto result = new_data();
160 set_city_name(result, field_value_of_city_name);
161 set_city(result, field_value_of_city);
162 set_population(result, field_value_of_population);
163 return result;
164 }
165
167 {
169 journal.delete_from(Table_Id(2), record.get_record_id());
170 }
171
173 {
174 for (size_t i = size; i > 0;)
175 internal_delete_data(v[--i].get_record_id());
176 journal.delete_vector(Table_Id(2), v.get_record_id(), size);
177 }
178
179 void set_city_name(id_of_data record, const std::string& field_value_of_city_name)
180 {
181 internal_update_data__city_name(record.get_record_id(), field_value_of_city_name);
182 journal.update_string(Table_Id(2), record.get_record_id(), Field_Id(1), field_value_of_city_name);
183 }
184
185 template<typename F> void update_vector_of_city_name(id_of_data record, size_t size, F f)
186 {
187 joedb::Span<std::string> span(&storage_of_data.field_value_of_city_name.data()[record.get_id()], size);
188 f(span);
190 journal.update_vector_string(Table_Id(2), record.get_record_id(), Field_Id(1), size, (span.begin()));
191 }
192
193 void set_city(id_of_data record, id_of_city field_value_of_city)
194 {
195 internal_update_data__city(record.get_record_id(), field_value_of_city);
196 journal.update_reference(Table_Id(2), record.get_record_id(), Field_Id(2), field_value_of_city.get_record_id());
197 }
198
199 template<typename F> void update_vector_of_city(id_of_data record, size_t size, F f)
200 {
201 joedb::Span<id_of_city> span(&storage_of_data.field_value_of_city.data()[record.get_id()], size);
202 f(span);
204 journal.update_vector_reference(Table_Id(2), record.get_record_id(), Field_Id(2), size, reinterpret_cast<Record_Id *>(span.begin()));
205 }
206
207 void set_population(id_of_data record, int64_t field_value_of_population)
208 {
209 internal_update_data__population(record.get_record_id(), field_value_of_population);
210 journal.update_int64(Table_Id(2), record.get_record_id(), Field_Id(3), field_value_of_population);
211 }
212
213 template<typename F> void update_vector_of_population(id_of_data record, size_t size, F f)
214 {
215 joedb::Span<int64_t> span(&storage_of_data.field_value_of_population.data()[record.get_id()], size);
216 f(span);
218 journal.update_vector_int64(Table_Id(2), record.get_record_id(), Field_Id(3), size, (span.begin()));
219 }
220
221
222 };}
223
224#endif
std::string read_blob(Blob blob) const
const Abstract_File & get_file() const
T * begin()
Definition Span.h:39
void delete_vector(Table_Id table_id, Record_Id record_id, size_t size) override
void delete_from(Table_Id table_id, Record_Id record_id) override
int64_t ahead_of_checkpoint() const noexcept
void insert_vector(Table_Id table_id, Record_Id record_id, size_t size) override
void insert_into(Table_Id table_id, Record_Id record_id) override
Blob write_blob(const std::string &data) override
Strongly-typed wrapper around an integer representing a row of the city table.
Definition ids.h:25
constexpr Record_Id get_record_id() const
Definition ids.h:36
Handle concurrent access to a joedb::Abstract_File using a joedb::Connection.
Definition Client.h:44
implement joedb::Writable in a Database
void timestamp(int64_t timestamp) override
void comment(const std::string &comment) override
detail::data_of_data storage_of_data
Definition Database.h:99
detail::data_of_city storage_of_city
Definition Database.h:97
void internal_update_vector_data__city_name(Record_Id record_id, size_t size, const std::string *value)
Definition Database.h:148
void internal_update_vector_data__city(Record_Id record_id, size_t size, const id_of_city *value)
Definition Database.h:171
void internal_vector_insert_city(Record_Id record_id, size_t size)
Definition Database.h:121
void internal_update_data__population(Record_Id record_id, int64_t field_value_of_population)
Definition Database.h:184
void internal_delete_city(Record_Id record_id)
Definition Database.h:102
void internal_update_data__city(Record_Id record_id, id_of_city field_value_of_city)
Definition Database.h:161
void internal_delete_data(Record_Id record_id)
Definition Database.h:107
void internal_update_data__city_name(Record_Id record_id, const std::string &field_value_of_city_name)
Definition Database.h:138
void internal_insert_data(Record_Id record_id)
Definition Database.h:126
void internal_update_vector_data__population(Record_Id record_id, size_t size, const int64_t *value)
Definition Database.h:194
void internal_vector_insert_data(Record_Id record_id, size_t size)
Definition Database.h:131
void internal_insert_city(Record_Id record_id)
Definition Database.h:116
Shortcut to directly build a Writable_Database with a Memory_File.
Write simultaneously to the database and the file (ignore schema changes)
Definition Multiplexer.h:40
A Database that contains a joedb::Writable_Journal and keeps them in sync.
void set_city_name(id_of_data record, const std::string &field_value_of_city_name)
void set_city(id_of_data record, id_of_city field_value_of_city)
joedb::Blob write_blob(const std::string &data) override
void write_comment(const std::string &comment)
id_of_data new_data(const std::string &field_value_of_city_name, id_of_city field_value_of_city, int64_t field_value_of_population)
void delete_vector_of_city(id_of_city v, size_t size)
void update_vector_of_city_name(id_of_data record, size_t size, F f)
void delete_vector_of_data(id_of_data v, size_t size)
void update_vector_of_city(id_of_data record, size_t size, F f)
const joedb::Readonly_Journal & get_journal() const
std::string read_blob(joedb::Blob blob) const
void update_vector_of_population(id_of_data record, size_t size, F f)
void set_population(id_of_data record, int64_t field_value_of_population)
Strongly-typed wrapper around an integer representing a row of the data table.
Definition ids.h:27
constexpr auto get_id() const
Definition ids.h:37
constexpr Record_Id get_record_id() const
Definition ids.h:38
Automatically generated by joedbc.
Definition Client.h:19