diff options
Diffstat (limited to 'ext/sqlite/libsqlite/src/trigger.c')
-rw-r--r-- | ext/sqlite/libsqlite/src/trigger.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/sqlite/libsqlite/src/trigger.c b/ext/sqlite/libsqlite/src/trigger.c index 82b679755a..8442bb5dd8 100644 --- a/ext/sqlite/libsqlite/src/trigger.c +++ b/ext/sqlite/libsqlite/src/trigger.c @@ -65,8 +65,8 @@ void sqliteBeginTrigger( */ if( sqlite_malloc_failed ) goto trigger_cleanup; assert( pTableName->nSrc==1 ); - if( pParse->initFlag - && sqliteFixInit(&sFix, pParse, pParse->iDb, "trigger", pName) + if( db->init.busy + && sqliteFixInit(&sFix, pParse, db->init.iDb, "trigger", pName) && sqliteFixSrcList(&sFix, pTableName) ){ goto trigger_cleanup; @@ -76,7 +76,7 @@ void sqliteBeginTrigger( goto trigger_cleanup; } iDb = isTemp ? 1 : tab->iDb; - if( iDb>=2 && !pParse->initFlag ){ + if( iDb>=2 && !db->init.busy ){ sqliteErrorMsg(pParse, "triggers may not be added to auxiliary " "database %s", db->aDb[tab->iDb].zName); goto trigger_cleanup; @@ -181,8 +181,8 @@ void sqliteFinishTrigger( /* if we are not initializing, and this trigger is not on a TEMP table, ** build the sqlite_master entry */ - if( !pParse->initFlag ){ - static VdbeOp insertTrig[] = { + if( !db->init.busy ){ + static VdbeOpList insertTrig[] = { { OP_NewRecno, 0, 0, 0 }, { OP_String, 0, 0, "trigger" }, { OP_String, 0, 0, 0 }, /* 2: trigger name */ @@ -450,7 +450,7 @@ void sqliteDropTriggerPtr(Parse *pParse, Trigger *pTrigger, int nested){ */ if( pTable!=0 && !nested && (v = sqliteGetVdbe(pParse))!=0 ){ int base; - static VdbeOp dropTrigger[] = { + static VdbeOpList dropTrigger[] = { { OP_Rewind, 0, ADDR(9), 0}, { OP_String, 0, 0, 0}, /* 1 */ { OP_Column, 0, 1, 0}, @@ -746,7 +746,9 @@ int sqliteCodeRowTrigger( sqliteExprIfFalse(pParse, whenExpr, endTrigger, 1); sqliteExprDelete(whenExpr); + sqliteVdbeAddOp(pParse->pVdbe, OP_ContextPush, 0, 0); codeTriggerProgram(pParse, pTrigger->step_list, orconf); + sqliteVdbeAddOp(pParse->pVdbe, OP_ContextPop, 0, 0); /* Pop the entry off the trigger stack */ pParse->trigStack = pParse->trigStack->pNext; |