public function testGettersAndSetters() { $set = new PredicateSet(); $eq = new EqualPredicate(); $neq = new NotEqualPredicate(); $this->assertFalse($set->hasPredicates()); $set->addPredicate($eq); $this->assertTrue($set->hasPredicates()); $this->assertSame([$eq], $set->getPredicates()); $set->clearPredicates(); $set->setPredicates([$eq, $neq]); $this->assertTrue($set->hasPredicates()); $set->clearPredicates(); $this->assertFalse($set->hasPredicates()); $this->setExpectedException("InvalidArgumentException"); $set->setPredicates([$eq, $neq, 'abc']); }
private function _getNewSet(...$expressions) { $newPredicates = WhereClause::buildPredicates($expressions); if (count($newPredicates) === 1) { $newSet = Arrays::first($newPredicates); } else { $newSet = new PredicateSet(); $newSet->setPredicates($newPredicates); } return $newSet; }
public static function buildPredicates(array $input, $table = null, $inverse = false) { $predicates = []; foreach ($input as $key => $value) { if ($value === null || is_scalar($value) || $value instanceof ValueExpression) { $pred = $inverse ? new NotEqualPredicate() : new EqualPredicate(); $pred->setField(FieldExpression::createWithTable($key, $table)); if (!$value instanceof ValueExpression) { $value = ValueExpression::create($value); } $pred->setExpression($value); $predicates[] = $pred; } else { if ($value instanceof IPredicate) { $predicates[] = $value; } else { if (is_array($value)) { if (is_int($key)) { $predicates = array_merge($predicates, static::buildPredicates($value, $table, $inverse)); } else { if (static::_isControlKeyword($key)) { switch ($key) { case 'NOT': $predicates = array_merge($predicates, static::buildPredicates($value, $table, true)); break; case 'OR': $pred = new OrPredicateSet(); $pred->setPredicates(static::buildPredicates($value, $table, $inverse)); $predicates[] = $pred; break; case 'AND': $pred = new PredicateSet(); $pred->setPredicates(static::buildPredicates($value, $table, $inverse)); $predicates[] = $pred; break; } } else { $pred = $inverse ? new NotInPredicate() : new InPredicate(); $pred->setField(FieldExpression::createWithTable($key, $table)); $pred->setExpression(ArrayExpression::create($value)); $predicates[] = $pred; } } } } } } return $predicates; }