1
0
mirror of synced 2025-01-18 22:41:43 +03:00

Merge branch 'DDC-178'

This commit is contained in:
Benjamin Eberlei 2010-07-04 14:38:04 +02:00
commit c45bd0edec
2 changed files with 32 additions and 8 deletions

View File

@ -1036,13 +1036,24 @@ class BasicEntityPersister
$lockSql = $this->_platform->getWriteLockSql();
}
$sql = 'SELECT 1 FROM ' . $this->_class->getQuotedTableName($this->_platform) . ' '
. $this->_getSQLTableAlias($this->_class->name)
$sql = 'SELECT 1 '
. $this->getLockTablesSql()
. ($conditionSql ? ' WHERE ' . $conditionSql : '') . ' ' . $lockSql;
$params = array_values($criteria);
$this->_conn->executeQuery($sql, $params);
}
/**
* Get the FROM and optionally JOIN conditions to lock the entity managed by this persister.
*
* @return string
*/
protected function getLockTablesSql()
{
return 'FROM ' . $this->_class->getQuotedTableName($this->_platform) . ' '
. $this->_getSQLTableAlias($this->_class->name);
}
/**
* Gets the conditional SQL fragment used in the WHERE clause when selecting
* entities in this persister.

View File

@ -347,15 +347,28 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister
}
/**
* Lock all rows of this entity matching the given criteria with the specified pessimistic lock mode
* Get the FROM and optionally JOIN conditions to lock the entity managed by this persister.
*
* @param array $criteria
* @param int $lockMode
* @return void
* @return string
*/
public function lock(array $criteria, $lockMode)
public function getLockTablesSql()
{
throw new \BadMethodCallException("lock() is not yet supported for JoinedSubclassPersister");
$baseTableAlias = $this->_getSQLTableAlias($this->_class->name);
// INNER JOIN parent tables
$joinSql = '';
foreach ($this->_class->parentClasses as $parentClassName) {
$parentClass = $this->_em->getClassMetadata($parentClassName);
$tableAlias = $this->_getSQLTableAlias($parentClassName);
$joinSql .= ' INNER JOIN ' . $parentClass->getQuotedTableName($this->_platform) . ' ' . $tableAlias . ' ON ';
$first = true;
foreach ($idColumns as $idColumn) {
if ($first) $first = false; else $joinSql .= ' AND ';
$joinSql .= $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn;
}
}
return 'FROM ' . $this->_class->getQuotedTableName($this->_platform) . ' ' . $baseTableAlias . $joinSql;
}
/* Ensure this method is never called. This persister overrides _getSelectEntitiesSQL directly. */