65 lines
1.5 KiB
PHP
65 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Doctrine\DBAL\Driver\PDO\OCI;
|
|
|
|
use Doctrine\DBAL\Driver\AbstractOracleDriver;
|
|
use Doctrine\DBAL\Driver\PDO\Connection;
|
|
use Doctrine\DBAL\Driver\PDO\Exception;
|
|
use Doctrine\DBAL\Driver\PDO\PDOConnect;
|
|
use PDO;
|
|
use PDOException;
|
|
use SensitiveParameter;
|
|
|
|
final class Driver extends AbstractOracleDriver
|
|
{
|
|
use PDOConnect;
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*
|
|
* @return Connection
|
|
*/
|
|
public function connect(
|
|
#[SensitiveParameter]
|
|
array $params
|
|
) {
|
|
$driverOptions = $params['driverOptions'] ?? [];
|
|
|
|
if (! empty($params['persistent'])) {
|
|
$driverOptions[PDO::ATTR_PERSISTENT] = true;
|
|
}
|
|
|
|
$safeParams = $params;
|
|
unset($safeParams['password'], $safeParams['url']);
|
|
|
|
try {
|
|
$pdo = $this->doConnect(
|
|
$this->constructPdoDsn($params),
|
|
$params['user'] ?? '',
|
|
$params['password'] ?? '',
|
|
$driverOptions,
|
|
);
|
|
} catch (PDOException $exception) {
|
|
throw Exception::new($exception);
|
|
}
|
|
|
|
return new Connection($pdo);
|
|
}
|
|
|
|
/**
|
|
* Constructs the Oracle PDO DSN.
|
|
*
|
|
* @param mixed[] $params
|
|
*/
|
|
private function constructPdoDsn(array $params): string
|
|
{
|
|
$dsn = 'oci:dbname=' . $this->getEasyConnectString($params);
|
|
|
|
if (isset($params['charset'])) {
|
|
$dsn .= ';charset=' . $params['charset'];
|
|
}
|
|
|
|
return $dsn;
|
|
}
|
|
}
|