public function testClause()
 {
     $statement = new QueryStatement();
     $this->assertFalse($statement->hasClause('SELECT'));
     $select = new SelectClause();
     $statement->addClause($select);
     $this->assertSame($select, $statement->getClause('SELECT'));
     $this->assertTrue($statement->hasClause('SELECT'));
     $statement->removeClause('SELECT');
     $this->assertFalse($statement->hasClause('SELECT'));
 }
Exemple #2
0
 protected function _getAggregate($method, ISelectExpression $expression)
 {
     if ($this->isEmpty() && !$this->_isLoaded) {
         $orderBy = $this->_query->getClause('ORDER BY');
         //Remove order by for improved query performance
         if ($orderBy !== null) {
             $this->_query->removeClause('ORDER BY');
         }
         //Run a sub query if a limit is specified
         if ($this->_query->hasClause('LIMIT')) {
             $builder = $this->_getQueryBuilder();
             $aggregateQuery = $builder::select($expression)->from(SubQuerySelectExpression::create($this->_query, '_'));
             $result = Arrays::first(Arrays::first($this->_getDataStore()->getData($aggregateQuery)));
         } else {
             $originalClause = $this->_query->getClause('SELECT');
             $this->_query->addClause((new SelectClause())->addExpression($expression));
             $result = Arrays::first(Arrays::first($this->_getDataStore()->getData($this->_query)));
             $this->_query->addClause($originalClause);
         }
         if ($orderBy !== null) {
             $this->_query->addClause($orderBy);
         }
         return $result;
     }
     return parent::$method();
 }