Skip to content

Commit

Permalink
Support setting a field multiple times within an update statement (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
bajb authored May 23, 2019
1 parent bf9abcb commit 672f991
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
13 changes: 12 additions & 1 deletion src/Builder/Traits/SetTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use Packaged\QueryBuilder\Clause\SetClause;
use Packaged\QueryBuilder\Predicate\EqualPredicate;
use Packaged\QueryBuilder\Statement\IStatement;
use function is_array;

trait SetTrait
{
Expand All @@ -19,7 +20,17 @@ public function set($field, $value)
$this->addClause($set);
}

$set->addPredicate(EqualPredicate::create($field, $value)->forceOperator());
if(is_array($value))
{
foreach($value as $exp)
{
$set->addPredicate(EqualPredicate::create($field, $exp)->forceOperator());
}
}
else
{
$set->addPredicate(EqualPredicate::create($field, $value)->forceOperator());
}

return $this;
}
Expand Down
26 changes: 26 additions & 0 deletions tests/Statement/CQL/CqlUpdateStatementTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

use Packaged\QueryBuilder\Assembler\CQL\CqlAssembler;
use Packaged\QueryBuilder\Builder\CQL\CqlQueryBuilder;
use Packaged\QueryBuilder\Expression\DecrementExpression;
use Packaged\QueryBuilder\Expression\IncrementExpression;

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

public function testUpdateInitCounter()
{
$stmt = CqlQueryBuilder::update(
'tbl',
[
'counter' => [
IncrementExpression::create('counter', 1),
DecrementExpression::create('counter', 2),
],
]
);
$this->assertEquals(
'UPDATE "tbl" SET "counter" = "counter" + 1, "counter" = "counter" - 2',
CqlAssembler::stringify($stmt)
);

$assembler = new CqlAssembler($stmt);
$this->assertEquals(
'UPDATE "tbl" SET "counter" = "counter" + ?, "counter" = "counter" - ?',
$assembler->getQuery()
);
$this->assertEquals([1, 2], $assembler->getParameters());
}

public function testUpdateTtl()
{
$stmt = CqlQueryBuilder::update('tbl', ['field1' => 'value1'])
Expand Down

0 comments on commit 672f991

Please sign in to comment.