We always start a transaction before processing, but there are cases where we don't need to. Switch to doing it on-demand. This doesn't make a big difference for sqlite3, but it can for Postgres because of the latency: 12% or so. Every bit helps! 30 runs, min-max(mean+/-stddev): Postgres before: 8.842773-9.769030(9.19531+/-0.21) Postgres after: 8.007967-8.321856(8.14172+/-0.066) sqlite3 before: 7.486042-8.371831(8.15544+/-0.19) sqlite3 after: 7.973411-8.576135(8.3025+/-0.12) Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
62 lines
1.6 KiB
C
62 lines
1.6 KiB
C
#ifndef LIGHTNING_DB_EXEC_H
|
|
#define LIGHTNING_DB_EXEC_H
|
|
#include "config.h"
|
|
|
|
#include <ccan/short_types/short_types.h>
|
|
#include <ccan/take/take.h>
|
|
|
|
struct db;
|
|
|
|
/**
|
|
* db_set_intvar - Set an integer variable in the database
|
|
*
|
|
* Utility function to store generic integer values in the
|
|
* database.
|
|
*/
|
|
void db_set_intvar(struct db *db, const char *varname, s64 val);
|
|
|
|
/**
|
|
* db_get_intvar - Retrieve an integer variable from the database
|
|
*
|
|
* Either returns the value in the database, or @defval if
|
|
* the query failed or no such variable exists.
|
|
*/
|
|
s64 db_get_intvar(struct db *db, const char *varname, s64 defval);
|
|
|
|
/* Get the current data version (entries). */
|
|
u32 db_data_version_get(struct db *db);
|
|
|
|
/* Get the current database version (migrations). */
|
|
int db_get_version(struct db *db);
|
|
|
|
/**
|
|
* db_begin_transaction - Begin a transaction
|
|
*
|
|
* Begin a new DB transaction. fatal() on database error.
|
|
*/
|
|
#define db_begin_transaction(db) \
|
|
db_begin_transaction_((db), __FILE__ ":" stringify(__LINE__))
|
|
void db_begin_transaction_(struct db *db, const char *location);
|
|
|
|
bool db_in_transaction(struct db *db);
|
|
|
|
/**
|
|
* db_need_transaction: we now need to actually enable the transaction, if not
|
|
* already. */
|
|
void db_need_transaction(struct db *db, const char *location);
|
|
|
|
/**
|
|
* db_commit_transaction - Commit a running transaction
|
|
*
|
|
* Requires that we are currently in a transaction. fatal() if we
|
|
* fail to commit.
|
|
*/
|
|
void db_commit_transaction(struct db *db);
|
|
|
|
/**
|
|
* db_set_readonly - make writes fatal or allowed.
|
|
*/
|
|
void db_set_readonly(struct db *db, bool readonly);
|
|
|
|
#endif /* LIGHTNING_DB_EXEC_H */
|