You are here

public function SearchQuery::countQuery in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 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 608
Contains \Drupal\search\SearchQuery.

Class

SearchQuery
Performs a query on the full-text search index for a word or words.

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 = array();
  $expressions =& $inner
    ->getExpressions();
  $expressions = array();

  // Add sid as the only field and count them as a subquery.
  $count = db_select($inner
    ->fields('i', array(
    'sid',
  )), NULL, array(
    'target' => 'replica',
  ));

  // Add the COUNT() expression.
  $count
    ->addExpression('COUNT(*)');
  return $count;
}