MySqlConnector   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 5
c 2
b 1
f 0
dl 0
loc 38
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A createPdoConnection() 0 3 1
A tryAgainIfCausedByLostConnection() 0 8 3
1
<?php
2
3
namespace SwooleTW\Http\Coroutine\Connectors;
4
5
use Illuminate\Database\Connectors\MySqlConnector as BaseConnector;
6
use Illuminate\Support\Str;
7
use SwooleTW\Http\Coroutine\PDO as SwoolePDO;
8
use Throwable;
9
10
/**
11
 * Class MySqlConnector (5.6)
12
 */
13
class MySqlConnector extends BaseConnector
14
{
15
    /**
16
     * Create a new PDO connection instance.
17
     *
18
     * @param string $dsn
19
     * @param string $username
20
     * @param string $password
21
     * @param array $options
22
     *
23
     * @return \PDO
24
     * @throws \SwooleTW\Http\Coroutine\ConnectionException
25
     */
26
    protected function createPdoConnection($dsn, $username, $password, $options)
27
    {
28
        return new SwoolePDO($dsn, $username, $password, $options);
29
    }
30
31
    /**
32
     * Handle an exception that occurred during connect execution.
33
     *
34
     * @param \Throwable $e
35
     * @param  string $dsn
36
     * @param  string $username
37
     * @param  string $password
38
     * @param  array $options
39
     *
40
     * @return \PDO
41
     * @throws \Throwable
42
     */
43
    protected function tryAgainIfCausedByLostConnection(Throwable $e, $dsn, $username, $password, $options)
44
    {
45
        // https://github.com/swoole/swoole-src/blob/a414e5e8fec580abb3dbd772d483e12976da708f/swoole_mysql_coro.c#L196
46
        if ($this->causedByLostConnection($e) || Str::contains($e->getMessage(), 'is closed')) {
47
            return $this->createPdoConnection($dsn, $username, $password, $options);
48
        }
49
50
        throw $e;
51
    }
52
}
53