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