/**
  * Gets the SQL snippet of a qualified column name for the given field name.
  *
  * @param string $field The field name.
  * @param ClassMetadata $class The class that declares this field. The table this class is
  *                             mapped to must own the column for the given field.
  * @param string $alias
  */
 protected function _getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r')
 {
     $columnName = $class->columnNames[$field];
     $sql = $this->_getSQLTableAlias($class->name, $alias == 'r' ? '' : $alias) . '.' . $class->getQuotedColumnName($field, $this->_platform);
     $columnAlias = $this->_platform->getSQLResultCasing($columnName . $this->_sqlAliasCounter++);
     $this->_rsm->addFieldResult($alias, $columnAlias, $field);
     return "{$sql} AS {$columnAlias}";
 }
 public function getEntityHistory($className, $id)
 {
     if (!$this->metadataFactory->isAudited($className)) {
         throw new NotAuditedException($className);
     }
     /** @var ClassMetadataInfo|ClassMetadata $class */
     $class = $this->em->getClassMetadata($className);
     $tableName = $this->config->getTableName($class);
     if (!is_array($id)) {
         $id = array($class->identifier[0] => $id);
     }
     $whereId = array();
     foreach ($class->identifier as $idField) {
         if (isset($class->fieldMappings[$idField])) {
             $columnName = $class->fieldMappings[$idField]['columnName'];
         } else {
             if (isset($class->associationMappings[$idField])) {
                 $columnName = $class->associationMappings[$idField]['joinColumns'][0];
             } else {
                 continue;
             }
         }
         $whereId[] = "{$columnName} = ?";
     }
     $whereSQL = implode(' AND ', $whereId);
     $columnList = array($this->config->getRevisionFieldName());
     $columnMap = array();
     foreach ($class->fieldNames as $columnName => $field) {
         $type = Type::getType($class->fieldMappings[$field]['type']);
         $columnList[] = $type->convertToPHPValueSQL($this->quoteStrategy->getColumnName($field, $class, $this->platform), $this->platform) . ' AS ' . $this->platform->quoteSingleIdentifier($field);
         $columnMap[$field] = $this->platform->getSQLResultCasing($columnName);
     }
     foreach ($class->associationMappings as $assoc) {
         if (($assoc['type'] & ClassMetadata::TO_ONE) == 0 || !$assoc['isOwningSide']) {
             continue;
         }
         foreach ($assoc['targetToSourceKeyColumns'] as $sourceCol) {
             $columnList[] = $sourceCol;
             $columnMap[$sourceCol] = $this->platform->getSQLResultCasing($sourceCol);
         }
     }
     $values = array_values($id);
     $query = "SELECT " . implode(', ', $columnList) . " FROM " . $tableName . " e WHERE " . $whereSQL . " ORDER BY e.rev DESC";
     $stmt = $this->em->getConnection()->executeQuery($query, $values);
     $result = array();
     while ($row = $stmt->fetch(Query::HYDRATE_ARRAY)) {
         $rev = $row[$this->config->getRevisionFieldName()];
         unset($row[$this->config->getRevisionFieldName()]);
         $result[] = $this->createEntity($class->name, $columnMap, $row, $rev);
     }
     return $result;
 }
 public function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null)
 {
     // 1 ) Concatenate column name and counter
     // 2 ) Trim the column alias to the maximum identifier length of the platform.
     //     If the alias is to long, characters are cut off from the beginning.
     // 3 ) Strip non alphanumeric characters
     // 4 ) Prefix with "_" if the result its numeric
     $columnName = $columnName . '_' . $counter;
     $columnName = substr($columnName, -$platform->getMaxIdentifierLength());
     $columnName = preg_replace('/[^A-Za-z0-9_]/', '', $columnName);
     $columnName = is_numeric($columnName) ? '_' . $columnName : $columnName;
     return $platform->getSQLResultCasing($columnName);
 }
 protected function addAssociationsFromClass(Doctrine\ORM\Mapping\ClassMetadata $class, $alias, $columnAliasMap)
 {
     foreach ($class->associationMappings as $fieldName => $associationMapping) {
         if ($class->isInheritedAssociation($fieldName)) {
             continue;
         }
         if (!$associationMapping['isOwningSide'] || !$associationMapping['type'] & ClassMetadata::TO_ONE) {
             continue;
         }
         if (empty($associationMapping['joinColumns'])) {
             // todo: joinTableColumns
             continue;
         }
         foreach ($associationMapping['joinColumns'] as $joinColumn) {
             $columnName = $joinColumn['name'];
             $columnAlias = $this->platform->getSQLResultCasing($columnAliasMap[$columnName]);
             if (isset($this->metaMappings[$columnAlias])) {
                 throw new \InvalidArgumentException("The column '{$columnAlias}' conflicts with another column in the mapper.");
             }
             $this->addMetaResult($alias, $columnAlias, $columnName, isset($associationMapping['id']) && $associationMapping['id'] === true);
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null)
 {
     return $platform->getSQLResultCasing($columnName . $counter);
 }
 /**
  * {@inheritdoc}
  */
 public function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null)
 {
     // Trim the column alias to the maximum identifier length of the platform.
     // If the alias is to long, characters are cut off from the beginning.
     // And strip non alphanumeric characters
     $columnName = $columnName . $counter;
     $columnName = substr($columnName, -$platform->getMaxIdentifierLength());
     $columnName = preg_replace('/[^A-Za-z0-9_]/', '', $columnName);
     return $platform->getSQLResultCasing($columnName);
 }
 /**
  * Gets an SQL column alias for a column name.
  *
  * @param string $columnName
  * @return string
  */
 public function getSQLColumnAlias($columnName)
 {
     // Trim the column alias to the maximum identifier length of the platform.
     // If the alias is to long, characters are cut off from the beginning.
     return $this->_platform->getSQLResultCasing(substr($columnName . $this->_sqlAliasCounter++, -$this->_platform->getMaxIdentifierLength()));
 }