1
0
mirror of synced 2025-01-31 20:41:44 +03:00

89 lines
1.9 KiB
PHP

<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\ORM\Query;
/**
* @group DDC-2224
*/
class DDC2224Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
public static function setUpBeforeClass()
{
\Doctrine\DBAL\Types\Type::addType('DDC2224Type', __NAMESPACE__ . '\DDC2224Type');
}
public function testIssue()
{
$dql = 'SELECT e FROM ' . __NAMESPACE__ . '\DDC2224Entity e WHERE e.field = :field';
$query = $this->_em->createQuery($dql);
$query->setQueryCacheDriver(new ArrayCache());
$query->setParameter('field', 'test', 'DDC2224Type');
$this->assertStringEndsWith('.field = FUNCTION(?)', $query->getSQL());
return $query;
}
/**
* @depends testIssue
*/
public function testCacheMissWhenTypeChanges(Query $query)
{
$query->setParameter('field', 'test', 'string');
$this->assertStringEndsWith('.field = ?', $query->getSQL());
}
}
class DDC2224Type extends Type
{
/**
* {@inheritdoc}
*/
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return $platform->getVarcharTypeDeclarationSQL($fieldDeclaration);
}
public function getName()
{
return 'DDC2224Type';
}
/**
* {@inheritdoc}
*/
public function canRequireSQLConversion()
{
return true;
}
/**
* {@inheritdoc}
*/
public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform)
{
return sprintf('FUNCTION(%s)', $sqlExpr);
}
}
/**
* @Entity
*/
class DDC2224Entity
{
/**
* @Id @GeneratedValue @Column(type="integer")
*/
public $id;
/**
* @Column(type="DDC2224Type")
*/
public $field;
}