Joedb 9.5.0
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Writable_Database_Client.h
Go to the documentation of this file.
1#ifndef joedb_Writable_Database_Client_declared
2#define joedb_Writable_Database_Client_declared
3
6#include "joedb/Multiplexer.h"
7
8namespace joedb
9{
10 namespace detail
11 {
12 class Writable_Database_Client_Data
13 {
14 protected:
15 Writable_Journal data_journal;
16 Database database;
17 Multiplexer multiplexer;
18
19 public:
20 Writable_Database_Client_Data(Buffered_File &file):
21 data_journal(file),
22 multiplexer{database, data_journal}
23 {
24 }
25 };
26 };
27
28 /// @ingroup concurrency
30 protected detail::Writable_Database_Client_Data,
31 public Writable_Client
32 {
34
35 protected:
36 void read_journal() override
37 {
38 data_journal.play_until_checkpoint(database);
39 }
40
41 public:
43 (
44 Buffered_File &file,
47 ):
48 Writable_Database_Client_Data(file),
49 Writable_Client(data_journal, connection, content_check)
50 {
52 }
53
54 const Database &get_database() const
55 {
56 return database;
57 }
58
59 template<typename F> auto transaction(F transaction)
60 {
62 {
63 return transaction(database, multiplexer);
64 });
65 }
66 };
67
68 /// @ingroup concurrency
70 {
71 public:
76
77 const Readable &get_readable() const
78 {
79 return static_cast<Writable_Database_Client &>(client).database;
80 }
81
83 {
85 return static_cast<Writable_Database_Client &>(client).multiplexer;
86 }
87 };
88}
89
90#endif
Lock object that allows writing to a database managed by a joedb::Client.
Writable_Client & client
Connection & connection
Definition Client.h:16
Writable specialization of Client.
auto transaction(F transaction)
Writable_Database_Client_Lock(Writable_Database_Client &client)
Writable_Database_Client(Buffered_File &file, Connection &connection, Content_Check content_check=Content_Check::quick)
Content_Check
Definition Connection.h:19
#define JOEDB_DEBUG_ASSERT(x)
Definition assert.h:20
Definition Blob.h:7