aboutsummaryrefslogtreecommitdiff
path: root/src/trigger.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2003-04-17 22:57:53 +0000
committerdrh <drh@noemail.net>2003-04-17 22:57:53 +0000
commita69d91681d1fc36f40aa6602413d7db673c20992 (patch)
treec3e975c61c7cef5d928809fe69a5e8a515d815bf /src/trigger.c
parentd4d595f94c3c02d90872d90ec5bb43cf11426abc (diff)
downloadsqlite-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.c10
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;
}