dolibarr 21.0.3
TraceableDB.php
1<?php
2/* Copyright (C) 2023 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
4 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
26require_once DOL_DOCUMENT_ROOT.'/core/db/DoliDB.class.php';
27
33class TraceableDB extends DoliDB
34{
38 public $db; // cannot be protected because of parent declaration
42 public $queries;
46 protected $startTime;
50 protected $startMemory;
54 public $type;
58 const LABEL = ''; // TODO: the right value should be $this->db::LABEL (but this is a constant? o_O)
62 const VERSIONMIN = ''; // TODO: the same thing here, $this->db::VERSIONMIN is the right value
63
69 public function __construct($db)
70 {
71 $this->db = $db;
72 $this->type = $this->db->type;
73 $this->queries = array();
74 }
75
84 public function ifsql($test, $resok, $resko)
85 {
86 return $this->db->ifsql($test, $resok, $resko);
87 }
88
97 public function regexpsql($subject, $pattern, $sqlstring = 0): string
98 {
99 return $this->db->regexpsql($subject, $pattern, $sqlstring = 0);
100 }
101
102 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
109 public function fetch_row($resultset)
110 {
111 // phpcs:enable
112 return $this->db->fetch_row($resultset);
113 }
114
123 public function idate($param, $gm = 'tzserver')
124 {
125 return $this->db->idate($param, $gm);
126 }
127
133 public function lasterrno()
134 {
135 return $this->db->lasterrno();
136 }
137
144 public function begin($textinlog = '')
145 {
146 return $this->db->begin($textinlog);
147 }
148
160 public function DDLCreateDb($database, $charset = '', $collation = '', $owner = '')
161 {
162 return $this->db->DDLCreateDb($database, $charset, $collation, $owner);
163 }
164
170 public function getVersionArray()
171 {
172 return $this->db->getVersionArray();
173 }
174
182 public function convertSQLFromMysql($line, $type = 'ddl')
183 {
184 return $this->db->convertSQLFromMysql($line);
185 }
186
187 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
195 public function affected_rows($resultset)
196 {
197 // phpcs:enable
198 return $this->db->affected_rows($resultset);
199 }
200
206 public function error()
207 {
208 return $this->db->error();
209 }
210
218 public function DDLListTables($database, $table = '')
219 {
220 return $this->db->DDLListTables($database, $table);
221 }
222
230 public function DDLListTablesFull($database, $table = '')
231 {
232 return $this->db->DDLListTablesFull($database, $table);
233 }
234
240 public function lastquery()
241 {
242 return $this->db->lastquery();
243 }
244
252 public function order($sortfield = null, $sortorder = null)
253 {
254 return $this->db->order($sortfield, $sortorder);
255 }
256
263 public function decrypt($value)
264 {
265 return $this->db->decrypt($value);
266 }
267
268 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
275 public function fetch_array($resultset)
276 {
277 // phpcs:enable
278 return $this->db->fetch_array($resultset);
279 }
280
286 public function lasterror()
287 {
288 return $this->db->lasterror();
289 }
290
297 public function escape($stringtoencode)
298 {
299 return $this->db->escape($stringtoencode);
300 }
301
308 public function escapeforlike($stringtoencode)
309 {
310 return $this->db->escapeforlike($stringtoencode);
311 }
312
313 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
321 public function last_insert_id($tab, $fieldid = 'rowid')
322 {
323 // phpcs:enable
324 return $this->db->last_insert_id($tab, $fieldid);
325 }
326
332 public function getPathOfRestore()
333 {
334 return $this->db->getPathOfRestore();
335 }
336
343 public function rollback($log = '')
344 {
345 return $this->db->rollback($log);
346 }
347
358 public function query($query, $usesavepoint = 0, $type = 'auto', $result_mode = 0)
359 {
360 $this->startTracing();
361
362 $resql = $this->db->query($query, $usesavepoint, $type, $result_mode);
363
364 $this->endTracing($query, $resql);
365
366 return $resql;
367 }
368
374 protected function startTracing()
375 {
376 $this->startTime = microtime(true);
377 $this->startMemory = memory_get_usage(true);
378 }
379
387 protected function endTracing($sql, $resql)
388 {
389 $endTime = microtime(true);
390 $duration = $endTime - $this->startTime;
391 $endMemory = memory_get_usage(true);
392 $memoryDelta = $endMemory - $this->startMemory;
393
394 $this->queries[] = array(
395 'sql' => $sql,
396 'duration' => $duration,
397 'memory_usage' => $memoryDelta,
398 'is_success' => $resql ? true : false,
399 'error_code' => $resql ? null : $this->db->lasterrno(),
400 'error_message' => $resql ? null : $this->db->lasterror()
401 );
402 }
403
415 public function connect($host, $login, $passwd, $name, $port = 0)
416 {
417 return $this->db->connect($host, $login, $passwd, $name, $port);
418 }
419
427 public function plimit($limit = 0, $offset = 0)
428 {
429 return $this->db->plimit($limit, $offset);
430 }
431
438 public function getServerParametersValues($filter = '')
439 {
440 return $this->db->getServerParametersValues($filter);
441 }
442
449 public function getServerStatusValues($filter = '')
450 {
451 return $this->db->getServerStatusValues($filter);
452 }
453
460 {
461 return $this->db->getDefaultCollationDatabase();
462 }
463
464 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
472 public function num_rows($resultset)
473 {
474 // phpcs:enable
475 return $this->db->num_rows($resultset);
476 }
477
483 public function getPathOfDump()
484 {
485 return $this->db->getPathOfDump();
486 }
487
493 public function getDriverInfo()
494 {
495 return $this->db->getDriverInfo();
496 }
497
503 public function errno()
504 {
505 return $this->db->errno();
506 }
507
520 public function DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys = null, $fulltext_keys = null, $keys = null)
521 {
522 return $this->db->DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys, $fulltext_keys, $keys);
523 }
524
531 public function DDLDropTable($table)
532 {
533 return $this->db->DDLDropTable($table);
534 }
535
541 public function getListOfCharacterSet()
542 {
543 return $this->db->getListOfCharacterSet();
544 }
545
555 public function DDLAddField($table, $field_name, $field_desc, $field_position = "")
556 {
557 return $this->db->DDLAddField($table, $field_name, $field_desc, $field_position);
558 }
559
567 public function DDLDropField($table, $field_name)
568 {
569 return $this->db->DDLDropField($table, $field_name);
570 }
571
580 public function DDLUpdateField($table, $field_name, $field_desc)
581 {
582 return $this->db->DDLUpdateField($table, $field_name, $field_desc);
583 }
584
590 public function getListOfCollation()
591 {
592 return $this->db->getListOfCollation();
593 }
594
602 public function DDLDescTable($table, $field = "")
603 {
604 return $this->db->DDLDescTable($table, $field);
605 }
606
612 public function getVersion()
613 {
614 return $this->db->getVersion();
615 }
616
623 {
624 return $this->db->getDefaultCharacterSetDatabase();
625 }
626
636 public function DDLCreateUser($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name)
637 {
638 return $this->db->DDLCreateUser($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
639 }
640
641 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
651 public function jdate($string, $gm = false)
652 {
653 // phpcs:enable
654 return $this->db->jdate($string, $gm);
655 }
656
665 public function encrypt($fieldorvalue, $withQuotes = 1)
666 {
667 return $this->db->encrypt($fieldorvalue, $withQuotes);
668 }
669
676 public function commit($log = '')
677 {
678 return $this->db->commit($log);
679 }
680
687 public function DDLInfoTable($table)
688 {
689 return $this->db->DDLInfoTable($table);
690 }
691
698 public function free($resultset = null)
699 {
700 $this->db->free($resultset);
701 }
702
709 public function close()
710 {
711 return $this->db->close();
712 }
713
719 public function lastqueryerror()
720 {
721 return $this->db->lastqueryerror();
722 }
723
729 public function DDLGetConnectId()
730 {
731 return $this->db->DDLGetConnectId();
732 }
733
734 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
741 public function fetch_object($resultset)
742 {
743 // phpcs:enable
744 return $this->db->fetch_object($resultset);
745 }
746
747 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
754 public function select_db($database)
755 {
756 // phpcs:enable
757 return $this->db->select_db($database);
758 }
759}
Class to manage Dolibarr database access.
TraceableDB class.
escape($stringtoencode)
Escape a string to insert data.
convertSQLFromMysql($line, $type='ddl')
Convert a SQL request in Mysql syntax to native syntax.
const VERSIONMIN
@const Version min database
jdate($string, $gm=false)
Convert (by PHP) a PHP server TZ string date into a Timestamps date (GMT if gm=true) 19700101020000 -...
begin($textinlog='')
Start transaction.
getDriverInfo()
Return version of database client driver.
free($resultset=null)
Free last resultset used.
getPathOfDump()
Return full path of dump program.
getPathOfRestore()
Return full path of restore program.
select_db($database)
Select a database.
rollback($log='')
Cancel a transaction and go back to initial data values.
encrypt($fieldorvalue, $withQuotes=1)
Encrypt sensitive data in database Warning: This function includes the escape and add the SQL simple ...
order($sortfield=null, $sortorder=null)
Define sort criteria of request.
fetch_array($resultset)
Return datas as an array.
getVersionArray()
Return version of database server into an array.
num_rows($resultset)
Return number of lines for result of a SELECT.
escapeforlike($stringtoencode)
Escape a string to insert data into a like.
commit($log='')
Validate a database transaction.
fetch_row($resultset)
Return datas as an array.
DDLCreateDb($database, $charset='', $collation='', $owner='')
Create a new database Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated We fo...
DDLAddField($table, $field_name, $field_desc, $field_position="")
Create a new field into table.
affected_rows($resultset)
Return the number o flines into the result of a request INSERT, DELETE or UPDATE.
DDLListTablesFull($database, $table='')
List tables into a database with table info.
decrypt($value)
Decrypt sensitive data in database.
DDLInfoTable($table)
List information of columns into a table.
lasterror()
Return last error label.
__construct($db)
Constructor.
getDefaultCollationDatabase()
Return collation used in database.
last_insert_id($tab, $fieldid='rowid')
Get last ID after an insert INSERT.
ifsql($test, $resok, $resko)
Format a SQL IF.
getServerParametersValues($filter='')
Return value of server parameters.
DDLGetConnectId()
Return connection ID.
regexpsql($subject, $pattern, $sqlstring=0)
format a sql regexp
lastqueryerror()
Return last query in error.
getDefaultCharacterSetDatabase()
Return charset used to store data in database.
getListOfCharacterSet()
Return list of available charset that can be used to store data in database.
endTracing($sql, $resql)
End query tracing.
getListOfCollation()
Return list of available collation that can be used for database.
connect($host, $login, $passwd, $name, $port=0)
Connection to server.
fetch_object($resultset)
Returns the current line (as an object) for the resultset cursor.
DDLDropField($table, $field_name)
Drop a field from table.
lastquery()
Return last request executed with query()
errno()
Return generic error code of last operation.
DDLDescTable($table, $field="")
Return a pointer of line with description of a table or field.
lasterrno()
Return last error code.
DDLListTables($database, $table='')
List tables into a database.
plimit($limit=0, $offset=0)
Define limits and offset of request.
idate($param, $gm='tzserver')
Convert (by PHP) a GM Timestamp date into a string date with PHP server TZ to insert into a date fiel...
DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys=null, $fulltext_keys=null, $keys=null)
Create a table into database.
getServerStatusValues($filter='')
Return value of server status.
startTracing()
Start query tracing.
DDLUpdateField($table, $field_name, $field_desc)
Update format of a field into a table.
close()
Close database connection.
query($query, $usesavepoint=0, $type='auto', $result_mode=0)
Execute a SQL request and return the resultset.
getVersion()
Return version of database server.
error()
Return description of last error.
const LABEL
@const Database label
DDLCreateUser($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name)
Create a user and privileges to connect to database (even if database does not exists yet)
DDLDropTable($table)
Drop a table into database.
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition repair.php:150