Driver.php 1.45 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 PDOException;
9

10
/**
Benjamin Morel's avatar
Benjamin Morel committed
11
 * PDO Oracle driver.
12
 *
Pascal Borreli's avatar
Pascal Borreli committed
13
 * WARNING: This driver gives us segfaults in our testsuites on CLOB and other
14 15 16 17
 * 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.
 */
18
class Driver extends AbstractOracleDriver
19
{
Benjamin Morel's avatar
Benjamin Morel committed
20 21 22
    /**
     * {@inheritdoc}
     */
23
    public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
24
    {
25 26
        try {
            return new PDOConnection(
27
                $this->constructPdoDsn($params),
28 29 30 31
                $username,
                $password,
                $driverOptions
            );
32
        } catch (PDOException $e) {
33 34
            throw DBALException::driverException($this, $e);
        }
35
    }
36

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

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

        return $dsn;
53
    }
54

Benjamin Morel's avatar
Benjamin Morel committed
55 56 57
    /**
     * {@inheritdoc}
     */
58 59 60 61
    public function getName()
    {
        return 'pdo_oracle';
    }
Benjamin Eberlei's avatar
Benjamin Eberlei committed
62
}