-
Notifications
You must be signed in to change notification settings - Fork 127
/
CheckQueryReturnTrait.php
91 lines (70 loc) · 2.33 KB
/
CheckQueryReturnTrait.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
declare(strict_types=1);
/**
* This file is part of CodeIgniter Shield.
*
* (c) CodeIgniter Foundation <admin@codeigniter.com>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace CodeIgniter\Shield\Models;
use CodeIgniter\Shield\Exceptions\ValidationException;
use ReflectionObject;
use ReflectionProperty;
trait CheckQueryReturnTrait
{
protected ?bool $currentDBDebug = null;
/**
* @param bool|int|string $return insert() returns insert ID.
*/
protected function checkQueryReturn($return): void
{
$this->restoreDBDebug();
$this->checkValidationError();
if ($return === false) {
$error = $this->db->error();
$message = 'Query error: ' . $error['code'] . ', '
. $error['message'] . ', query: ' . $this->db->getLastQuery();
throw new DatabaseException($message, (int) $error['code']);
}
}
protected function checkValidationError(): void
{
$validationErrors = $this->validation->getErrors();
if ($validationErrors !== []) {
$message = 'Validation error:';
foreach ($validationErrors as $field => $error) {
$message .= ' [' . $field . '] ' . $error;
}
throw new ValidationException($message);
}
}
protected function disableDBDebug(): void
{
if (! $this->db->DBDebug) {
// `DBDebug` is false. Do nothing.
return;
}
$this->currentDBDebug = $this->db->DBDebug;
$propertyDBDebug = $this->getPropertyDBDebug();
$propertyDBDebug->setValue($this->db, false);
}
protected function restoreDBDebug(): void
{
if ($this->currentDBDebug === null) {
// `DBDebug` has not been changed. Do nothing.
return;
}
$propertyDBDebug = $this->getPropertyDBDebug();
$propertyDBDebug->setValue($this->db, $this->currentDBDebug);
$this->currentDBDebug = null;
}
protected function getPropertyDBDebug(): ReflectionProperty
{
$refClass = new ReflectionObject($this->db);
$refProperty = $refClass->getProperty('DBDebug');
$refProperty->setAccessible(true);
return $refProperty;
}
}