diff --git a/db.class.php b/db.class.php index 29c978a..f222732 100644 --- a/db.class.php +++ b/db.class.php @@ -873,8 +873,8 @@ class WhereClause { $args = array_merge($args, $clause_args); } - if ($this->type == 'and') $sql = implode(' AND ', $sql); - else $sql = implode(' OR ', $sql); + if ($this->type == 'and') $sql = sprintf('(%s)', implode(' AND ', $sql)); + else $sql = sprintf('(%s)', implode(' OR ', $sql)); if ($this->negate) $sql = '(NOT ' . $sql . ')'; return array($sql, $args); diff --git a/simpletest/WhereClauseTest.php b/simpletest/WhereClauseTest.php index 45843d1..14ceee7 100644 --- a/simpletest/WhereClauseTest.php +++ b/simpletest/WhereClauseTest.php @@ -58,7 +58,17 @@ class WhereClauseTest extends SimpleTest { $this->assert($result[0]['age'] === '15'); } - function test_6_or() { + function test_6_negate_two() { + $where = new WhereClause('and'); + $where->add('password=%s', 'hello'); + $where->add('username=%s', 'Bart'); + $where->negate(); + + $result = DB::query("SELECT * FROM accounts WHERE %l", $where); + $this->assert(count($result) === 7); + } + + function test_7_or() { $where = new WhereClause('or'); $where->add('username=%s', 'Bart'); $where->add('username=%s', 'Abe');