diff options
Diffstat (limited to 'src/common/sqlite.c')
-rw-r--r-- | src/common/sqlite.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/common/sqlite.c b/src/common/sqlite.c index 3a94623..41f99ac 100644 --- a/src/common/sqlite.c +++ b/src/common/sqlite.c @@ -583,3 +583,63 @@ bool update_db_values(sqlite3 *db, const char *table, const bound_value *values, return result; } + + +/****************************************************************************** +* * +* Paramètres : db = base de données à sauvegarder. * +* filename = fichier de destination pour la sauvegarde. * +* * +* Description : Effectue une copie d'une base de données en cours d'usage. * +* * +* Retour : Bilan de l'exécution de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool backup_db(sqlite3 *db, const char *filename) +{ + bool result; /* Conclusion à faire remonter */ + sqlite3 *copy; /* Copie de la base de données */ + int ret; /* Bilan d'un appel à SQLite */ + sqlite3_backup *backup; /* Gestionnaire de sauvegarde */ + + /** + * Cf. https://www.sqlite.org/backup.html + */ + + ret = sqlite3_open(filename, ©); + + if (ret != SQLITE_OK) + { + if (copy != NULL) + sqlite3_close(copy); + + result = false; + + goto exit; + + } + + backup = sqlite3_backup_init(copy, "main", db, "main"); + + if (backup == NULL) + result = false; + + else + { + sqlite3_backup_step(backup, -1); + sqlite3_backup_finish(backup); + + ret = sqlite3_errcode(copy); + + result = (ret == SQLITE_OK); + + } + + exit: + + return result; + +} |