diff options
author | drh <drh@noemail.net> | 2016-05-05 23:59:22 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2016-05-05 23:59:22 +0000 |
commit | 8271630e81940729a34dd614d09a23851b078a42 (patch) | |
tree | 578f9bee88ab4cc194a31a92f100d52cbc8b9c08 /ext/misc/scrub.c | |
parent | e04369e29e01d375fa17c206365407e8baaa0109 (diff) | |
download | sqlite-8271630e81940729a34dd614d09a23851b078a42.tar.gz sqlite-8271630e81940729a34dd614d09a23851b078a42.zip |
Additional error reporting. Open the source database read/write so that
it can delete the WAL file when done.
FossilOrigin-Name: d2efd3c176f0eba2d78105f0bb3161db38bd4bab
Diffstat (limited to 'ext/misc/scrub.c')
-rw-r--r-- | ext/misc/scrub.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/ext/misc/scrub.c b/ext/misc/scrub.c index 153625abe..12adcd7bd 100644 --- a/ext/misc/scrub.c +++ b/ext/misc/scrub.c @@ -157,7 +157,7 @@ static void scrubBackupOpenSrc(ScrubState *p){ int rc; /* Open the source database file */ p->rcErr = sqlite3_open_v2(p->zSrcFile, &p->dbSrc, - SQLITE_OPEN_READONLY | + SQLITE_OPEN_READWRITE | SQLITE_OPEN_URI | SQLITE_OPEN_PRIVATECACHE, 0); if( p->rcErr ){ scrubBackupErr(p, "cannot open source database: %s", @@ -538,6 +538,9 @@ scrub_abort: /* Close the destination database without closing the transaction. If we ** commit, page zero will be overwritten. */ sqlite3_close(s.dbDest); + + /* But do close out the read-transaction on the source database */ + sqlite3_exec(s.dbSrc, "COMMIT;", 0, 0, 0); sqlite3_close(s.dbSrc); sqlite3_free(s.page1); if( pzErr ){ @@ -549,6 +552,17 @@ scrub_abort: } #ifdef SCRUB_STANDALONE +/* Error and warning log */ +static void errorLogCallback(void *pNotUsed, int iErr, const char *zMsg){ + const char *zType; + switch( iErr&0xff ){ + case SQLITE_WARNING: zType = "WARNING"; break; + case SQLITE_NOTICE: zType = "NOTICE"; break; + default: zType = "ERROR"; break; + } + fprintf(stderr, "%s: %s\n", zType, zMsg); +} + /* The main() routine when this utility is run as a stand-alone program */ int main(int argc, char **argv){ char *zErr = 0; @@ -557,6 +571,7 @@ int main(int argc, char **argv){ fprintf(stderr,"Usage: %s SOURCE DESTINATION\n", argv[0]); exit(1); } + sqlite3_config(SQLITE_CONFIG_LOG, errorLogCallback, 0); rc = sqlite3_scrub_backup(argv[1], argv[2], &zErr); if( rc==SQLITE_NOMEM ){ fprintf(stderr, "%s: out of memory\n", argv[0]); |