/** * Format the predicate object by grouping nested predicates and parameters. * * @param \Titon\Db\Query\Predicate $predicate * @return string */ public function formatPredicate(Predicate $predicate) { $output = []; foreach ($predicate->getParams() as $param) { if ($param instanceof Predicate) { $output[] = sprintf($this->getClause(self::GROUP), $this->formatPredicate($param)); } else { if ($param instanceof Expr) { $output[] = $this->formatExpression($param); } } } return implode(' ' . $this->getKeyword($predicate->getType()) . ' ', $output); }
/** * Modify a predicate by adding additional clauses. * * @param \Titon\Db\Query\Predicate $predicate * @param int $type * @param string $field * @param mixed $op * @param mixed $value * @return $this * @throws \Titon\Db\Exception\ExistingPredicateException */ protected function _modifyPredicate(&$predicate, $type, $field, $op, $value) { if (!$predicate) { $predicate = new Predicate($type); } else { if ($predicate->getType() !== $type) { throw new ExistingPredicateException(sprintf('Predicate clause already created using "%s" conjunction', $predicate->getType())); } } if ($field instanceof Closure) { $predicate->bindCallback($field, $this); } else { if ($value !== null || in_array($op, [Expr::NULL, Expr::NOT_NULL], true)) { $predicate->add($field, $op, $value); } else { if ($op === '!=') { $predicate->notEq($field, $value); } else { $predicate->eq($field, $op); } } } return $this; }
public function testGetType() { $this->assertEquals(Predicate::ALSO, $this->object->getType()); $pred = new Predicate(Predicate::MAYBE); $this->assertEquals(Predicate::MAYBE, $pred->getType()); }