<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Db\Sql\Predicate;
use Countable;
class PredicateSet implements PredicateInterface, Countable
{
const COMBINED_BY_AND = 'AND';
const OP_AND = 'AND';
const COMBINED_BY_OR = 'OR';
const OP_OR = 'OR';
protected $defaultCombination = self::COMBINED_BY_AND;
protected $predicates = array();
/**
* Constructor
*
* @param null|array $predicates
* @param string $defaultCombination
*/
public function __construct(array $predicates = null, $defaultCombination = self::COMBINED_BY_AND)
{
$this->defaultCombination = $defaultCombination;
if ($predicates) {
foreach ($predicates as $predicate) {
$this->addPredicate($predicate);
}
}
}
/**
* Add predicate to set
*
* @param PredicateInterface $predicate
* @param string $combination
* @return PredicateSet
*/
public function addPredicate(PredicateInterface $predicate, $combination = null)
{
if ($combination === null || !in_array($combination, array(self::OP_AND, self::OP_OR))) {
$combination = $this->defaultCombination;
}
if ($combination == self::OP_OR) {
$this->orPredicate($predicate);
return $this;
}
$this->andPredicate($predicate);
return $this;
}
/**
* Return the predicates
*
* @return PredicateInterface[]
*/
public function getPredicates()
{
return $this->predicates;
}
/**
* Add predicate using OR operator
*
* @param PredicateInterface $predicate
* @return PredicateSet
*/
public function orPredicate(PredicateInterface $predicate)
{
$this->predicates[] = array(self::OP_OR, $predicate);
return $this;
}
/**
* Add predicate using AND operator
*
* @param PredicateInterface $predicate
* @return PredicateSet
*/
public function andPredicate(PredicateInterface $predicate)
{
$this->predicates[] = array(self::OP_AND, $predicate);
return $this;
}
/**
* Get predicate parts for where statement
*
* @return array
*/
public function getExpressionData()
{
$parts = array();
for ($i = 0, $count = count($this->predicates); $i < $count; $i++) {
/** @var $predicate PredicateInterface */
$predicate = $this->predicates[$i][1];
if ($predicate instanceof PredicateSet) {
$parts[] = '(';
}
$parts = array_merge($parts, $predicate->getExpressionData());
if ($predicate instanceof PredicateSet) {
$parts[] = ')';
}
if (isset($this->predicates[$i+1])) {
$parts[] = sprintf(' %s ', $this->predicates[$i+1][0]);
}
}
return $parts;
}
/**
* Get count of attached predicates
*
* @return int
*/
public function count()
{
return count($this->predicates);
}
}
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
|
|