/** @override */
 protected function _getSelectColumnListSQL()
 {
     $columnList = parent::_getSelectColumnListSQL();
     // Append discriminator column
     $discrColumn = $this->_class->discriminatorColumn['name'];
     $columnList .= ", {$discrColumn}";
     $rootClass = $this->_em->getClassMetadata($this->_class->rootEntityName);
     $tableAlias = $this->_getSQLTableAlias($rootClass);
     $resultColumnName = $this->_platform->getSQLResultCasing($discrColumn);
     $this->_resultColumnNames[$resultColumnName] = $discrColumn;
     foreach ($this->_class->subClasses as $subClassName) {
         $subClass = $this->_em->getClassMetadata($subClassName);
         // Append subclass columns
         foreach ($subClass->fieldMappings as $fieldName => $mapping) {
             if (!isset($mapping['inherited'])) {
                 $columnList .= ', ' . $this->_getSelectColumnSQL($fieldName, $subClass);
             }
         }
         // Append subclass foreign keys
         foreach ($subClass->associationMappings as $assoc) {
             if ($assoc->isOwningSide && $assoc->isOneToOne() && !isset($subClass->inheritedAssociationFields[$assoc->sourceFieldName])) {
                 foreach ($assoc->targetToSourceKeyColumns as $srcColumn) {
                     $columnAlias = $srcColumn . $this->_sqlAliasCounter++;
                     $columnList .= ', ' . $tableAlias . ".{$srcColumn} AS {$columnAlias}";
                     $resultColumnName = $this->_platform->getSQLResultCasing($columnAlias);
                     if (!isset($this->_resultColumnNames[$resultColumnName])) {
                         $this->_resultColumnNames[$resultColumnName] = $srcColumn;
                     }
                 }
             }
         }
     }
     return $columnList;
 }