DriverTest.php 3.55 KB
Newer Older
1 2 3 4
<?php

namespace Doctrine\Tests\DBAL\Driver\PDOPgSql;

Sergei Morozov's avatar
Sergei Morozov committed
5
use Doctrine\DBAL\Driver\PDOConnection;
6 7
use Doctrine\DBAL\Driver\PDOPgSql\Driver;
use Doctrine\Tests\DBAL\Driver\AbstractPostgreSQLDriverTest;
8
use PDO;
9
use PDOException;
Sergei Morozov's avatar
Sergei Morozov committed
10
use PHPUnit_Framework_SkippedTestError;
11
use function defined;
12 13 14 15 16

class DriverTest extends AbstractPostgreSQLDriverTest
{
    public function testReturnsName()
    {
17
        self::assertSame('pdo_pgsql', $this->driver->getName());
18 19
    }

20 21 22
    /**
     * @group DBAL-920
     */
23 24
    public function testConnectionDisablesPreparesOnPhp56()
    {
25
        $this->skipWhenNotUsingPhp56AndPdoPgsql();
26

27
        $connection = $this->createDriver()->connect(
Sergei Morozov's avatar
Sergei Morozov committed
28
            [
29
                'host' => $GLOBALS['db_host'],
Sergei Morozov's avatar
Sergei Morozov committed
30 31
                'port' => $GLOBALS['db_port'],
            ],
32 33 34 35
            $GLOBALS['db_username'],
            $GLOBALS['db_password']
        );

Sergei Morozov's avatar
Sergei Morozov committed
36
        self::assertInstanceOf(PDOConnection::class, $connection);
37 38

        try {
39
            self::assertTrue($connection->getAttribute(PDO::PGSQL_ATTR_DISABLE_PREPARES));
40 41
        } catch (PDOException $ignored) {
            /** @link https://bugs.php.net/bug.php?id=68371 */
42
            $this->markTestIncomplete('See https://bugs.php.net/bug.php?id=68371');
43
        }
44 45
    }

46 47 48
    /**
     * @group DBAL-920
     */
49 50 51 52 53
    public function testConnectionDoesNotDisablePreparesOnPhp56WhenAttributeDefined()
    {
        $this->skipWhenNotUsingPhp56AndPdoPgsql();

        $connection = $this->createDriver()->connect(
Sergei Morozov's avatar
Sergei Morozov committed
54
            [
55
                'host' => $GLOBALS['db_host'],
Sergei Morozov's avatar
Sergei Morozov committed
56 57
                'port' => $GLOBALS['db_port'],
            ],
58 59
            $GLOBALS['db_username'],
            $GLOBALS['db_password'],
Sergei Morozov's avatar
Sergei Morozov committed
60
            [PDO::PGSQL_ATTR_DISABLE_PREPARES => false]
61 62
        );

Sergei Morozov's avatar
Sergei Morozov committed
63
        self::assertInstanceOf(PDOConnection::class, $connection);
64 65

        try {
66
            self::assertNotSame(true, $connection->getAttribute(PDO::PGSQL_ATTR_DISABLE_PREPARES));
67 68
        } catch (PDOException $ignored) {
            /** @link https://bugs.php.net/bug.php?id=68371 */
69
            $this->markTestIncomplete('See https://bugs.php.net/bug.php?id=68371');
70
        }
71 72
    }

73 74 75
    /**
     * @group DBAL-920
     */
76 77 78 79 80
    public function testConnectionDisablePreparesOnPhp56WhenDisablePreparesIsExplicitlyDefined()
    {
        $this->skipWhenNotUsingPhp56AndPdoPgsql();

        $connection = $this->createDriver()->connect(
Sergei Morozov's avatar
Sergei Morozov committed
81
            [
82
                'host' => $GLOBALS['db_host'],
Sergei Morozov's avatar
Sergei Morozov committed
83 84
                'port' => $GLOBALS['db_port'],
            ],
85 86
            $GLOBALS['db_username'],
            $GLOBALS['db_password'],
Sergei Morozov's avatar
Sergei Morozov committed
87
            [PDO::PGSQL_ATTR_DISABLE_PREPARES => true]
88 89
        );

Sergei Morozov's avatar
Sergei Morozov committed
90
        self::assertInstanceOf(PDOConnection::class, $connection);
91 92

        try {
93
            self::assertTrue($connection->getAttribute(PDO::PGSQL_ATTR_DISABLE_PREPARES));
94 95
        } catch (PDOException $ignored) {
            /** @link https://bugs.php.net/bug.php?id=68371 */
96
            $this->markTestIncomplete('See https://bugs.php.net/bug.php?id=68371');
97
        }
98 99
    }

100 101 102
    /**
     * {@inheritDoc}
     */
103 104 105 106
    protected function createDriver()
    {
        return new Driver();
    }
107 108

    /**
Sergei Morozov's avatar
Sergei Morozov committed
109
     * @throws PHPUnit_Framework_SkippedTestError
110 111 112
     */
    private function skipWhenNotUsingPhp56AndPdoPgsql()
    {
113
        if (! defined('PDO::PGSQL_ATTR_DISABLE_PREPARES')) {
114 115 116
            $this->markTestSkipped('Test requires PHP 5.6+');
        }

Sergei Morozov's avatar
Sergei Morozov committed
117 118
        if (isset($GLOBALS['db_type']) && $GLOBALS['db_type'] === 'pdo_pgsql') {
            return;
119
        }
Sergei Morozov's avatar
Sergei Morozov committed
120 121

        $this->markTestSkipped('Test enabled only when using pdo_pgsql specific phpunit.xml');
122
    }
123
}