Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "sqlite3_util.h"
gboolean
sqlite3_exec_simple (sqlite3 *db, const char *sql)
{
if (! db) {
g_warning ("trying to execute sql %s on NULL db handler", sql);
g_assert_not_reached ();
return FALSE;
}
char *errmsg = NULL;
if (sqlite3_exec (db, sql, NULL, NULL, &errmsg) != SQLITE_OK) {
g_warning ("execute sql failed: sql=%s error=%s", sql, errmsg);
sqlite3_free (errmsg);
return FALSE;
}
g_assert_null (errmsg);
return TRUE;
}
/**
* copy all data from src db to dest db.
*
* it's a wrapper for sqlite3_backup_init(), sqlite3_backup_step(),
* sqlite3_backup_finish().
*
* TODO probably should add glib based error handling instead of print via
* g_warning and return gboolean for real world use.
*
* @dest: dest db handler
* @dest_dbname: dest db name
* @src: src db handler
* @src_dbname: src db name
*/
gboolean
sqlite3_copy_db (sqlite3 *dest, const char* dest_dbname,
sqlite3 *src, const char* src_dbname)
{
gboolean copy_done = FALSE;
sqlite3_backup *backup = sqlite3_backup_init (
dest, dest_dbname, src, src_dbname);
if (backup) {
int r = sqlite3_backup_step (backup, -1);
if (r == SQLITE_DONE) {
copy_done = TRUE;
} else {
g_warning ("sqlite3_backup_step() failed: %d (%s)",
r, sqlite3_errmsg (dest));
}
r = sqlite3_backup_finish (backup);
if (r != SQLITE_OK) {
g_warning ("sqlite3_backup_finish() failed: %d (%s)",
r, sqlite3_errmsg (dest));
}
} else {
g_warning ("sqlite3_backup_init() failed: %d (%s)",
sqlite3_errcode (dest), sqlite3_errmsg (dest));
}
return copy_done;
}