apply quote strategy at sqlwalker
This commit is contained in:
parent
d49a968d55
commit
db53b8651c
@ -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'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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.
|
||||||
|
@ -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++);
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user