Skip to content

Commit

Permalink
Fix for SET Clause on null equal predicates
Browse files Browse the repository at this point in the history
  • Loading branch information
bajb committed Jan 22, 2015
1 parent 6346466 commit 76ef2c0
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/Assembler/Segments/PredicateAssembler.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public function assemblePredicateSet(PredicateSet $predicate)

public function assembleEqualPredicate(EqualPredicate $predicate)
{
if($predicate->isNullValue())
if($predicate->isNullValue() && !$predicate->isOperatorForced())
{
return $this->assembleSegment($predicate->getField()) . ' IS NULL';
}
Expand Down
7 changes: 1 addition & 6 deletions src/Builder/Traits/SetTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
namespace Packaged\QueryBuilder\Builder\Traits;

use Packaged\QueryBuilder\Clause\SetClause;
use Packaged\QueryBuilder\Expression\ValueExpression;
use Packaged\QueryBuilder\Predicate\EqualPredicate;
use Packaged\QueryBuilder\Statement\IStatement;

Expand All @@ -21,11 +20,7 @@ public function set($field, $value)
$this->addClause($set);
}

$set->addPredicate(
(new EqualPredicate())->setField($field)->setExpression(
ValueExpression::create($value)
)
);
$set->addPredicate(EqualPredicate::create($field, $value)->forceOperator());

return $this;
}
Expand Down
6 changes: 6 additions & 0 deletions src/Predicate/AbstractOperatorPredicate.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ abstract class AbstractOperatorPredicate implements IPredicate
*/
abstract public function getOperator();

/**
* @param $field
* @param $value
*
* @return static
*/
public static function create($field, $value)
{
$predicate = new static;
Expand Down
13 changes: 13 additions & 0 deletions src/Predicate/EqualPredicate.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

class EqualPredicate extends AbstractOperatorPredicate
{
protected $_forceOperator = false;

/**
* Operator e.g. =, >= >
* @return string
Expand All @@ -11,4 +13,15 @@ public function getOperator()
{
return '=';
}

public function forceOperator($forced = true)
{
$this->_forceOperator = $forced;
return $this;
}

public function isOperatorForced()
{
return $this->_forceOperator;
}
}
8 changes: 8 additions & 0 deletions tests/Statement/UpdateStatementTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public function testAssemble()
);

$statement->set('username', 'john');

$statement->andWhere(
(new LikePredicate())->setField('name')->setExpression(
EndsWithExpression::create('Joh')
Expand All @@ -39,5 +40,12 @@ public function testAssemble()
. 'WHERE username IS NOT NULL AND name LIKE "Joh%"',
QueryAssembler::stringify($statement)
);

$statement->set('bob', null);
$this->assertEquals(
'UPDATE tbl SET username = "john", bob = NULL '
. 'WHERE username IS NOT NULL AND name LIKE "Joh%"',
QueryAssembler::stringify($statement)
);
}
}

0 comments on commit 76ef2c0

Please sign in to comment.