diff --git a/phpBB/phpbb/db/doctrine/case_insensitive_string.php b/phpBB/phpbb/db/doctrine/case_insensitive_string.php index 484308fc06..e7b62f8649 100644 --- a/phpBB/phpbb/db/doctrine/case_insensitive_string.php +++ b/phpBB/phpbb/db/doctrine/case_insensitive_string.php @@ -15,6 +15,8 @@ namespace phpbb\db\doctrine; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; +use phpbb\db\middleware\oracle\platform as oracle_platform; +use phpbb\db\middleware\postgresql\platform as postgresql_platform; /** * Case-insensitive string type (only supported by Postgres). diff --git a/phpBB/phpbb/db/doctrine/connection_factory.php b/phpBB/phpbb/db/doctrine/connection_factory.php index fb24994b3d..15a0a6416e 100644 --- a/phpBB/phpbb/db/doctrine/connection_factory.php +++ b/phpBB/phpbb/db/doctrine/connection_factory.php @@ -13,12 +13,17 @@ namespace phpbb\db\doctrine; +use Doctrine\DBAL\Configuration; use Doctrine\DBAL\Connection; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Exception; use Doctrine\DBAL\Types\Type; use InvalidArgumentException; use phpbb\config_php_file; +use phpbb\db\middleware\mysql\middleware as mysql_middleware; +use phpbb\db\middleware\oracle\middleware as oracle_middleware; +use phpbb\db\middleware\postgresql\middleware as postgresql_middleware; +use phpbb\db\middleware\sqlsrv\middleware as sqlsrv_middleware; use phpbb\exception\runtime_exception; /** @@ -94,9 +99,21 @@ class connection_factory $port ); + $middleware = match($driver) + { + 'pdo_mysql', 'mysqli' => [new mysql_middleware()], + 'pdo_oci', 'oci8' => [new oracle_middleware()], + 'pdo_pgsql', 'pgsql' => [new postgresql_middleware()], + 'pdo_sqlsrv', 'sqlsrv' => [new sqlsrv_middleware()], + default => [], + }; + try { - $connection = DriverManager::getConnection($params); + $connection_config = new Configuration(); + $connection_config->setMiddlewares($middleware); + + $connection = DriverManager::getConnection($params, $connection_config); if (!Type::hasType(case_insensitive_string::CASE_INSENSITIVE_STRING)) { Type::addType(case_insensitive_string::CASE_INSENSITIVE_STRING, case_insensitive_string::class); diff --git a/phpBB/phpbb/db/doctrine/connection_parameter_factory.php b/phpBB/phpbb/db/doctrine/connection_parameter_factory.php index 90e41061fc..ea5a929ba7 100644 --- a/phpBB/phpbb/db/doctrine/connection_parameter_factory.php +++ b/phpBB/phpbb/db/doctrine/connection_parameter_factory.php @@ -13,9 +13,6 @@ namespace phpbb\db\doctrine; -use InvalidArgumentException; -use phpbb\db\doctrine\oci8\driver as oci8_driver; - /** * Helper class to generate Doctrine DBAL configuration. */ @@ -33,7 +30,7 @@ class connection_parameter_factory * * @return array Doctrine DBAL connection parameters. * - * @throws InvalidArgumentException If a required parameter is empty or null. + * @throws \InvalidArgumentException If a required parameter is empty or null. */ public static function get_configuration( string $driver, @@ -69,7 +66,7 @@ class connection_parameter_factory * * @return array Doctrine's DBAL configuration for SQLite. * - * @throws InvalidArgumentException If a required parameter is empty or null. + * @throws \InvalidArgumentException If a required parameter is empty or null. */ private static function build_connection_parameters( array $params, @@ -88,7 +85,7 @@ class connection_parameter_factory if (empty($user) || empty($name)) { - throw new InvalidArgumentException('Required database parameter is not set.'); + throw new \InvalidArgumentException('Required database parameter is not set.'); } $params = array_merge($params, [ @@ -146,37 +143,17 @@ class connection_parameter_factory */ private static function enrich_parameters(array $params) : array { - $enrichment_tags = [ - 'pdo_mysql' => [ - 'charset' => 'UTF8', - 'platform' => new mysql_platform(), - ], - 'oci8' => [ - 'charset' => 'UTF8', - 'platform' => new oracle_platform(), - 'driverClass' => oci8_driver::class, - ], - 'pdo_pgsql' => [ - 'charset' => 'UTF8', - 'platform' => new postgresql_platform(), - ], - 'pdo_sqlsrv' => [ - 'platform' => new sqlsrv_platform(), - ], - ]; + if (in_array($params['driver'], ['mysqli', 'pdo_mysql', 'pgsql', 'pdo_pgsql', 'oci8', 'pdo_oci'])) + { + $params['charset'] = 'UTF8'; + } if ($params['driver'] === 'pdo_mysql' && extension_loaded('pdo_mysql')) { - $enrichment_tags['pdo_mysql'][\PDO::MYSQL_ATTR_FOUND_ROWS] = true; + $params[\PDO::MYSQL_ATTR_FOUND_ROWS] = true; } - $driver = $params['driver']; - if (!array_key_exists($driver, $enrichment_tags)) - { - return $params; - } - - return array_merge($params, $enrichment_tags[$driver]); + return $params; } /* diff --git a/phpBB/phpbb/db/doctrine/oci8/connection.php b/phpBB/phpbb/db/doctrine/oci8/connection.php deleted file mode 100644 index 34ed744e9d..0000000000 --- a/phpBB/phpbb/db/doctrine/oci8/connection.php +++ /dev/null @@ -1,99 +0,0 @@ - - * @license GNU General Public License, version 2 (GPL-2.0) - * - * For full copyright and license information, please see - * the docs/CREDITS.txt file. - * - */ - -namespace phpbb\db\doctrine\oci8; - -use Doctrine\DBAL\Driver\Connection as DriverConnection; -use Doctrine\DBAL\Driver\Result as DriverResult; -use Doctrine\DBAL\Driver\Statement as DriverStatement; -use Doctrine\DBAL\ParameterType; - -class connection implements DriverConnection -{ - /** - * @var DriverConnection - */ - private $wrapped; - - /** - * @param DriverConnection $wrapped - */ - public function __construct(DriverConnection $wrapped) - { - $this->wrapped = $wrapped; - } - - /** - * {@inheritDoc} - */ - public function prepare(string $sql): DriverStatement - { - return new statement($this->wrapped->prepare($sql)); - } - - /** - * {@inheritDoc} - */ - public function query(string $sql): DriverResult - { - return new result($this->wrapped->query($sql)); - } - - /** - * {@inheritDoc} - */ - public function quote($value, $type = ParameterType::STRING) - { - return $this->wrapped->quote($value, $type); - } - - /** - * {@inheritDoc} - */ - public function exec(string $sql): int - { - return $this->wrapped->exec($sql); - } - - /** - * {@inheritDoc} - */ - public function lastInsertId($name = null) - { - return $this->wrapped->lastInsertId($name); - } - - /** - * {@inheritDoc} - */ - public function beginTransaction(): bool - { - return $this->wrapped->beginTransaction(); - } - - /** - * {@inheritDoc} - */ - public function commit(): bool - { - return $this->wrapped->commit(); - } - - /** - * {@inheritDoc} - */ - public function rollBack(): bool - { - return $this->wrapped->rollBack(); - } -} diff --git a/phpBB/phpbb/db/doctrine/oci8/driver.php b/phpBB/phpbb/db/doctrine/oci8/driver.php deleted file mode 100644 index 9a2c67aee0..0000000000 --- a/phpBB/phpbb/db/doctrine/oci8/driver.php +++ /dev/null @@ -1,65 +0,0 @@ - - * @license GNU General Public License, version 2 (GPL-2.0) - * - * For full copyright and license information, please see - * the docs/CREDITS.txt file. - * - */ - -namespace phpbb\db\doctrine\oci8; - -use Doctrine\DBAL\Connection as DoctrineConnection; -use Doctrine\DBAL\Driver\API\ExceptionConverter; -use Doctrine\DBAL\Platforms\AbstractPlatform; -use Doctrine\DBAL\Driver as DoctrineDriver; -use Doctrine\DBAL\Driver\OCI8\Driver as OCI8Driver; - -class driver implements DoctrineDriver -{ - /** - * @var DoctrineDriver - */ - private $wrapped; - - public function __construct() - { - $this->wrapped = new OCI8Driver(); - } - - /** - * {@inheritDoc} - */ - public function connect(array $params) - { - return new connection($this->wrapped->connect($params)); - } - - /** - * {@inheritDoc} - */ - public function getDatabasePlatform() - { - return $this->wrapped->getDatabasePlatform(); - } - - /** - * {@inheritDoc} - */ - public function getSchemaManager(DoctrineConnection $conn, AbstractPlatform $platform) - { - return new schema_manager($conn, $platform); - } - - /** - * {@inheritDoc} - */ - public function getExceptionConverter(): ExceptionConverter - { - return $this->wrapped->getExceptionConverter(); - } -} diff --git a/phpBB/phpbb/db/doctrine/oci8/result.php b/phpBB/phpbb/db/doctrine/oci8/result.php deleted file mode 100644 index 1ab1085427..0000000000 --- a/phpBB/phpbb/db/doctrine/oci8/result.php +++ /dev/null @@ -1,109 +0,0 @@ - - * @license GNU General Public License, version 2 (GPL-2.0) - * - * For full copyright and license information, please see - * the docs/CREDITS.txt file. - * - */ - -namespace phpbb\db\doctrine\oci8; - -use Doctrine\DBAL\Driver\Result as DriverResult; - -class result implements DriverResult -{ - /** - * @var DriverResult - */ - private $wrapped; - - /** - * @param DriverResult $wrapped - */ - public function __construct(DriverResult $wrapped) - { - $this->wrapped = $wrapped; - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - return $this->wrapped->fetchNumeric(); - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - return array_change_key_case($this->wrapped->fetchAssociative(), CASE_LOWER); - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - return $this->wrapped->fetchOne(); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return $this->wrapped->fetchAllNumeric(); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - $rows = []; - foreach ($this->wrapped->fetchAllAssociative() as $row) - { - $rows[] = array_change_key_case($row, CASE_LOWER); - } - return $rows; - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return $this->wrapped->fetchFirstColumn(); - } - - /** - * {@inheritDoc} - */ - public function rowCount(): int - { - return $this->wrapped->rowCount(); - } - - /** - * {@inheritDoc} - */ - public function columnCount(): int - { - return $this->wrapped->columnCount(); - } - - /** - * {@inheritDoc} - */ - public function free(): void - { - $this->wrapped->free(); - } -} diff --git a/phpBB/phpbb/db/doctrine/oci8/statement.php b/phpBB/phpbb/db/doctrine/oci8/statement.php deleted file mode 100644 index bca22473c4..0000000000 --- a/phpBB/phpbb/db/doctrine/oci8/statement.php +++ /dev/null @@ -1,58 +0,0 @@ - - * @license GNU General Public License, version 2 (GPL-2.0) - * - * For full copyright and license information, please see - * the docs/CREDITS.txt file. - * - */ - -namespace phpbb\db\doctrine\oci8; - -use Doctrine\DBAL\Driver\Result as DriverResult; -use Doctrine\DBAL\Driver\Statement as DriverStatement; -use Doctrine\DBAL\ParameterType; - -class statement implements DriverStatement -{ - /** - * @var DriverStatement - */ - private $wrapped; - - /** - * @param DriverStatement $wrapped - */ - public function __construct(DriverStatement $wrapped) - { - $this->wrapped = $wrapped; - } - - /** - * {@inheritDoc} - */ - public function bindValue($param, $value, $type = ParameterType::STRING): bool - { - return $this->wrapped->bindValue($param, $value, $type); - } - - /** - * {@inheritDoc} - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool - { - return $this->wrapped->bindParam($param, $variable, $type, $length); - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): DriverResult - { - return new result($this->wrapped->execute($params)); - } -} diff --git a/phpBB/phpbb/db/middleware/mysql/driver.php b/phpBB/phpbb/db/middleware/mysql/driver.php new file mode 100644 index 0000000000..306cadb72d --- /dev/null +++ b/phpBB/phpbb/db/middleware/mysql/driver.php @@ -0,0 +1,31 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\middleware\mysql; + +use Doctrine\DBAL\Driver\Middleware\AbstractDriverMiddleware; + +/** + * MySQL Doctrine driver middleware. + * Makes use of phpBB's MySQL specific platform. + */ +class driver extends AbstractDriverMiddleware +{ + /** + * {@inheritDoc} + */ + public function createDatabasePlatformForVersion($version) + { + return new platform(); + } +} diff --git a/phpBB/phpbb/db/middleware/mysql/middleware.php b/phpBB/phpbb/db/middleware/mysql/middleware.php new file mode 100644 index 0000000000..793512cfff --- /dev/null +++ b/phpBB/phpbb/db/middleware/mysql/middleware.php @@ -0,0 +1,29 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\middleware\mysql; + +use Doctrine\DBAL\Driver; +use phpbb\db\middleware\mysql\driver as mysql_driver; + +/** + * MySQL Doctrine middleware. + * Makes use of phpBB's MySQL specific platform. + */ +class middleware implements Driver\Middleware +{ + public function wrap(Driver $driver): Driver + { + return new mysql_driver($driver); + } +} diff --git a/phpBB/phpbb/db/doctrine/mysql_platform.php b/phpBB/phpbb/db/middleware/mysql/platform.php similarity index 94% rename from phpBB/phpbb/db/doctrine/mysql_platform.php rename to phpBB/phpbb/db/middleware/mysql/platform.php index 8a2090b6d9..ed4cbdb1bb 100644 --- a/phpBB/phpbb/db/doctrine/mysql_platform.php +++ b/phpBB/phpbb/db/middleware/mysql/platform.php @@ -11,7 +11,7 @@ * */ -namespace phpbb\db\doctrine; +namespace phpbb\db\middleware\mysql; use Doctrine\DBAL\Platforms\AbstractMySQLPlatform; use Doctrine\DBAL\Schema\TableDiff; @@ -23,7 +23,7 @@ use Doctrine\DBAL\Schema\TableDiff; * If it's indexed as primary key, it should be declared as NOT NULL * because MySQL primary key columns cannot be NULL. */ -class mysql_platform extends AbstractMySQLPlatform +class platform extends AbstractMySQLPlatform { /** * {@inheritDoc} diff --git a/phpBB/phpbb/db/middleware/oracle/driver.php b/phpBB/phpbb/db/middleware/oracle/driver.php new file mode 100644 index 0000000000..bb4172bfe0 --- /dev/null +++ b/phpBB/phpbb/db/middleware/oracle/driver.php @@ -0,0 +1,41 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\middleware\oracle; + +use Doctrine\DBAL\Connection as DoctrineConnection; +use Doctrine\DBAL\Driver\Middleware\AbstractDriverMiddleware; +use Doctrine\DBAL\Platforms\AbstractPlatform; + +/** + * Oracle Doctrine driver middleware. + * Makes use of phpBB's Oracle specific platform. + */ +class driver extends AbstractDriverMiddleware +{ + /** + * {@inheritDoc} + */ + public function getSchemaManager(DoctrineConnection $conn, AbstractPlatform $platform) + { + return new schema_manager($conn, $platform); + } + + /** + * {@inheritDoc} + */ + public function createDatabasePlatformForVersion($version) + { + return new platform(); + } +} diff --git a/phpBB/phpbb/db/middleware/oracle/middleware.php b/phpBB/phpbb/db/middleware/oracle/middleware.php new file mode 100644 index 0000000000..c54ca4d81d --- /dev/null +++ b/phpBB/phpbb/db/middleware/oracle/middleware.php @@ -0,0 +1,29 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\middleware\oracle; + +use Doctrine\DBAL\Driver; +use phpbb\db\middleware\oracle\driver as oracle_driver; + +/** + * Oracle Doctrine middleware. + * Makes use of phpBB's Oracle specific platform. + */ +class middleware implements Driver\Middleware +{ + public function wrap(Driver $driver): Driver + { + return new oracle_driver($driver); + } +} diff --git a/phpBB/phpbb/db/doctrine/oracle_platform.php b/phpBB/phpbb/db/middleware/oracle/platform.php similarity index 98% rename from phpBB/phpbb/db/doctrine/oracle_platform.php rename to phpBB/phpbb/db/middleware/oracle/platform.php index 7c011e6e77..8604f50fb1 100644 --- a/phpBB/phpbb/db/doctrine/oracle_platform.php +++ b/phpBB/phpbb/db/middleware/oracle/platform.php @@ -11,7 +11,7 @@ * */ -namespace phpbb\db\doctrine; +namespace phpbb\db\middleware\oracle; use Doctrine\DBAL\Platforms\OraclePlatform; use Doctrine\DBAL\Schema\Identifier; @@ -21,7 +21,7 @@ use Doctrine\DBAL\Schema\Table; /** * Oracle specific schema restrictions for BC. */ -class oracle_platform extends OraclePlatform +class platform extends OraclePlatform { /** * {@inheritDoc} diff --git a/phpBB/phpbb/db/doctrine/oci8/schema_manager.php b/phpBB/phpbb/db/middleware/oracle/schema_manager.php similarity index 96% rename from phpBB/phpbb/db/doctrine/oci8/schema_manager.php rename to phpBB/phpbb/db/middleware/oracle/schema_manager.php index c0b2caea1d..2ec1c08df0 100644 --- a/phpBB/phpbb/db/doctrine/oci8/schema_manager.php +++ b/phpBB/phpbb/db/middleware/oracle/schema_manager.php @@ -11,7 +11,7 @@ * */ -namespace phpbb\db\doctrine\oci8; +namespace phpbb\db\middleware\oracle; use Doctrine\DBAL\Platforms\OraclePlatform; use Doctrine\DBAL\Schema\AbstractSchemaManager; diff --git a/phpBB/phpbb/db/middleware/postgresql/driver.php b/phpBB/phpbb/db/middleware/postgresql/driver.php new file mode 100644 index 0000000000..35a2de28be --- /dev/null +++ b/phpBB/phpbb/db/middleware/postgresql/driver.php @@ -0,0 +1,31 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\middleware\postgresql; + +use Doctrine\DBAL\Driver\Middleware\AbstractDriverMiddleware; + +/** + * PostgreSQL Doctrine driver middleware. + * Makes use of phpBB's PostgreSQL specific platform. + */ +class driver extends AbstractDriverMiddleware +{ + /** + * {@inheritDoc} + */ + public function createDatabasePlatformForVersion($version) + { + return new platform(); + } +} diff --git a/phpBB/phpbb/db/middleware/postgresql/middleware.php b/phpBB/phpbb/db/middleware/postgresql/middleware.php new file mode 100644 index 0000000000..defdcea6eb --- /dev/null +++ b/phpBB/phpbb/db/middleware/postgresql/middleware.php @@ -0,0 +1,29 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\middleware\postgresql; + +use Doctrine\DBAL\Driver; +use phpbb\db\middleware\postgresql\driver as postgresql_driver; + +/** + * PostgreSQL Doctrine middleware. + * Makes use of phpBB's PostgreSQL specific platform. + */ +class middleware implements Driver\Middleware +{ + public function wrap(Driver $driver): Driver + { + return new postgresql_driver($driver); + } +} diff --git a/phpBB/phpbb/db/doctrine/postgresql_platform.php b/phpBB/phpbb/db/middleware/postgresql/platform.php similarity index 98% rename from phpBB/phpbb/db/doctrine/postgresql_platform.php rename to phpBB/phpbb/db/middleware/postgresql/platform.php index d67b2439b2..e5e7a9a1c6 100644 --- a/phpBB/phpbb/db/doctrine/postgresql_platform.php +++ b/phpBB/phpbb/db/middleware/postgresql/platform.php @@ -11,7 +11,7 @@ * */ -namespace phpbb\db\doctrine; +namespace phpbb\db\middleware\postgresql; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Platforms\PostgreSQLPlatform; @@ -31,7 +31,7 @@ use Doctrine\DBAL\Types\Type; * to stay compatible with the existing DB we have to change its * naming and not ours. */ -class postgresql_platform extends PostgreSQLPlatform +class platform extends PostgreSQLPlatform { /** * {@inheritdoc} diff --git a/phpBB/phpbb/db/middleware/sqlsrv/driver.php b/phpBB/phpbb/db/middleware/sqlsrv/driver.php new file mode 100644 index 0000000000..4fbd9e33f0 --- /dev/null +++ b/phpBB/phpbb/db/middleware/sqlsrv/driver.php @@ -0,0 +1,31 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\middleware\sqlsrv; + +use Doctrine\DBAL\Driver\Middleware\AbstractDriverMiddleware; + +/** + * Microsoft SQL server Doctrine driver middleware. + * Makes use of phpBB's SQL Server specific platform. + */ +class driver extends AbstractDriverMiddleware +{ + /** + * {@inheritDoc} + */ + public function createDatabasePlatformForVersion($version) + { + return new platform(); + } +} diff --git a/phpBB/phpbb/db/middleware/sqlsrv/middleware.php b/phpBB/phpbb/db/middleware/sqlsrv/middleware.php new file mode 100644 index 0000000000..03814e8cfa --- /dev/null +++ b/phpBB/phpbb/db/middleware/sqlsrv/middleware.php @@ -0,0 +1,29 @@ + + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\db\middleware\sqlsrv; + +use Doctrine\DBAL\Driver; +use phpbb\db\middleware\sqlsrv\driver as sqlsrv_driver; + +/** + * Microsoft SQL server Doctrine middleware. + * Makes use of phpBB's SQL Server specific platform. + */ +class middleware implements Driver\Middleware +{ + public function wrap(Driver $driver): Driver + { + return new sqlsrv_driver($driver); + } +} diff --git a/phpBB/phpbb/db/doctrine/sqlsrv_platform.php b/phpBB/phpbb/db/middleware/sqlsrv/platform.php similarity index 98% rename from phpBB/phpbb/db/doctrine/sqlsrv_platform.php rename to phpBB/phpbb/db/middleware/sqlsrv/platform.php index ca2a9dd7e6..a7a58e3dda 100644 --- a/phpBB/phpbb/db/doctrine/sqlsrv_platform.php +++ b/phpBB/phpbb/db/middleware/sqlsrv/platform.php @@ -11,7 +11,7 @@ * */ -namespace phpbb\db\doctrine; +namespace phpbb\db\middleware\sqlsrv; use Doctrine\DBAL\Platforms\SQLServerPlatform; use Doctrine\DBAL\Schema\Identifier; @@ -20,7 +20,7 @@ use Doctrine\DBAL\Schema\TableDiff; /** * SQLServer specific schema restrictions for BC. */ -class sqlsrv_platform extends SQLServerPlatform +class platform extends SQLServerPlatform { /** * {@inheritDoc}