ConnectionFactory::createConnection()   A
last analyzed

Complexity

Conditions 6
Paths 22

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 15
c 1
b 0
f 0
nc 22
nop 1
dl 0
loc 22
rs 9.2222
1
<?php
2
3
namespace Silviooosilva\CacheerPhp\Core;
4
5
use PDO;
6
use PDOException;
7
use Silviooosilva\CacheerPhp\Exceptions\ConnectionException;
8
9
/**
10
 * Class ConnectionFactory
11
 * @author Sílvio Silva <https://github.com/silviooosilva>
12
 * @package Silviooosilva\CacheerPhp
13
 */
14
class ConnectionFactory
15
{
16
17
    /**
18
     * Creates a new PDO instance based on the specified database configuration.
19
     *
20
     * @param array|null $database
21
     * @return PDO|null
22
     * @throws ConnectionException
23
     */
24
    public static function createConnection(?array $database = null): ?PDO
25
    {
26
        $dbConf = $database ?? CACHEER_DATABASE_CONFIG[Connect::getConnection()];
27
28
        if ($dbConf['driver'] === 'sqlite') {
29
            $dbName = $dbConf['dbname'];
30
            $dbDsn = $dbConf['driver'] . ':' . $dbName;
31
        } else {
32
            $dbName = "{$dbConf['driver']}-{$dbConf['dbname']}@{$dbConf['host']}";
0 ignored issues
show
Unused Code introduced by
The assignment to $dbName is dead and can be removed.
Loading history...
33
            $dbDsn = "{$dbConf['driver']}:host={$dbConf['host']};dbname={$dbConf['dbname']};port={$dbConf['port']}";
34
        }
35
36
        try {
37
            $options = $dbConf['options'] ?? [];
38
            foreach ($options as $key => $value) {
39
                if (is_string($value) && defined($value)) {
40
                    $options[$key] = constant($value);
41
                }
42
            }
43
            return new PDO($dbDsn, $dbConf['username'] ?? null, $dbConf['passwd'] ?? null, $options);
44
        } catch (PDOException $exception) {
45
            throw ConnectionException::create($exception->getMessage(), $exception->getCode(), $exception->getPrevious());
46
        }
47
    }
48
}
49