Db   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 121
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 13
eloc 26
c 1
b 0
f 0
dl 0
loc 121
ccs 31
cts 31
cp 1
rs 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A transaction() 0 11 2
A first() 0 3 1
A isWrite() 0 3 2
A all() 0 3 1
A table() 0 3 1
A __construct() 0 3 1
A query() 0 17 3
A isRead() 0 3 1
A getQueries() 0 3 1
1
<?php
2
namespace Fyuze\Database;
3
4
use Exception;
5
use Fyuze\Database\Drivers\ConnectionInterface;
6
7
class Db
8
{
9
    /**
10
     * The pdo connection
11
     *
12
     * @var \PDO
13
     */
14
    protected $connection;
15
16
    /**
17
     * The executed queries
18
     *
19
     * @var array
20
     */
21
    protected array $queries = [];
22
23
    /**
24
     * @param ConnectionInterface $connection
25
     */
26 14
    public function __construct(ConnectionInterface $connection)
27
    {
28 14
        $this->connection = $connection->open();
29
    }
30
31
    /**
32
     * @return array
33
     */
34 1
    public function getQueries(): array
35
    {
36 1
        return $this->queries;
37
    }
38
39
    /**
40
     * @param $sql
41
     * @param array $params
42
     * @return mixed
43
     */
44 1
    public function all($sql, array $params = [])
45
    {
46 1
        return $this->query($sql, $params)->fetchAll();
47
    }
48
49
    /**
50
     * @param $sql
51
     * @param array $params
52
     * @return mixed
53
     */
54 3
    public function first($sql, array $params = [])
55
    {
56 3
        return $this->query($sql, $params)->fetch();
57
    }
58
59
    /**
60
     * @param $name
61
     * @return Query
62
     */
63 1
    public function table($name)
64
    {
65 1
        return new Query($this, $name);
66
    }
67
68
    /**
69
     * @param \Closure $queries
70
     * @return bool
71
     */
72 2
    public function transaction(\Closure $queries)
73
    {
74 2
        $this->connection->beginTransaction();
75
76
        try {
77 2
            $queries($this);
78 1
            $this->connection->commit();
79 1
            return true;
80 1
        } catch (Exception $e) {
81 1
            $this->connection->rollback();
82 1
            return false;
83
        }
84
    }
85
86
    /**
87
     * @param $query
88
     * @param array $params
89
     * @return mixed
90
     */
91 8
    public function query($query, array $params = [])
92
    {
93 8
        $statement = $this->connection->prepare($query);
94
95 8
        $this->queries[] = $query;
96
97 8
        $result = $statement->execute($params);
98
99 7
        if ($this->isRead($query)) {
100 4
            return $statement;
101
        }
102
103 3
        if ($this->isWrite($query)) {
104 1
            return $statement->rowCount();
105
        }
106
107 2
        return $result;
108
    }
109
110
    /**
111
     *
112
     * @param $query
113
     * @return bool
114
     */
115 7
    protected function isRead($query)
116
    {
117 7
        return stripos($query, 'select') === 0;
118
    }
119
120
    /**
121
     *
122
     * @param $query
123
     * @return bool
124
     */
125 3
    protected function isWrite($query)
126
    {
127 3
        return stripos($query, 'update') === 0 || stripos($query, 'delete') === 0;
128
    }
129
}
130