Driver.php 1.3 KB
Newer Older
1 2
<?php

3
namespace Doctrine\DBAL\Driver\PDOOracle;
4

5
use Doctrine\DBAL\Driver\AbstractOracleDriver;
6
use Doctrine\DBAL\Driver\PDO\Connection;
7
use PDO;
8

9
/**
Benjamin Morel's avatar
Benjamin Morel committed
10
 * PDO Oracle driver.
11
 *
Pascal Borreli's avatar
Pascal Borreli committed
12
 * WARNING: This driver gives us segfaults in our testsuites on CLOB and other
13 14 15 16
 * stuff. PDO Oracle is not maintained by Oracle or anyone in the PHP community,
 * which leads us to the recommendation to use the "oci8" driver to connect
 * to Oracle instead.
 */
17
class Driver extends AbstractOracleDriver
18
{
Benjamin Morel's avatar
Benjamin Morel committed
19 20 21
    /**
     * {@inheritdoc}
     */
22
    public function connect(array $params)
23
    {
24 25
        $driverOptions = $params['driver_options'] ?? [];

26 27 28 29
        if (! empty($params['persistent'])) {
            $driverOptions[PDO::ATTR_PERSISTENT] = true;
        }

30
        return new Connection(
31
            $this->constructPdoDsn($params),
32 33
            $params['user'] ?? '',
            $params['password'] ?? '',
34 35
            $driverOptions
        );
36
    }
37

38 39 40
    /**
     * Constructs the Oracle PDO DSN.
     *
41
     * @param mixed[] $params
Benjamin Morel's avatar
Benjamin Morel committed
42 43
     *
     * @return string The DSN.
44
     */
45
    private function constructPdoDsn(array $params)
46
    {
47
        $dsn = 'oci:dbname=' . $this->getEasyConnectString($params);
48 49 50 51 52 53

        if (isset($params['charset'])) {
            $dsn .= ';charset=' . $params['charset'];
        }

        return $dsn;
54
    }
Benjamin Eberlei's avatar
Benjamin Eberlei committed
55
}