1
0
mirror of synced 2025-01-09 18:47:10 +03:00

Merge branch 'hotfix/#615-enforce-A-to-Z-sql-table-aliases'

Close #615
This commit is contained in:
Marco Pivetta 2014-10-19 17:25:09 +02:00
commit a9bd51c0e4
2 changed files with 64 additions and 1 deletions

View File

@ -291,7 +291,8 @@ class SqlWalker implements TreeWalker
$tableName .= ($dqlAlias) ? '@[' . $dqlAlias . ']' : '';
if ( ! isset($this->tableAliasMap[$tableName])) {
$this->tableAliasMap[$tableName] = strtolower(substr($tableName, 0, 1)) . $this->tableAliasCounter++ . '_';
$this->tableAliasMap[$tableName] = (preg_match('/[a-z]/i', $tableName[0]) ? strtolower($tableName[0]) : 't')
. $this->tableAliasCounter++ . '_';
}
return $this->tableAliasMap[$tableName];

View File

@ -0,0 +1,62 @@
<?php
namespace Doctrine\Tests\ORM\Query;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query;
use Doctrine\Tests\OrmTestCase;
use Doctrine\ORM\Query\ParserResult;
/**
* Tests for {@see \Doctrine\ORM\Query\SqlWalker}
*
* @covers \Doctrine\ORM\Query\SqlWalker
*/
class SqlWalkerTest extends OrmTestCase
{
/**
* @var SqlWalker
*/
private $sqlWalker;
/**
* {@inheritDoc}
*/
protected function setUp()
{
$this->sqlWalker = new SqlWalker(new Query($this->_getTestEntityManager()), new ParserResult(), array());
}
/**
* @dataProvider getColumnNamesAndSqlAliases
*/
public function testGetSQLTableAlias($tableName, $expectedAlias)
{
$this->assertSame($expectedAlias, $this->sqlWalker->getSQLTableAlias($tableName));
}
/**
* @dataProvider getColumnNamesAndSqlAliases
*/
public function testGetSQLTableAliasIsSameForMultipleCalls($tableName)
{
$this->assertSame(
$this->sqlWalker->getSQLTableAlias($tableName),
$this->sqlWalker->getSQLTableAlias($tableName)
);
}
/**
* @private data provider
*
* @return string[][]
*/
public function getColumnNamesAndSqlAliases()
{
return array(
array('aaaaa', 'a0_'),
array('table', 't0_'),
array('çtable', 't0_'),
);
}
}