You are here

public function Connection::__construct in Drupal 9

Same name in this branch
  1. 9 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::__construct()
  2. 9 core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php \Drupal\Core\Database\Driver\sqlite\Connection::__construct()
  3. 9 core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php \Drupal\Core\Database\Driver\pgsql\Connection::__construct()
  4. 9 core/lib/Drupal/Core/Database/Driver/mysql/Connection.php \Drupal\Core\Database\Driver\mysql\Connection::__construct()
Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::__construct()

Constructs a Connection object.

Parameters

\PDO $connection: An object of the PDO class representing a database connection.

array $connection_options: An array of options for the connection. May include the following:

  • prefix
  • namespace
  • Other driver-specific options.

An 'extra_prefix' option may be present to allow BC for attaching per-table prefixes, but it is meant for internal use only.

4 calls to Connection::__construct()
Connection::__construct in core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
Constructs a \Drupal\Core\Database\Driver\sqlite\Connection object.
Connection::__construct in core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
Constructs a connection object.
Connection::__construct in core/lib/Drupal/Core/Database/Driver/mysql/Connection.php
Constructs a Connection object.
StubConnection::__construct in core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
Constructs a Connection object.
4 methods override Connection::__construct()
Connection::__construct in core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
Constructs a \Drupal\Core\Database\Driver\sqlite\Connection object.
Connection::__construct in core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
Constructs a connection object.
Connection::__construct in core/lib/Drupal/Core/Database/Driver/mysql/Connection.php
Constructs a Connection object.
StubConnection::__construct in core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
Constructs a Connection object.

File

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

Class

Connection
Base Database API class.

Namespace

Drupal\Core\Database

Code

public function __construct(\PDO $connection, array $connection_options) {
  if ($this->identifierQuotes === NULL) {
    @trigger_error('In drupal:10.0.0 not setting the $identifierQuotes property in the concrete Connection class will result in an RuntimeException. See https://www.drupal.org/node/2986894', E_USER_DEPRECATED);
    $this->identifierQuotes = [
      '',
      '',
    ];
  }
  assert(count($this->identifierQuotes) === 2 && Inspector::assertAllStrings($this->identifierQuotes), '\\Drupal\\Core\\Database\\Connection::$identifierQuotes must contain 2 string values');

  // The 'transactions' option is deprecated.
  if (isset($connection_options['transactions'])) {
    @trigger_error('Passing a \'transactions\' connection option to ' . __METHOD__ . ' is deprecated in drupal:9.1.0 and is removed in drupal:10.0.0. All database drivers must support transactions. See https://www.drupal.org/node/2278745', E_USER_DEPRECATED);
    unset($connection_options['transactions']);
  }

  // Manage the table prefix.
  if (isset($connection_options['prefix']) && is_array($connection_options['prefix'])) {
    if (count($connection_options['prefix']) > 1) {

      // If there are keys left besides the 'default' one, we are in a
      // multi-prefix scenario (for per-table prefixing, or migrations).
      // In that case, we put the non-default keys in a 'extra_prefix' key
      // to avoid mixing up with the normal 'prefix', which is a string since
      // Drupal 9.1.0.
      $prefix = $connection_options['prefix']['default'] ?? '';
      unset($connection_options['prefix']['default']);
      if (isset($connection_options['extra_prefix'])) {
        $connection_options['extra_prefix'] = array_merge($connection_options['extra_prefix'], $connection_options['prefix']);
      }
      else {
        $connection_options['extra_prefix'] = $connection_options['prefix'];
      }
    }
    else {
      $prefix = $connection_options['prefix']['default'] ?? '';
    }
    $connection_options['prefix'] = $prefix;
  }

  // Initialize and prepare the connection prefix.
  if (!isset($connection_options['extra_prefix'])) {
    $prefix = $connection_options['prefix'] ?? '';
  }
  else {
    $default_prefix = $connection_options['prefix'] ?? '';
    $prefix = $connection_options['extra_prefix'];
    $prefix['default'] = $default_prefix;
  }
  $this
    ->setPrefix($prefix);

  // Work out the database driver namespace if none is provided. This normally
  // written to setting.php by installer or set by
  // \Drupal\Core\Database\Database::parseConnectionInfo().
  if (empty($connection_options['namespace'])) {
    $connection_options['namespace'] = (new \ReflectionObject($this))
      ->getNamespaceName();
  }

  // The support for database drivers where the namespace that starts with
  // Drupal\\Driver\\Database\\ is deprecated.
  if (strpos($connection_options['namespace'], 'Drupal\\Driver\\Database') === 0) {
    @trigger_error('Support for database drivers located in the "drivers/lib/Drupal/Driver/Database" directory is deprecated in drupal:9.1.0 and is removed in drupal:10.0.0. Contributed and custom database drivers should be provided by modules and use the namespace "Drupal\\MODULE_NAME\\Driver\\Database\\DRIVER_NAME". See https://www.drupal.org/node/3123251', E_USER_DEPRECATED);
  }

  // Set a Statement class, unless the driver opted out.
  // @todo remove this in Drupal 10 https://www.drupal.org/node/3177490
  if (!empty($this->statementClass)) {
    @trigger_error('\\Drupal\\Core\\Database\\Connection::$statementClass is deprecated in drupal:9.1.0 and is removed from drupal:10.0.0. Database drivers should use or extend StatementWrapper instead, and encapsulate client-level statement objects. See https://www.drupal.org/node/3177488', E_USER_DEPRECATED);
    $connection
      ->setAttribute(\PDO::ATTR_STATEMENT_CLASS, [
      $this->statementClass,
      [
        $this,
      ],
    ]);
  }
  $this->connection = $connection;
  $this->connectionOptions = $connection_options;
}