Completed
Pull Request — master (#3738)
by
unknown
61:48 queued 11s
created

StatementTest::testQueryPrepare()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 5
dl 0
loc 8
rs 10
c 1
b 0
f 0
cc 1
nc 1
nop 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Tests\DBAL\Functional\Driver\OCI8;
6
7
use Doctrine\DBAL\Driver\OCI8\Driver;
8
use Doctrine\Tests\DbalFunctionalTestCase;
9
use function extension_loaded;
10
11
class StatementTest extends DbalFunctionalTestCase
12
{
13
    protected function setUp() : void
14
    {
15
        if (! extension_loaded('oci8')) {
16
            $this->markTestSkipped('oci8 is not installed.');
17
        }
18
19
        parent::setUp();
20
21
        if ($this->connection->getDriver() instanceof Driver) {
22
            return;
23
        }
24
25
        $this->markTestSkipped('oci8 only test.');
26
    }
27
28
    /**
29
     * @param mixed[] $params
30
     * @param mixed[] $expected
31
     *
32
     * @dataProvider queryConversionProvider
33
     */
34
    public function testQueryConversion(string $query, array $params, array $expected) : void
35
    {
36
        self::assertEquals(
37
            $expected,
38
            $this->connection->executeQuery($query, $params)->fetch()
39
        );
40
    }
41
42
    /**
43
     * @param mixed[] $params
44
     * @param mixed[] $expected
45
     *
46
     * @dataProvider queryConversionProvider
47
     */
48
    public function testQueryPrepare(string $query, array $params, array $expected) : void
49
    {
50
        $stmt = $this->connection->prepare($query);
51
        $stmt->execute($params);
52
53
        self::assertEquals(
54
            $expected,
55
            $stmt->fetch()
56
        );
57
    }
58
59
    /**
60
     * @return array<string, array<int, mixed>>
61
     */
62
    public static function queryConversionProvider() : iterable
63
    {
64
        return [
65
            'simple' => [
66
                'SELECT ? COL1 FROM DUAL',
67
                [1],
68
                ['COL1' => 1],
69
            ],
70
            'named' => [
71
                'SELECT :COL COL1 FROM DUAL',
72
                [':COL' => 1],
73
                ['COL1' => 1],
74
            ],
75
            'literal-with-placeholder' => [
76
                "SELECT '?' COL1, ? COL2 FROM DUAL",
77
                [2],
78
                [
79
                    'COL1' => '?',
80
                    'COL2' => 2,
81
                ],
82
            ],
83
            'literal-with-quotes' => [
84
                "SELECT ? COL1, '?\"?''?' \"COL?\" FROM DUAL",
85
                [3],
86
                [
87
                    'COL1' => 3,
88
                    'COL?' => '?"?\'?',
89
                ],
90
            ],
91
            'placeholder-at-the-end' => [
92
                'SELECT ? COL1 FROM DUAL WHERE 1 = ?',
93
                [4, 1],
94
                ['COL1' => 4],
95
            ],
96
            'multi-line-literal' => [
97
                "SELECT 'Hello,
98
World?!' COL1 FROM DUAL WHERE 1 = ?",
99
                [1],
100
                [
101
                    'COL1' => 'Hello,
102
World?!',
103
                ],
104
            ],
105
            'empty-literal' => [
106
                "SELECT '' COL1 FROM DUAL",
107
                [],
108
                ['COL1' => ''],
109
            ],
110
        ];
111
    }
112
}
113