diff options
author | drh <> | 2021-10-30 20:22:32 +0000 |
---|---|---|
committer | drh <> | 2021-10-30 20:22:32 +0000 |
commit | d4cc4d02cbfbf82bcba3b3f594a66acc4111d23f (patch) | |
tree | 96010f2239a298e63c0cb1be47366f8b1837989f /src/main.c | |
parent | 362c181913a419ceda8f69a3fc12d829c2be2e9c (diff) | |
parent | 21b1c6ddaca2de314f18d0a6756bd443f9bb2f8c (diff) | |
download | sqlite-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.c | 31 |
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(). |