diff options
author | drh <drh@noemail.net> | 2003-04-17 22:57:53 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2003-04-17 22:57:53 +0000 |
commit | a69d91681d1fc36f40aa6602413d7db673c20992 (patch) | |
tree | c3e975c61c7cef5d928809fe69a5e8a515d815bf /src/trigger.c | |
parent | d4d595f94c3c02d90872d90ec5bb43cf11426abc (diff) | |
download | sqlite-a69d91681d1fc36f40aa6602413d7db673c20992.tar.gz sqlite-a69d91681d1fc36f40aa6602413d7db673c20992.zip |
Fix triggers to work in an ATTACHed database. Ticket #295. (CVS 915)
FossilOrigin-Name: 1e5e00fb73c308378efd034cb291caf338c9fe84
Diffstat (limited to 'src/trigger.c')
-rw-r--r-- | src/trigger.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/trigger.c b/src/trigger.c index 71a784aae..ca6dfa618 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -65,7 +65,7 @@ void sqliteCreateTrigger( if( !tab ){ goto trigger_cleanup; } - if( tab->iDb>=2 ){ + if( tab->iDb>=2 && !pParse->initFlag ){ sqliteErrorMsg(pParse, "triggers may not be added to auxiliary " "database %s", db->aDb[tab->iDb].zName); goto trigger_cleanup; @@ -124,6 +124,11 @@ void sqliteCreateTrigger( sqliteIdListDelete(pColumns); nt->foreach = foreach; nt->step_list = pStepList; + while( pStepList ){ + pStepList->pTrig = nt; + pStepList = pStepList->pNext; + } + pStepList = nt->step_list; /* if we are not initializing, and this trigger is not on a TEMP table, ** build the sqlite_master entry @@ -512,8 +517,10 @@ static int codeTriggerProgram( while( pTriggerStep ){ int saveNTab = pParse->nTab; + int saveUseDb = pParse->useDb; orconf = (orconfin == OE_Default)?pTriggerStep->orconf:orconfin; pParse->trigStack->orconf = orconf; + pParse->useDb = pTriggerStep->pTrig->iDb; switch( pTriggerStep->op ){ case TK_SELECT: { Select * ss = sqliteSelectDup(pTriggerStep->pSelect); @@ -554,6 +561,7 @@ static int codeTriggerProgram( assert(0); } pParse->nTab = saveNTab; + pParse->useDb = saveUseDb; pTriggerStep = pTriggerStep->pNext; } |