From: Vsevolod Stakhov Date: Thu, 21 Jan 2016 16:45:18 +0000 (+0000) Subject: Add dedicated function to checkpoint sqlite X-Git-Tag: 1.1.2~84 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7895577bd6c4d4bf98fa2933cbee42ea5c6a95a2;p=thirdparty%2Frspamd.git Add dedicated function to checkpoint sqlite --- diff --git a/src/libutil/sqlite_utils.c b/src/libutil/sqlite_utils.c index 76a7085939..0d0d565c37 100644 --- a/src/libutil/sqlite_utils.c +++ b/src/libutil/sqlite_utils.c @@ -431,3 +431,37 @@ rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const return sqlite; } + +gboolean +rspamd_sqlite3_sync (sqlite3 *db, gint *wal_frames, gint *wal_checkpoints) +{ + gint wf = 0, wc = 0, mode; + +#ifdef SQLITE_OPEN_WAL +#ifdef SQLITE_CHECKPOINT_TRUNCATE + mode = SQLITE_CHECKPOINT_TRUNCATE; +#elif defined(SQLITE_CHECKPOINT_RESTART) + mode = SQLITE_CHECKPOINT_RESTART; +#elif defined(SQLITE_CHECKPOINT_FULL) + mode = SQLITE_CHECKPOINT_FULL; +#endif + /* Perform wal checkpoint (might be long) */ + if (sqlite3_wal_checkpoint_v2 (db, + NULL, + mode, + &wf, + &wc) != SQLITE_OK) { + return FALSE; + + } +#endif + + if (wal_frames) { + *wal_frames = wf; + } + if (wal_checkpoints) { + *wal_checkpoints = wc; + } + + return TRUE; +} diff --git a/src/libutil/sqlite_utils.h b/src/libutil/sqlite_utils.h index fba1b0091b..84b3180b96 100644 --- a/src/libutil/sqlite_utils.h +++ b/src/libutil/sqlite_utils.h @@ -81,4 +81,11 @@ void rspamd_sqlite3_close_prstmt (sqlite3 *db, GArray *stmts); sqlite3 * rspamd_sqlite3_open_or_create (rspamd_mempool_t *pool, const gchar *path, const gchar *create_sql, GError **err); + +/** + * Sync sqlite3 db ensuring that all wal things are done + * @param db + */ +gboolean rspamd_sqlite3_sync (sqlite3 *db, gint *wal_frames, gint *wal_checkpoints); + #endif /* SRC_LIBUTIL_SQLITE_UTILS_H_ */