You are here

private function DriverAttributes::intiailize in Drupal driver for SQL Server and SQL Azure 8.2

Gets all available attributes as a flattened key-value array.

1 call to DriverAttributes::intiailize()
DriverAttributes::__construct in drivers/lib/Drupal/Driver/Database/sqlsrv/Scheme/DriverAttributes.php

File

drivers/lib/Drupal/Driver/Database/sqlsrv/Scheme/DriverAttributes.php, line 40

Class

DriverAttributes
Type class for the driver attributes.

Namespace

Drupal\Driver\Database\sqlsrv\Scheme

Code

private function intiailize() {

  // These are the native attributes...
  $atts = [
    'ATTR_ORACLE_NULLS' => [
      'code' => \PDO::ATTR_ORACLE_NULLS,
    ],
    'ATTR_CASE' => [
      'code' => \PDO::ATTR_CASE,
    ],
    'ATTR_CLIENT_VERSION' => [
      'code' => \PDO::ATTR_CLIENT_VERSION,
    ],
    'ATTR_SERVER_INFO' => [
      'code' => \PDO::ATTR_SERVER_INFO,
    ],
    'ATTR_ERRMODE' => [
      'code' => \PDO::ATTR_ERRMODE,
    ],
    'SQLSRV_ATTR_ENCODING' => [
      'code' => \PDO::SQLSRV_ATTR_ENCODING,
    ],
    'SQLSRV_ATTR_DIRECT_QUERY' => [
      'code' => \PDO::SQLSRV_ATTR_DIRECT_QUERY,
    ],
    'SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE' => [
      'code' => \PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE,
    ],
    'SQLSRV_ATTR_FETCHES_NUMERIC_TYPE' => [
      'code' => \PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE,
    ],
    'ATTR_STRINGIFY_FETCHES' => [
      'code' => \PDO::ATTR_STRINGIFY_FETCHES,
    ],
    'ATTR_STATEMENT_CLASS' => [
      'code' => \PDO::ATTR_STATEMENT_CLASS,
    ],
  ];
  $result = [];

  // Flatten the array....
  foreach ($atts as $name => $spec) {
    $value = $this->connection
      ->getAttribute($spec['code']);
    if (!is_array($value)) {
      $value = [
        '' => $value,
      ];
    }
    foreach ($value as $key => $v) {
      if (!is_scalar($v)) {
        continue;
      }
      $n = $key ? $name . ".{$key}" : $name;
      $result[$n] = [
        'value' => $v,
        'pretty' => $v,
      ];
    }
  }

  // Theses are the expanded ones...
  $prettify = [
    'ATTR_CASE' => [
      'prettify' => [
        $this,
        'pdoFriendlyNameCase',
      ],
    ],
    'ATTR_ERRMODE' => [
      'prettify' => [
        $this,
        'pdoFriendlyNameError',
      ],
    ],
    'SQLSRV_ATTR_ENCODING' => [
      'prettify' => [
        $this,
        'pdoFriendlyNameEncoding',
      ],
    ],
    'ATTR_STRINGIFY_FETCHES' => [
      'prettify' => [
        $this,
        'pdoFriendlyNameBoolean',
      ],
    ],
    'ATTR_STRINGIFY_FETCHES' => [
      'prettify' => [
        $this,
        'pdoFriendlyNameBoolean',
      ],
    ],
    'SQLSRV_ATTR_DIRECT_QUERY' => [
      'prettify' => [
        $this,
        'pdoFriendlyNameBoolean',
      ],
    ],
    'SQLSRV_ATTR_FETCHES_NUMERIC_TYPE' => [
      'prettify' => [
        $this,
        'pdoFriendlyNameBoolean',
      ],
    ],
    'ATTR_ORACLE_NULLS' => [
      'prettify' => [
        $this,
        'pdoFriendlyNameBoolean',
      ],
    ],
    'SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE' => [
      'prettify' => [
        $this,
        'pdoFriendlySizeKb',
      ],
    ],
  ];
  foreach ($prettify as $key => $spec) {
    $result[$key]['pretty'] = call_user_func($spec['prettify'], $result[$key]['value']);
  }
  $this->attributes = $result;
}