예제 #1
0
 /**
  * @covers Expression::setLimit
  * @covers Expression::getLimit
  * @covers Expression::getOffset
  * @covers Expression::hasLimit
  * @covers Expression::getOffset
  * @covers Expression::clearLimits
  */
 public function testLimits()
 {
     $this->assertFalse($this->object->hasLimit(), 'Limit deveria ser vazio');
     $this->assertFalse($this->object->hasOffset(), 'Offset deveria ser vazio');
     $this->assertEquals($this->object, $this->object->setLimit(10), 'Não retornou o objeto');
     $this->assertTrue($this->object->hasLimit(), 'Limit não deveria ser vazio');
     $this->assertTrue($this->object->hasOffset(), 'Offset não deveria ser vazio');
     $this->assertEquals(10, $this->object->getLimit(), 'Retorno inválido para o limite');
     $this->assertEquals(0, $this->object->getOffset(), 'Retorno inválido para o offset');
     $this->assertEquals($this->object, $this->object->clearLimits(), 'Não retornou o objeto');
     $this->assertFalse($this->object->hasLimit(), 'Limit deveria ser vazio novamente');
     $this->assertFalse($this->object->hasOffset(), 'Offset deveria ser vazio novamente');
 }
예제 #2
0
 /**
  * Processa a query de consulta
  * @param Expression $qry
  * @return array No formato queryresult
  */
 protected function proccessQuery(Expression $qry)
 {
     $params = array();
     $sql = '';
     if ($qry->hasWhere()) {
         $sql = $qry->getWhere()->getSQL() . ' ';
         $params = $qry->getWhere()->getParams();
     }
     if ($qry->hasGroupBy()) {
         $sql .= 'GROUP BY ' . implode(',', $qry->getGroupBy()) . ' ';
     }
     if ($qry->hasHaving()) {
         $count = 1;
         $sql .= str_replace('WHERE', 'HAVING', $qry->getHaving()->getSQL(), $count) . ' ';
         $params = array_merge($params, $qry->getHaving()->getParams());
     }
     if ($qry->hasOrderBy()) {
         $order = array();
         foreach ($qry->getOrderBy() as $cp => $ord) {
             $order[] = $cp . ' ' . $ord;
         }
         $sql .= 'ORDER BY ' . implode(',', $order) . ' ';
     }
     if ($qry->hasLimit()) {
         $sql .= 'LIMIT ? ';
         $params[] = $qry->getLimit();
     }
     if ($qry->hasOffset() && $qry->getOffset() > 0) {
         $sql .= 'OFFSET ? ';
         $params[] = $qry->getOffset();
     }
     return $this->getQueryResult($sql, $params);
 }