Skip to content

Commit a75cf2d

Browse files
committed
unify database queries. Refactoring (#160)
1 parent 7a926e0 commit a75cf2d

File tree

10 files changed

+372
-309
lines changed

10 files changed

+372
-309
lines changed

classes/Database/Mariadb/DomainMapper.php renamed to classes/Database/Common/DomainMapper.php

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3
3030
*/
3131

32-
namespace Liuch\DmarcSrg\Database\Mariadb;
32+
namespace Liuch\DmarcSrg\Database\Common;
3333

3434
use Liuch\DmarcSrg\DateTime;
3535
use Liuch\DmarcSrg\ErrorCodes;
@@ -40,7 +40,7 @@
4040
use Liuch\DmarcSrg\Exception\DatabaseNotFoundException;
4141

4242
/**
43-
* DomainMapper class implementation for MariaDB
43+
* Universal implementation of DomainMapper class
4444
*/
4545
class DomainMapper implements DomainMapperInterface
4646
{
@@ -68,8 +68,8 @@ public function exists(array &$data): bool
6868
{
6969
try {
7070
$st = $this->connector->dbh()->prepare(
71-
'SELECT `id` FROM `' . $this->connector->tablePrefix('domains') .
72-
'` WHERE ' . $this->sqlCondition($data)
71+
'SELECT id FROM ' . $this->connector->tablePrefix('domains') .
72+
' WHERE ' . $this->sqlCondition($data)
7373
);
7474
$this->sqlBindValues($st, $data, 1);
7575
$st->execute();
@@ -98,8 +98,8 @@ public function isAssigned(array &$data, int $user_id): bool
9898
$res = null;
9999
try {
100100
$st = $this->connector->dbh()->prepare(
101-
'SELECT 1 FROM `' . $this->connector->tablePrefix('userdomains') . '` INNER JOIN `'
102-
. $this->connector->tablePrefix('domains') . '` ON `domain_id` = `id` WHERE `user_id` = ? AND '
101+
'SELECT 1 FROM ' . $this->connector->tablePrefix('userdomains') . ' INNER JOIN '
102+
. $this->connector->tablePrefix('domains') . ' ON domain_id = id WHERE user_id = ? AND '
103103
. $this->sqlCondition($data)
104104
);
105105
$st->bindValue(1, $user_id, \PDO::PARAM_INT);
@@ -124,8 +124,8 @@ public function fetch(array &$data): void
124124
{
125125
try {
126126
$st = $this->connector->dbh()->prepare(
127-
'SELECT `id`, `fqdn`, `active`, `description`, `created_time`, `updated_time` FROM `'
128-
. $this->connector->tablePrefix('domains') . '` WHERE ' . $this->sqlCondition($data)
127+
'SELECT id, fqdn, active, description, created_time, updated_time FROM '
128+
. $this->connector->tablePrefix('domains') . ' WHERE ' . $this->sqlCondition($data)
129129
);
130130
$this->sqlBindValues($st, $data, 1);
131131
$st->execute();
@@ -159,8 +159,8 @@ public function save(array &$data): void
159159
if ($this->exists($data)) {
160160
try {
161161
$st = $db->prepare(
162-
'UPDATE `' . $this->connector->tablePrefix('domains')
163-
. '` SET `active` = ?, `description` = ?, `updated_time` = ? WHERE `id` = ?'
162+
'UPDATE ' . $this->connector->tablePrefix('domains')
163+
. ' SET active = ?, description = ?, updated_time = ? WHERE id = ?'
164164
);
165165
$st->bindValue(1, $data['active'], \PDO::PARAM_BOOL);
166166
$st->bindValue(2, $data['description'], \PDO::PARAM_STR);
@@ -179,12 +179,12 @@ public function save(array &$data): void
179179
$sql1 = '';
180180
$sql2 = '';
181181
} else {
182-
$sql1 = ', `description`';
182+
$sql1 = ', description';
183183
$sql2 = ', ?';
184184
}
185185
$st = $db->prepare(
186-
'INSERT INTO `' . $this->connector->tablePrefix('domains')
187-
. '` (`fqdn`, `active`' . $sql1 . ', `created_time`, `updated_time`)'
186+
'INSERT INTO ' . $this->connector->tablePrefix('domains')
187+
. ' (fqdn, active' . $sql1 . ', created_time, updated_time)'
188188
. ' VALUES (?, ?' . $sql2 . ', ?, ?)'
189189
);
190190
$idx = 0;
@@ -247,12 +247,12 @@ public function delete(int $id, bool $force): void
247247
}
248248
}
249249
$st = $db->prepare(
250-
'DELETE FROM `' . $this->connector->tablePrefix('userdomains') . '` WHERE `domain_id` = ?'
250+
'DELETE FROM ' . $this->connector->tablePrefix('userdomains') . ' WHERE domain_id = ?'
251251
);
252252
$st->bindValue(1, $id, \PDO::PARAM_INT);
253253
$st->execute();
254254
$st->closeCursor();
255-
$st = $db->prepare('DELETE FROM `' . $this->connector->tablePrefix('domains') . '` WHERE `id` = ?');
255+
$st = $db->prepare('DELETE FROM ' . $this->connector->tablePrefix('domains') . ' WHERE id = ?');
256256
$st->bindValue(1, $id, \PDO::PARAM_INT);
257257
$st->execute();
258258
$st->closeCursor();
@@ -277,13 +277,13 @@ public function list(int $user_id): array
277277
{
278278
$list = [];
279279
try {
280-
$query_str = 'SELECT `id`, `fqdn`, `active`, `description`, `created_time`, `updated_time` FROM `';
280+
$query_str = 'SELECT id, fqdn, active, description, created_time, updated_time FROM ';
281281
if ($user_id) {
282-
$query_str .= $this->connector->tablePrefix('userdomains') . '` INNER JOIN `'
283-
. $this->connector->tablePrefix('domains') . '` ON `domain_id` = `id` WHERE `user_id` = '
282+
$query_str .= $this->connector->tablePrefix('userdomains') . ' INNER JOIN '
283+
. $this->connector->tablePrefix('domains') . ' ON domain_id = id WHERE user_id = '
284284
. $user_id;
285285
} else {
286-
$query_str .= $this->connector->tablePrefix('domains') . '`';
286+
$query_str .= $this->connector->tablePrefix('domains');
287287
}
288288
$st = $this->connector->dbh()->query($query_str);
289289
while ($row = $st->fetch(\PDO::FETCH_NUM)) {
@@ -315,11 +315,11 @@ public function names(int $user_id): array
315315
$res = [];
316316
try {
317317
if ($user_id) {
318-
$query_str = 'SELECT `fqdn` FROM `' . $this->connector->tablePrefix('userdomains')
319-
. '` INNER JOIN `' . $this->connector->tablePrefix('domains')
320-
. '` ON `domain_id` = `id` WHERE `user_id` = ' . $user_id . ' ORDER BY `fqdn`';
318+
$query_str = 'SELECT fqdn FROM ' . $this->connector->tablePrefix('userdomains')
319+
. ' INNER JOIN ' . $this->connector->tablePrefix('domains')
320+
. ' ON domain_id = id WHERE user_id = ' . $user_id . ' ORDER BY fqdn';
321321
} else {
322-
$query_str = 'SELECT `fqdn` FROM `' . $this->connector->tablePrefix('domains') . '` ORDER BY `fqdn`';
322+
$query_str = 'SELECT fqdn FROM ' . $this->connector->tablePrefix('domains') . ' ORDER BY fqdn';
323323
}
324324
$st = $this->connector->dbh()->query($query_str, \PDO::FETCH_NUM);
325325
while ($name = $st->fetchColumn(0)) {
@@ -349,10 +349,10 @@ public function count(int $user_id, int $max = 0): int
349349
$wr = '';
350350
} else {
351351
$tn = 'userdomains';
352-
$wr = " WHERE `user_id` = {$user_id}";
352+
$wr = " WHERE user_id = {$user_id}";
353353
}
354354
$tn = $this->connector->tablePrefix($tn);
355-
$query_str = "SELECT COUNT(*) FROM `{$tn}`{$wr}";
355+
$query_str = "SELECT COUNT(*) FROM {$tn}{$wr}";
356356
if ($max > 0) {
357357
$query_str .= " LIMIT {$max}";
358358
}
@@ -383,8 +383,8 @@ public function assignUser(array &$data, int $user_id): void
383383
$db->beginTransaction();
384384
try {
385385
$st = $db->prepare(
386-
'SELECT `id` FROM `' . $this->connector->tablePrefix('domains')
387-
. '` WHERE ' . $this->sqlCondition($data)
386+
'SELECT id FROM ' . $this->connector->tablePrefix('domains')
387+
. ' WHERE ' . $this->sqlCondition($data)
388388
);
389389
$this->sqlBindValues($st, $data, 1);
390390
$st->execute();
@@ -393,22 +393,22 @@ public function assignUser(array &$data, int $user_id): void
393393
if ($id !== false) {
394394
$data['id'] = intval($id);
395395
$st = $db->prepare(
396-
'SELECT 1 FROM `' . $this->connector->tablePrefix('users') . '` WHERE `id` = ?'
396+
'SELECT 1 FROM ' . $this->connector->tablePrefix('users') . ' WHERE id = ?'
397397
);
398398
$st->bindValue(1, $user_id, \PDO::PARAM_INT);
399399
$st->execute();
400400
$res = $st->fetchColumn(0);
401401
$st->closeCursor();
402402
if ($res) {
403403
$ud_tn = $this->connector->tablePrefix('userdomains');
404-
$st = $db->prepare('SELECT 1 FROM `' . $ud_tn . '` WHERE `domain_id` = ? AND `user_id` = ?');
404+
$st = $db->prepare('SELECT 1 FROM ' . $ud_tn . ' WHERE domain_id = ? AND user_id = ?');
405405
$st->bindValue(1, $data['id'], \PDO::PARAM_INT);
406406
$st->bindValue(2, $user_id, \PDO::PARAM_INT);
407407
$st->execute();
408408
$res = $st->fetchColumn(0);
409409
$st->closeCursor();
410410
if (!$res) {
411-
$st = $db->prepare('INSERT INTO `' . $ud_tn . '` (`domain_id`, `user_id`) VALUES (?, ?)');
411+
$st = $db->prepare('INSERT INTO ' . $ud_tn . ' (domain_id, user_id) VALUES (?, ?)');
412412
$st->bindValue(1, $data['id'], \PDO::PARAM_INT);
413413
$st->bindValue(2, $user_id, \PDO::PARAM_INT);
414414
$st->execute();
@@ -419,7 +419,7 @@ public function assignUser(array &$data, int $user_id): void
419419
$db->commit();
420420
} catch (\Exception $e) {
421421
$db->rollBack();
422-
throw $e;
422+
throw new DatabaseFatalException('Failed to assign a domain', -1, $e);
423423
}
424424
}
425425

@@ -441,7 +441,7 @@ public function unassignUser(array &$data, int $user_id): void
441441
$dm_tn = $this->connector->tablePrefix('domains');
442442
$ud_tn = $this->connector->tablePrefix('userdomains');
443443
$st = $this->connector->dbh()->prepare(
444-
"DELETE `{$ud_tn}` FROM `{$ud_tn}` INNER JOIN `{$dm_tn}` ON `domain_id` = `id` WHERE "
444+
"DELETE {$ud_tn} FROM {$ud_tn} INNER JOIN {$dm_tn} ON domain_id = id WHERE "
445445
. $this->sqlCondition($data)
446446
);
447447
$this->sqlBindValues($st, $data, 1);
@@ -470,16 +470,16 @@ public function updateUserDomains(array &$domains, int $user_id): void
470470
$db->beginTransaction();
471471
try {
472472
$st = $db->prepare(
473-
'DELETE FROM `' . $this->connector->tablePrefix('userdomains') . '` WHERE `user_id` = ?'
473+
'DELETE FROM ' . $this->connector->tablePrefix('userdomains') . ' WHERE user_id = ?'
474474
);
475475
$st->bindValue(1, $user_id, \PDO::PARAM_INT);
476476
$st->execute();
477477
$st->closeCursor();
478478
$cnt = count($domains);
479479
if ($cnt) {
480-
$query_str = 'INSERT INTO `' . $this->connector->tablePrefix('userdomains')
481-
. '` (`domain_id`, `user_id`) SELECT `id`, ' . $user_id . ' FROM `'
482-
. $this->connector->tablePrefix('domains') . '` WHERE `fqdn` IN ('
480+
$query_str = 'INSERT INTO ' . $this->connector->tablePrefix('userdomains')
481+
. ' (domain_id, user_id) SELECT id, ' . $user_id . ' FROM '
482+
. $this->connector->tablePrefix('domains') . ' WHERE fqdn IN ('
483483
. substr(str_repeat('?,', $cnt), 0, -1) . ')';
484484
$st = $db->prepare($query_str);
485485
$pos = 0;
@@ -492,7 +492,7 @@ public function updateUserDomains(array &$domains, int $user_id): void
492492
$db->commit();
493493
} catch (\Exception $e) {
494494
$db->rollBack();
495-
throw $e;
495+
throw new DatabaseFatalException('Failed to update the user\'s domains', -1, $e);
496496
}
497497
}
498498

@@ -506,9 +506,9 @@ public function updateUserDomains(array &$domains, int $user_id): void
506506
private function sqlCondition(array &$data): string
507507
{
508508
if (isset($data['id'])) {
509-
return '`id` = ?';
509+
return 'id = ?';
510510
}
511-
return '`fqdn` = ?';
511+
return 'fqdn = ?';
512512
}
513513

514514
/**

classes/Database/Mariadb/HostMapper.php renamed to classes/Database/Common/HostMapper.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@
2929
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3
3030
*/
3131

32-
namespace Liuch\DmarcSrg\Database\Mariadb;
32+
namespace Liuch\DmarcSrg\Database\Common;
3333

3434
use Liuch\DmarcSrg\DateTime;
3535
use Liuch\DmarcSrg\Database\HostMapperInterface;
3636
use Liuch\DmarcSrg\Exception\DatabaseFatalException;
3737

3838
/**
39-
* HostMapper class implementation for MariaDB
39+
* Universal implementation of HostMapper class
4040
*/
4141
class HostMapper implements HostMapperInterface
4242
{
@@ -68,18 +68,18 @@ public function statistics(array &$data, int $user_id): array
6868
$user_domains1 = '';
6969
$user_domains2 = '';
7070
} else {
71-
$user_domains1 = ' INNER JOIN `' . $this->connector->tablePrefix('userdomains')
72-
. '`AS `ud` ON `rp`.`domain_id` = `ud`.`domain_id`';
73-
$user_domains2 = ' AND `user_id` = ' . $user_id;
71+
$user_domains1 = ' INNER JOIN ' . $this->connector->tablePrefix('userdomains')
72+
. ' AS ud ON rp.domain_id = ud.domain_id';
73+
$user_domains2 = ' AND user_id = ' . $user_id;
7474
}
7575
$db = $this->connector->dbh();
7676
$db->beginTransaction();
7777
try {
7878
$st = $db->prepare(
79-
'SELECT COUNT(*), SUM(`rc`) FROM (SELECT COUNT(`report_id`), SUM(`rcount`) AS `rc` FROM `'
80-
. $this->connector->tablePrefix('rptrecords') . '` AS `rr` INNER JOIN `'
81-
. $this->connector->tablePrefix('reports') . '` AS `rp` ON `rr`.`report_id` = `rp`.`id`'
82-
. $user_domains1 . ' WHERE `rr`.`ip` = ?' . $user_domains2 . ' GROUP BY `report_id`) as t'
79+
'SELECT COUNT(*), SUM(rc) FROM (SELECT COUNT(report_id), SUM(rcount) AS rc FROM '
80+
. $this->connector->tablePrefix('rptrecords') . ' AS rr INNER JOIN '
81+
. $this->connector->tablePrefix('reports') . ' AS rp ON rr.report_id = rp.id'
82+
. $user_domains1 . ' WHERE rr.ip = ?' . $user_domains2 . ' GROUP BY report_id) as t'
8383
);
8484
$st->bindValue(1, inet_pton($data['ip']), \PDO::PARAM_STR);
8585
$st->execute();
@@ -88,10 +88,10 @@ public function statistics(array &$data, int $user_id): array
8888
$res['messages'] = intval($row[1]);
8989
$st->closeCursor();
9090
$st = $db->prepare(
91-
'SELECT `rp`.`id`, `begin_time` FROM `' . $this->connector->tablePrefix('rptrecords')
92-
. '` AS `rr` INNER JOIN `' . $this->connector->tablePrefix('reports')
93-
. '` AS `rp` ON `rr`.`report_id` = `rp`.`id`' . $user_domains1
94-
. ' WHERE `rr`.`ip` = ?' . $user_domains2 . ' GROUP BY `report_id` ORDER BY `begin_time` DESC LIMIT 2'
91+
'SELECT rp.id, begin_time FROM ' . $this->connector->tablePrefix('rptrecords')
92+
. ' AS rr INNER JOIN ' . $this->connector->tablePrefix('reports')
93+
. ' AS rp ON rr.report_id = rp.id' . $user_domains1
94+
. ' WHERE rr.ip = ?' . $user_domains2 . ' GROUP BY report_id ORDER BY begin_time DESC LIMIT 2'
9595
);
9696
$st->bindValue(1, inet_pton($data['ip']), \PDO::PARAM_STR);
9797
$st->execute();

0 commit comments

Comments
 (0)