[DDC-1693] Fix fatal errors in DQL when using Optimistic or None lock modes. Added tests.
This commit is contained in:
parent
f6a61b133e
commit
79d9c07652
@ -440,13 +440,15 @@ class SqlWalker implements TreeWalker
|
|||||||
$sql .= ' ' . $this->_platform->getWriteLockSQL();
|
$sql .= ' ' . $this->_platform->getWriteLockSQL();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LockMode::PESSIMISTIC_OPTIMISTIC:
|
case LockMode::OPTIMISTIC:
|
||||||
foreach ($this->_selectedClasses AS $selectedClass) {
|
foreach ($this->_selectedClasses AS $selectedClass) {
|
||||||
if ( ! $class->isVersioned) {
|
if ( ! $selectedClass['class']->isVersioned) {
|
||||||
throw \Doctrine\ORM\OptimisticLockException::lockFailed($selectedClass['class']->name);
|
throw \Doctrine\ORM\OptimisticLockException::lockFailed($selectedClass['class']->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case LockMode::NONE:
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw \Doctrine\ORM\Query\QueryException::invalidLockMode();
|
throw \Doctrine\ORM\Query\QueryException::invalidLockMode();
|
||||||
|
@ -9,6 +9,9 @@ use Doctrine\Tests\Models\CMS\CmsArticle,
|
|||||||
|
|
||||||
require_once __DIR__ . '/../../../TestInit.php';
|
require_once __DIR__ . '/../../../TestInit.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group locking
|
||||||
|
*/
|
||||||
class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
|
class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
|
||||||
protected function setUp() {
|
protected function setUp() {
|
||||||
$this->useModelSet('cms');
|
$this->useModelSet('cms');
|
||||||
@ -139,7 +142,6 @@ class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @group DDC-178
|
* @group DDC-178
|
||||||
* @group locking
|
|
||||||
*/
|
*/
|
||||||
public function testLockPessimisticRead() {
|
public function testLockPessimisticRead() {
|
||||||
$readLockSql = $this->_em->getConnection()->getDatabasePlatform()->getReadLockSql();
|
$readLockSql = $this->_em->getConnection()->getDatabasePlatform()->getReadLockSql();
|
||||||
@ -166,4 +168,17 @@ class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
|
|||||||
$query = array_pop( $this->_sqlLoggerStack->queries );
|
$query = array_pop( $this->_sqlLoggerStack->queries );
|
||||||
$this->assertContains($readLockSql, $query['sql']);
|
$this->assertContains($readLockSql, $query['sql']);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* @group DDC-1693
|
||||||
|
*/
|
||||||
|
public function testLockOptimisticNonVersionedThrowsExceptionInDQL()
|
||||||
|
{
|
||||||
|
$dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'";
|
||||||
|
|
||||||
|
$this->setExpectedException('Doctrine\ORM\OptimisticLockException', 'The optimistic lock on an entity failed.');
|
||||||
|
$sql = $this->_em->createQuery($dql)->setHint(
|
||||||
|
\Doctrine\ORM\Query::HINT_LOCK_MODE, \Doctrine\DBAL\LockMode::OPTIMISTIC
|
||||||
|
)->getSQL();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -908,6 +908,20 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group DDC-1693
|
||||||
|
* @group locking
|
||||||
|
*/
|
||||||
|
public function testLockModeNoneQueryHint()
|
||||||
|
{
|
||||||
|
$this->assertSqlGeneration(
|
||||||
|
"SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'",
|
||||||
|
"SELECT c0_.id AS id0, c0_.status AS status1, c0_.username AS username2, c0_.name AS name3 ".
|
||||||
|
"FROM cms_users c0_ WHERE c0_.username = 'gblanco'",
|
||||||
|
array(Query::HINT_LOCK_MODE => \Doctrine\DBAL\LockMode::NONE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @group DDC-430
|
* @group DDC-430
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user