-
Notifications
You must be signed in to change notification settings - Fork 0
/
Truncate.php
112 lines (90 loc) · 2.91 KB
/
Truncate.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
declare(strict_types=1);
/*
* This file is part of the QuidPHP package <https://quidphp.com>
* Author: Pierre-Philippe Emond <emondpph@gmail.com>
* License: https://github.com/quidphp/orm/blob/master/LICENSE
*/
namespace Quid\Orm\Operation;
use Quid\Main;
use Quid\Orm;
// truncate
// class used for a truncate operation on a table
class Truncate extends Orm\TableOperation
{
// config
protected static array $config = [
'log'=>true,
'com'=>false,
'strict'=>true
];
// trigger
// truncate la table, les rows sont unlink
// par défaut l'événement est log et com est false
final public function trigger():bool
{
$return = false;
$table = $this->table();
$db = $this->db();
$result = null;
$attr = $this->attr();
try
{
$log = $this->getAttr('log');
if($log === false)
$db->off();
$result = $db->truncate($table);
if($log === false)
$db->on();
}
catch (Main\Contract\Catchable $result)
{
}
finally
{
$this->after($result,$attr);
$table->callThis(fn() => $this->onTruncated($attr));
$table->rowsUnlink();
$return = true;
}
return $return;
}
// after
// gère la communication après la requête truncate si com est true
// si com est false et qu'il y a une exception attrapable, renvoie
final protected function after($result):void
{
if($this->getAttr('com') === true)
{
$table = $this->table();
$name = $table->name();
$db = $this->db();
$lang = $db->lang();
$attr = ['table','truncate','data'=>['table'=>$table,'action'=>'truncate']];
$in = [];
if($result instanceof Main\Contract\Catchable)
{
$key = ($lang->existsCom('neg',"truncate/$name/exception"))? $name:'*';
$in[] = ['neg',"truncate/$key/exception",['exception'=>$result->classFqcn(),'message'=>$result->getMessageArgs($lang)]];
$result->catched(['com'=>false]);
}
elseif($result instanceof \PDOStatement)
{
$key = ($lang->existsCom('pos',"truncate/$name/success"))? $name:'*';
$in[] = ['pos',"truncate/$key/success"];
}
else
{
$key = ($lang->existsCom('neg',"truncate/$name/system"))? $name:'*';
$in[] = ['neg',"truncate/$key/system"];
}
if(!empty($in))
$db->com()->neutral($table->label(),null,$attr,...$in);
}
elseif($result instanceof Main\Contract\Catchable)
throw $result;
elseif($this->getAttr('strict') === true && !$result instanceof \PDOStatement)
static::throw('truncateFailed');
}
}
?>