//--------------------------------------------------------------------------- // @function: // CPartInfo::CPartInfoEntry::PpartinfoentryAddRemappedKeys // // @doc: // Create a copy of the current object, and add a set of remapped // part keys to this entry, using the existing keys and the given hashmap // //--------------------------------------------------------------------------- CPartInfo::CPartInfoEntry * CPartInfo::CPartInfoEntry::PpartinfoentryAddRemappedKeys ( IMemoryPool *pmp, CColRefSet *pcrs, HMUlCr *phmulcr ) { GPOS_ASSERT(NULL != pcrs); GPOS_ASSERT(NULL != phmulcr); DrgPpartkeys *pdrgppartkeys = CPartKeys::PdrgppartkeysCopy(pmp, m_pdrgppartkeys); const ULONG ulSize = m_pdrgppartkeys->UlLength(); for (ULONG ul = 0; ul < ulSize; ul++) { CPartKeys *ppartkeys = (*m_pdrgppartkeys)[ul]; if (ppartkeys->FOverlap(pcrs)) { pdrgppartkeys->Append(ppartkeys->PpartkeysRemap(pmp, phmulcr)); break; } } m_pmdid->AddRef(); CPartConstraint *ppartcnstrRel = m_ppartcnstrRel->PpartcnstrCopyWithRemappedColumns(pmp, phmulcr, false /*fMustExist*/); return GPOS_NEW(pmp) CPartInfoEntry(m_ulScanId, m_pmdid, pdrgppartkeys, ppartcnstrRel); }