mirror of
https://github.com/zoe-may/TDoG-Skin.git
synced 2024-11-24 22:02:22 +08:00
108 lines
3.0 KiB
PHP
108 lines
3.0 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Doctrine\DBAL\Driver;
|
||
|
|
||
|
use Doctrine\DBAL\Connection;
|
||
|
use Doctrine\DBAL\Driver;
|
||
|
use Doctrine\DBAL\Driver\DriverException as TheDriverException;
|
||
|
use Doctrine\DBAL\Exception;
|
||
|
use Doctrine\DBAL\Exception\DriverException;
|
||
|
use Doctrine\DBAL\Platforms\SQLServer2005Platform;
|
||
|
use Doctrine\DBAL\Platforms\SQLServer2008Platform;
|
||
|
use Doctrine\DBAL\Platforms\SQLServer2012Platform;
|
||
|
use Doctrine\DBAL\Platforms\SQLServerPlatform;
|
||
|
use Doctrine\DBAL\Schema\SQLServerSchemaManager;
|
||
|
use Doctrine\DBAL\VersionAwarePlatformDriver;
|
||
|
|
||
|
use function assert;
|
||
|
use function preg_match;
|
||
|
use function version_compare;
|
||
|
|
||
|
/**
|
||
|
* Abstract base implementation of the {@link Driver} interface for Microsoft SQL Server based drivers.
|
||
|
*/
|
||
|
abstract class AbstractSQLServerDriver implements Driver, VersionAwarePlatformDriver
|
||
|
{
|
||
|
/**
|
||
|
* {@inheritdoc}
|
||
|
*/
|
||
|
public function createDatabasePlatformForVersion($version)
|
||
|
{
|
||
|
if (
|
||
|
! preg_match(
|
||
|
'/^(?P<major>\d+)(?:\.(?P<minor>\d+)(?:\.(?P<patch>\d+)(?:\.(?P<build>\d+))?)?)?/',
|
||
|
$version,
|
||
|
$versionParts
|
||
|
)
|
||
|
) {
|
||
|
throw Exception::invalidPlatformVersionSpecified(
|
||
|
$version,
|
||
|
'<major_version>.<minor_version>.<patch_version>.<build_version>'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
$majorVersion = $versionParts['major'];
|
||
|
$minorVersion = $versionParts['minor'] ?? 0;
|
||
|
$patchVersion = $versionParts['patch'] ?? 0;
|
||
|
$buildVersion = $versionParts['build'] ?? 0;
|
||
|
$version = $majorVersion . '.' . $minorVersion . '.' . $patchVersion . '.' . $buildVersion;
|
||
|
|
||
|
switch (true) {
|
||
|
case version_compare($version, '11.00.2100', '>='):
|
||
|
return new SQLServer2012Platform();
|
||
|
case version_compare($version, '10.00.1600', '>='):
|
||
|
return new SQLServer2008Platform();
|
||
|
case version_compare($version, '9.00.1399', '>='):
|
||
|
return new SQLServer2005Platform();
|
||
|
default:
|
||
|
return new SQLServerPlatform();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritdoc}
|
||
|
*
|
||
|
* @deprecated Use Connection::getDatabase() instead.
|
||
|
*/
|
||
|
public function getDatabase(Connection $conn)
|
||
|
{
|
||
|
$params = $conn->getParams();
|
||
|
|
||
|
if (isset($params['dbname'])) {
|
||
|
return $params['dbname'];
|
||
|
}
|
||
|
|
||
|
$database = $conn->query('SELECT DB_NAME()')->fetchColumn();
|
||
|
|
||
|
assert($database !== false);
|
||
|
|
||
|
return $database;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritdoc}
|
||
|
*/
|
||
|
public function getDatabasePlatform()
|
||
|
{
|
||
|
return new SQLServer2008Platform();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* {@inheritdoc}
|
||
|
*/
|
||
|
public function getSchemaManager(Connection $conn)
|
||
|
{
|
||
|
return new SQLServerSchemaManager($conn);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $message
|
||
|
*
|
||
|
* @return DriverException
|
||
|
*/
|
||
|
public function convertException($message, TheDriverException $exception)
|
||
|
{
|
||
|
return new DriverException($message, $exception);
|
||
|
}
|
||
|
}
|