Lines Matching refs:pFKey

186   FKey *pFKey,                    /* Foreign key to find index for */  in sqlite3FkLocateIndex()  argument
192 int nCol = pFKey->nCol; /* Number of columns in parent key */ in sqlite3FkLocateIndex()
193 char *zKey = pFKey->aCol[0].zCol; /* Name of left-most parent key column */ in sqlite3FkLocateIndex()
242 for(i=0; i<nCol; i++) aiCol[i] = pFKey->aCol[i].iFrom; in sqlite3FkLocateIndex()
268 if( sqlite3StrICmp(pFKey->aCol[j].zCol, zIdxCol)==0 ){ in sqlite3FkLocateIndex()
269 if( aiCol ) aiCol[i] = pFKey->aCol[j].iFrom; in sqlite3FkLocateIndex()
284 pFKey->pFrom->zName, pFKey->zTo); in sqlite3FkLocateIndex()
325 FKey *pFKey, /* Foreign key constraint */ in fkLookupParent() argument
337 (!pFKey->isDeferred in fkLookupParent()
350 sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, iOk); in fkLookupParent()
353 for(i=0; i<pFKey->nCol; i++){ in fkLookupParent()
354 int iReg = sqlite3TableColumnToStorage(pFKey->pFrom,aiCol[i]) + regData + 1; in fkLookupParent()
371 sqlite3TableColumnToStorage(pFKey->pFrom,aiCol[0])+1+regData, regTemp); in fkLookupParent()
379 if( pTab==pFKey->pFrom && nIncr==1 ){ in fkLookupParent()
391 int nCol = pFKey->nCol; in fkLookupParent()
398 sqlite3TableColumnToStorage(pFKey->pFrom, aiCol[i])+1+regData, in fkLookupParent()
412 if( pTab==pFKey->pFrom && nIncr==1 ){ in fkLookupParent()
415 int iChild = sqlite3TableColumnToStorage(pFKey->pFrom,aiCol[i]) in fkLookupParent()
440 if( !pFKey->isDeferred && !(pParse->db->flags & SQLITE_DeferFKs) in fkLookupParent()
452 if( nIncr>0 && pFKey->isDeferred==0 ){ in fkLookupParent()
455 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); in fkLookupParent()
552 FKey *pFKey, /* The foreign key linking pSrc to pTab */ in fkScanChildren() argument
566 assert( pIdx==0 || pIdx->nKeyCol==pFKey->nCol ); in fkScanChildren()
567 assert( pIdx!=0 || pFKey->nCol==1 ); in fkScanChildren()
571 iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0); in fkScanChildren()
583 for(i=0; i<pFKey->nCol; i++){ in fkScanChildren()
592 iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom; in fkScanChildren()
594 zCol = pFKey->pFrom->aCol[iCol].zCnName; in fkScanChildren()
614 if( pTab==pFKey->pFrom && nIncr>0 ){ in fkScanChildren()
649 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); in fkScanChildren()
709 FKey *pFKey; in sqlite3FkClearTriggerCache() local
711 for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pFKey->pNextFrom){ in sqlite3FkClearTriggerCache()
712 fkTriggerDelete(db, pFKey->apTrigger[0]); pFKey->apTrigger[0] = 0; in sqlite3FkClearTriggerCache()
713 fkTriggerDelete(db, pFKey->apTrigger[1]); pFKey->apTrigger[1] = 0; in sqlite3FkClearTriggerCache()
750 for(p=pTab->u.tab.pFKey; p; p=p->pNextFrom){ in sqlite3FkDropTable()
854 static int isSetNullAction(Parse *pParse, FKey *pFKey){ in isSetNullAction() argument
858 if( (p==pFKey->apTrigger[0] && pFKey->aAction[0]==OE_SetNull) in isSetNullAction()
859 || (p==pFKey->apTrigger[1] && pFKey->aAction[1]==OE_SetNull) in isSetNullAction()
896 FKey *pFKey; /* Used to iterate through FKs */ in sqlite3FkCheck() local
913 for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pFKey->pNextFrom){ in sqlite3FkCheck()
923 && sqlite3_stricmp(pTab->zName, pFKey->zTo)!=0 in sqlite3FkCheck()
924 && fkChildIsModified(pTab, pFKey, aChange, bChngRowid)==0 in sqlite3FkCheck()
934 pTo = sqlite3FindTable(db, pFKey->zTo, zDb); in sqlite3FkCheck()
936 pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb); in sqlite3FkCheck()
938 if( !pTo || sqlite3FkLocateIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){ in sqlite3FkCheck()
950 int iJump = sqlite3VdbeCurrentAddr(v) + pFKey->nCol + 1; in sqlite3FkCheck()
951 for(i=0; i<pFKey->nCol; i++){ in sqlite3FkCheck()
953 iFromCol = pFKey->aCol[i].iFrom; in sqlite3FkCheck()
954 iReg = sqlite3TableColumnToStorage(pFKey->pFrom,iFromCol) + regOld+1; in sqlite3FkCheck()
957 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, -1); in sqlite3FkCheck()
961 assert( pFKey->nCol==1 || (aiFree && pIdx) ); in sqlite3FkCheck()
966 iCol = pFKey->aCol[0].iFrom; in sqlite3FkCheck()
969 for(i=0; i<pFKey->nCol; i++){ in sqlite3FkCheck()
997 fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1, bIgnore); in sqlite3FkCheck()
999 if( regNew!=0 && !isSetNullAction(pParse, pFKey) ){ in sqlite3FkCheck()
1008 fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1, bIgnore); in sqlite3FkCheck()
1016 for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){ in sqlite3FkCheck()
1021 if( aChange && fkParentIsModified(pTab, pFKey, aChange, bChngRowid)==0 ){ in sqlite3FkCheck()
1025 if( !pFKey->isDeferred && !(db->flags & SQLITE_DeferFKs) in sqlite3FkCheck()
1034 if( sqlite3FkLocateIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ){ in sqlite3FkCheck()
1038 assert( aiCol || pFKey->nCol==1 ); in sqlite3FkCheck()
1045 pItem->pTab = pFKey->pFrom; in sqlite3FkCheck()
1046 pItem->zName = pFKey->pFrom->zName; in sqlite3FkCheck()
1051 fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1); in sqlite3FkCheck()
1054 int eAction = pFKey->aAction[aChange!=0]; in sqlite3FkCheck()
1055 fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1); in sqlite3FkCheck()
1073 if( !pFKey->isDeferred && eAction!=OE_Cascade && eAction!=OE_SetNull ){ in sqlite3FkCheck()
1098 for(p=pTab->u.tab.pFKey; p; p=p->pNextFrom){ in sqlite3FkOldmask()
1153 bHaveFK = (sqlite3FkReferences(pTab) || pTab->u.tab.pFKey); in sqlite3FkRequired()
1160 for(p=pTab->u.tab.pFKey; p; p=p->pNextFrom){ in sqlite3FkRequired()
1211 FKey *pFKey, /* Foreign key to get action for */ in fkActionTrigger() argument
1219 action = pFKey->aAction[iAction]; in fkActionTrigger()
1223 pTrigger = pFKey->apTrigger[iAction]; in fkActionTrigger()
1237 if( sqlite3FkLocateIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ) return 0; in fkActionTrigger()
1238 assert( aiCol || pFKey->nCol==1 ); in fkActionTrigger()
1240 for(i=0; i<pFKey->nCol; i++){ in fkActionTrigger()
1248 iFromCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom; in fkActionTrigger()
1254 sqlite3TokenInit(&tFromCol, pFKey->pFrom->aCol[iFromCol].zCnName); in fkActionTrigger()
1292 Column *pCol = pFKey->pFrom->aCol + iFromCol; in fkActionTrigger()
1299 pDflt = sqlite3ColumnExpr(pFKey->pFrom, pCol); in fkActionTrigger()
1315 zFrom = pFKey->pFrom->zName; in fkActionTrigger()
1394 pFKey->apTrigger[iAction] = pTrigger; in fkActionTrigger()
1418 FKey *pFKey; /* Iterator variable */ in sqlite3FkActions() local
1419 for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){ in sqlite3FkActions()
1420 if( aChange==0 || fkParentIsModified(pTab, pFKey, aChange, bChngRowid) ){ in sqlite3FkActions()
1421 Trigger *pAct = fkActionTrigger(pParse, pTab, pFKey, pChanges); in sqlite3FkActions()
1438 FKey *pFKey; /* Iterator variable */ in sqlite3FkDelete() local
1443 for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){ in sqlite3FkDelete()
1448 if( pFKey->pPrevTo ){ in sqlite3FkDelete()
1449 pFKey->pPrevTo->pNextTo = pFKey->pNextTo; in sqlite3FkDelete()
1451 void *p = (void *)pFKey->pNextTo; in sqlite3FkDelete()
1452 const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo); in sqlite3FkDelete()
1455 if( pFKey->pNextTo ){ in sqlite3FkDelete()
1456 pFKey->pNextTo->pPrevTo = pFKey->pPrevTo; in sqlite3FkDelete()
1463 assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 ); in sqlite3FkDelete()
1467 fkTriggerDelete(db, pFKey->apTrigger[0]); in sqlite3FkDelete()
1468 fkTriggerDelete(db, pFKey->apTrigger[1]); in sqlite3FkDelete()
1471 pNext = pFKey->pNextFrom; in sqlite3FkDelete()
1472 sqlite3DbFree(db, pFKey); in sqlite3FkDelete()