Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 16 additions & 37 deletions src/Driver/IBMDB2/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

namespace Doctrine\DBAL\Driver\IBMDB2;

use Doctrine\DBAL\Driver\Exception;
use Doctrine\DBAL\Driver\IBMDB2\Exception\ConnectionError;
use Doctrine\DBAL\Driver\IBMDB2\Exception\ConnectionFailed;
use Doctrine\DBAL\Driver\IBMDB2\Exception\PrepareFailed;
use Doctrine\DBAL\Driver\IBMDB2\Exception\StatementError;
use Doctrine\DBAL\Driver\Result as ResultInterface;
Expand All @@ -17,12 +15,10 @@
use function assert;
use function db2_autocommit;
use function db2_commit;
use function db2_connect;
use function db2_escape_string;
use function db2_exec;
use function db2_last_insert_id;
use function db2_num_rows;
use function db2_pconnect;
use function db2_prepare;
use function db2_rollback;
use function db2_server_info;
Expand All @@ -35,49 +31,32 @@
final class Connection implements ServerInfoAwareConnection
{
/** @var resource */
private $conn;
private $connection;

/**
* @internal The connection can be only instantiated by its driver.
*
* @param array<string,mixed> $driverOptions
*
* @throws Exception
* @param resource $connection
*/
public function __construct(
string $database,
bool $persistent,
string $username,
string $password,
array $driverOptions = []
) {
if ($persistent) {
$conn = db2_pconnect($database, $username, $password, $driverOptions);
} else {
$conn = db2_connect($database, $username, $password, $driverOptions);
}

if ($conn === false) {
throw ConnectionFailed::new();
}

$this->conn = $conn;
public function __construct($connection)
{
$this->connection = $connection;
}

/**
* {@inheritdoc}
*/
public function getServerVersion()
{
$serverInfo = db2_server_info($this->conn);
$serverInfo = db2_server_info($this->connection);
assert($serverInfo instanceof stdClass);

return $serverInfo->DBMS_VER;
}

public function prepare(string $sql): DriverStatement
{
$stmt = @db2_prepare($this->conn, $sql);
$stmt = @db2_prepare($this->connection, $sql);

if ($stmt === false) {
throw PrepareFailed::new(error_get_last());
Expand Down Expand Up @@ -107,7 +86,7 @@ public function quote($value, $type = ParameterType::STRING)

public function exec(string $sql): int
{
$stmt = @db2_exec($this->conn, $sql);
$stmt = @db2_exec($this->connection, $sql);

if ($stmt === false) {
throw StatementError::new();
Expand All @@ -129,15 +108,15 @@ public function lastInsertId($name = null)
);
}

return db2_last_insert_id($this->conn);
return db2_last_insert_id($this->connection);
}

/**
* {@inheritdoc}
*/
public function beginTransaction()
{
$result = db2_autocommit($this->conn, DB2_AUTOCOMMIT_OFF);
$result = db2_autocommit($this->connection, DB2_AUTOCOMMIT_OFF);
assert(is_bool($result));

return $result;
Expand All @@ -148,11 +127,11 @@ public function beginTransaction()
*/
public function commit()
{
if (! db2_commit($this->conn)) {
throw ConnectionError::new($this->conn);
if (! db2_commit($this->connection)) {
throw ConnectionError::new($this->connection);
}

$result = db2_autocommit($this->conn, DB2_AUTOCOMMIT_ON);
$result = db2_autocommit($this->connection, DB2_AUTOCOMMIT_ON);
assert(is_bool($result));

return $result;
Expand All @@ -163,11 +142,11 @@ public function commit()
*/
public function rollBack()
{
if (! db2_rollback($this->conn)) {
throw ConnectionError::new($this->conn);
if (! db2_rollback($this->connection)) {
throw ConnectionError::new($this->connection);
}

$result = db2_autocommit($this->conn, DB2_AUTOCOMMIT_ON);
$result = db2_autocommit($this->connection, DB2_AUTOCOMMIT_ON);
assert(is_bool($result));

return $result;
Expand Down
25 changes: 18 additions & 7 deletions src/Driver/IBMDB2/Driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Doctrine\DBAL\Driver\IBMDB2;

use Doctrine\DBAL\Driver\AbstractDB2Driver;
use Doctrine\DBAL\Driver\IBMDB2\Exception\ConnectionFailed;

final class Driver extends AbstractDB2Driver
{
Expand All @@ -13,12 +14,22 @@ final class Driver extends AbstractDB2Driver
*/
public function connect(array $params)
{
return new Connection(
DataSourceName::fromConnectionParameters($params)->toString(),
isset($params['persistent']) && $params['persistent'] === true,
$params['user'] ?? '',
$params['password'] ?? '',
$params['driverOptions'] ?? []
);
$dataSourceName = DataSourceName::fromConnectionParameters($params)->toString();

$username = $params['user'] ?? '';
$password = $params['password'] ?? '';
$driverOptions = $params['driverOptions'] ?? [];

if (! empty($params['persistent'])) {
$connection = db2_pconnect($dataSourceName, $username, $password, $driverOptions);
} else {
$connection = db2_connect($dataSourceName, $username, $password, $driverOptions);
}

if ($connection === false) {
throw ConnectionFailed::new();
}

return new Connection($connection);
}
}
74 changes: 19 additions & 55 deletions src/Driver/Mysqli/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

namespace Doctrine\DBAL\Driver\Mysqli;

use Doctrine\DBAL\Driver\Exception;
use Doctrine\DBAL\Driver\Mysqli\Exception\ConnectionError;
use Doctrine\DBAL\Driver\Mysqli\Exception\ConnectionFailed;
use Doctrine\DBAL\Driver\Result as ResultInterface;
use Doctrine\DBAL\Driver\ServerInfoAwareConnection;
use Doctrine\DBAL\Driver\Statement as DriverStatement;
Expand All @@ -24,48 +22,14 @@ final class Connection implements ServerInfoAwareConnection
public const OPTION_FLAGS = 'flags';

/** @var mysqli */
private $conn;
private $connection;

/**
* @internal The connection can be only instantiated by its driver.
*
* @param iterable<Initializer> $preInitializers
* @param iterable<Initializer> $postInitializers
*
* @throws Exception
*/
public function __construct(
?string $host = null,
?string $username = null,
?string $password = null,
?string $database = null,
?int $port = null,
?string $socket = null,
int $flags = 0,
iterable $preInitializers = [],
iterable $postInitializers = []
) {
$connection = new mysqli();

foreach ($preInitializers as $initializer) {
$initializer->initialize($connection);
}

try {
$success = @$connection->real_connect($host, $username, $password, $database, $port, $socket, $flags);
} catch (mysqli_sql_exception $e) {
throw ConnectionFailed::upcast($e);
}

if (! $success) {
throw ConnectionFailed::new($connection);
}

foreach ($postInitializers as $initializer) {
$initializer->initialize($connection);
}

$this->conn = $connection;
public function __construct(mysqli $connection)
{
$this->connection = $connection;
}

/**
Expand All @@ -77,7 +41,7 @@ public function __construct(
*/
public function getWrappedResourceHandle()
{
return $this->conn;
return $this->connection;
}

/**
Expand All @@ -90,28 +54,28 @@ public function getWrappedResourceHandle()
*/
public function getServerVersion()
{
$serverInfos = $this->conn->get_server_info();
$serverInfos = $this->connection->get_server_info();
if (stripos($serverInfos, 'mariadb') !== false) {
return $serverInfos;
}

$majorVersion = floor($this->conn->server_version / 10000);
$minorVersion = floor(($this->conn->server_version - $majorVersion * 10000) / 100);
$patchVersion = floor($this->conn->server_version - $majorVersion * 10000 - $minorVersion * 100);
$majorVersion = floor($this->connection->server_version / 10000);
$minorVersion = floor(($this->connection->server_version - $majorVersion * 10000) / 100);
$patchVersion = floor($this->connection->server_version - $majorVersion * 10000 - $minorVersion * 100);

return $majorVersion . '.' . $minorVersion . '.' . $patchVersion;
}

public function prepare(string $sql): DriverStatement
{
try {
$stmt = $this->conn->prepare($sql);
$stmt = $this->connection->prepare($sql);
} catch (mysqli_sql_exception $e) {
throw ConnectionError::upcast($e);
}

if ($stmt === false) {
throw ConnectionError::new($this->conn);
throw ConnectionError::new($this->connection);
}

return new Statement($stmt);
Expand All @@ -127,22 +91,22 @@ public function query(string $sql): ResultInterface
*/
public function quote($value, $type = ParameterType::STRING)
{
return "'" . $this->conn->escape_string($value) . "'";
return "'" . $this->connection->escape_string($value) . "'";
}

public function exec(string $sql): int
{
try {
$result = $this->conn->query($sql);
$result = $this->connection->query($sql);
} catch (mysqli_sql_exception $e) {
throw ConnectionError::upcast($e);
}

if ($result === false) {
throw ConnectionError::new($this->conn);
throw ConnectionError::new($this->connection);
}

return $this->conn->affected_rows;
return $this->connection->affected_rows;
}

/**
Expand All @@ -158,15 +122,15 @@ public function lastInsertId($name = null)
);
}

return $this->conn->insert_id;
return $this->connection->insert_id;
}

/**
* {@inheritdoc}
*/
public function beginTransaction()
{
$this->conn->begin_transaction();
$this->connection->begin_transaction();

return true;
}
Expand All @@ -177,7 +141,7 @@ public function beginTransaction()
public function commit()
{
try {
return $this->conn->commit();
return $this->connection->commit();
} catch (mysqli_sql_exception $e) {
return false;
}
Expand All @@ -189,7 +153,7 @@ public function commit()
public function rollBack()
{
try {
return $this->conn->rollback();
return $this->connection->rollback();
} catch (mysqli_sql_exception $e) {
return false;
}
Expand Down
Loading