1#ifndef joedb_Client_declared
2#define joedb_Client_declared
43 int64_t server_checkpoint;
46 void push(
bool unlock_after)
49 server_checkpoint = connection.
push
58 void push_and_keep_locked()
65 void start_transaction()
68 server_checkpoint = connection.
lock_pull(*writable_journal);
79 bool content_check = true
81 readonly_journal(journal),
82 writable_journal(journal.get_writable_journal()),
83 connection(connection),
86 connection.handshake(journal, content_check)
93 return writable_journal ==
nullptr;
98 return readonly_journal;
113 return server_checkpoint;
123 int64_t
pull(std::chrono::milliseconds wait = std::chrono::milliseconds(0))
127 if (writable_journal)
130 server_checkpoint = connection.
pull(*writable_journal, wait);
134 readonly_journal.
pull();
135 server_checkpoint = connection.
get_checkpoint(readonly_journal, wait);
176 client.start_transaction();
190 client.push_and_keep_locked();
221 try {
unlock(); }
catch (...) {}
virtual std::string read_blob_data(Blob blob) const
Lock object that allows writing to a database managed by a joedb::Client.
void push()
Checkpoint current journal, and push to the connection.
void unlock()
Cancel the transaction right before lock destruction.
Client_Lock(Client &client)
Client_Lock(const Client_Lock &)=delete
Client_Lock & operator=(const Client_Lock &)=delete
void push_unlock()
Confirm the transaction right before lock destruction.
Journal_Lock journal_lock
Handle concurrent access to a file with a joedb::Connection.
virtual void read_journal()=0
int64_t get_server_checkpoint() const
int64_t get_checkpoint() const
int64_t pull(std::chrono::milliseconds wait=std::chrono::milliseconds(0))
void transaction(F transaction)
const Readonly_Journal & get_journal() const
int64_t get_checkpoint_difference() const
std::string read_blob_data(Blob blob) const
virtual int64_t pull(Writable_Journal &client_journal, std::chrono::milliseconds wait=std::chrono::milliseconds(0))
Pull new data from the connection.
int64_t push(Readonly_Journal &client_journal, int64_t from_checkpoint, bool unlock_after)
Shortcut to call push_until until the client checkpoint.
virtual int64_t lock_pull(Writable_Journal &client_journal, std::chrono::milliseconds wait=std::chrono::milliseconds(0))
Fused lock_pull, executed at the start of a write transaction.
virtual void unlock()
Can be used to cancel a transaction without pushing.
virtual int64_t get_checkpoint(Readonly_Journal &client_journal, std::chrono::milliseconds wait=std::chrono::milliseconds(0))
Get new connection checkpoint without pulling.
static void write(const char *message) noexcept
int64_t get_checkpoint_position() const
const Buffered_File & get_file() const
void default_checkpoint()