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

3
namespace Doctrine\DBAL\Driver\PDOOracle;
4

5
use Doctrine\DBAL\DBALException;
6
use Doctrine\DBAL\Driver\AbstractOracleDriver;
Steve Müller's avatar
Steve Müller committed
7
use Doctrine\DBAL\Driver\PDOConnection;
8
use PDO;
9
use PDOException;
10

11
/**
Benjamin Morel's avatar
Benjamin Morel committed
12
 * PDO Oracle driver.
13
 *
Pascal Borreli's avatar
Pascal Borreli committed
14
 * WARNING: This driver gives us segfaults in our testsuites on CLOB and other
15 16 17 18
 * 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.
 */
19
class Driver extends AbstractOracleDriver
20
{
Benjamin Morel's avatar
Benjamin Morel committed
21 22 23
    /**
     * {@inheritdoc}
     */
24
    public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
25
    {
26 27 28 29
        if (! empty($params['persistent'])) {
            $driverOptions[PDO::ATTR_PERSISTENT] = true;
        }

30 31
        try {
            return new PDOConnection(
32
                $this->constructPdoDsn($params),
33 34 35 36
                $username,
                $password,
                $driverOptions
            );
37
        } catch (PDOException $e) {
38 39
            throw DBALException::driverException($this, $e);
        }
40
    }
41

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

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

        return $dsn;
58
    }
59

Benjamin Morel's avatar
Benjamin Morel committed
60 61 62
    /**
     * {@inheritdoc}
     */
63 64 65 66
    public function getName()
    {
        return 'pdo_oracle';
    }
Benjamin Eberlei's avatar
Benjamin Eberlei committed
67
}