Skip to content

Commit 672f991

Browse files
authored
Support setting a field multiple times within an update statement (#7)
1 parent bf9abcb commit 672f991

2 files changed

Lines changed: 38 additions & 1 deletion

File tree

src/Builder/Traits/SetTrait.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use Packaged\QueryBuilder\Clause\SetClause;
55
use Packaged\QueryBuilder\Predicate\EqualPredicate;
66
use Packaged\QueryBuilder\Statement\IStatement;
7+
use function is_array;
78

89
trait SetTrait
910
{
@@ -19,7 +20,17 @@ public function set($field, $value)
1920
$this->addClause($set);
2021
}
2122

22-
$set->addPredicate(EqualPredicate::create($field, $value)->forceOperator());
23+
if(is_array($value))
24+
{
25+
foreach($value as $exp)
26+
{
27+
$set->addPredicate(EqualPredicate::create($field, $exp)->forceOperator());
28+
}
29+
}
30+
else
31+
{
32+
$set->addPredicate(EqualPredicate::create($field, $value)->forceOperator());
33+
}
2334

2435
return $this;
2536
}

tests/Statement/CQL/CqlUpdateStatementTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
use Packaged\QueryBuilder\Assembler\CQL\CqlAssembler;
55
use Packaged\QueryBuilder\Builder\CQL\CqlQueryBuilder;
6+
use Packaged\QueryBuilder\Expression\DecrementExpression;
7+
use Packaged\QueryBuilder\Expression\IncrementExpression;
68

79
class CqlUpdateStatementTest extends \PHPUnit_Framework_TestCase
810
{
@@ -22,6 +24,30 @@ public function testUpdate()
2224
$this->assertEquals(['value1'], $assembler->getParameters());
2325
}
2426

27+
public function testUpdateInitCounter()
28+
{
29+
$stmt = CqlQueryBuilder::update(
30+
'tbl',
31+
[
32+
'counter' => [
33+
IncrementExpression::create('counter', 1),
34+
DecrementExpression::create('counter', 2),
35+
],
36+
]
37+
);
38+
$this->assertEquals(
39+
'UPDATE "tbl" SET "counter" = "counter" + 1, "counter" = "counter" - 2',
40+
CqlAssembler::stringify($stmt)
41+
);
42+
43+
$assembler = new CqlAssembler($stmt);
44+
$this->assertEquals(
45+
'UPDATE "tbl" SET "counter" = "counter" + ?, "counter" = "counter" - ?',
46+
$assembler->getQuery()
47+
);
48+
$this->assertEquals([1, 2], $assembler->getParameters());
49+
}
50+
2551
public function testUpdateTtl()
2652
{
2753
$stmt = CqlQueryBuilder::update('tbl', ['field1' => 'value1'])

0 commit comments

Comments
 (0)