Index: third_party/sqlite/src/src/trigger.c |
diff --git a/third_party/sqlite/src/src/trigger.c b/third_party/sqlite/src/src/trigger.c |
index be490e923a323c8ffaba7b4eb8b01ea4c9e31feb..bdf964084bc5b786c77f0db54994cdd4ad26c52d 100644 |
--- a/third_party/sqlite/src/src/trigger.c |
+++ b/third_party/sqlite/src/src/trigger.c |
@@ -96,7 +96,6 @@ void sqlite3BeginTrigger( |
int iDb; /* The database to store the trigger in */ |
Token *pName; /* The unqualified db name */ |
DbFixer sFix; /* State vector for the DB fixer */ |
- int iTabDb; /* Index of the database holding pTab */ |
assert( pName1!=0 ); /* pName1->z might be NULL, but not pName1 itself */ |
assert( pName2!=0 ); |
@@ -209,13 +208,13 @@ void sqlite3BeginTrigger( |
" trigger on table: %S", pTableName, 0); |
goto trigger_cleanup; |
} |
- iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); |
#ifndef SQLITE_OMIT_AUTHORIZATION |
{ |
+ int iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); |
int code = SQLITE_CREATE_TRIGGER; |
- const char *zDb = db->aDb[iTabDb].zName; |
- const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb; |
+ const char *zDb = db->aDb[iTabDb].zDbSName; |
+ const char *zDbTrig = isTemp ? db->aDb[1].zDbSName : zDb; |
if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER; |
if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){ |
goto trigger_cleanup; |
@@ -287,8 +286,7 @@ void sqlite3FinishTrigger( |
pStepList->pTrig = pTrig; |
pStepList = pStepList->pNext; |
} |
- nameToken.z = pTrig->zName; |
- nameToken.n = sqlite3Strlen30(nameToken.z); |
+ sqlite3TokenInit(&nameToken, pTrig->zName); |
sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken); |
if( sqlite3FixTriggerStep(&sFix, pTrig->step_list) |
|| sqlite3FixExpr(&sFix, pTrig->pWhen) |
@@ -310,7 +308,7 @@ void sqlite3FinishTrigger( |
z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n); |
sqlite3NestedParse(pParse, |
"INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')", |
- db->aDb[iDb].zName, SCHEMA_TABLE(iDb), zName, |
+ db->aDb[iDb].zDbSName, MASTER_NAME, zName, |
pTrig->table, z); |
sqlite3DbFree(db, z); |
sqlite3ChangeCookie(pParse, iDb); |
@@ -324,7 +322,7 @@ void sqlite3FinishTrigger( |
assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); |
pTrig = sqlite3HashInsert(pHash, zName, pTrig); |
if( pTrig ){ |
- db->mallocFailed = 1; |
+ sqlite3OomFault(db); |
}else if( pLink->pSchema==pLink->pTabSchema ){ |
Table *pTab; |
pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table); |
@@ -499,7 +497,7 @@ void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){ |
assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) ); |
for(i=OMIT_TEMPDB; i<db->nDb; i++){ |
int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ |
- if( zDb && sqlite3StrICmp(db->aDb[j].zName, zDb) ) continue; |
+ if( zDb && sqlite3StrICmp(db->aDb[j].zDbSName, zDb) ) continue; |
assert( sqlite3SchemaMutexHeld(db, j, 0) ); |
pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName); |
if( pTrigger ) break; |
@@ -545,7 +543,7 @@ void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){ |
#ifndef SQLITE_OMIT_AUTHORIZATION |
{ |
int code = SQLITE_DROP_TRIGGER; |
- const char *zDb = db->aDb[iDb].zName; |
+ const char *zDb = db->aDb[iDb].zDbSName; |
const char *zTab = SCHEMA_TABLE(iDb); |
if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER; |
if( sqlite3AuthCheck(pParse, code, pTrigger->zName, pTable->zName, zDb) || |
@@ -561,7 +559,7 @@ void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){ |
if( (v = sqlite3GetVdbe(pParse))!=0 ){ |
sqlite3NestedParse(pParse, |
"DELETE FROM %Q.%s WHERE name=%Q AND type='trigger'", |
- db->aDb[iDb].zName, SCHEMA_TABLE(iDb), pTrigger->zName |
+ db->aDb[iDb].zDbSName, MASTER_NAME, pTrigger->zName |
); |
sqlite3ChangeCookie(pParse, iDb); |
sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->zName, 0); |
@@ -664,8 +662,10 @@ static SrcList *targetSrcList( |
pSrc->a[pSrc->nSrc-1].zName = sqlite3DbStrDup(db, pStep->zTarget); |
iDb = sqlite3SchemaToIndex(db, pStep->pTrig->pSchema); |
if( iDb==0 || iDb>=2 ){ |
+ const char *zDb; |
assert( iDb<db->nDb ); |
- pSrc->a[pSrc->nSrc-1].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zName); |
+ zDb = db->aDb[iDb].zDbSName; |
+ pSrc->a[pSrc->nSrc-1].zDatabase = sqlite3DbStrDup(db, zDb); |
} |
} |
return pSrc; |
@@ -879,7 +879,6 @@ static TriggerPrg *codeRowTrigger( |
} |
pProgram->nMem = pSubParse->nMem; |
pProgram->nCsr = pSubParse->nTab; |
- pProgram->nOnce = pSubParse->nOnce; |
pProgram->token = (void *)pTrigger; |
pPrg->aColmask[0] = pSubParse->oldmask; |
pPrg->aColmask[1] = pSubParse->newmask; |
@@ -952,8 +951,8 @@ void sqlite3CodeRowTriggerDirect( |
if( pPrg ){ |
int bRecursive = (p->zName && 0==(pParse->db->flags&SQLITE_RecTriggers)); |
- sqlite3VdbeAddOp3(v, OP_Program, reg, ignoreJump, ++pParse->nMem); |
- sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM); |
+ sqlite3VdbeAddOp4(v, OP_Program, reg, ignoreJump, ++pParse->nMem, |
+ (const char *)pPrg->pProgram, P4_SUBPROGRAM); |
VdbeComment( |
(v, "Call: %s.%s", (p->zName?p->zName:"fkey"), onErrorText(orconf))); |