aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authordrh <>2021-10-30 20:22:32 +0000
committerdrh <>2021-10-30 20:22:32 +0000
commitd4cc4d02cbfbf82bcba3b3f594a66acc4111d23f (patch)
tree96010f2239a298e63c0cb1be47366f8b1837989f /src/main.c
parent362c181913a419ceda8f69a3fc12d829c2be2e9c (diff)
parent21b1c6ddaca2de314f18d0a6756bd443f9bb2f8c (diff)
downloadsqlite-d4cc4d02cbfbf82bcba3b3f594a66acc4111d23f.tar.gz
sqlite-d4cc4d02cbfbf82bcba3b3f594a66acc4111d23f.zip
Add the sqlite3_autovacuum_pages() interface.
FossilOrigin-Name: ca2703c339f76101f25051a2ed380398b018782883bfee68b5f2d69a1de9091a
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index bf33b640b..aa34977bf 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1403,6 +1403,9 @@ void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
** structure?
*/
sqlite3DbFree(db, db->aDb[1].pSchema);
+ if( db->xAutovacDestr ){
+ db->xAutovacDestr(db->pAutovacPagesArg);
+ }
sqlite3_mutex_leave(db->mutex);
db->eOpenState = SQLITE_STATE_CLOSED;
sqlite3_mutex_free(db->mutex);
@@ -2304,6 +2307,34 @@ void *sqlite3_preupdate_hook(
}
#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
+/*
+** Register a function to be invoked prior to each autovacuum that
+** determines the number of pages to vacuum.
+*/
+int sqlite3_autovacuum_pages(
+ sqlite3 *db, /* Attach the hook to this database */
+ unsigned int (*xCallback)(void*,const char*,u32,u32,u32),
+ void *pArg, /* Argument to the function */
+ void (*xDestructor)(void*) /* Destructor for pArg */
+){
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( !sqlite3SafetyCheckOk(db) ){
+ if( xDestructor ) xDestructor(pArg);
+ return SQLITE_MISUSE_BKPT;
+ }
+#endif
+ sqlite3_mutex_enter(db->mutex);
+ if( db->xAutovacDestr ){
+ db->xAutovacDestr(db->pAutovacPagesArg);
+ }
+ db->xAutovacPages = xCallback;
+ db->pAutovacPagesArg = pArg;
+ db->xAutovacDestr = xDestructor;
+ sqlite3_mutex_leave(db->mutex);
+ return SQLITE_OK;
+}
+
+
#ifndef SQLITE_OMIT_WAL
/*
** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint().