1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-20 15:31:42 +02:00

[ticket/16741] Specific DBs fixes

MSSQL:
- Fix bool type
- Fix comparator
- Drop Default constraint before deleting column
- Rename Default constraint to use phpBB's names
- Re-create the indices when changing the type of one column
- Uses varchar instead of varbinary

PostgreSQL:
- Creates auto increment sequences by hand instead of using serial
  in order to use phpBB's names
- Drop constraint on unique / primary indices

Oracle:
- Rename indices to use phpBB's names
- Fix string not null behaviour
- Fix broken regex in Oracle driver
- Handle to long indices on Oracle
- Rename auto_increment trigger and sequence
- Automatically lowercase keys in assoc results

PHPBB3-16741
This commit is contained in:
Tristan Darricau
2021-11-09 03:53:52 +01:00
parent b266ebbcef
commit b8d555f56a
14 changed files with 901 additions and 12 deletions

View File

@@ -0,0 +1,99 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @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()
{
return $this->wrapped->beginTransaction();
}
/**
* {@inheritDoc}
*/
public function commit()
{
return $this->wrapped->commit();
}
/**
* {@inheritDoc}
*/
public function rollBack()
{
return $this->wrapped->rollBack();
}
}

View File

@@ -0,0 +1,65 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @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();
}
}

View File

@@ -0,0 +1,109 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @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();
}
}

View File

@@ -0,0 +1,45 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @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\Platforms\OraclePlatform;
use Doctrine\DBAL\Schema\AbstractSchemaManager;
use Doctrine\DBAL\Schema\OracleSchemaManager;
use Doctrine\DBAL\Schema\Table;
class schema_manager extends OracleSchemaManager
{
/**
* {@inheritdoc}
*
* Copied from upstream to lowercase 'COMMENTS'
*/
public function listTableDetails($name): Table
{
$table = AbstractSchemaManager::listTableDetails($name);
$platform = $this->_platform;
assert($platform instanceof OraclePlatform);
$sql = $platform->getListTableCommentsSQL($name);
$tableOptions = $this->_conn->fetchAssociative($sql);
if ($tableOptions !== false)
{
$table->addOption('comment', $tableOptions['comments']);
}
return $table;
}
}

View File

@@ -0,0 +1,58 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @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)
{
return $this->wrapped->bindValue($param, $value, $type);
}
/**
* {@inheritDoc}
*/
public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null)
{
return $this->wrapped->bindParam($param, $variable, $type, $length);
}
/**
* {@inheritDoc}
*/
public function execute($params = null): DriverResult
{
return new result($this->wrapped->execute($params));
}
}