Completed
Pull Request — master (#331)
by Elan
01:21
created

PdoSaver::__destruct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace XHGui\Saver;
4
5
use PDO;
6
use PDOStatement;
7
use XHGui\Util;
8
9
class PdoSaver implements SaverInterface
10
{
11
    const TABLE_DDL = <<<SQL
12
13
CREATE TABLE IF NOT EXISTS "%s" (
14
  id               CHAR(24) PRIMARY KEY,
15
  profile          TEXT           NOT NULL,
16
  url              TEXT           NULL,
17
  SERVER           TEXT           NULL,
18
  GET              TEXT           NULL,
19
  ENV              TEXT           NULL,
20
  simple_url       TEXT           NULL,
21
  request_ts       INTEGER        NOT NULL,
22
  request_ts_micro NUMERIC(15, 4) NOT NULL,
23
  request_date     DATE           NOT NULL,
24
  main_wt          INTEGER        NOT NULL,
25
  main_ct          INTEGER        NOT NULL,
26
  main_cpu         INTEGER        NOT NULL,
27
  main_mu          INTEGER        NOT NULL,
28
  main_pmu         INTEGER        NOT NULL
29
);
30
31
SQL;
32
33
    const INSERT_DML = <<<SQL
34
35
INSERT INTO "%s" (
36
  id,
37
  profile,
38
  url,
39
  SERVER,
40
  GET,
41
  ENV,
42
  simple_url,
43
  request_ts,
44
  request_ts_micro,
45
  request_date,
46
  main_wt,
47
  main_ct,
48
  main_cpu,
49
  main_mu,
50
  main_pmu
51
) VALUES (
52
  :id,
53
  :profile,
54
  :url,
55
  :SERVER,
56
  :GET,
57
  :ENV,
58
  :simple_url,
59
  :request_ts,
60
  :request_ts_micro,
61
  :request_date,
62
  :main_wt,
63
  :main_ct,
64
  :main_cpu,
65
  :main_mu,
66
  :main_pmu
67
);
68
69
SQL;
70
71
    /**
72
     * @var PDOStatement
73
     */
74
    private $stmt;
75
76
    /**
77
     * @param PDO $pdo
78
     * @param string $table
79
     */
80
    public function __construct(PDO $pdo, $table)
81
    {
82
        $pdo->exec(sprintf(self::TABLE_DDL, $table));
83
84
        $this->stmt = $pdo->prepare(sprintf(self::INSERT_DML, $table));
85
    }
86
87
    public function save(array $data)
88
    {
89
        $main = $data['profile']['main()'];
90
91
        // build 'request_ts' and 'request_date' from 'request_ts_micro'
92
        $ts = $data['meta']['request_ts_micro'];
93
        $sec = $ts['sec'];
94
        $usec = $ts['usec'];
95
96
        $this->stmt->execute([
97
            'id'               => Util::generateId(),
98
            'profile'          => json_encode($data['profile']),
99
            'url'              => $data['meta']['url'],
100
            'SERVER'           => json_encode($data['meta']['SERVER']),
101
            'GET'              => json_encode($data['meta']['get']),
102
            'ENV'              => json_encode($data['meta']['env']),
103
            'simple_url'       => $data['meta']['simple_url'],
104
            'request_ts'       => $sec,
105
            'request_ts_micro' => "$sec.$usec",
106
            'request_date'     => date('Y-m-d', $sec),
107
            'main_wt'          => $main['wt'],
108
            'main_ct'          => $main['ct'],
109
            'main_cpu'         => $main['cpu'],
110
            'main_mu'          => $main['mu'],
111
            'main_pmu'         => $main['pmu'],
112
        ]);
113
    }
114
115
    public function __destruct()
116
    {
117
        $this->stmt->closeCursor();
118
    }
119
}
120