3 namespace DataAccess\Queries
;
5 use DataAccess\Queries\IQueryBuilder
;
7 class QueryBuilder
implements IQueryBuilder
9 private $_queryString = 'SELECT * FROM %s';
11 protected $_whereClauses = array();
12 protected $_limitClause;
13 protected $_joinClauses = array();
15 public function buildQuery()
17 $this->applyJoinClauses()
21 return $this->_queryString
;
24 public function setBaseQuery($baseQuery)
26 $this->_queryString
= $baseQuery;
29 public function where($columnName, $operator, $value)
31 $this->_whereClauses
[$columnName] = array('operator' => $operator, 'value' => $value);
35 public function limit($start, $end = null
)
39 $this->_limitClause
= sprintf(' LIMIT %u,%u', $start, $end);
43 $this->_limitClause
= sprintf(' LIMIT %u', $start);
48 public function join($type, $tableA, $columnA, $tableB, $columnB)
50 $this->_joinClauses
[] = sprintf(' %s JOIN %s ON %s.%s = %s.%s', $type, $tableB, $tableA, $columnA, $tableB, $columnB);
54 private function applyJoinClauses()
56 foreach($this->_joinClauses
as $joinClause)
58 $this->_queryString
.= $joinClause;
64 private function applyWhereClauses()
66 $this->_queryString
.= ' WHERE ';
68 foreach($this->_whereClauses
as $columnName => $columnValue)
70 switch(gettype($columnValue['value']))
73 $this->_queryString
.= sprintf("%s%s%u", $columnName, $columnValue['operator'], $columnValue['value']) . ' AND ';
76 $this->_queryString
.= sprintf("%s %s '%s'", $columnName, $columnValue['operator'], $columnValue['value']) . ' AND ';
82 $this->_queryString
= rtrim($this->_queryString
, ' AND ');
86 private function applyLimitClause()
88 $this->_queryString
.= $this->_limitClause
;