Cake\ORM\Query::_performCount PHP Method

_performCount() protected method

Performs and returns the COUNT(*) for the query.
protected _performCount ( ) : integer
return integer
    protected function _performCount()
    {
        $query = $this->cleanCopy();
        $counter = $this->_counter;
        if ($counter) {
            $query->counter(null);
            return (int) $counter($query);
        }
        $complex = $query->clause('distinct') || count($query->clause('group')) || count($query->clause('union')) || $query->clause('having');
        if (!$complex) {
            // Expression fields could have bound parameters.
            foreach ($query->clause('select') as $field) {
                if ($field instanceof ExpressionInterface) {
                    $complex = true;
                    break;
                }
            }
        }
        if (!$complex && $this->_valueBinder !== null) {
            $order = $this->clause('order');
            $complex = $order === null ? false : $order->hasNestedExpression();
        }
        $count = ['count' => $query->func()->count('*')];
        if (!$complex) {
            $query->eagerLoader()->autoFields(false);
            $statement = $query->select($count, true)->autoFields(false)->execute();
        } else {
            $statement = $this->connection()->newQuery()->select($count)->from(['count_source' => $query])->execute();
        }
        $result = $statement->fetch('assoc')['count'];
        $statement->closeCursor();
        return (int) $result;
    }