diff options
author | Tobias Brunner <tobias@strongswan.org> | 2013-10-11 15:29:30 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-10-11 15:29:30 +0200 |
commit | 6d7710a7441dbb3fb839f8c0d04e4c89fc595e3d (patch) | |
tree | 5a10d4f4fcbb3af8250ccc6cf16d32da6085a473 /src/libstrongswan/database/database.h | |
parent | ec91f15e3ba3e622c3bc206c0eeac7c35bfd8ce8 (diff) | |
parent | bd085dd978b2dc7891c0d8486dd883e76e15e9a3 (diff) | |
download | strongswan-6d7710a7441dbb3fb839f8c0d04e4c89fc595e3d.tar.bz2 strongswan-6d7710a7441dbb3fb839f8c0d04e4c89fc595e3d.tar.xz |
Merge branch 'database-transactions'
This adds support for transactions to the database_t interface and the two
current implementations.
The pool utility is also moved to its own directory in src/.
Diffstat (limited to 'src/libstrongswan/database/database.h')
-rw-r--r-- | src/libstrongswan/database/database.h | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/libstrongswan/database/database.h b/src/libstrongswan/database/database.h index d46fc3d34..ad5ccf95e 100644 --- a/src/libstrongswan/database/database.h +++ b/src/libstrongswan/database/database.h @@ -1,4 +1,5 @@ /* + * Copyright (C) 2013 Tobias Brunner * Copyright (C) 2008 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -102,7 +103,7 @@ struct database_t { enumerator_t* (*query)(database_t *this, char *sql, ...); /** - * Execute a query which dows not return rows, such as INSERT. + * Execute a query which does not return rows, such as INSERT. * * @param rowid pointer to write inserted AUTO_INCREMENT row ID, or NULL * @param sql sql string, containing '?' placeholders @@ -112,6 +113,41 @@ struct database_t { int (*execute)(database_t *this, int *rowid, char *sql, ...); /** + * Start a transaction. + * + * A serializable transaction forces a strict separation between other + * transactions. Due to the performance overhead they should only be used + * in certain situations (e.g. SELECT->INSERT|UPDATE). + * + * @note Either commit() or rollback() has to be called to end the + * transaction. + * @note Transactions are thread-specific. So commit()/rollbak() has to be + * called from the same thread. + * @note While this method can be called multiple times (commit/rollback + * have to be called an equal number of times) real nested transactions are + * not supported. So if any if the "inner" transactions are rolled back + * the outer most transaction is rolled back. + * + * @param serializable TRUE to create a serializable transaction + * @return TRUE on success + */ + bool (*transaction)(database_t *this, bool serializable); + + /** + * Commit all changes made during the current transaction. + * + * @return TRUE on success + */ + bool (*commit)(database_t *this); + + /** + * Rollback/revert all changes made during the current transaction. + * + * @return TRUE on success + */ + bool (*rollback)(database_t *this); + + /** * Get the database implementation type. * * To allow driver specific SQL or performance optimizations each database |