Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-1668

bug with reading cached annotations in Annotation driver

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Blocker Blocker
    • Resolution: Fixed
    • Affects Version/s: 2.2
    • Fix Version/s: 2.2.1
    • Component/s: Mapping Drivers
    • Security Level: All
    • Labels:
      None

      Description

      I had a problem with Class Table Inheritance on first call of a child entity it was working but if call another child in another instance it was not joining with the parent class. After some debugging i found the problem it was not detecting the annotation that is a parent entity to be joined in Doctrine\ORM\Mapping\Driver\AnnotationDriver when the function on line 479 isTransient($className) is called. So after more debugging i found the problem it is in

      is_int(key($classAnnotations))
      

      Looks like that after it is cached in and then the cache is read when it returns the array of annotations for the entity class the keys are returned as strings not as integer and if the key is '0' the the value that is_int returns is NULL so the check

       if ($classAnnotations && is_int(key($classAnnotations))) 
      

      fails and it does not foreach the the array of annotations.
      Also i found that you are making that check in a couple of places so I maid a quick fix for my self in the Doctrine\Common\Annotations\CachedReader which is if annotations are found that are cached before returning them i call array_values

      // Attempt to grab data from cache
              if (($data = $this->cache->fetch($cacheKey)) !== false) {
                  if (!$this->debug || $this->isCacheFresh($cacheKey, $class)) {
                      return array_values($data);
                  }
              }
      

      I am using APC cache.

        Activity

        victor Velkov created issue -
        Hide
        Benjamin Eberlei added a comment -

        Fixed

        Show
        Benjamin Eberlei added a comment - Fixed
        Benjamin Eberlei made changes -
        Field Original Value New Value
        Status Open [ 1 ] Resolved [ 5 ]
        Fix Version/s 2.2.1 [ 10194 ]
        Resolution Fixed [ 1 ]
        Benjamin Eberlei made changes -
        Workflow jira [ 13477 ] jira-feedback [ 15245 ]
        Benjamin Eberlei made changes -
        Workflow jira-feedback [ 15245 ] jira-feedback2 [ 17109 ]
        Benjamin Eberlei made changes -
        Workflow jira-feedback2 [ 17109 ] jira-feedback3 [ 19362 ]

        This list may be incomplete, as errors occurred whilst retrieving source from linked applications:

        • Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DDC-1668, expand=changesets[0:20].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            victor Velkov
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: