예제 #1
0
 /**
  * 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;
 }