1
0
mirror of synced 2025-02-03 05:49:25 +03:00

Fix quoting issues related to ticket #6402

Apply quoting strategy to foreign key columns of one-to-one relation so
that correct select statements are generated. And use unquoted column
names in result mapping instead of quoted ones, as consumers (namely
IdentifierFlattener) expect unquoted column names.
This commit is contained in:
lemartin 2017-04-18 19:25:02 +02:00 committed by Luís Cobucci
parent a557c97a93
commit 7c6c5d87c8
No known key found for this signature in database
GPG Key ID: EC61C5F01750ED3C
3 changed files with 69 additions and 2 deletions

View File

@ -1329,7 +1329,7 @@ class BasicEntityPersister implements EntityPersister
$resultColumnName = $this->getSQLColumnAlias($joinColumn['name']);
$type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
$this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $quotedColumn, $isIdentifier, $type);
$this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $joinColumn['name'], $isIdentifier, $type);
$columnList[] = sprintf('%s.%s AS %s', $sqlTableAlias, $quotedColumn, $resultColumnName);
}

View File

@ -764,7 +764,8 @@ class SqlWalker implements TreeWalker
$columnAlias = $this->getSQLColumnAlias($columnName);
$columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
$sqlSelectExpressions[] = $sqlTableAlias . '.' . $columnName . ' AS ' . $columnAlias;
$quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform);
$sqlSelectExpressions[] = $sqlTableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias;
$this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $isIdentifier, $columnType);
}

View File

@ -0,0 +1,66 @@
<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\Tests\Models\Quote\Address;
use Doctrine\Tests\Models\Quote\Group;
use Doctrine\Tests\Models\Quote\Phone;
use Doctrine\Tests\Models\Quote\User;
use Doctrine\Tests\OrmFunctionalTestCase;
/**
* @group 6402
*/
class GH6402Test extends OrmFunctionalTestCase
{
protected function setUp()
{
parent::setUp();
try {
$this->setUpEntitySchema([
Address::class,
Group::class,
Phone::class,
User::class,
]);
} catch (\Exception $exception) {
}
}
public function testFind()
{
$id = $this->createAddress();
$address = $this->_em->find(Address::class, $id);
self::assertNotNull($address->user);
}
public function testQuery()
{
$id = $this->createAddress();
$addresses = $this->_em->createQuery("SELECT a FROM " . Address::class . " a WHERE a.id = :id")
->setParameter("id", $id)
->getResult();
self::assertCount(1, $addresses);
self::assertNotNull($addresses[0]->user);
}
private function createAddress()
{
$user = new User();
$user->name = "foo";
$address = new Address();
$address->zip = "bar";
$user->setAddress($address);
$this->_em->persist($user);
$this->_em->flush();
$this->_em->clear();
return $address->id;
}
}