You are here

protected function Connection::setPrefix in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::setPrefix()

Set the list of prefixes used by this database connection.

Parameters

array|string $prefix: Either a single prefix, or an array of prefixes.

3 calls to Connection::setPrefix()
Connection::queryTemporary in core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
Runs a SELECT query and stores its results in a temporary table.
Connection::__construct in core/lib/Drupal/Core/Database/Connection.php
Constructs a Connection object.
Connection::__construct in core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
Constructs a \Drupal\Core\Database\Driver\sqlite\Connection object.

File

core/lib/Drupal/Core/Database/Connection.php, line 446

Class

Connection
Base Database API class.

Namespace

Drupal\Core\Database

Code

protected function setPrefix($prefix) {
  if (is_array($prefix)) {
    $this->prefixes = $prefix + [
      'default' => '',
    ];
  }
  else {
    $this->prefixes = [
      'default' => $prefix,
    ];
  }
  [
    $start_quote,
    $end_quote,
  ] = $this->identifierQuotes;

  // Set up variables for use in prefixTables(). Replace table-specific
  // prefixes first.
  $this->prefixSearch = [];
  $this->prefixReplace = [];
  foreach ($this->prefixes as $key => $val) {
    if ($key != 'default') {
      $this->prefixSearch[] = '{' . $key . '}';

      // $val can point to another database like 'database.users'. In this
      // instance we need to quote the identifiers correctly.
      $val = str_replace('.', $end_quote . '.' . $start_quote, $val);
      $this->prefixReplace[] = $start_quote . $val . $key . $end_quote;
    }
  }

  // Then replace remaining tables with the default prefix.
  $this->prefixSearch[] = '{';

  // $this->prefixes['default'] can point to another database like
  // 'other_db.'. In this instance we need to quote the identifiers correctly.
  // For example, "other_db"."PREFIX_table_name".
  $this->prefixReplace[] = $start_quote . str_replace('.', $end_quote . '.' . $start_quote, $this->prefixes['default']);
  $this->prefixSearch[] = '}';
  $this->prefixReplace[] = $end_quote;

  // Set up a map of prefixed => un-prefixed tables.
  foreach ($this->prefixes as $table_name => $prefix) {
    if ($table_name !== 'default') {
      $this->unprefixedTablesMap[$prefix . $table_name] = $table_name;
    }
  }
}