Cannot execute with a transaction block after using fluent interface style with Predis\MultiExecBlock.

This commit is contained in:
Daniele Alessandri
2011-01-01 11:49:05 +01:00
parent 0bbbe064b5
commit 030d9740bd
2 changed files with 17 additions and 2 deletions
+9 -2
View File
@@ -929,8 +929,15 @@ class MultiExecBlock {
"Cannot invoke 'execute' or 'exec' inside an active client transaction block"
);
}
if ($block && !is_callable($block)) {
throw new \InvalidArgumentException('Argument passed must be a callable object');
if ($block) {
if (!is_callable($block)) {
throw new \InvalidArgumentException('Argument passed must be a callable object');
}
if (count($this->_commands) > 0) {
throw new ClientException(
'Cannot execute a transaction block after using fluent interface'
);
}
}
if (isset($this->_options['retry']) && !isset($block)) {
$this->discard();
+8
View File
@@ -524,6 +524,14 @@ class PredisClientFeaturesTestSuite extends PHPUnit_Framework_TestCase {
$this->assertEquals('bar', $replies[2]);
}
/**
* @expectedException Predis\ClientException
*/
function testMultiExecBlock_CannotMixFluentInterfaceAndAnonymousBlock() {
$emptyBlock = function($tx) { };
$tx = RC::getConnection()->multiExec()->get('foo')->execute($emptyBlock);
}
function testMultiExecBlock_EmptyCallableBlock() {
$client = RC::getConnection();
$client->flushdb();