Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 148 | Ganze Datei anzeigen | Leerzeichen ignorieren | Details | Blame | Letzte Änderung | Log anzeigen | RSS feed

Revision 148 Revision 621
Zeile 6... Zeile 6...
6
use Doctrine\DBAL\Driver\Mysqli\Exception\ConnectionFailed;
6
use Doctrine\DBAL\Driver\Mysqli\Exception\ConnectionFailed;
7
use Doctrine\DBAL\Driver\Mysqli\Exception\HostRequired;
7
use Doctrine\DBAL\Driver\Mysqli\Exception\HostRequired;
8
use Doctrine\DBAL\Driver\Mysqli\Initializer\Charset;
8
use Doctrine\DBAL\Driver\Mysqli\Initializer\Charset;
9
use Doctrine\DBAL\Driver\Mysqli\Initializer\Options;
9
use Doctrine\DBAL\Driver\Mysqli\Initializer\Options;
10
use Doctrine\DBAL\Driver\Mysqli\Initializer\Secure;
10
use Doctrine\DBAL\Driver\Mysqli\Initializer\Secure;
-
 
11
use Generator;
11
use mysqli;
12
use mysqli;
12
use mysqli_sql_exception;
13
use mysqli_sql_exception;
13
 
-
 
14
use function count;
14
use SensitiveParameter;
Zeile 15... Zeile 15...
15
 
15
 
16
final class Driver extends AbstractMySQLDriver
16
final class Driver extends AbstractMySQLDriver
17
{
17
{
18
    /**
18
    /**
19
     * {@inheritdoc}
19
     * {@inheritdoc}
20
     *
20
     *
21
     * @return Connection
21
     * @return Connection
22
     */
22
     */
-
 
23
    public function connect(
-
 
24
        #[SensitiveParameter]
23
    public function connect(array $params)
25
        array $params
24
    {
26
    ) {
25
        if (! empty($params['persistent'])) {
27
        if (! empty($params['persistent'])) {
26
            if (! isset($params['host'])) {
28
            if (! isset($params['host'])) {
27
                throw HostRequired::forPersistentConnection();
29
                throw HostRequired::forPersistentConnection();
Zeile 28... Zeile 30...
28
            }
30
            }
29
 
31
 
30
            $host = 'p:' . $params['host'];
32
            $host = 'p:' . $params['host'];
31
        } else {
33
        } else {
Zeile 32... Zeile -...
32
            $host = $params['host'] ?? null;
-
 
33
        }
-
 
34
 
-
 
35
        $flags = 0;
-
 
36
 
-
 
37
        $preInitializers = $postInitializers = [];
-
 
38
 
-
 
39
        if (isset($params['driverOptions'])) {
-
 
40
            $driverOptions = $params['driverOptions'];
-
 
41
 
-
 
42
            if (isset($driverOptions[Connection::OPTION_FLAGS])) {
-
 
43
                $flags = $driverOptions[Connection::OPTION_FLAGS];
-
 
44
                unset($driverOptions[Connection::OPTION_FLAGS]);
-
 
45
            }
-
 
46
 
-
 
47
            $preInitializers = $this->withOptions($preInitializers, $driverOptions);
-
 
48
        }
-
 
49
 
-
 
50
        $preInitializers  = $this->withSecure($preInitializers, $params);
34
            $host = $params['host'] ?? null;
Zeile 51... Zeile 35...
51
        $postInitializers = $this->withCharset($postInitializers, $params);
35
        }
52
 
36
 
53
        $connection = new mysqli();
37
        $connection = new mysqli();
Zeile 54... Zeile 38...
54
 
38
 
55
        foreach ($preInitializers as $initializer) {
39
        foreach ($this->compilePreInitializers($params) as $initializer) {
Zeile 62... Zeile 46...
62
                $params['user'] ?? null,
46
                $params['user'] ?? null,
63
                $params['password'] ?? null,
47
                $params['password'] ?? null,
64
                $params['dbname'] ?? null,
48
                $params['dbname'] ?? null,
65
                $params['port'] ?? null,
49
                $params['port'] ?? null,
66
                $params['unix_socket'] ?? null,
50
                $params['unix_socket'] ?? null,
67
                $flags,
51
                $params['driverOptions'][Connection::OPTION_FLAGS] ?? 0,
68
            );
52
            );
69
        } catch (mysqli_sql_exception $e) {
53
        } catch (mysqli_sql_exception $e) {
70
            throw ConnectionFailed::upcast($e);
54
            throw ConnectionFailed::upcast($e);
71
        }
55
        }
Zeile 72... Zeile 56...
72
 
56
 
73
        if (! $success) {
57
        if (! $success) {
74
            throw ConnectionFailed::new($connection);
58
            throw ConnectionFailed::new($connection);
Zeile 75... Zeile 59...
75
        }
59
        }
76
 
60
 
77
        foreach ($postInitializers as $initializer) {
61
        foreach ($this->compilePostInitializers($params) as $initializer) {
Zeile 78... Zeile 62...
78
            $initializer->initialize($connection);
62
            $initializer->initialize($connection);
79
        }
63
        }
Zeile 80... Zeile 64...
80
 
64
 
81
        return new Connection($connection);
-
 
82
    }
65
        return new Connection($connection);
83
 
66
    }
84
    /**
67
 
85
     * @param list<Initializer> $initializers
68
    /**
86
     * @param array<int,mixed>  $options
69
     * @param array<string, mixed> $params
87
     *
-
 
88
     * @return list<Initializer>
70
     *
89
     */
71
     * @return Generator<int, Initializer>
90
    private function withOptions(array $initializers, array $options): array
72
     */
-
 
73
    private function compilePreInitializers(
Zeile -... Zeile 74...
-
 
74
        #[SensitiveParameter]
91
    {
75
        array $params
92
        if (count($options) !== 0) {
76
    ): Generator {
Zeile 93... Zeile -...
93
            $initializers[] = new Options($options);
-
 
94
        }
-
 
95
 
-
 
96
        return $initializers;
-
 
97
    }
-
 
98
 
-
 
99
    /**
-
 
100
     * @param list<Initializer>   $initializers
-
 
101
     * @param array<string,mixed> $params
77
        unset($params['driverOptions'][Connection::OPTION_FLAGS]);
102
     *
78
 
103
     * @return list<Initializer>
79
        if (isset($params['driverOptions']) && $params['driverOptions'] !== []) {
104
     */
80
            yield new Options($params['driverOptions']);
105
    private function withSecure(array $initializers, array $params): array
81
        }
106
    {
82
 
107
        if (
83
        if (
108
            isset($params['ssl_key']) ||
-
 
109
            isset($params['ssl_cert']) ||
-
 
110
            isset($params['ssl_ca']) ||
-
 
111
            isset($params['ssl_capath']) ||
-
 
112
            isset($params['ssl_cipher'])
-
 
113
        ) {
-
 
114
            $initializers[] = new Secure(
84
            ! isset($params['ssl_key']) &&
115
                $params['ssl_key']    ?? '',
85
            ! isset($params['ssl_cert']) &&
Zeile 116... Zeile 86...
116
                $params['ssl_cert']   ?? '',
86
            ! isset($params['ssl_ca']) &&
-
 
87
            ! isset($params['ssl_capath']) &&
-
 
88
            ! isset($params['ssl_cipher'])
-
 
89
        ) {
-
 
90
            return;
-
 
91
        }
-
 
92
 
117
                $params['ssl_ca']     ?? '',
93
        yield new Secure(
Zeile 118... Zeile 94...
118
                $params['ssl_capath'] ?? '',
94
            $params['ssl_key']    ?? '',
119
                $params['ssl_cipher'] ?? '',
-
 
120
            );
95
            $params['ssl_cert']   ?? '',
121
        }
96
            $params['ssl_ca']     ?? '',
122
 
97
            $params['ssl_capath'] ?? '',
123
        return $initializers;
98
            $params['ssl_cipher'] ?? '',
124
    }
99
        );
-
 
100
    }
-
 
101
 
125
 
102
    /**
126
    /**
103
     * @param array<string, mixed> $params
127
     * @param list<Initializer>   $initializers
104
     *
128
     * @param array<string,mixed> $params
105
     * @return Generator<int, Initializer>
Zeile 129... Zeile 106...
129
     *
106
     */
130
     * @return list<Initializer>
107
    private function compilePostInitializers(
131
     */
108
        #[SensitiveParameter]