From c2bbaa9ead8088697675c17396ed29d3dfd24944 Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Sat, 1 Jan 2011 18:53:22 +0100 Subject: [PATCH] DDC-117 - Slight changes in the patch and fixing inline comments. --- lib/Doctrine/ORM/Id/AssignedGenerator.php | 4 +-- .../ORM/Persisters/BasicEntityPersister.php | 1 - lib/Doctrine/ORM/Query/SqlWalker.php | 36 ++++++++++--------- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/Doctrine/ORM/Id/AssignedGenerator.php b/lib/Doctrine/ORM/Id/AssignedGenerator.php index e1981fe43..00aeaaa03 100644 --- a/lib/Doctrine/ORM/Id/AssignedGenerator.php +++ b/lib/Doctrine/ORM/Id/AssignedGenerator.php @@ -50,7 +50,7 @@ class AssignedGenerator extends AbstractIdGenerator $value = $class->getReflectionProperty($idField)->getValue($entity); if (isset($value)) { if (is_object($value)) { - // TODO: Single Id only, i enforce that. Compoite Key as Foreign Keys Primary Key part sounds ugly + // NOTE: Single Columns as associated identifiers only allowed - this constraint it is enforced. $identifier[$idField] = current($em->getUnitOfWork()->getEntityIdentifier($value)); } else { $identifier[$idField] = $value; @@ -64,7 +64,7 @@ class AssignedGenerator extends AbstractIdGenerator $value = $class->reflFields[$idField]->getValue($entity); if (isset($value)) { if (is_object($value)) { - // TODO: Single Id only, i enforce that. Compoite Key as Foreign Keys Primary Key part sounds ugly + // NOTE: Single Columns as associated identifiers only allowed - this constraint it is enforced. $identifier[$idField] = current($em->getUnitOfWork()->getEntityIdentifier($value)); } else { $identifier[$idField] = $value; diff --git a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php index 2673a1fd0..1684fef55 100644 --- a/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php @@ -1144,7 +1144,6 @@ class BasicEntityPersister } $conditionSql .= $this->_class->getQuotedColumnName($field, $this->_platform); } else if (isset($this->_class->associationMappings[$field])) { - // TODO: Composite Keys as Foreign Key PK? That would be super ugly! And should probably be disallowed ;) if (!$this->_class->associationMappings[$field]['isOwningSide']) { throw ORMException::invalidFindByInverseAssociation($this->_class->name, $field); } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index c745d56e6..3cf472000 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -994,24 +994,26 @@ class SqlWalker implements TreeWalker $this->_rsm->addFieldResult($dqlAlias, $columnAlias, $fieldName, $class->name); } - // Add double entry for association identifier columns to simplify hydrator code - foreach ($class->identifier AS $idField) { - if (isset($class->associationMappings[$idField])) { - if (isset($mapping['inherited'])) { - $tableName = $this->_em->getClassMetadata($mapping['inherited'])->table['name']; - } else { - $tableName = $class->table['name']; + if ($class->containsForeignIdentifier) { + // Add double entry for association identifier columns to simplify hydrator code + foreach ($class->identifier AS $idField) { + if (isset($class->associationMappings[$idField])) { + if (isset($mapping['inherited'])) { + $tableName = $this->_em->getClassMetadata($mapping['inherited'])->table['name']; + } else { + $tableName = $class->table['name']; + } + + if ($beginning) $beginning = false; else $sql .= ', '; + + $joinColumnName = $class->associationMappings[$idField]['joinColumns'][0]['name']; + $sqlTableAlias = $this->getSqlTableAlias($tableName, $dqlAlias); + $columnAlias = $this->getSqlColumnAlias($joinColumnName); + $sql .= $sqlTableAlias . '.' . $joinColumnName . ' AS ' . $columnAlias; + + $columnAlias = $this->_platform->getSQLResultCasing($columnAlias); + $this->_rsm->addMetaResult($dqlAlias, $columnAlias, $idField); } - - if ($beginning) $beginning = false; else $sql .= ', '; - - $joinColumnName = $class->associationMappings[$idField]['joinColumns'][0]['name']; - $sqlTableAlias = $this->getSqlTableAlias($tableName, $dqlAlias); - $columnAlias = $this->getSqlColumnAlias($joinColumnName); - $sql .= $sqlTableAlias . '.' . $joinColumnName . ' AS ' . $columnAlias; - - $columnAlias = $this->_platform->getSQLResultCasing($columnAlias); - $this->_rsm->addMetaResult($dqlAlias, $columnAlias, $idField); } }