23#include "Writable_Database.h"
24#include "joedb/concurrency/Client.h"
41 joedb::Buffered_File &file,
42 joedb::Readonly_Journal::Check check,
43 joedb::Commit_Level commit_level
45 db(file, false, check, commit_level)
53 protected detail::Client_Data,
56 friend class Client_Lock;
59 int64_t schema_checkpoint;
62 void read_journal() override
65 if (schema_checkpoint)
67 if (db.schema_journal.get_checkpoint_position() > schema_checkpoint)
68 Database::throw_exception("Can't upgrade schema during pull");
69 db.check_single_row();
76 joedb::Buffered_File &file,
77 joedb::Connection &connection,
78 bool content_check = true,
79 joedb::Readonly_Journal::Check check = joedb::Readonly_Journal::Check::all,
80 joedb::Commit_Level commit_level = joedb::Commit_Level::no_commit
82 detail::Client_Data(file, check, commit_level),
83 joedb::Client(db.journal, connection, content_check),
86 if (get_checkpoint_difference() > 0)
89 db.play_journal(); // makes transaction shorter if db is big
90 joedb::Client::transaction([this](){
94 schema_checkpoint = db.schema_journal.get_checkpoint_position();
97 const Database &get_database() const
113 template<typename F> void transaction
118 joedb::Client::transaction([&]()
130 class Client_Lock: public joedb::Client_Lock
133 Client_Lock(Client &client): joedb::Client_Lock(client)
137 Writable_Database &get_database()
139 JOEDB_ASSERT(is_locked());
140 return static_cast<Client &>(client).db;