1
0
mirror of synced 2025-02-01 13:01:45 +03:00

apply quote strategy at sqlwalker

This commit is contained in:
Fabio B. Silva 2012-05-31 19:10:34 -03:00
parent d49a968d55
commit db53b8651c
4 changed files with 27 additions and 34 deletions

View File

@ -71,12 +71,11 @@ class DefaultQuoteStrategy extends QuoteStrategy
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function getJoinTableName($relation, ClassMetadata $class) public function getJoinTableName(array $association, ClassMetadata $class)
{ {
$assoc = $class->associationMappings[$relation]; return isset($association['joinTable']['quoted'])
return isset($assoc['joinTable']['quoted']) ? $this->platform->quoteIdentifier($association['joinTable']['name'])
? $this->platform->quoteIdentifier($assoc['joinTable']['name']) : $association['joinTable']['name'];
: $assoc['joinTable']['name'];
} }
/** /**

View File

@ -85,7 +85,7 @@ abstract class QuoteStrategy
* @param ClassMetadata $class * @param ClassMetadata $class
* @return string * @return string
*/ */
abstract public function getJoinTableName($relation, ClassMetadata $class); abstract public function getJoinTableName(array $association, ClassMetadata $class);
/** /**
* Gets the (possibly quoted) identifier column names for safe use in an SQL statement. * Gets the (possibly quoted) identifier column names for safe use in an SQL statement.

View File

@ -310,11 +310,11 @@ class SqlWalker implements TreeWalker
// If this is a joined association we must use left joins to preserve the correct result. // If this is a joined association we must use left joins to preserve the correct result.
$sql .= isset($this->queryComponents[$dqlAlias]['relation']) ? ' LEFT ' : ' INNER '; $sql .= isset($this->queryComponents[$dqlAlias]['relation']) ? ' LEFT ' : ' INNER ';
$sql .= 'JOIN ' . $parentClass->getQuotedTableName($this->platform) . ' ' . $tableAlias . ' ON '; $sql .= 'JOIN ' . $this->quoteStrategy->getTableName($parentClass) . ' ' . $tableAlias . ' ON ';
$sqlParts = array(); $sqlParts = array();
foreach ($class->getQuotedIdentifierColumnNames($this->platform) as $columnName) { foreach ($this->quoteStrategy->getIdentifierColumnNames($class) as $columnName) {
$sqlParts[] = $baseTableAlias . '.' . $columnName . ' = ' . $tableAlias . '.' . $columnName; $sqlParts[] = $baseTableAlias . '.' . $columnName . ' = ' . $tableAlias . '.' . $columnName;
} }
@ -336,11 +336,11 @@ class SqlWalker implements TreeWalker
$subClass = $this->em->getClassMetadata($subClassName); $subClass = $this->em->getClassMetadata($subClassName);
$tableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); $tableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias);
$sql .= ' LEFT JOIN ' . $subClass->getQuotedTableName($this->platform) . ' ' . $tableAlias . ' ON '; $sql .= ' LEFT JOIN ' . $this->quoteStrategy->getTableName($subClass) . ' ' . $tableAlias . ' ON ';
$sqlParts = array(); $sqlParts = array();
foreach ($subClass->getQuotedIdentifierColumnNames($this->platform) as $columnName) { foreach ($this->quoteStrategy->getIdentifierColumnNames($subClass) as $columnName) {
$sqlParts[] = $baseTableAlias . '.' . $columnName . ' = ' . $tableAlias . '.' . $columnName; $sqlParts[] = $baseTableAlias . '.' . $columnName . ' = ' . $tableAlias . '.' . $columnName;
} }
@ -361,7 +361,7 @@ class SqlWalker implements TreeWalker
if ( ! isset($qComp['relation']['orderBy'])) continue; if ( ! isset($qComp['relation']['orderBy'])) continue;
foreach ($qComp['relation']['orderBy'] as $fieldName => $orientation) { foreach ($qComp['relation']['orderBy'] as $fieldName => $orientation) {
$columnName = $qComp['metadata']->getQuotedColumnName($fieldName, $this->platform); $columnName = $this->quoteStrategy->getColumnName($fieldName, $qComp['metadata']);
$tableName = ($qComp['metadata']->isInheritanceTypeJoined()) $tableName = ($qComp['metadata']->isInheritanceTypeJoined())
? $this->em->getUnitOfWork()->getEntityPersister($qComp['metadata']->name)->getOwningTable($fieldName) ? $this->em->getUnitOfWork()->getEntityPersister($qComp['metadata']->name)->getOwningTable($fieldName)
: $qComp['metadata']->getTableName(); : $qComp['metadata']->getTableName();
@ -544,7 +544,7 @@ class SqlWalker implements TreeWalker
$tableAlias = $this->getSQLTableAlias($class->getTableName(), $identVariable); $tableAlias = $this->getSQLTableAlias($class->getTableName(), $identVariable);
$sqlParts = array(); $sqlParts = array();
foreach ($class->getQuotedIdentifierColumnNames($this->platform) as $columnName) { foreach ($this->quoteStrategy->getIdentifierColumnNames($class) as $columnName) {
$sqlParts[] = $tableAlias . '.' . $columnName; $sqlParts[] = $tableAlias . '.' . $columnName;
} }
@ -592,7 +592,7 @@ class SqlWalker implements TreeWalker
$sql .= $this->walkIdentificationVariable($dqlAlias, $fieldName) . '.'; $sql .= $this->walkIdentificationVariable($dqlAlias, $fieldName) . '.';
} }
$sql .= $class->getQuotedColumnName($fieldName, $this->platform); $sql .= $this->quoteStrategy->getColumnName($fieldName, $class);
break; break;
case AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION: case AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION:
@ -1168,7 +1168,7 @@ class SqlWalker implements TreeWalker
: $class->getTableName(); : $class->getTableName();
$sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias); $sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias);
$columnName = $class->getQuotedColumnName($fieldName, $this->platform); $columnName = $this->quoteStrategy->getColumnName($fieldName, $class);
$columnAlias = $this->getSQLColumnAlias($class->fieldMappings[$fieldName]['columnName']); $columnAlias = $this->getSQLColumnAlias($class->fieldMappings[$fieldName]['columnName']);
$col = $sqlTableAlias . '.' . $columnName; $col = $sqlTableAlias . '.' . $columnName;
@ -1264,7 +1264,7 @@ class SqlWalker implements TreeWalker
$sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias); $sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias);
$columnAlias = $this->getSQLColumnAlias($mapping['columnName']); $columnAlias = $this->getSQLColumnAlias($mapping['columnName']);
$quotedColumnName = $class->getQuotedColumnName($fieldName, $this->platform); $quotedColumnName = $this->quoteStrategy->getColumnName($fieldName, $class);
$col = $sqlTableAlias . '.' . $quotedColumnName; $col = $sqlTableAlias . '.' . $quotedColumnName;
@ -1295,7 +1295,7 @@ class SqlWalker implements TreeWalker
} }
$columnAlias = $this->getSQLColumnAlias($mapping['columnName']); $columnAlias = $this->getSQLColumnAlias($mapping['columnName']);
$quotedColumnName = $subClass->getQuotedColumnName($fieldName, $this->platform); $quotedColumnName = $this->quoteStrategy->getColumnName($fieldName, $subClass);
$col = $sqlTableAlias . '.' . $quotedColumnName; $col = $sqlTableAlias . '.' . $quotedColumnName;
@ -1530,7 +1530,7 @@ class SqlWalker implements TreeWalker
{ {
$class = $this->em->getClassMetadata($deleteClause->abstractSchemaName); $class = $this->em->getClassMetadata($deleteClause->abstractSchemaName);
$tableName = $class->getTableName(); $tableName = $class->getTableName();
$sql = 'DELETE FROM ' . $class->getQuotedTableName($this->platform); $sql = 'DELETE FROM ' . $this->quoteStrategy->getTableName($class);
$this->setSQLTableAlias($tableName, $tableName, $deleteClause->aliasIdentificationVariable); $this->setSQLTableAlias($tableName, $tableName, $deleteClause->aliasIdentificationVariable);
$this->rootAliases[] = $deleteClause->aliasIdentificationVariable; $this->rootAliases[] = $deleteClause->aliasIdentificationVariable;
@ -1548,7 +1548,7 @@ class SqlWalker implements TreeWalker
{ {
$class = $this->em->getClassMetadata($updateClause->abstractSchemaName); $class = $this->em->getClassMetadata($updateClause->abstractSchemaName);
$tableName = $class->getTableName(); $tableName = $class->getTableName();
$sql = 'UPDATE ' . $class->getQuotedTableName($this->platform); $sql = 'UPDATE ' . $this->quoteStrategy->getTableName($class);
$this->setSQLTableAlias($tableName, $tableName, $updateClause->aliasIdentificationVariable); $this->setSQLTableAlias($tableName, $tableName, $updateClause->aliasIdentificationVariable);
$this->rootAliases[] = $updateClause->aliasIdentificationVariable; $this->rootAliases[] = $updateClause->aliasIdentificationVariable;
@ -1759,18 +1759,18 @@ class SqlWalker implements TreeWalker
$targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName());
$sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); $sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias);
$sql .= $targetClass->getQuotedTableName($this->platform) . ' ' . $targetTableAlias . ' WHERE '; $sql .= $this->quoteStrategy->getTableName($targetClass) . ' ' . $targetTableAlias . ' WHERE ';
$owningAssoc = $targetClass->associationMappings[$assoc['mappedBy']]; $owningAssoc = $targetClass->associationMappings[$assoc['mappedBy']];
$sqlParts = array(); $sqlParts = array();
foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) {
$targetColumn = $class->getQuotedColumnName($class->fieldNames[$targetColumn], $this->platform); $targetColumn = $this->quoteStrategy->getColumnName($class->fieldNames[$targetColumn], $class);
$sqlParts[] = $sourceTableAlias . '.' . $targetColumn . ' = ' . $targetTableAlias . '.' . $sourceColumn; $sqlParts[] = $sourceTableAlias . '.' . $targetColumn . ' = ' . $targetTableAlias . '.' . $sourceColumn;
} }
foreach ($targetClass->getQuotedIdentifierColumnNames($this->platform) as $targetColumnName) { foreach ($this->quoteStrategy->getIdentifierColumnNames($targetClass) as $targetColumnName) {
if (isset($dqlParamKey)) { if (isset($dqlParamKey)) {
$this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++); $this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++);
} }
@ -1791,18 +1791,15 @@ class SqlWalker implements TreeWalker
$sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); $sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias);
// join to target table // join to target table
$sql .= $targetClass->getQuotedJoinTableName($owningAssoc, $this->platform) . ' ' . $joinTableAlias $sql .= $this->quoteStrategy->getJoinTableName($owningAssoc, $targetClass) . ' ' . $joinTableAlias
. ' INNER JOIN ' . $targetClass->getQuotedTableName($this->platform) . ' ' . $targetTableAlias . ' ON '; . ' INNER JOIN ' . $this->quoteStrategy->getTableName($targetClass) . ' ' . $targetTableAlias . ' ON ';
// join conditions // join conditions
$joinColumns = $assoc['isOwningSide'] ? $joinTable['inverseJoinColumns'] : $joinTable['joinColumns']; $joinColumns = $assoc['isOwningSide'] ? $joinTable['inverseJoinColumns'] : $joinTable['joinColumns'];
$joinSqlParts = array(); $joinSqlParts = array();
foreach ($joinColumns as $joinColumn) { foreach ($joinColumns as $joinColumn) {
$targetColumn = $targetClass->getQuotedColumnName( $targetColumn = $this->quoteStrategy->getColumnName($targetClass->fieldNames[$joinColumn['referencedColumnName']], $targetClass);
$targetClass->fieldNames[$joinColumn['referencedColumnName']],
$this->platform
);
$joinSqlParts[] = $joinTableAlias . '.' . $joinColumn['name'] . ' = ' . $targetTableAlias . '.' . $targetColumn; $joinSqlParts[] = $joinTableAlias . '.' . $joinColumn['name'] . ' = ' . $targetTableAlias . '.' . $targetColumn;
} }
@ -1814,15 +1811,12 @@ class SqlWalker implements TreeWalker
$sqlParts = array(); $sqlParts = array();
foreach ($joinColumns as $joinColumn) { foreach ($joinColumns as $joinColumn) {
$targetColumn = $class->getQuotedColumnName( $targetColumn = $this->quoteStrategy->getColumnName($class->fieldNames[$joinColumn['referencedColumnName']], $class);
$class->fieldNames[$joinColumn['referencedColumnName']],
$this->platform
);
$sqlParts[] = $joinTableAlias . '.' . $joinColumn['name'] . ' = ' . $sourceTableAlias . '.' . $targetColumn; $sqlParts[] = $joinTableAlias . '.' . $joinColumn['name'] . ' = ' . $sourceTableAlias . '.' . $targetColumn;
} }
foreach ($targetClass->getQuotedIdentifierColumnNames($this->platform) as $targetColumnName) { foreach ($this->quoteStrategy->getIdentifierColumnNames($targetClass) as $targetColumnName) {
if (isset($dqlParamKey)) { if (isset($dqlParamKey)) {
$this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++); $this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++);
} }

View File

@ -100,8 +100,8 @@ class QuoteStrategyTest extends \Doctrine\Tests\OrmTestCase
) )
); );
$this->assertEquals('"cmsaddress_cmsuser"', $this->strategy->getJoinTableName('user', $cm1)); $this->assertEquals('"cmsaddress_cmsuser"', $this->strategy->getJoinTableName($cm1->associationMappings['user'], $cm1));
$this->assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName('user', $cm2)); $this->assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName($cm2->associationMappings['user'], $cm2));
} }