1
0
mirror of synced 2025-02-11 17:59:27 +03:00

Small changes for code readability. Added type binding in JoinedSubclassPersister, which was missing. Fixes DDC-1316.

This commit is contained in:
Guilherme Blanco 2011-09-05 02:27:06 -03:00
parent f29c907f41
commit 666691f84f
5 changed files with 27 additions and 7 deletions

View File

@ -65,9 +65,11 @@ abstract class AbstractCollectionPersister
public function delete(PersistentCollection $coll) public function delete(PersistentCollection $coll)
{ {
$mapping = $coll->getMapping(); $mapping = $coll->getMapping();
if ( ! $mapping['isOwningSide']) { if ( ! $mapping['isOwningSide']) {
return; // ignore inverse side return; // ignore inverse side
} }
$sql = $this->_getDeleteSQL($coll); $sql = $this->_getDeleteSQL($coll);
$this->_conn->executeUpdate($sql, $this->_getDeleteSQLParameters($coll)); $this->_conn->executeUpdate($sql, $this->_getDeleteSQLParameters($coll));
} }
@ -96,9 +98,11 @@ abstract class AbstractCollectionPersister
public function update(PersistentCollection $coll) public function update(PersistentCollection $coll)
{ {
$mapping = $coll->getMapping(); $mapping = $coll->getMapping();
if ( ! $mapping['isOwningSide']) { if ( ! $mapping['isOwningSide']) {
return; // ignore inverse side return; // ignore inverse side
} }
$this->deleteRows($coll); $this->deleteRows($coll);
//$this->updateRows($coll); //$this->updateRows($coll);
$this->insertRows($coll); $this->insertRows($coll);
@ -108,6 +112,7 @@ abstract class AbstractCollectionPersister
{ {
$deleteDiff = $coll->getDeleteDiff(); $deleteDiff = $coll->getDeleteDiff();
$sql = $this->_getDeleteRowSQL($coll); $sql = $this->_getDeleteRowSQL($coll);
foreach ($deleteDiff as $element) { foreach ($deleteDiff as $element) {
$this->_conn->executeUpdate($sql, $this->_getDeleteRowSQLParameters($coll, $element)); $this->_conn->executeUpdate($sql, $this->_getDeleteRowSQLParameters($coll, $element));
} }
@ -120,6 +125,7 @@ abstract class AbstractCollectionPersister
{ {
$insertDiff = $coll->getInsertDiff(); $insertDiff = $coll->getInsertDiff();
$sql = $this->_getInsertRowSQL($coll); $sql = $this->_getInsertRowSQL($coll);
foreach ($insertDiff as $element) { foreach ($insertDiff as $element) {
$this->_conn->executeUpdate($sql, $this->_getInsertRowSQLParameters($coll, $element)); $this->_conn->executeUpdate($sql, $this->_getInsertRowSQLParameters($coll, $element));
} }

View File

@ -39,10 +39,12 @@ abstract class AbstractEntityInheritancePersister extends BasicEntityPersister
protected function _prepareInsertData($entity) protected function _prepareInsertData($entity)
{ {
$data = parent::_prepareInsertData($entity); $data = parent::_prepareInsertData($entity);
// Populate the discriminator column // Populate the discriminator column
$discColumn = $this->_class->discriminatorColumn; $discColumn = $this->_class->discriminatorColumn;
$this->_columnTypes[$discColumn['name']] = $discColumn['type']; $this->_columnTypes[$discColumn['name']] = $discColumn['type'];
$data[$this->_getDiscriminatorColumnTableName()][$discColumn['name']] = $this->_class->discriminatorValue; $data[$this->_getDiscriminatorColumnTableName()][$discColumn['name']] = $this->_class->discriminatorValue;
return $data; return $data;
} }
@ -63,7 +65,7 @@ abstract class AbstractEntityInheritancePersister extends BasicEntityPersister
$columnAlias = $this->_platform->getSQLResultCasing($columnName . $this->_sqlAliasCounter++); $columnAlias = $this->_platform->getSQLResultCasing($columnName . $this->_sqlAliasCounter++);
$this->_rsm->addFieldResult($alias, $columnAlias, $field, $class->name); $this->_rsm->addFieldResult($alias, $columnAlias, $field, $class->name);
return "$sql AS $columnAlias"; return $sql . ' AS ' . $columnAlias;
} }
protected function getSelectJoinColumnSQL($tableAlias, $joinColumnName, $className) protected function getSelectJoinColumnSQL($tableAlias, $joinColumnName, $className)
@ -72,6 +74,6 @@ abstract class AbstractEntityInheritancePersister extends BasicEntityPersister
$resultColumnName = $this->_platform->getSQLResultCasing($columnAlias); $resultColumnName = $this->_platform->getSQLResultCasing($columnAlias);
$this->_rsm->addMetaResult('r', $resultColumnName, $joinColumnName); $this->_rsm->addMetaResult('r', $resultColumnName, $joinColumnName);
return $tableAlias . ".$joinColumnName AS $columnAlias"; return $tableAlias . '.' . $joinColumnName . ' AS ' . $columnAlias;
} }
} }

View File

@ -229,6 +229,7 @@ class BasicEntityPersister
if (isset($insertData[$tableName])) { if (isset($insertData[$tableName])) {
$paramIndex = 1; $paramIndex = 1;
foreach ($insertData[$tableName] as $column => $value) { foreach ($insertData[$tableName] as $column => $value) {
$stmt->bindValue($paramIndex++, $value, $this->_columnTypes[$column]); $stmt->bindValue($paramIndex++, $value, $this->_columnTypes[$column]);
} }

View File

@ -22,6 +22,7 @@ namespace Doctrine\ORM\Persisters;
use Doctrine\ORM\ORMException, use Doctrine\ORM\ORMException,
Doctrine\ORM\Mapping\ClassMetadata, Doctrine\ORM\Mapping\ClassMetadata,
Doctrine\DBAL\LockMode, Doctrine\DBAL\LockMode,
Doctrine\DBAL\Types\Type,
Doctrine\ORM\Query\ResultSetMapping; Doctrine\ORM\Query\ResultSetMapping;
/** /**
@ -143,9 +144,11 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister
// Execute insert on root table // Execute insert on root table
$paramIndex = 1; $paramIndex = 1;
foreach ($insertData[$rootTableName] as $columnName => $value) { foreach ($insertData[$rootTableName] as $columnName => $value) {
$rootTableStmt->bindValue($paramIndex++, $value, $this->_columnTypes[$columnName]); $rootTableStmt->bindValue($paramIndex++, $value, $this->_columnTypes[$columnName]);
} }
$rootTableStmt->execute(); $rootTableStmt->execute();
if ($isPostInsertId) { if ($isPostInsertId) {
@ -160,12 +163,17 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister
foreach ($subTableStmts as $tableName => $stmt) { foreach ($subTableStmts as $tableName => $stmt) {
$data = isset($insertData[$tableName]) ? $insertData[$tableName] : array(); $data = isset($insertData[$tableName]) ? $insertData[$tableName] : array();
$paramIndex = 1; $paramIndex = 1;
foreach ((array) $id as $idVal) {
$stmt->bindValue($paramIndex++, $idVal); foreach ((array) $id as $idName => $idVal) {
$type = isset($this->_columnTypes[$idName]) ? $this->_columnTypes[$idName] : Type::STRING;
$stmt->bindValue($paramIndex++, $idVal, $type);
} }
foreach ($data as $columnName => $value) { foreach ($data as $columnName => $value) {
$stmt->bindValue($paramIndex++, $value, $this->_columnTypes[$columnName]); $stmt->bindValue($paramIndex++, $value, $this->_columnTypes[$columnName]);
} }
$stmt->execute(); $stmt->execute();
} }
} }
@ -191,7 +199,7 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister
{ {
$updateData = $this->_prepareUpdateData($entity); $updateData = $this->_prepareUpdateData($entity);
if ($isVersioned = $this->_class->isVersioned) { if (($isVersioned = $this->_class->isVersioned) != false) {
$versionedClass = $this->_getVersionedClassMetadata(); $versionedClass = $this->_getVersionedClassMetadata();
$versionedTable = $versionedClass->table['name']; $versionedTable = $versionedClass->table['name'];
} }
@ -200,6 +208,7 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister
foreach ($updateData as $tableName => $data) { foreach ($updateData as $tableName => $data) {
$this->_updateTable($entity, $this->_quotedTableMap[$tableName], $data, $isVersioned && $versionedTable == $tableName); $this->_updateTable($entity, $this->_quotedTableMap[$tableName], $data, $isVersioned && $versionedTable == $tableName);
} }
// Make sure the table with the version column is updated even if no columns on that // Make sure the table with the version column is updated even if no columns on that
// table were affected. // table were affected.
if ($isVersioned && ! isset($updateData[$versionedTable])) { if ($isVersioned && ! isset($updateData[$versionedTable])) {
@ -229,6 +238,7 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister
} else { } else {
// Delete from all tables individually, starting from this class' table up to the root table. // Delete from all tables individually, starting from this class' table up to the root table.
$this->_conn->delete($this->_class->getQuotedTableName($this->_platform), $id); $this->_conn->delete($this->_class->getQuotedTableName($this->_platform), $id);
foreach ($this->_class->parentClasses as $parentClass) { foreach ($this->_class->parentClasses as $parentClass) {
$this->_conn->delete($this->_em->getClassMetadata($parentClass)->getQuotedTableName($this->_platform), $id); $this->_conn->delete($this->_em->getClassMetadata($parentClass)->getQuotedTableName($this->_platform), $id);
} }

View File

@ -42,6 +42,7 @@ class ManyToManyPersister extends AbstractCollectionPersister
$mapping = $coll->getMapping(); $mapping = $coll->getMapping();
$joinTable = $mapping['joinTable']; $joinTable = $mapping['joinTable'];
$columns = $mapping['joinTableColumns']; $columns = $mapping['joinTableColumns'];
return 'DELETE FROM ' . $joinTable['name'] . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?'; return 'DELETE FROM ' . $joinTable['name'] . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?';
} }