Lines Matching refs:pFKey
15769 FKey *pFKey; /* Linked list of all foreign keys in this table */
15874 ** The list of all parents for child Table X is held at X.pFKey.
87505 FKey *pFKey;
87506 for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
87508 for(j=0; j<pFKey->nCol; j++){
87509 if( pFKey->aCol[j].iFrom==iCol ){
98668 if( (db->flags&SQLITE_ForeignKeys) && pNew->pFKey && pDflt ){
104256 FKey *pFKey = 0;
104284 nByte = sizeof(*pFKey) + (nCol-1)*sizeof(pFKey->aCol[0]) + pTo->n + 1;
104290 pFKey = sqlite3DbMallocZero(db, nByte );
104291 if( pFKey==0 ){
104294 pFKey->pFrom = p;
104295 pFKey->pNextFrom = p->pFKey;
104296 z = (char*)&pFKey->aCol[nCol];
104297 pFKey->zTo = z;
104302 pFKey->nCol = nCol;
104304 pFKey->aCol[0].iFrom = p->nCol-1;
104310 pFKey->aCol[i].iFrom = j;
104325 pFKey->aCol[i].zCol = z;
104331 pFKey->isDeferred = 0;
104332 pFKey->aAction[0] = (u8)(flags & 0xff); /* ON DELETE action */
104333 pFKey->aAction[1] = (u8)((flags >> 8 ) & 0xff); /* ON UPDATE action */
104337 pFKey->zTo, (void *)pFKey
104339 if( pNextTo==pFKey ){
104345 pFKey->pNextTo = pNextTo;
104346 pNextTo->pPrevTo = pFKey;
104351 p->pFKey = pFKey;
104352 pFKey = 0;
104355 sqlite3DbFree(db, pFKey);
104371 FKey *pFKey;
104372 if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return;
104374 pFKey->isDeferred = (u8)isDeferred;
109559 ** Given that pParent is the parent table for foreign key constraint pFKey,
109598 Table *pParent, /* Parent table of FK constraint pFKey */
109599 FKey *pFKey, /* Foreign key to find index for */
109601 int **paiCol /* OUT: Map of index columns in pFKey */
109605 int nCol = pFKey->nCol; /* Number of columns in parent key */
109606 char *zKey = pFKey->aCol[0].zCol; /* Name of left-most parent key column */
109644 ** column of pFKey, then this index is a winner. */
109653 for(i=0; i<nCol; i++) aiCol[i] = pFKey->aCol[i].iFrom;
109679 if( sqlite3StrICmp(pFKey->aCol[j].zCol, zIdxCol)==0 ){
109680 if( aiCol ) aiCol[i] = pFKey->aCol[j].iFrom;
109695 pFKey->pFrom->zName, pFKey->zTo);
109707 ** child table of foreign key constraint pFKey. If an SQL UPDATE is executed
109708 ** on the child table of pFKey, this function is invoked twice for each row
109734 Table *pTab, /* Parent table of FK pFKey */
109736 FKey *pFKey, /* Foreign key constraint */
109755 sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, iOk);
109758 for(i=0; i<pFKey->nCol; i++){
109783 if( pTab==pFKey->pFrom && nIncr==1 ){
109795 int nCol = pFKey->nCol;
109815 if( pTab==pFKey->pFrom && nIncr==1 ){
109841 if( !pFKey->isDeferred && !(pParse->db->flags & SQLITE_DeferFKs)
109853 if( nIncr>0 && pFKey->isDeferred==0 ){
109856 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
109921 ** from the parent table of foreign key constraint pFKey and, if pFKey is
109956 FKey *pFKey, /* The foreign key linking pSrc to pTab */
109970 assert( pIdx==0 || pIdx->nKeyCol==pFKey->nCol );
109971 assert( pIdx!=0 || pFKey->nCol==1 );
109975 iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0);
109987 for(i=0; i<pFKey->nCol; i++){
109996 iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
109998 zCol = pFKey->pFrom->aCol[iCol].zName;
110015 if( pTab==pFKey->pFrom && nIncr>0 ){
110051 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
110132 for(p=pTab->pFKey; p; p=p->pNextFrom){
110233 ** to trigger pFKey.
110235 static int isSetNullAction(Parse *pParse, FKey *pFKey){
110239 if( (p==pFKey->apTrigger[0] && pFKey->aAction[0]==OE_SetNull)
110240 || (p==pFKey->apTrigger[1] && pFKey->aAction[1]==OE_SetNull)
110277 FKey *pFKey; /* Used to iterate through FKs */
110293 for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
110294 Table *pTo; /* Parent table of foreign key pFKey */
110303 && sqlite3_stricmp(pTab->zName, pFKey->zTo)!=0
110304 && fkChildIsModified(pTab, pFKey, aChange, bChngRowid)==0
110314 pTo = sqlite3FindTable(db, pFKey->zTo, zDb);
110316 pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb);
110318 if( !pTo || sqlite3FkLocateIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){
110330 int iJump = sqlite3VdbeCurrentAddr(v) + pFKey->nCol + 1;
110331 for(i=0; i<pFKey->nCol; i++){
110332 int iReg = pFKey->aCol[i].iFrom + regOld + 1;
110335 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, -1);
110339 assert( pFKey->nCol==1 || (aiFree && pIdx) );
110344 iCol = pFKey->aCol[0].iFrom;
110347 for(i=0; i<pFKey->nCol; i++){
110375 fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1, bIgnore);
110377 if( regNew!=0 && !isSetNullAction(pParse, pFKey) ){
110386 fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1, bIgnore);
110394 for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
110395 Index *pIdx = 0; /* Foreign key index for pFKey */
110399 if( aChange && fkParentIsModified(pTab, pFKey, aChange, bChngRowid)==0 ){
110403 if( !pFKey->isDeferred && !(db->flags & SQLITE_DeferFKs)
110412 if( sqlite3FkLocateIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ){
110416 assert( aiCol || pFKey->nCol==1 );
110423 pItem->pTab = pFKey->pFrom;
110424 pItem->zName = pFKey->pFrom->zName;
110429 fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1);
110432 int eAction = pFKey->aAction[aChange!=0];
110433 fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1);
110451 if( !pFKey->isDeferred && eAction!=OE_Cascade && eAction!=OE_SetNull ){
110476 for(p=pTab->pFKey; p; p=p->pNextFrom){
110528 eRet = (sqlite3FkReferences(pTab) || pTab->pFKey);
110535 for(p=pTab->pFKey; p; p=p->pNextFrom){
110556 ** compiled on table pTab, which is the parent table of foreign-key pFKey.
110562 ** equivalent to the ON UPDATE or ON DELETE action specified by pFKey.
110567 ** For example, if pFKey is the foreign key and pTab is table "p" in
110586 FKey *pFKey, /* Foreign key to get action for */
110594 action = pFKey->aAction[iAction];
110598 pTrigger = pFKey->apTrigger[iAction];
110612 if( sqlite3FkLocateIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ) return 0;
110613 assert( aiCol || pFKey->nCol==1 );
110615 for(i=0; i<pFKey->nCol; i++){
110623 iFromCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
110629 sqlite3TokenInit(&tFromCol, pFKey->pFrom->aCol[iFromCol].zName);
110667 Expr *pDflt = pFKey->pFrom->aCol[iFromCol].pDflt;
110682 zFrom = pFKey->pFrom->zName;
110754 pFKey->apTrigger[iAction] = pTrigger;
110778 FKey *pFKey; /* Iterator variable */
110779 for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
110780 if( aChange==0 || fkParentIsModified(pTab, pFKey, aChange, bChngRowid) ){
110781 Trigger *pAct = fkActionTrigger(pParse, pTab, pFKey, pChanges);
110798 FKey *pFKey; /* Iterator variable */
110799 FKey *pNext; /* Copy of pFKey->pNextFrom */
110803 for(pFKey=pTab->pFKey; pFKey; pFKey=pNext){
110807 if( pFKey->pPrevTo ){
110808 pFKey->pPrevTo->pNextTo = pFKey->pNextTo;
110810 void *p = (void *)pFKey->pNextTo;
110811 const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
110814 if( pFKey->pNextTo ){
110815 pFKey->pNextTo->pPrevTo = pFKey->pPrevTo;
110822 assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 );
110826 fkTriggerDelete(db, pFKey->apTrigger[0]);
110827 fkTriggerDelete(db, pFKey->apTrigger[1]);
110830 pNext = pFKey->pNextFrom;
110831 sqlite3DbFree(db, pFKey);
112404 (0==pTab->pFKey && 0==sqlite3FkReferences(pTab)))
112949 if( (db->flags & SQLITE_ForeignKeys)!=0 && pDest->pFKey!=0 ){
116569 pFK = pTab->pFKey;
116628 if( pTab==0 || pTab->pFKey==0 ) continue;
116633 for(i=1, pFK=pTab->pFKey; pFK; i++, pFK=pFK->pNextFrom){
116655 for(i=1, pFK=pTab->pFKey; pFK; i++, pFK=pFK->pNextFrom){