Skip to content

Commit 37a7423

Browse files
committed
Uses empty function for default backup handler.
1 parent 75ab17c commit 37a7423

4 files changed

Lines changed: 30 additions & 2 deletions

File tree

headeronly_src/sqlite3pp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ namespace sqlite3pp
9393
int attach(char const* dbname, char const* name);
9494
int detach(char const* name);
9595

96-
int backup(database& destdb, backup_handler h);
96+
int backup(database& destdb, backup_handler h = {});
9797
int backup(char const* dbname, database& destdb, char const* destdbname, backup_handler h, int step_page = 5);
9898

9999
long long int last_insert_rowid() const;

headeronly_src/sqlite3pp.ipp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,9 @@ namespace sqlite3pp
146146
auto rc = SQLITE_OK;
147147
do {
148148
rc = sqlite3_backup_step(bkup, step_page);
149-
h(sqlite3_backup_remaining(bkup), sqlite3_backup_pagecount(bkup), rc);
149+
if (h) {
150+
h(sqlite3_backup_remaining(bkup), sqlite3_backup_pagecount(bkup), rc);
151+
}
150152
} while (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
151153
sqlite3_backup_finish(bkup);
152154
return rc;

src/sqlite3pp.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,28 @@ namespace sqlite3pp
134134
return executef("DETACH '%q'", name);
135135
}
136136

137+
int database::backup(database& destdb, backup_handler h)
138+
{
139+
return backup("main", destdb, "main", h, 5);
140+
}
141+
142+
int database::backup(char const* dbname, database& destdb, char const* destdbname, backup_handler h, int step_page)
143+
{
144+
sqlite3_backup* bkup = sqlite3_backup_init(destdb.db_, destdbname, db_, dbname);
145+
if (!bkup) {
146+
return error_code();
147+
}
148+
auto rc = SQLITE_OK;
149+
do {
150+
rc = sqlite3_backup_step(bkup, step_page);
151+
if (h) {
152+
h(sqlite3_backup_remaining(bkup), sqlite3_backup_pagecount(bkup), rc);
153+
}
154+
} while (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
155+
sqlite3_backup_finish(bkup);
156+
return rc;
157+
}
158+
137159
void database::set_busy_handler(busy_handler h)
138160
{
139161
bh_ = h;

src/sqlite3pp.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ namespace sqlite3pp
7979
using rollback_handler = std::function<void ()>;
8080
using update_handler = std::function<void (int, char const*, char const*, long long int)>;
8181
using authorize_handler = std::function<int (int, char const*, char const*, char const*, char const*)>;
82+
using backup_handler = std::function<void (int, int, int)>;
8283

8384
explicit database(char const* dbname = nullptr, int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, const char* vfs = nullptr);
8485

@@ -93,6 +94,9 @@ namespace sqlite3pp
9394
int attach(char const* dbname, char const* name);
9495
int detach(char const* name);
9596

97+
int backup(database& destdb, backup_handler h = {});
98+
int backup(char const* dbname, database& destdb, char const* destdbname, backup_handler h, int step_page = 5);
99+
96100
long long int last_insert_rowid() const;
97101

98102
int enable_foreign_keys(bool enable = true);

0 commit comments

Comments
 (0)