Fix some authorization callback problems.

FossilOrigin-Name: 8a746fbfd51f70f56e25ade59df49d2dc03c131c
diff --git a/src/auth.c b/src/auth.c
index 13d5ba5..4e5bd16 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -113,36 +113,34 @@
   int iSrc;             /* Index in pTabList->a[] of table being read */
   const char *zDBase;   /* Name of database being accessed */
   int iDb;              /* The index of the database the expression refers to */
+  int iCol;             /* Index of column in table */
 
   if( db->xAuth==0 ) return;
-  assert( pExpr->op==TK_COLUMN );
   iDb = sqlite3SchemaToIndex(pParse->db, pSchema);
   if( iDb<0 ){
     /* An attempt to read a column out of a subquery or other
     ** temporary table. */
     return;
   }
-  if( pTabList ){
+
+  assert( pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER );
+  if( pExpr->op==TK_TRIGGER ){
+    pTab = pParse->pTriggerTab;
+  }else{
+    assert( pTabList );
     for(iSrc=0; iSrc<pTabList->nSrc; iSrc++){
       if( pExpr->iTable==pTabList->a[iSrc].iCursor ){
         pTab = pTabList->a[iSrc].pTab;
-	break;
+        break;
       }
     }
   }
-  if( !pTab ){
-    TriggerStack *pStack = pParse->trigStack;
-    if( ALWAYS(pStack) ){
-      /* This must be an attempt to read the NEW or OLD pseudo-tables
-      ** of a trigger.  */
-      assert( pExpr->iTable==pStack->newIdx || pExpr->iTable==pStack->oldIdx );
-      pTab = pStack->pTab;
-    }
-  }
+  iCol = pExpr->iColumn;
   if( NEVER(pTab==0) ) return;
-  if( pExpr->iColumn>=0 ){
-    assert( pExpr->iColumn<pTab->nCol );
-    zCol = pTab->aCol[pExpr->iColumn].zName;
+
+  if( iCol>=0 ){
+    assert( iCol<pTab->nCol );
+    zCol = pTab->aCol[iCol].zName;
   }else if( pTab->iPKey>=0 ){
     assert( pTab->iPKey<pTab->nCol );
     zCol = pTab->aCol[pTab->iPKey].zName;
diff --git a/src/expr.c b/src/expr.c
index 959bc22..d5dda96 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -2561,10 +2561,10 @@
     case TK_TRIGGER: {
       int iVal = pExpr->iTable * (pExpr->pTab->nCol+1) + 1 + pExpr->iColumn;
       sqlite3VdbeAddOp2(v, OP_Param, iVal, target);
-      VdbeComment((v, "%s.%s -> $%d", 
-        (pExpr->iTable ? "new" : "old"), 
+      VdbeComment((v, "%s.%s -> $%d",
+        (pExpr->iTable ? "new" : "old"),
         (pExpr->iColumn<0 ? "rowid" : pExpr->pTab->aCol[pExpr->iColumn].zName),
-	target
+        target
       ));
       break;
     }
diff --git a/src/resolve.c b/src/resolve.c
index 1fe885f..2c4d4f2 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -137,7 +137,7 @@
   struct SrcList_item *pMatch = 0;  /* The matching pSrcList item */
   NameContext *pTopNC = pNC;        /* First namecontext in the list */
   Schema *pSchema = 0;              /* Schema of the expression */
-  int isTrigger = 0;                /* True if a new.* or old.* reference. */
+  int isTrigger = 0;
 
   assert( pNC );     /* the name context cannot be NULL. */
   assert( zCol );    /* The Z in X.Y.Z cannot be NULL */
@@ -240,22 +240,35 @@
         int iCol;
         pSchema = pTab->pSchema;
         cntTab++;
-        isTrigger = 1;
-        for(iCol=0; iCol<pTab->nCol; iCol++){
-          Column *pCol = &pTab->aCol[iCol];
-          if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
-            cnt++;
-            pExpr->iColumn = iCol==pTab->iPKey ? -1 : (i16)iCol;
-            testcase( iCol==31 );
-            testcase( iCol==32 );
-            if( iCol>=32 ){
-              *piColMask = 0xffffffff;
-            }else{
-              *piColMask |= ((u32)1)<<iCol;
+        if( sqlite3IsRowid(zCol) ){
+          iCol = -1;
+        }else{
+          for(iCol=0; iCol<pTab->nCol; iCol++){
+            Column *pCol = &pTab->aCol[iCol];
+            if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
+              testcase( iCol==31 );
+              testcase( iCol==32 );
+              if( iCol>=32 ){
+                *piColMask = 0xffffffff;
+              }else{
+                *piColMask |= ((u32)1)<<iCol;
+              }
+              if( iCol==pTab->iPKey ){
+                iCol = -1;
+              }
+              break;
             }
-            break;
           }
         }
+        if( iCol<pTab->nCol ){
+          cnt++;
+          if( iCol<0 ){
+            pExpr->affinity = SQLITE_AFF_INTEGER;
+          }
+          pExpr->iColumn = iCol;
+          pExpr->pTab = pTab;
+          isTrigger = 1;
+        }
       }
     }
 #endif /* !defined(SQLITE_OMIT_TRIGGER) */
@@ -366,7 +379,7 @@
   pExpr->pLeft = 0;
   sqlite3ExprDelete(db, pExpr->pRight);
   pExpr->pRight = 0;
-  pExpr->op = TK_COLUMN;
+  pExpr->op = (isTrigger ? TK_TRIGGER : TK_COLUMN);
 lookupname_end:
   if( cnt==1 ){
     assert( pNC!=0 );
@@ -379,10 +392,6 @@
       if( pTopNC==pNC ) break;
       pTopNC = pTopNC->pNext;
     }
-    if( isTrigger ){
-      pExpr->pTab = pParse->pTriggerTab;
-      pExpr->op = TK_TRIGGER;
-    }
     return WRC_Prune;
   } else {
     return WRC_Abort;
diff --git a/src/trigger.c b/src/trigger.c
index 7093cbc..8442ec2 100644
--- a/src/trigger.c
+++ b/src/trigger.c
@@ -531,7 +531,7 @@
     const char *zDb = db->aDb[iDb].zName;
     const char *zTab = SCHEMA_TABLE(iDb);
     if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER;
-    if( sqlite3AuthCheck(pParse, code, pTrigger->name, pTable->zName, zDb) ||
+    if( sqlite3AuthCheck(pParse, code, pTrigger->zName, pTable->zName, zDb) ||
       sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
       return;
     }
@@ -819,9 +819,7 @@
   pSubParse->db = db;
   pSubParse->pTriggerTab = pTab;
   pSubParse->pRoot = pRoot;
-
-  /* Push an entry on to the auth context stack */
-  sqlite3AuthContextPush(pParse, &sContext, pTrigger->name);
+  pSubParse->zAuthContext = pTrigger->zName;
 
   v = sqlite3GetVdbe(pSubParse);
   if( v ){
@@ -879,8 +877,6 @@
   }
   sqlite3StackFree(db, pSubParse);
 
-  /* Pop the entry off the authorization stack */
-  sqlite3AuthContextPop(&sContext);
   return pC;
 }