protected function Database::getTemporaryResultsTable in Search API 8
Creates a temporary table from a select query.
Will return the name of a table containing the item IDs of all results, or FALSE on failure.
Parameters
\Drupal\Core\Database\Query\SelectInterface $db_query: The select query whose results should be stored in the temporary table.
Return value
string|false The name of the temporary table, or FALSE on failure.
2 calls to Database::getTemporaryResultsTable()
- Database::getAutocompleteSuggestions in modules/search_api_db/ src/ Plugin/ search_api/ backend/ Database.php 
- Retrieves autocompletion suggestions for some user input.
- Database::getFacets in modules/search_api_db/ src/ Plugin/ search_api/ backend/ Database.php 
- Computes facets for a search query.
File
- modules/search_api_db/ src/ Plugin/ search_api/ backend/ Database.php, line 2598 
Class
- Database
- Indexes and searches items using the database.
Namespace
Drupal\search_api_db\Plugin\search_api\backendCode
protected function getTemporaryResultsTable(SelectInterface $db_query) {
  // We only need the id field, not the score.
  $fields =& $db_query
    ->getFields();
  unset($fields['score']);
  if (count($fields) != 1 || !isset($fields['item_id'])) {
    $this
      ->getLogger()
      ->warning('Error while adding facets: only "item_id" field should be used, used are: @fields.', [
      '@fields' => implode(', ', array_keys($fields)),
    ]);
    return FALSE;
  }
  $expressions =& $db_query
    ->getExpressions();
  $expressions = [];
  // Remove the ORDER BY clause, as it may refer to expressions that are
  // unset above.
  $orderBy =& $db_query
    ->getOrderBy();
  $orderBy = [];
  // If there's a GROUP BY for item_id, we leave that, all others need to be
  // discarded.
  $group_by =& $db_query
    ->getGroupBy();
  $group_by = array_intersect_key($group_by, [
    't.item_id' => TRUE,
  ]);
  $db_query
    ->distinct();
  if (!$db_query
    ->preExecute()) {
    return FALSE;
  }
  $args = $db_query
    ->getArguments();
  try {
    $result = $this->database
      ->queryTemporary((string) $db_query, $args);
  } catch (\PDOException $e) {
    $this
      ->logException($e, '%type while trying to create a temporary table: @message in %function (line %line of %file).');
    return FALSE;
  } catch (DatabaseException $e) {
    $this
      ->logException($e, '%type while trying to create a temporary table: @message in %function (line %line of %file).');
    return FALSE;
  }
  return $result;
}