function SearchQuery::countQuery

Same name and namespace in other branches
  1. 7.x modules/search/search.extender.inc \SearchQuery::countQuery()
  2. 9 core/modules/search/src/SearchQuery.php \Drupal\search\SearchQuery::countQuery()
  3. 8.9.x core/modules/search/src/SearchQuery.php \Drupal\search\SearchQuery::countQuery()
  4. 11.x core/modules/search/src/SearchQuery.php \Drupal\search\SearchQuery::countQuery()

Builds the default count query for SearchQuery.

Since SearchQuery always uses GROUP BY, we can default to a subquery. We also add the same conditions as execute() because countQuery() is called first.

Overrides SelectExtender::countQuery

File

core/modules/search/src/SearchQuery.php, line 604

Class

SearchQuery
Search query extender and helper functions.

Namespace

Drupal\search

Code

public function countQuery() {
  if (!$this->executedPrepare) {
    $this->prepareAndNormalize();
  }
  // Clone the inner query.
  $inner = clone $this->query;
  // Add conditions to query.
  $inner->join('search_dataset', 'd', '[i].[sid] = [d].[sid] AND [i].[type] = [d].[type]');
  if (count($this->conditions)) {
    $inner->condition($this->conditions);
  }
  // Remove existing fields and expressions, they are not needed for a count
  // query.
  $fields =& $inner->getFields();
  $fields = [];
  $expressions =& $inner->getExpressions();
  $expressions = [];
  // Add sid as the only field and count them as a subquery.
  $count = $this->connection
    ->select($inner->fields('i', [
    'sid',
  ]), NULL);
  // Add the COUNT() expression.
  $count->addExpression('COUNT(*)');
  return $count;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.