23#include "Writable_Database.h"
24#include "joedb/concurrency/Writable_Client.h"
41 joedb::Buffered_File &file,
42 joedb::Recovery recovery
44 db(file, recovery, false)
52 protected detail::Client_Data,
53 public joedb::Writable_Client
55 friend class Client_Lock;
58 int64_t schema_checkpoint;
61 void read_journal() override
64 if (schema_checkpoint)
66 if (db.schema_journal.get_checkpoint() > schema_checkpoint)
67 Database::throw_exception("Can't upgrade schema during pull");
68 db.check_single_row();
75 joedb::Buffered_File &file,
76 joedb::Connection &connection,
77 joedb::Content_Check content_check = joedb::Content_Check::fast,
78 joedb::Recovery recovery = joedb::Recovery::none
80 detail::Client_Data(file, recovery),
81 joedb::Writable_Client(db.journal, connection, content_check),
84 if (get_checkpoint_difference() > 0)
87 db.play_journal(); // makes transaction shorter if db is big
88 joedb::Writable_Client::transaction([this](){
92 schema_checkpoint = db.schema_journal.get_checkpoint();
95 const Database &get_database() const
111 template<typename F> auto transaction
116 return joedb::Writable_Client::transaction([&]()
118 return transaction(db);
128 class Client_Lock: public joedb::Client_Lock
131 Client_Lock(Client &client): joedb::Client_Lock(client)
135 Writable_Database &get_database()
137 JOEDB_DEBUG_ASSERT(locked);
138 return static_cast<Client &>(client).db;