You are here

public function Schema::getCollation in Drupal driver for SQL Server and SQL Azure 8

Same name and namespace in other branches
  1. 3.0.x drivers/lib/Drupal/Driver/Database/sqlsrv/Schema.php \Drupal\Driver\Database\sqlsrv\Schema::getCollation()

Get the collation of current connection wether it has or not a database defined in it.

Parameters

string $table:

string $column:

Return value

string

File

drivers/lib/Drupal/Driver/Database/sqlsrv/Schema.php, line 1225
Definition of Drupal\Driver\Database\sqlsrv\Schema

Class

Schema

Namespace

Drupal\Driver\Database\sqlsrv

Code

public function getCollation($table = NULL, $column = NULL) {

  // No table or column provided, then get info about
  // database (if exists) or server defaul collation.
  if (empty($table) && empty($column)) {

    // Database is defaulted from active connection.
    $options = $this->connection
      ->getConnectionOptions();
    $database = $options['database'];
    if (!empty($database)) {

      // Default collation for specific table.
      $sql = "SELECT CONVERT (varchar, DATABASEPROPERTYEX('{$database}', 'collation'))";
      return $this->connection
        ->query_direct($sql)
        ->fetchField();
    }
    else {

      // Server default collation.
      $sql = "SELECT SERVERPROPERTY ('collation') as collation";
      return $this->connection
        ->query_direct($sql)
        ->fetchField();
    }
  }
  $sql = <<<EOF
      SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME, DATA_TYPE
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = ':schema'
        AND TABLE_NAME = ':table'
        AND COLUMN_NAME = ':column'
EOF;
  $params = array();
  $params[':schema'] = $this->defaultSchema;
  $params[':table'] = $table;
  $params[':column'] = $column;
  $result = $this->connection
    ->query_direct($sql, $params)
    ->fetchObject();
  return $result->COLLATION_NAME;
}