/** * Build a new set (in memory) made of objects of the given set which are NOT present in the current set * * Limitations: * The objects inside the set must be written in the database since the comparison is based on their identifiers * Sets with several objects per row are NOT supported * * @param DBObjectSet $oObjectSet * @throws CoreException * * @return DBObjectSet The "delta" set. */ public function CreateDelta(DBObjectSet $oObjectSet) { if ($this->GetRootClass() != $oObjectSet->GetRootClass()) { throw new CoreException("Could not 'delta' two objects sets if they don't have the same root class"); } if (!$this->m_bLoaded) { $this->Load(); } $aId2Row = array(); $iCurrPos = $this->m_iCurrRow; // Save the cursor $idx = 0; while ($oObj = $this->Fetch()) { $aId2Row[$oObj->GetKey()] = $idx; $idx++; } $oNewSet = DBObjectSet::FromScratch($this->GetClass()); $oObjectSet->Seek(0); while ($oObject = $oObjectSet->Fetch()) { if (!array_key_exists($oObject->GetKey(), $aId2Row)) { $oNewSet->AddObject($oObject); } } $this->Seek($iCurrPos); // Restore the cursor return $oNewSet; }