[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();
|
||||
break;
|
||||
|
||||
case LockMode::PESSIMISTIC_OPTIMISTIC:
|
||||
case LockMode::OPTIMISTIC:
|
||||
foreach ($this->_selectedClasses AS $selectedClass) {
|
||||
if ( ! $class->isVersioned) {
|
||||
if ( ! $selectedClass['class']->isVersioned) {
|
||||
throw \Doctrine\ORM\OptimisticLockException::lockFailed($selectedClass['class']->name);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LockMode::NONE:
|
||||
break;
|
||||
|
||||
default:
|
||||
throw \Doctrine\ORM\Query\QueryException::invalidLockMode();
|
||||
|
@ -9,6 +9,9 @@ use Doctrine\Tests\Models\CMS\CmsArticle,
|
||||
|
||||
require_once __DIR__ . '/../../../TestInit.php';
|
||||
|
||||
/**
|
||||
* @group locking
|
||||
*/
|
||||
class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
|
||||
protected function setUp() {
|
||||
$this->useModelSet('cms');
|
||||
@ -139,7 +142,6 @@ class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
|
||||
|
||||
/**
|
||||
* @group DDC-178
|
||||
* @group locking
|
||||
*/
|
||||
public function testLockPessimisticRead() {
|
||||
$readLockSql = $this->_em->getConnection()->getDatabasePlatform()->getReadLockSql();
|
||||
@ -166,4 +168,17 @@ class LockTest extends \Doctrine\Tests\OrmFunctionalTestCase {
|
||||
$query = array_pop( $this->_sqlLoggerStack->queries );
|
||||
$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
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user