Uploaded image for project: 'Doctrine CouchDB ODM'
  1. Doctrine CouchDB ODM
  2. CODM-31

UnitOfWork#doDetach does not remove a document from the identityMap - uses incorrect index


    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Labels:


      In UnitOfWork on line 656 the oid is used to index the identity map instead of the document id when detaching an object. This is probably due to an incomplete port from the ORM. The following change fixes the bug (I will make the change and request a merge):

      656: if (isset($this->identityMap[$oid])) {

      Should be:
      656: if (isset($this->identityMap[$this->documentIdentifiers[$oid]])) {

      Further suggestion

      Since the document id is guaranteed to be unique would it not be better to do away with the oid completely? It seems the following would be a relatively cheap substitute for the current getDocumentIdentifier() implementation (excluding the check that it is managed which is also currently done in this method):

      public function getDocumentIdentifier($document)
      $class = $this->dm->getClassMetadata(get_class($document));
      return $class->getIdentifierValue($document);

      Then all the arrays in the UnitOfWork can be indexed using the document id and the above method can be called to obtain that wherever spl_object_hash is currently used to obtain the $oid. (Of course, if running spl_object_hash is faster than retrieving the doc id as I suggest above then the current implementation is better.)


        There are no comments yet on this issue.


          • Assignee:
            beberlei Benjamin Eberlei
            marnusw Marnus Weststrate
          • Votes:
            0 Vote for this issue
            0 Start watching this issue


            • Created: