void CRUCache::FetchNonInvolvedMVsMetadata() { DSListPosition tpos = tableList_.GetHeadPosition(); while (NULL != tpos) { CRUTbl *pTbl = tableList_.GetNext(tpos); // Retrieve the table's private dependency list CDDUIDTripleList &privTblList = pTbl->GetUIDsOfAllMVsUsingMe(); DSListPosition mvpos = privTblList.GetHeadPosition(); while (NULL != mvpos) { CDDUIDTriple &uidt = privTblList.GetNext(mvpos); CRUMV *pMV = GetMV(uidt.objUID); if (NULL == pMV) { // The MV is non-involved, fetch the DD object CDDMV *pddMV = GetDDMVByUID(uidt); // If the MV is not ON REQUEST, skip it if (CDDObject::eON_REQUEST != pddMV->GetRefreshType()) { continue; } pMV = FetchSingleNonInvolvedMV(pddMV); } if (FALSE == pMV->IsInvolved()) { // If the MV is involved, the pointer exists already pTbl->AddRefToUsingMV(pMV); } } } }