diff options
author | danielk1977 <danielk1977@noemail.net> | 2006-01-06 15:03:48 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2006-01-06 15:03:48 +0000 |
commit | aaf22685d74a5e394109ae63b81f324b66b349c3 (patch) | |
tree | a506d684679c06ba04008355f0a47d0565f2d782 /src/trigger.c | |
parent | 0739723d7628e4830b9d1b5ef1c3e5df78bfa622 (diff) | |
download | sqlite-aaf22685d74a5e394109ae63b81f324b66b349c3.tar.gz sqlite-aaf22685d74a5e394109ae63b81f324b66b349c3.zip |
Fix a crash caused by adding a trigger to a shared-schema and then deleting it
using a different connection. (CVS 2873)
FossilOrigin-Name: 19f93e135f1ff4f987d14afe74b955e119904017
Diffstat (limited to 'src/trigger.c')
-rw-r--r-- | src/trigger.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/trigger.c b/src/trigger.c index cd68f4497..fcb852d95 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -164,7 +164,7 @@ void sqlite3BeginTrigger( zName = 0; pTrigger->table = sqliteStrDup(pTableName->a[0].zName); pTrigger->pSchema = db->aDb[iDb].pSchema; - pTrigger->iTabDb = iTabDb; + pTrigger->pTabSchema = pTab->pSchema; pTrigger->op = op; pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER; pTrigger->pWhen = sqlite3ExprDup(pWhen); @@ -249,6 +249,7 @@ void sqlite3FinishTrigger( } if( db->init.busy ){ + int n; Table *pTab; Trigger *pDel; pDel = sqlite3HashInsert(&db->aDb[iDb].pSchema->trigHash, @@ -257,7 +258,8 @@ void sqlite3FinishTrigger( assert( sqlite3Tsd()->mallocFailed && pDel==pTrig ); goto triggerfinish_cleanup; } - pTab = sqlite3LocateTable(pParse,pTrig->table,db->aDb[pTrig->iTabDb].zName); + n = strlen(pTrig->table) + 1; + pTab = sqlite3HashFind(&pTrig->pTabSchema->tblHash, pTrig->table, n); assert( pTab!=0 ); pTrig->pNext = pTab->pTrigger; pTab->pTrigger = pTrig; @@ -467,7 +469,8 @@ drop_trigger_cleanup: ** is set on. */ static Table *tableOfTrigger(sqlite3 *db, Trigger *pTrigger){ - return sqlite3FindTable(db,pTrigger->table,db->aDb[pTrigger->iTabDb].zName); + int n = strlen(pTrigger->table) + 1; + return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table, n); } |