mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
When deleting an SQL function that does not exist, return without doing
anything at all rather than creating a tombstone function. In this way, function deletes that happen inside virtual-table destructors that are run when a database connection is closing do not create new tombstones in the function table after the function table has already been purged. [forum:/forumpost/726219164b|forum post 726219164b]. FossilOrigin-Name: 391c73132c80df944fb49a17d8fe78203c54ac48f968ee9dd9dd8c769c0b4b10
This commit is contained in:
@@ -389,6 +389,7 @@ static int echoDestructor(sqlite3_vtab *pVtab){
|
||||
typedef struct EchoModule EchoModule;
|
||||
struct EchoModule {
|
||||
Tcl_Interp *interp;
|
||||
sqlite3 *db;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1352,6 +1353,9 @@ extern int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb);
|
||||
extern const char *sqlite3ErrName(int);
|
||||
|
||||
static void moduleDestroy(void *p){
|
||||
EchoModule *pMod = (EchoModule*)p;
|
||||
sqlite3_create_function(pMod->db, "function_that_does_not_exist_0982ma98",
|
||||
SQLITE_ANY, 1, 0, 0, 0, 0);
|
||||
sqlite3_free(p);
|
||||
}
|
||||
|
||||
@@ -1376,6 +1380,7 @@ static int SQLITE_TCLAPI register_echo_module(
|
||||
/* Virtual table module "echo" */
|
||||
pMod = sqlite3_malloc(sizeof(EchoModule));
|
||||
pMod->interp = interp;
|
||||
pMod->db = db;
|
||||
rc = sqlite3_create_module_v2(
|
||||
db, "echo", &echoModule, (void*)pMod, moduleDestroy
|
||||
);
|
||||
@@ -1384,6 +1389,7 @@ static int SQLITE_TCLAPI register_echo_module(
|
||||
if( rc==SQLITE_OK ){
|
||||
pMod = sqlite3_malloc(sizeof(EchoModule));
|
||||
pMod->interp = interp;
|
||||
pMod->db = db;
|
||||
rc = sqlite3_create_module_v2(db, "echo_v2",
|
||||
&echoModuleV2, (void*)pMod, moduleDestroy
|
||||
);
|
||||
|
Reference in New Issue
Block a user