UtilTest.php 2.92 KB
Newer Older
1 2
<?php

Michael Moravec's avatar
Michael Moravec committed
3 4
declare(strict_types=1);

5 6
namespace Doctrine\Tests\DBAL;

Sergei Morozov's avatar
Sergei Morozov committed
7 8 9 10
use Doctrine\DBAL\Driver\OCI8\OCI8Statement;
use Doctrine\Tests\DbalTestCase;

class UtilTest extends DbalTestCase
11
{
12 13 14 15
    /**
     * @return mixed[][]
     */
    public static function dataConvertPositionalToNamedParameters() : iterable
16
    {
Sergei Morozov's avatar
Sergei Morozov committed
17 18
        return [
            [
19 20
                'SELECT name FROM users WHERE id = ?',
                'SELECT name FROM users WHERE id = :param1',
Sergei Morozov's avatar
Sergei Morozov committed
21 22 23
                [1 => ':param1'],
            ],
            [
24 25
                'SELECT name FROM users WHERE id = ? AND status = ?',
                'SELECT name FROM users WHERE id = :param1 AND status = :param2',
Sergei Morozov's avatar
Sergei Morozov committed
26 27 28
                [1 => ':param1', 2 => ':param2'],
            ],
            [
29 30
                "UPDATE users SET name = '???', status = ?",
                "UPDATE users SET name = '???', status = :param1",
Sergei Morozov's avatar
Sergei Morozov committed
31 32 33
                [1 => ':param1'],
            ],
            [
34 35
                "UPDATE users SET status = ?, name = '???'",
                "UPDATE users SET status = :param1, name = '???'",
Sergei Morozov's avatar
Sergei Morozov committed
36 37 38
                [1 => ':param1'],
            ],
            [
39 40
                "UPDATE users SET foo = ?, name = '???', status = ?",
                "UPDATE users SET foo = :param1, name = '???', status = :param2",
Sergei Morozov's avatar
Sergei Morozov committed
41 42 43
                [1 => ':param1', 2 => ':param2'],
            ],
            [
44 45
                'UPDATE users SET name = "???", status = ?',
                'UPDATE users SET name = "???", status = :param1',
Sergei Morozov's avatar
Sergei Morozov committed
46 47 48
                [1 => ':param1'],
            ],
            [
49 50
                'UPDATE users SET status = ?, name = "???"',
                'UPDATE users SET status = :param1, name = "???"',
Sergei Morozov's avatar
Sergei Morozov committed
51 52 53
                [1 => ':param1'],
            ],
            [
54 55
                'UPDATE users SET foo = ?, name = "???", status = ?',
                'UPDATE users SET foo = :param1, name = "???", status = :param2',
Sergei Morozov's avatar
Sergei Morozov committed
56 57 58
                [1 => ':param1', 2 => ':param2'],
            ],
            [
59 60
                'SELECT * FROM users WHERE id = ? AND name = "" AND status = ?',
                'SELECT * FROM users WHERE id = :param1 AND name = "" AND status = :param2',
Sergei Morozov's avatar
Sergei Morozov committed
61 62 63
                [1 => ':param1', 2 => ':param2'],
            ],
            [
64 65
                "SELECT * FROM users WHERE id = ? AND name = '' AND status = ?",
                "SELECT * FROM users WHERE id = :param1 AND name = '' AND status = :param2",
Sergei Morozov's avatar
Sergei Morozov committed
66 67 68
                [1 => ':param1', 2 => ':param2'],
            ],
        ];
69 70 71
    }

    /**
Sergei Morozov's avatar
Sergei Morozov committed
72
     * @param mixed[] $expectedOutputParamsMap
Sergei Morozov's avatar
Sergei Morozov committed
73 74
     *
     * @dataProvider dataConvertPositionalToNamedParameters
75
     */
76
    public function testConvertPositionalToNamedParameters(string $inputSQL, string $expectedOutputSQL, array $expectedOutputParamsMap) : void
77
    {
Sergei Morozov's avatar
Sergei Morozov committed
78
        [$statement, $params] = OCI8Statement::convertPositionalToNamedPlaceholders($inputSQL);
79

80 81
        self::assertEquals($expectedOutputSQL, $statement);
        self::assertEquals($expectedOutputParamsMap, $params);
82
    }
83
}