6#ifndef PT_DB_TRANSACTION_H
7#define PT_DB_TRANSACTION_H
10#include <Pt/Db/Connection.h>
11#include <Pt/NonCopyable.h>
14#if __cplusplus >= 202002L
16#include <Pt/Coroutine.h>
23#if __cplusplus >= 202002L
82#if __cplusplus >= 202002L
105#if __cplusplus >= 202002L
109 _awaiter->onDetach();
120 catch (
const std::exception&)
129 {
return _connection; }
134 {
return _connection; }
187 _connection.endStartTransaction();
194 {
return _startFinished; }
208 _connection.endCommitTransaction();
214 {
return _commitFinished; }
229 _connection.endRollbackTransaction();
235 {
return _rollbackFinished; }
237#if __cplusplus >= 202002L
267#if __cplusplus >= 202002L
278 void detachAwaiter(ConnectionAwaiter& awaiter)
280 if(_awaiter == &awaiter)
287#if __cplusplus >= 202002L
293class AsyncBegin :
public ConnectionAwaiter
300 txn.attachAwaiter(*
this);
306 _txn->detachAwaiter(*
this);
309 void onDetach()
override
313 _txn->detachAwaiter(*
this);
317 ConnectionAwaiter::onDetach();
322 transaction().endStart();
329 throw std::logic_error(
"invalid transaction");
334 void onBegin()
override
349class AsyncCommit :
public ConnectionAwaiter
356 txn.attachAwaiter(*
this);
362 _txn->detachAwaiter(*
this);
365 void onDetach()
override
369 _txn->detachAwaiter(*
this);
373 ConnectionAwaiter::onDetach();
378 transaction().endCommit();
385 throw std::logic_error(
"invalid transaction");
390 void onBegin()
override
405class AsyncRollback :
public ConnectionAwaiter
412 txn.attachAwaiter(*
this);
418 _txn->detachAwaiter(*
this);
421 void onDetach()
override
425 _txn->detachAwaiter(*
this);
429 ConnectionAwaiter::onDetach();
434 transaction().endRollback();
441 throw std::logic_error(
"invalid transaction");
446 void onBegin()
override
459 return AsyncBegin(*
this);
465 return AsyncCommit(*
this);
471 return AsyncRollback(*
this);
493 , _immediate(immediate)
502 return _immediate ?
"BEGIN IMMEDIATE TRANSACTION" :
nullptr;
void setReady()
Resumes the waiting coroutine.
Definition Coroutine.h:162
Awaitable for asynchronous begin-transaction.
Definition Transaction.h:294
Awaitable for asynchronous commit.
Definition Transaction.h:350
Awaitable for asynchronous rollback.
Definition Transaction.h:406
Base awaiter for a pending connection operation.
Definition Connection.h:371
Database session for a registered driver.
Definition Connection.h:97
SqliteTransaction(Connection &conn, bool start=true, bool immediate=false)
Creates a SQLite transaction on conn.
Definition Transaction.h:491
const char * onGetBeginSql() override
Returns SQL for BEGIN, or a null pointer for the backend default.
Definition Transaction.h:500
Unit of work on a database connection.
Definition Transaction.h:74
AsyncCommit commitAsync()
Returns an awaitable that commits the transaction.
Definition Transaction.h:463
void rollback()
Rolls back the active transaction.
Definition Transaction.h:165
void endStart()
Completes an asynchronous begin-transaction.
Definition Transaction.h:185
void beginStart()
Starts an asynchronous begin-transaction.
Definition Transaction.h:176
void endCommit()
Completes an asynchronous commit.
Definition Transaction.h:206
virtual const char * onGetBeginSql()
Returns SQL for BEGIN, or a null pointer for the backend default.
Definition Transaction.h:254
Transaction(Connection &conn, bool starttransaction=true)
Creates a transaction on conn.
Definition Transaction.h:91
Pt::Signal & rollbackFinished()
Signal emitted when an asynchronous rollback completes.
Definition Transaction.h:234
AsyncRollback rollbackAsync()
Returns an awaitable that rolls back the transaction.
Definition Transaction.h:469
Pt::Signal & startFinished()
Signal emitted when an asynchronous begin completes.
Definition Transaction.h:193
~Transaction()
Rolls back an active transaction and destroys the object.
Definition Transaction.h:103
void beginRollback()
Starts an asynchronous rollback.
Definition Transaction.h:219
virtual const char * onGetCommitSql()
Returns SQL for COMMIT, or a null pointer for the backend default.
Definition Transaction.h:259
AsyncBegin beginAsync()
Returns an awaitable that begins the transaction.
Definition Transaction.h:457
virtual const char * onGetRollbackSql()
Returns SQL for ROLLBACK, or a null pointer for the backend default.
Definition Transaction.h:264
void endRollback()
Completes an asynchronous rollback.
Definition Transaction.h:227
Pt::Signal & commitFinished()
Signal emitted when an asynchronous commit completes.
Definition Transaction.h:213
void beginCommit()
Starts an asynchronous commit.
Definition Transaction.h:198
void begin()
Begins a deferred transaction.
Definition Transaction.h:140
Connection & getConnection()
Returns the connection this transaction uses.
Definition Transaction.h:133
void commit()
Commits the active transaction.
Definition Transaction.h:152
const Connection & getConnection() const
Returns the connection this transaction uses.
Definition Transaction.h:128
NonCopyable()
Default constructor.
Definition NonCopyable.h:63
Multicast Signal to call multiple slots.
Definition Signal.h:190
ConstMethodSlot< R, ClassT, As... > slot(ClassT &object, R(BaseT::*method)(As...) const)
Returns a slot object for the given object/member pair.
Definition ConstMethod.h:172
Portable SQL database access.
Core module.
Definition Allocator.h:33