protected function getCacheId()
 {
     $hints = $this->query->getHints();
     ksort($hints);
     $types = array();
     foreach ($this->query->getParameters() as $parameter) {
         $types[$parameter->getName()] = $parameter->getType();
     }
     $platform = $this->query->getEntityManager()->getConnection()->getDatabasePlatform()->getName();
     return md5(serialize(['dql' => $this->query->getDQL(), 'platform' => $platform, 'filters' => $this->query->getEntityManager()->hasFilters() ? $this->query->getEntityManager()->getFilters()->getHash() : '', 'firstResult' => $this->query->getFirstResult(), 'maxResult' => $this->query->getMaxResults(), 'hydrationMode' => $this->query->getHydrationMode(), 'types' => $types, 'hints' => $hints, 'salt' => __CLASS__ . 'V1']));
 }
Esempio n. 2
0
 /**
  * {@inheritdoc}
  */
 public function walkSelectClause($selectClause)
 {
     $sql = 'SELECT ' . ($selectClause->isDistinct ? 'DISTINCT ' : '');
     $sqlSelectExpressions = array_filter(array_map(array($this, 'walkSelectExpression'), $selectClause->selectExpressions));
     if ($this->query->getHint(Query::HINT_INTERNAL_ITERATION) == true && $selectClause->isDistinct) {
         $this->query->setHint(self::HINT_DISTINCT, true);
     }
     $addMetaColumns = !$this->query->getHint(Query::HINT_FORCE_PARTIAL_LOAD) && $this->query->getHydrationMode() == Query::HYDRATE_OBJECT || $this->query->getHydrationMode() != Query::HYDRATE_OBJECT && $this->query->getHint(Query::HINT_INCLUDE_META_COLUMNS);
     foreach ($this->selectedClasses as $selectedClass) {
         $class = $selectedClass['class'];
         $dqlAlias = $selectedClass['dqlAlias'];
         $resultAlias = $selectedClass['resultAlias'];
         // Register as entity or joined entity result
         if ($this->queryComponents[$dqlAlias]['relation'] === null) {
             $this->rsm->addEntityResult($class->name, $dqlAlias, $resultAlias);
         } else {
             $this->rsm->addJoinedEntityResult($class->name, $dqlAlias, $this->queryComponents[$dqlAlias]['parent'], $this->queryComponents[$dqlAlias]['relation']['fieldName']);
         }
         if ($class->isInheritanceTypeSingleTable() || $class->isInheritanceTypeJoined()) {
             // Add discriminator columns to SQL
             $rootClass = $this->em->getClassMetadata($class->rootEntityName);
             $tblAlias = $this->getSQLTableAlias($rootClass->getTableName(), $dqlAlias);
             $discrColumn = $rootClass->discriminatorColumn;
             $columnAlias = $this->getSQLColumnAlias($discrColumn['name']);
             $sqlSelectExpressions[] = $tblAlias . '.' . $discrColumn['name'] . ' AS ' . $columnAlias;
             $this->rsm->setDiscriminatorColumn($dqlAlias, $columnAlias);
             $this->rsm->addMetaResult($dqlAlias, $columnAlias, $discrColumn['fieldName']);
         }
         // Add foreign key columns to SQL, if necessary
         if (!$addMetaColumns && !$class->containsForeignIdentifier) {
             continue;
         }
         // Add foreign key columns of class and also parent classes
         foreach ($class->associationMappings as $assoc) {
             if (!($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE)) {
                 continue;
             } else {
                 if (!$addMetaColumns && !isset($assoc['id'])) {
                     continue;
                 }
             }
             $owningClass = isset($assoc['inherited']) ? $this->em->getClassMetadata($assoc['inherited']) : $class;
             $sqlTableAlias = $this->getSQLTableAlias($owningClass->getTableName(), $dqlAlias);
             foreach ($assoc['targetToSourceKeyColumns'] as $srcColumn) {
                 $columnAlias = $this->getSQLColumnAlias($srcColumn);
                 $sqlSelectExpressions[] = $sqlTableAlias . '.' . $srcColumn . ' AS ' . $columnAlias;
                 $this->rsm->addMetaResult($dqlAlias, $columnAlias, $srcColumn, isset($assoc['id']) && $assoc['id'] === true);
             }
         }
         // Add foreign key columns to SQL, if necessary
         if (!$addMetaColumns) {
             continue;
         }
         // Add foreign key columns of subclasses
         foreach ($class->subClasses as $subClassName) {
             $subClass = $this->em->getClassMetadata($subClassName);
             $sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias);
             foreach ($subClass->associationMappings as $assoc) {
                 // Skip if association is inherited
                 if (isset($assoc['inherited'])) {
                     continue;
                 }
                 if (!($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE)) {
                     continue;
                 }
                 foreach ($assoc['targetToSourceKeyColumns'] as $srcColumn) {
                     $columnAlias = $this->getSQLColumnAlias($srcColumn);
                     $sqlSelectExpressions[] = $sqlTableAlias . '.' . $srcColumn . ' AS ' . $columnAlias;
                     $this->rsm->addMetaResult($dqlAlias, $columnAlias, $srcColumn);
                 }
             }
         }
     }
     $sql .= implode(', ', $sqlSelectExpressions);
     return $sql;
 }