Joedb 10.5.0
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.5.0
8// joedbc compilation time: Oct 25 2026 16:06:59
9// Generation of this file: 2026-10-25 19:48:05 GMT
10//
11/////////////////////////////////////////////////////////////////////////////
12#ifndef joedb_db_encoded_file_Writable_Database_declared
13#define joedb_db_encoded_file_Writable_Database_declared
14
15#include "joedb/Span.h"
16
17#include "Database_Writable.h"
18
19#include <utility>
20
22{
23 namespace detail
24 {
25 class Client_Data;
26 }
27
28 class Client;
29 class Multiplexer;
30 class Memory_Database;
31
32 /// A @ref Database that contains a @ref joedb::Writable_Journal and keeps them in sync
33 class Writable_Database: public Database_Writable
34 {
35 friend class detail::Client_Data;
36 friend class Client;
37 friend class Multiplexer;
38 friend class Memory_Database;
39
40 private:
42 bool ready_to_write;
43
44 void play_journal();
45 void auto_upgrade();
46 void check_single_row();
47 void initialize();
48
49 Writable_Database
50 (
52 joedb::Recovery recovery,
53 bool perform_initialization
54 );
55
56 public:
57 Writable_Database(joedb::Abstract_File &file);
58
59 Writable_Database
60 (
62 joedb::Recovery recovery
63 );
64
65 const joedb::Readonly_Journal &get_journal() const {return journal;}
66
67 std::string read_blob(joedb::Blob blob) const
68 {
69 return journal.get_file().read_blob(blob);
70 }
71
72 joedb::Blob write_blob(std::string_view data) override
73 {
74 return journal.write_blob(data);
75 }
76
77 int64_t ahead_of_checkpoint() const
78 {
79 return journal.ahead_of_checkpoint();
80 }
81
82 void soft_checkpoint() override
83 {
84 journal.soft_checkpoint();
85 }
86
87 void hard_checkpoint() override
88 {
89 journal.hard_checkpoint();
90 }
91
92 void write_comment(const std::string &comment);
93 void write_timestamp();
94 void write_timestamp(int64_t timestamp);
95 void write_valid_data();
96 void flush() override {journal.flush();}
97
98 void clear_buffer_table();
99
101 {
102 id_of_buffer result(Record_Id(storage_of_buffer.freedom_keeper.get_free_record()));
103 storage_of_buffer.resize(storage_of_buffer.freedom_keeper.size());
105
106 journal.insert_into(Table_Id(1), result.get_record_id());
107 return result;
108 }
109
111 {
112 if (id.get_record_id() >= Record_Id(storage_of_buffer.size()))
113 storage_of_buffer.resize(id.get_id() + 1);
114 internal_insert_buffer(id.get_record_id());
115 journal.insert_into(Table_Id(1), id.get_record_id());
116 }
117
119 {
121 storage_of_buffer.resize(storage_of_buffer.size() + size);
123 journal.insert_vector(Table_Id(1), result.get_record_id(), size);
124 return result;
125 }
126
128 (
129 joedb::Blob field_value_of_data,
130 int64_t field_value_of_size,
131 int64_t field_value_of_offset
132 )
133 {
134 auto result = new_buffer();
135 set_data(result, field_value_of_data);
136 set_size(result, field_value_of_size);
137 set_offset(result, field_value_of_offset);
138 return result;
139 }
140
142 {
144 journal.delete_from(Table_Id(1), record.get_record_id());
145 }
146
148 {
149 for (size_t i = size; i > 0;)
150 internal_delete_buffer(v[--i].get_record_id());
151 journal.delete_vector(Table_Id(1), v.get_record_id(), size);
152 }
153
154 void set_data(id_of_buffer record, joedb::Blob field_value_of_data)
155 {
156 internal_update_buffer__data(record.get_record_id(), field_value_of_data);
157 journal.update_blob(Table_Id(1), record.get_record_id(), Field_Id(1), field_value_of_data);
158 }
159
160 template<typename F> void update_vector_of_data(id_of_buffer record, size_t size, F f)
161 {
162 JOEDB_DEBUG_ASSERT(storage_of_buffer.freedom_keeper.is_used_vector(record.get_record_id(), size));
163 joedb::Span<joedb::Blob> span(&storage_of_buffer.field_value_of_data.data()[record.get_id()], size);
164 f(span);
166 journal.update_vector_blob(Table_Id(1), record.get_record_id(), Field_Id(1), size, (span.begin()));
167 }
168
169 void set_size(id_of_buffer record, int64_t field_value_of_size)
170 {
171 internal_update_buffer__size(record.get_record_id(), field_value_of_size);
172 journal.update_int64(Table_Id(1), record.get_record_id(), Field_Id(2), field_value_of_size);
173 }
174
175 template<typename F> void update_vector_of_size(id_of_buffer record, size_t size, F f)
176 {
177 JOEDB_DEBUG_ASSERT(storage_of_buffer.freedom_keeper.is_used_vector(record.get_record_id(), size));
178 joedb::Span<int64_t> span(&storage_of_buffer.field_value_of_size.data()[record.get_id()], size);
179 f(span);
181 journal.update_vector_int64(Table_Id(1), record.get_record_id(), Field_Id(2), size, (span.begin()));
182 }
183
184 void set_offset(id_of_buffer record, int64_t field_value_of_offset)
185 {
186 internal_update_buffer__offset(record.get_record_id(), field_value_of_offset);
187 journal.update_int64(Table_Id(1), record.get_record_id(), Field_Id(3), field_value_of_offset);
188 }
189
190 template<typename F> void update_vector_of_offset(id_of_buffer record, size_t size, F f)
191 {
192 JOEDB_DEBUG_ASSERT(storage_of_buffer.freedom_keeper.is_used_vector(record.get_record_id(), size));
193 joedb::Span<int64_t> span(&storage_of_buffer.field_value_of_offset.data()[record.get_id()], size);
194 f(span);
196 journal.update_vector_int64(Table_Id(1), record.get_record_id(), Field_Id(3), size, (span.begin()));
197 }
198
199
200 };}
201
202#endif
T * begin()
Definition Span.h:39
Handle concurrent access to a joedb::Abstract_File using a joedb::Connection.
Definition Client.h:44
void comment(const std::string &comment) override
void timestamp(int64_t timestamp) override
void internal_delete_buffer(Record_Id record_id)
Definition Database.h:90
void internal_update_buffer__size(Record_Id record_id, int64_t field_value_of_size)
Definition Database.h:134
void internal_update_vector_buffer__data(Record_Id record_id, size_t size, const joedb::Blob *value)
Definition Database.h:121
detail::data_of_buffer storage_of_buffer
Definition Database.h:87
void internal_insert_buffer(Record_Id record_id)
Definition Database.h:99
void internal_update_buffer__offset(Record_Id record_id, int64_t field_value_of_offset)
Definition Database.h:157
void internal_update_buffer__data(Record_Id record_id, joedb::Blob field_value_of_data)
Definition Database.h:111
void internal_update_vector_buffer__offset(Record_Id record_id, size_t size, const int64_t *value)
Definition Database.h:167
void internal_vector_insert_buffer(Record_Id record_id, size_t size)
Definition Database.h:104
void internal_update_vector_buffer__size(Record_Id record_id, size_t size, const int64_t *value)
Definition Database.h:144
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
void set_data(id_of_buffer record, joedb::Blob field_value_of_data)
std::string read_blob(joedb::Blob blob) const
void update_vector_of_size(id_of_buffer record, size_t size, F f)
void delete_vector_of_buffer(id_of_buffer v, size_t size)
joedb::Blob write_blob(std::string_view data) override
void set_size(id_of_buffer record, int64_t field_value_of_size)
void update_vector_of_data(id_of_buffer record, size_t size, F f)
void set_offset(id_of_buffer record, int64_t field_value_of_offset)
void write_comment(const std::string &comment)
const joedb::Readonly_Journal & get_journal() const
id_of_buffer new_buffer(joedb::Blob field_value_of_data, int64_t field_value_of_size, int64_t field_value_of_offset)
void update_vector_of_offset(id_of_buffer record, size_t size, F f)
Strongly-typed wrapper around an integer representing a row of the buffer table.
Definition ids.h:25
constexpr Record_Id get_record_id() const
Definition ids.h:36
constexpr auto get_id() const
Definition ids.h:35
#define JOEDB_DEBUG_ASSERT(x)
assertion tested in debug mode
Definition assert.h:19
Automatically generated by joedbc.
Definition Client.h:19