public function Tasks::checkStandardConformingStrings

public Tasks::checkStandardConformingStrings()

Ensures standard_conforming_strings setting is 'on'.

When standard_conforming_strings setting is 'on' string literals ('...') treat backslashes literally, as specified in the SQL standard. This allows Drupal to convert between bytea, text and varchar columns.

File

core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php, line 192

Class

Tasks
Specifies installation tasks for PostgreSQL databases.

Namespace

Drupal\Core\Database\Driver\pgsql\Install

Code

public function checkStandardConformingStrings() {
  $database_connection = Database::getConnection();
  if (!$this->checkStandardConformingStringsSuccess()) {
    // First try to alter the database. If it fails, raise an error telling
    // the user to do it themselves.
    $connection_options = $database_connection->getConnectionOptions();
    // It is safe to include the database name directly here, because this
    // code is only called when a connection to the database is already
    // established, thus the database name is guaranteed to be a correct
    // value.
    $query = "ALTER DATABASE \"" . $connection_options['database'] . "\" SET standard_conforming_strings = 'on';";
    try {
      $database_connection->query($query);
    }
    catch (\Exception $e) {
      // Ignore possible errors when the user doesn't have the necessary
      // privileges to ALTER the database.
    }

    // Close the database connection so that the configuration parameter
    // is applied to the current connection.
    Database::closeConnection();

    // Recheck, if it fails, finally just rely on the end user to do the
    // right thing.
    if (!$this->checkStandardConformingStringsSuccess()) {
      $replacements = array(
        '%setting' => 'standard_conforming_strings',
        '%current_value' => 'off',
        '%needed_value' => 'on',
        '@query' => $query,
      );
      $this->fail(t("The %setting setting is currently set to '%current_value', but needs to be '%needed_value'. Change this by running the following query: <code>@query</code>", $replacements));
    }
  }
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Database!Driver!pgsql!Install!Tasks.php/function/Tasks::checkStandardConformingStrings/8.1.x