few more fixes and tests for WhereClause

This commit is contained in:
Sergey Tsalkov
2011-09-23 22:03:15 -07:00
parent 80cc78edcd
commit a1f01a4f87
2 changed files with 43 additions and 1 deletions

View File

@@ -614,7 +614,13 @@ class WhereClause {
function negateLast() {
$i = count($this->clauses) - 1;
$this->clauses[$i] = 'NOT (' . $this->clauses[$i] . ')';
if (!isset($this->clauses[$i])) return;
if ($this->clauses[$i] instanceof WhereClause) {
$this->clauses[$i]->negate();
} else {
$this->clauses[$i] = 'NOT (' . $this->clauses[$i] . ')';
}
}
function negate() {

View File

@@ -22,6 +22,42 @@ class WhereClauseTest extends SimpleTest {
$this->assert($result[0]['age'] === '15');
}
function test_3_negate_last() {
$where = new WhereClause('and');
$where->add('password=%s', 'hello');
$subclause = $where->addClause('or');
$subclause->add('username!=%s', 'Bart');
$subclause->negateLast();
$result = DB::query("SELECT * FROM accounts WHERE %l", $where->text());
$this->assert(count($result) === 1);
$this->assert($result[0]['age'] === '15');
}
function test_4_negate_last_query() {
$where = new WhereClause('and');
$where->add('password=%s', 'hello');
$subclause = $where->addClause('or');
$subclause->add('username!=%s', 'Bart');
$where->negateLast();
$result = DB::query("SELECT * FROM accounts WHERE %l", $where->text());
$this->assert(count($result) === 1);
$this->assert($result[0]['age'] === '15');
}
function test_5_negate() {
$where = new WhereClause('and');
$where->add('password=%s', 'hello');
$subclause = $where->addClause('or');
$subclause->add('username!=%s', 'Bart');
$subclause->negate();
$result = DB::query("SELECT * FROM accounts WHERE %l", $where->text());
$this->assert(count($result) === 1);
$this->assert($result[0]['age'] === '15');
}
}