| 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)));
|
|
|
|
|