Merge branch 'DDC-982'
This commit is contained in:
commit
bca927f861
@ -53,8 +53,8 @@ class SizeFunction extends FunctionNode
|
|||||||
|
|
||||||
if ($assoc['type'] == \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY) {
|
if ($assoc['type'] == \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY) {
|
||||||
$targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']);
|
$targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']);
|
||||||
$targetTableAlias = $sqlWalker->getSqlTableAlias($targetClass->table['name']);
|
$targetTableAlias = $sqlWalker->getSQLTableAlias($targetClass->table['name']);
|
||||||
$sourceTableAlias = $sqlWalker->getSqlTableAlias($class->table['name'], $dqlAlias);
|
$sourceTableAlias = $sqlWalker->getSQLTableAlias($class->table['name'], $dqlAlias);
|
||||||
|
|
||||||
$sql .= $targetClass->getQuotedTableName($platform) . ' ' . $targetTableAlias . ' WHERE ';
|
$sql .= $targetClass->getQuotedTableName($platform) . ' ' . $targetTableAlias . ' WHERE ';
|
||||||
|
|
||||||
@ -76,8 +76,8 @@ class SizeFunction extends FunctionNode
|
|||||||
$joinTable = $owningAssoc['joinTable'];
|
$joinTable = $owningAssoc['joinTable'];
|
||||||
|
|
||||||
// SQL table aliases
|
// SQL table aliases
|
||||||
$joinTableAlias = $sqlWalker->getSqlTableAlias($joinTable['name']);
|
$joinTableAlias = $sqlWalker->getSQLTableAlias($joinTable['name']);
|
||||||
$sourceTableAlias = $sqlWalker->getSqlTableAlias($class->table['name'], $dqlAlias);
|
$sourceTableAlias = $sqlWalker->getSQLTableAlias($class->table['name'], $dqlAlias);
|
||||||
|
|
||||||
// join to target table
|
// join to target table
|
||||||
$sql .= $targetClass->getQuotedJoinTableName($owningAssoc, $platform) . ' ' . $joinTableAlias . ' WHERE ';
|
$sql .= $targetClass->getQuotedJoinTableName($owningAssoc, $platform) . ' ' . $joinTableAlias . ' WHERE ';
|
||||||
|
@ -63,9 +63,11 @@ class MultiTableDeleteExecutor extends AbstractSqlExecutor
|
|||||||
$idColumnList = implode(', ', $idColumnNames);
|
$idColumnList = implode(', ', $idColumnNames);
|
||||||
|
|
||||||
// 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause()
|
// 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause()
|
||||||
|
$sqlWalker->setSQLTableAlias($primaryClass->table['name'], 't0', $primaryDqlAlias);
|
||||||
|
|
||||||
$this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')'
|
$this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')'
|
||||||
. ' SELECT t0.' . implode(', t0.', $idColumnNames);
|
. ' SELECT t0.' . implode(', t0.', $idColumnNames);
|
||||||
$sqlWalker->setSqlTableAlias($primaryClass->table['name'] . $primaryDqlAlias, 't0');
|
|
||||||
$rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $primaryDqlAlias);
|
$rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $primaryDqlAlias);
|
||||||
$fromClause = new AST\FromClause(array(new AST\IdentificationVariableDeclaration($rangeDecl, null, array())));
|
$fromClause = new AST\FromClause(array(new AST\IdentificationVariableDeclaration($rangeDecl, null, array())));
|
||||||
$this->_insertSql .= $sqlWalker->walkFromClause($fromClause);
|
$this->_insertSql .= $sqlWalker->walkFromClause($fromClause);
|
||||||
|
@ -64,11 +64,14 @@ class MultiTableUpdateExecutor extends AbstractSqlExecutor
|
|||||||
$idColumnList = implode(', ', $idColumnNames);
|
$idColumnList = implode(', ', $idColumnNames);
|
||||||
|
|
||||||
// 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause()
|
// 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause()
|
||||||
|
$sqlWalker->setSQLTableAlias($primaryClass->table['name'], 't0', $updateClause->aliasIdentificationVariable);
|
||||||
|
|
||||||
$this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')'
|
$this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')'
|
||||||
. ' SELECT t0.' . implode(', t0.', $idColumnNames);
|
. ' SELECT t0.' . implode(', t0.', $idColumnNames);
|
||||||
$sqlWalker->setSqlTableAlias($primaryClass->table['name'] . $updateClause->aliasIdentificationVariable, 't0');
|
|
||||||
$rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $updateClause->aliasIdentificationVariable);
|
$rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $updateClause->aliasIdentificationVariable);
|
||||||
$fromClause = new AST\FromClause(array(new AST\IdentificationVariableDeclaration($rangeDecl, null, array())));
|
$fromClause = new AST\FromClause(array(new AST\IdentificationVariableDeclaration($rangeDecl, null, array())));
|
||||||
|
|
||||||
$this->_insertSql .= $sqlWalker->walkFromClause($fromClause);
|
$this->_insertSql .= $sqlWalker->walkFromClause($fromClause);
|
||||||
|
|
||||||
// 2. Create ID subselect statement used in UPDATE ... WHERE ... IN (subselect)
|
// 2. Create ID subselect statement used in UPDATE ... WHERE ... IN (subselect)
|
||||||
@ -85,6 +88,7 @@ class MultiTableUpdateExecutor extends AbstractSqlExecutor
|
|||||||
|
|
||||||
foreach ($updateItems as $updateItem) {
|
foreach ($updateItems as $updateItem) {
|
||||||
$field = $updateItem->pathExpression->field;
|
$field = $updateItem->pathExpression->field;
|
||||||
|
|
||||||
if (isset($class->fieldMappings[$field]) && ! isset($class->fieldMappings[$field]['inherited']) ||
|
if (isset($class->fieldMappings[$field]) && ! isset($class->fieldMappings[$field]['inherited']) ||
|
||||||
isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]['inherited'])) {
|
isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]['inherited'])) {
|
||||||
$newValue = $updateItem->newValue;
|
$newValue = $updateItem->newValue;
|
||||||
@ -103,6 +107,7 @@ class MultiTableUpdateExecutor extends AbstractSqlExecutor
|
|||||||
if ($newValue instanceof AST\InputParameter) {
|
if ($newValue instanceof AST\InputParameter) {
|
||||||
$paramKey = $newValue->name;
|
$paramKey = $newValue->name;
|
||||||
$this->_sqlParameters[$i][] = $sqlWalker->getQuery()->getParameter($paramKey);
|
$this->_sqlParameters[$i][] = $sqlWalker->getQuery()->getParameter($paramKey);
|
||||||
|
|
||||||
++$this->_numParametersInUpdateClause;
|
++$this->_numParametersInUpdateClause;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,14 +125,17 @@ class MultiTableUpdateExecutor extends AbstractSqlExecutor
|
|||||||
|
|
||||||
// 4. Store DDL for temporary identifier table.
|
// 4. Store DDL for temporary identifier table.
|
||||||
$columnDefinitions = array();
|
$columnDefinitions = array();
|
||||||
|
|
||||||
foreach ($idColumnNames as $idColumnName) {
|
foreach ($idColumnNames as $idColumnName) {
|
||||||
$columnDefinitions[$idColumnName] = array(
|
$columnDefinitions[$idColumnName] = array(
|
||||||
'notnull' => true,
|
'notnull' => true,
|
||||||
'type' => Type::getType($rootClass->getTypeOfColumn($idColumnName))
|
'type' => Type::getType($rootClass->getTypeOfColumn($idColumnName))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' ('
|
$this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' ('
|
||||||
. $platform->getColumnDeclarationListSQL($columnDefinitions) . ')';
|
. $platform->getColumnDeclarationListSQL($columnDefinitions) . ')';
|
||||||
|
|
||||||
$this->_dropTempTableSql = 'DROP TABLE ' . $tempTable;
|
$this->_dropTempTableSql = 'DROP TABLE ' . $tempTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ class SqlWalker implements TreeWalker
|
|||||||
*/
|
*/
|
||||||
public function getSQLTableAlias($tableName, $dqlAlias = '')
|
public function getSQLTableAlias($tableName, $dqlAlias = '')
|
||||||
{
|
{
|
||||||
$tableName .= $dqlAlias;
|
$tableName .= ($dqlAlias) ? '@[' . $dqlAlias . ']' : '';
|
||||||
|
|
||||||
if ( ! isset($this->_tableAliasMap[$tableName])) {
|
if ( ! isset($this->_tableAliasMap[$tableName])) {
|
||||||
$this->_tableAliasMap[$tableName] = strtolower(substr($tableName, 0, 1)) . $this->_tableAliasCounter++ . '_';
|
$this->_tableAliasMap[$tableName] = strtolower(substr($tableName, 0, 1)) . $this->_tableAliasCounter++ . '_';
|
||||||
@ -214,7 +214,7 @@ class SqlWalker implements TreeWalker
|
|||||||
*/
|
*/
|
||||||
public function setSQLTableAlias($tableName, $alias, $dqlAlias = '')
|
public function setSQLTableAlias($tableName, $alias, $dqlAlias = '')
|
||||||
{
|
{
|
||||||
$tableName .= $dqlAlias;
|
$tableName .= ($dqlAlias) ? '@[' . $dqlAlias . ']' : '';
|
||||||
|
|
||||||
$this->_tableAliasMap[$tableName] = $alias;
|
$this->_tableAliasMap[$tableName] = $alias;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user