3 namespace DataAccess\Queries
;
5 use DataAccess\Queries\IQueryConstraints
;
7 class QueryConstraints
implements IQueryConstraints
11 protected $_whereClauses = array();
12 protected $_limitClause;
13 protected $_joinClause;
15 public function applyTo($queryString)
17 $this->_queryString
= $queryString;
19 $this->applyJoinClause()
23 return $this->_queryString
;
26 public function where($columnName, $operator, $value)
28 $this->_whereClauses
[$columnName] = array('operator' => $operator, 'value' => $value);
32 public function limit($start, $end = null
)
36 $this->_limitClause
= sprintf(' LIMIT %u,%u', $start, $end);
40 $this->_limitClause
= sprintf(' LIMIT %u', $start);
45 public function join($type, $tableA, $columnA, $tableB, $columnB)
47 $this->_joinClause
= sprintf(' %s JOIN %s ON %s.%s = %s.%s', $type, $tableB, $tableA, $columnA, $tableB, $columnB);
51 private function applyJoinClause()
53 $this->_queryString
.= $this->_joinClause
;
57 private function applyWhereClauses()
59 $this->_queryString
.= ' WHERE ';
61 foreach($this->_whereClauses
as $columnName => $columnValue)
63 switch(gettype($columnValue['value']))
66 $this->_queryString
.= sprintf("%s%s%u", $columnName, $columnValue['operator'], $columnValue['value']) . ' AND ';
69 $this->_queryString
.= sprintf("%s %s '%s'", $columnName, $columnValue['operator'], $columnValue['value']) . ' AND ';
75 $this->_queryString
= rtrim($this->_queryString
, ' AND ');
79 private function applyLimitClause()
81 $this->_queryString
.= $this->_limitClause
;