diff options
Diffstat (limited to 'src/vtab.c')
-rw-r--r-- | src/vtab.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/vtab.c b/src/vtab.c index 8f6db9f47..dd8a755be 100644 --- a/src/vtab.c +++ b/src/vtab.c @@ -134,6 +134,28 @@ int sqlite3_create_module_v2( } /* +** External API to drop all virtual-table modules, except those named +** on the azNames list. +*/ +int sqlite3_drop_modules(sqlite3 *db, const char** azNames){ + HashElem *pThis, *pNext; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif + for(pThis=sqliteHashFirst(&db->aModule); pThis; pThis=pNext){ + Module *pMod = (Module*)sqliteHashData(pThis); + pNext = sqliteHashNext(pThis); + if( azNames ){ + int ii; + for(ii=0; azNames[ii]!=0 && strcmp(azNames[ii],pMod->zName)!=0; ii++){} + if( azNames[ii]!=0 ) continue; + } + createModule(db, pMod->zName, 0, 0, 0); + } + return SQLITE_OK; +} + +/* ** Decrement the reference count on a Module object. Destroy the ** module when the reference count reaches zero. */ |