From 04f5e7355745a69225930daf9a4c387e1a79f05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 17:16:46 +0200 Subject: [PATCH 01/13] Better type hinting for MySQL database driver --- htdocs/core/db/mysql.class.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/core/db/mysql.class.php b/htdocs/core/db/mysql.class.php index 64efc837bcd..809402de28c 100644 --- a/htdocs/core/db/mysql.class.php +++ b/htdocs/core/db/mysql.class.php @@ -177,14 +177,14 @@ class DoliDBMysql extends DoliDB } /** - * Connexion to server + * Connection to server * * @param string $host database server host * @param string $login login * @param string $passwd password * @param string $name name of database (not used for mysql, used for pgsql) * @param integer $port Port of database server - * @return resource Database access handler + * @return resource|false Database access handler * @see close */ function connect($host, $login, $passwd, $name, $port=0) @@ -219,7 +219,7 @@ class DoliDBMysql extends DoliDB */ function getDriverInfo() { - return mysqli_get_client_info(); + return mysql_get_client_info(); } @@ -247,7 +247,7 @@ class DoliDBMysql extends DoliDB * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions). * Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints. * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) - * @return resource Resultset of answer + * @return resource|true|false Resultset of answer */ function query($query,$usesavepoint=0,$type='auto') { @@ -287,8 +287,8 @@ class DoliDBMysql extends DoliDB /** * Renvoie la ligne courante (comme un objet) pour le curseur resultset * - * @param Resultset $resultset Curseur de la requete voulue - * @return Object Object result line or false if KO or end of cursor + * @param resource $resultset Curseur de la requete voulue + * @return resource|false Object result line or false if KO or end of cursor */ function fetch_object($resultset) { @@ -300,7 +300,7 @@ class DoliDBMysql extends DoliDB /** * Return datas as an array * - * @param Resultset $resultset Resultset of request + * @param resource $resultset Resultset of request * @return array Array */ function fetch_array($resultset) @@ -327,7 +327,7 @@ class DoliDBMysql extends DoliDB /** * Return number of lines for result of a SELECT * - * @param Resultset $resultset Resulset of requests + * @param resource $resultset Resulset of requests * @return int Nb of lines * @see affected_rows */ @@ -341,7 +341,7 @@ class DoliDBMysql extends DoliDB /** * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE * - * @param resultset $resultset Curseur de la requete voulue + * @param resource $resultset Curseur de la requete voulue * @return int Nombre de lignes * @see num_rows */ @@ -358,10 +358,10 @@ class DoliDBMysql extends DoliDB /** * Free last resultset used. * - * @param resultset $resultset Curseur de la requete voulue + * @param resource $resultset Curseur de la requete voulue * @return void */ - function free($resultset=0) + function free($resultset=null) { // If resultset not provided, we take the last used by connexion if (! is_resource($resultset)) { $resultset=$this->_results; } @@ -558,7 +558,7 @@ class DoliDBMysql extends DoliDB * @param string $charset Charset used to store data * @param string $collation Charset used to sort data * @param string $owner Username of database owner - * @return resource resource defined if OK, null if KO + * @return false|resource|true resource defined if OK, null if KO */ function DDLCreateDb($database,$charset='',$collation='',$owner='') { @@ -712,7 +712,7 @@ class DoliDBMysql extends DoliDB * * @param string $table Name of table * @param string $field Optionnel : Name of field if we want description of field - * @return resource Resource + * @return false|resource|true Resource */ function DDLDescTable($table,$field="") { From 6e6e63db503d23d03237da0be2066b2ad58b2cf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 17:56:01 +0200 Subject: [PATCH 02/13] Better type hinting and code structure for the MySQLi database driver --- htdocs/core/db/Database.interface.php | 2 +- htdocs/core/db/mysql.class.php | 4 +- htdocs/core/db/mysqli.class.php | 82 +++++++++++++-------------- 3 files changed, 41 insertions(+), 47 deletions(-) diff --git a/htdocs/core/db/Database.interface.php b/htdocs/core/db/Database.interface.php index f27c4e75189..b09e4e48db2 100644 --- a/htdocs/core/db/Database.interface.php +++ b/htdocs/core/db/Database.interface.php @@ -21,7 +21,7 @@ */ /** - * Class to manage Dolibarr database access for a Mysql database + * Class to manage Dolibarr database access for an SQL database */ interface Database { diff --git a/htdocs/core/db/mysql.class.php b/htdocs/core/db/mysql.class.php index 809402de28c..e4efaa50b97 100644 --- a/htdocs/core/db/mysql.class.php +++ b/htdocs/core/db/mysql.class.php @@ -21,13 +21,13 @@ /** * \file htdocs/core/db/mysql.class.php - * \brief Class file to manage Dolibarr database access for a Mysql database + * \brief Class file to manage Dolibarr database access for a MySQL database */ require_once DOL_DOCUMENT_ROOT .'/core/db/DoliDB.class.php'; /** - * Class to manage Dolibarr database access for a Mysql database + * Class to manage Dolibarr database access for a MySQL database using the mysql extension */ class DoliDBMysql extends DoliDB { diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 1126f6c8a57..77d484b92bf 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -21,13 +21,13 @@ /** * \file htdocs/core/db/mysqli.class.php - * \brief Class file to manage Dolibarr database access for a Mysql database + * \brief Class file to manage Dolibarr database access for a MySQL database */ require_once DOL_DOCUMENT_ROOT .'/core/db/DoliDB.class.php'; /** - * Class to manage Dolibarr database access for a Mysql database + * Class to manage Dolibarr database access for a MySQL database using the MySQLi extension */ class DoliDBMysqli extends DoliDB { @@ -36,7 +36,7 @@ class DoliDBMysqli extends DoliDB //! Database label const LABEL='MySQL'; //! Version min database - const VERSIONMIN='4.1.0'; + const VERSIONMIN='4.1.3'; //! Resultset of last query private $_results; @@ -187,7 +187,7 @@ class DoliDBMysqli extends DoliDB * @param string $passwd password * @param string $name name of database (not used for mysql, used for pgsql) * @param integer $port Port of database server - * @return resource Database access handler + * @return mysqli Database access handler * @see close */ function connect($host, $login, $passwd, $name, $port=0) @@ -230,7 +230,7 @@ class DoliDBMysqli extends DoliDB /** * Close database connexion * - * @return boolean True if disconnect successfull, false otherwise + * @return bool True if disconnect successfull, false otherwise * @see connect */ function close() @@ -251,7 +251,7 @@ class DoliDBMysqli extends DoliDB * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions). * Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints. * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) - * @return resource Resultset of answer + * @return bool|mysqli_result Resultset of answer */ function query($query,$usesavepoint=0,$type='auto') { @@ -290,8 +290,8 @@ class DoliDBMysqli extends DoliDB /** * Renvoie la ligne courante (comme un objet) pour le curseur resultset * - * @param Resultset $resultset Curseur de la requete voulue - * @return Object Object result line or false if KO or end of cursor + * @param mysqli_result $resultset Curseur de la requete voulue + * @return object|null Object result line or null if KO or end of cursor */ function fetch_object($resultset) { @@ -304,8 +304,8 @@ class DoliDBMysqli extends DoliDB /** * Return datas as an array * - * @param Resultset $resultset Resultset of request - * @return array Array + * @param mysqli_result $resultset Resultset of request + * @return array|null Array or null if KO or end of cursor */ function fetch_array($resultset) { @@ -317,8 +317,8 @@ class DoliDBMysqli extends DoliDB /** * Return datas as an array * - * @param resource $resultset Resultset of request - * @return array Array + * @param mysqli_result $resultset Resultset of request + * @return array|null|0 Array or null if KO or end of cursor or 0 if resultset is bool */ function fetch_row($resultset) { @@ -338,8 +338,8 @@ class DoliDBMysqli extends DoliDB /** * Return number of lines for result of a SELECT * - * @param Resultset $resultset Resulset of requests - * @return int Nb of lines + * @param mysqli_result $resultset Resulset of requests + * @return int Nb of lines * @see affected_rows */ function num_rows($resultset) @@ -352,8 +352,8 @@ class DoliDBMysqli extends DoliDB /** * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE * - * @param resultset $resultset Curseur de la requete voulue - * @return int Nombre de lignes + * @param mysqli_result $resultset Curseur de la requete voulue + * @return int Nombre de lignes * @see num_rows */ function affected_rows($resultset) @@ -369,10 +369,10 @@ class DoliDBMysqli extends DoliDB /** * Libere le dernier resultset utilise sur cette connexion * - * @param resultset $resultset Curseur de la requete voulue + * @param mysqli_result $resultset Curseur de la requete voulue * @return void */ - function free($resultset=0) + function free($resultset=null) { // If resultset not provided, we take the last used by connexion if (! is_object($resultset)) { $resultset=$this->_results; } @@ -401,8 +401,7 @@ class DoliDBMysqli extends DoliDB if (! $this->connected) { // Si il y a eu echec de connexion, $this->db n'est pas valide. return 'DB_ERROR_FAILED_TO_CONNECT'; - } - else { + } else { // Constants to convert a MySql error code to a generic Dolibarr error code $errorcode_map = array( 1004 => 'DB_ERROR_CANNOT_CREATE', @@ -434,8 +433,7 @@ class DoliDBMysqli extends DoliDB 1451 => 'DB_ERROR_CHILD_EXISTS' ); - if (isset($errorcode_map[mysqli_errno($this->db)])) - { + if (isset($errorcode_map[mysqli_errno($this->db)])) { return $errorcode_map[mysqli_errno($this->db)]; } $errno=mysqli_errno($this->db); @@ -464,7 +462,7 @@ class DoliDBMysqli extends DoliDB * * @param string $tab Table name concerned by insert. Ne sert pas sous MySql mais requis pour compatibilite avec Postgresql * @param string $fieldid Field name - * @return int Id of row + * @return int|string Id of row */ function last_insert_id($tab,$fieldid='rowid') { @@ -562,7 +560,7 @@ class DoliDBMysqli extends DoliDB * @param string $charset Charset used to store data * @param string $collation Charset used to sort data * @param string $owner Username of database owner - * @return resource resource defined if OK, null if KO + * @return bool|mysqli_result resource defined if OK, null if KO */ function DDLCreateDb($database,$charset='',$collation='',$owner='') { @@ -638,11 +636,13 @@ class DoliDBMysqli extends DoliDB * @param string $type Type de la table * @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur * @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext - * @param string $keys Tableau des champs cles noms => valeur + * @param array $keys Tableau des champs cles noms => valeur * @return int <0 if KO, >=0 if OK */ - function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="") + function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null) { + // FIXME: $fulltext_keys parameter is unused + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "CREATE TABLE ".$table."("; @@ -677,8 +677,7 @@ class DoliDBMysqli extends DoliDB if($primary_key != "") $pk = "primary key(".$primary_key.")"; - if($unique_keys != "") - { + if(is_array($unique_keys)) { $i = 0; foreach($unique_keys as $key => $value) { @@ -686,7 +685,7 @@ class DoliDBMysqli extends DoliDB $i++; } } - if($keys != "") + if(is_array($keys)) { $i = 0; foreach($keys as $key => $value) @@ -700,7 +699,7 @@ class DoliDBMysqli extends DoliDB $sql .= ",".$pk; if($unique_keys != "") $sql .= ",".implode(',',$sqluq); - if($keys != "") + if(is_array($keys)) $sql .= ",".implode(',',$sqlk); $sql .=") engine=".$type; @@ -716,7 +715,7 @@ class DoliDBMysqli extends DoliDB * * @param string $table Name of table * @param string $field Optionnel : Name of field if we want description of field - * @return resource Resultset x (x->Field, x->Type, ...) + * @return bool|mysqli_result Resultset x (x->Field, x->Type, ...) */ function DDLDescTable($table,$field="") { @@ -763,14 +762,10 @@ class DoliDBMysqli extends DoliDB $sql.= " ".$field_position; dol_syslog(get_class($this)."::DDLAddField ".$sql,LOG_DEBUG); - if(! $this->query($sql)) - { - return -1; - } - else - { + if($this->query($sql)) { return 1; } + return -1; } /** @@ -808,12 +803,11 @@ class DoliDBMysqli extends DoliDB { $sql= "ALTER TABLE ".$table." DROP COLUMN `".$field_name."`"; dol_syslog(get_class($this)."::DDLDropField ".$sql,LOG_DEBUG); - if (! $this->query($sql)) - { - $this->error=$this->lasterror(); - return -1; + if ($this->query($sql)) { + return 1; } - else return 1; + $this->error=$this->lasterror(); + return -1; } @@ -883,7 +877,7 @@ class DoliDBMysqli extends DoliDB /** * Return list of available charset that can be used to store data in database * - * @return array List of Charset + * @return array|null List of Charset */ function getListOfCharacterSet() { @@ -926,7 +920,7 @@ class DoliDBMysqli extends DoliDB /** * Return list of available collation that can be used for database * - * @return array Liste of Collation + * @return array|null Liste of Collation */ function getListOfCollation() { From 7231ca890a46a8c442faa2925ba462278e8216e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 18:13:24 +0200 Subject: [PATCH 03/13] Better type hinting for the MSSQL database driver --- htdocs/core/db/mssql.class.php | 74 +++++++++++++++++----------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index 3523e21bdf0..c3b2b93a7ee 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -21,7 +21,7 @@ /** * \file htdocs/core/db/mssql.class.php - * \brief Fichier de la classe permettant de gerer une base mssql + * \brief Fichier de la classe permettant de gerer une base MSSQL */ require_once DOL_DOCUMENT_ROOT .'/core/db/DoliDB.class.php'; @@ -157,8 +157,8 @@ class DoliDBMssql extends DoliDB * @param string $login login * @param string $passwd password * @param string $name name of database (not used for mysql, used for pgsql) - * @param string $port Port of database server - * @return resource Database access handler + * @param int $port Port of database server + * @return false|resource|true Database access handler * @see close */ function connect($host, $login, $passwd, $name, $port=0) @@ -212,7 +212,7 @@ class DoliDBMssql extends DoliDB /** * Close database connexion * - * @return boolean True if disconnect successfull, false otherwise + * @return bool True if disconnect successfull, false otherwise * @see connect */ function close() @@ -230,7 +230,7 @@ class DoliDBMssql extends DoliDB /** * Start transaction * - * @return int 1 if transaction successfuly opened or already opened, 0 if error + * @return bool true if transaction successfuly opened or already opened, false if error */ function begin() { @@ -250,7 +250,7 @@ class DoliDBMssql extends DoliDB } else { - return 1; + return true; } } @@ -258,7 +258,7 @@ class DoliDBMssql extends DoliDB * Validate a database transaction * * @param string $log Add more log to default log line - * @return int 1 if validation is OK or transaction level no started, 0 if ERROR + * @return bool true if validation is OK or transaction level no started, false if ERROR */ function commit($log='') { @@ -272,16 +272,16 @@ class DoliDBMssql extends DoliDB if ($ret) { dol_syslog("COMMIT Transaction",LOG_DEBUG); - return 1; + return true; } else { - return 0; + return false; } } elseif ($this->transaction_opened > 1) { - return 1; + return true; } else trigger_error("Commit requested but no transaction remain"); } @@ -290,7 +290,7 @@ class DoliDBMssql extends DoliDB * Annulation d'une transaction et retour aux anciennes valeurs * * @param string $log Add more log to default log line - * @return int 1 si annulation ok ou transaction non ouverte, 0 en cas d'erreur + * @return bool true si annulation ok ou transaction non ouverte, false en cas d'erreur */ function rollback($log='') { @@ -305,7 +305,7 @@ class DoliDBMssql extends DoliDB } elseif ($this->transaction_opened > 1) { - return 1; + return true; } else trigger_error("Rollback requested but no transaction remain"); } @@ -317,7 +317,7 @@ class DoliDBMssql extends DoliDB * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions). * Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints. * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) - * @return resource Resultset of answer + * @return false|resource|true Resultset of answer */ function query($query,$usesavepoint=0,$type='auto') { @@ -459,8 +459,8 @@ class DoliDBMssql extends DoliDB /** * Renvoie la ligne courante (comme un objet) pour le curseur resultset * - * @param Resultset $resultset Curseur de la requete voulue - * @return Object Object result line or false if KO or end of cursor + * @param resource $resultset Curseur de la requete voulue + * @return object|false Object result line or false if KO or end of cursor */ function fetch_object($resultset) { @@ -472,8 +472,8 @@ class DoliDBMssql extends DoliDB /** * Return datas as an array * - * @param Resultset $resultset Resultset of request - * @return array Array + * @param resource $resultset Resultset of request + * @return array|false Array or false if KO or end of cursor */ function fetch_array($resultset) { @@ -486,8 +486,8 @@ class DoliDBMssql extends DoliDB /** * Return datas as an array * - * @param Resultset $resultset Resultset of request - * @return array Array + * @param resource $resultset Resultset of request + * @return array|false Array or false if KO or end of cursor */ function fetch_row($resultset) { @@ -499,7 +499,7 @@ class DoliDBMssql extends DoliDB /** * Return number of lines for result of a SELECT * - * @param Resultset $resultset Resulset of requests + * @param resource $resultset Resulset of requests * @return int Nb of lines * @see affected_rows */ @@ -513,7 +513,7 @@ class DoliDBMssql extends DoliDB /** * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE * - * @param resultset $resultset Curseur de la requete voulue + * @param resource $resultset Curseur de la requete voulue * @return int Nombre de lignes * @see num_rows */ @@ -532,10 +532,10 @@ class DoliDBMssql extends DoliDB /** * Free last resultset used. * - * @param resultset $resultset Curseur de la requete voulue - * @return void + * @param resource $resultset Curseur de la requete voulue + * @return bool */ - function free($resultset=0) + function free($resultset=null) { // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion if (! is_resource($resultset)) { $resultset=$this->_results; } @@ -641,7 +641,7 @@ class DoliDBMssql extends DoliDB * * @param string $tab Table name concerned by insert. Ne sert pas sous MySql mais requis pour compatibilite avec Postgresql * @param string $fieldid Field name - * @return int Id of row + * @return int Id of row or -1 on error */ function last_insert_id($tab,$fieldid='rowid') { @@ -662,7 +662,7 @@ class DoliDBMssql extends DoliDB * * @param string $fieldorvalue Field name or value to encrypt * @param int $withQuotes Return string with quotes - * @return return XXX(field) or XXX('value') or field or 'value' + * @return string XXX(field) or XXX('value') or field or 'value' */ function encrypt($fieldorvalue, $withQuotes=0) { @@ -720,7 +720,7 @@ class DoliDBMssql extends DoliDB * @param string $charset Charset used to store data * @param string $collation Charset used to sort data * @param string $owner Username of database owner - * @return resource resource defined if OK, null if KO + * @return false|resource|true resource defined if OK, false if KO */ function DDLCreateDb($database,$charset='',$collation='',$owner='') { @@ -786,11 +786,13 @@ class DoliDBMssql extends DoliDB * @param string $type Type de la table * @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur * @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext - * @param string $keys Tableau des champs cles noms => valeur + * @param array $keys Tableau des champs cles noms => valeur * @return int <0 if KO, >=0 if OK */ - function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="") + function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null) { + // FIXME: $fulltext_keys parameter is unused + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "create table ".$table."("; @@ -820,7 +822,7 @@ class DoliDBMssql extends DoliDB if($primary_key != "") $pk = "primary key(".$primary_key.")"; - if($unique_keys != "") + if(is_array($unique_keys)) { $i = 0; foreach($unique_keys as $key => $value) @@ -829,7 +831,7 @@ class DoliDBMssql extends DoliDB $i++; } } - if($keys != "") + if(is_array($keys)) { $i = 0; foreach($keys as $key => $value) @@ -841,9 +843,9 @@ class DoliDBMssql extends DoliDB $sql .= implode(',',$sqlfields); if($primary_key != "") $sql .= ",".$pk; - if($unique_keys != "") + if(is_array($unique_keys)) $sql .= ",".implode(',',$sqluq); - if($keys != "") + if(is_array($keys)) $sql .= ",".implode(',',$sqlk); $sql .=") type=".$type; @@ -859,7 +861,7 @@ class DoliDBMssql extends DoliDB * * @param string $table Name of table * @param string $field Optionnel : Name of field if we want description of field - * @return resource Resource + * @return false|resource|true Resource */ function DDLDescTable($table,$field="") { @@ -1047,7 +1049,7 @@ class DoliDBMssql extends DoliDB // FIXME: Dummy method // TODO: Implement - return ''; + return array(); } /** @@ -1123,7 +1125,7 @@ class DoliDBMssql extends DoliDB * * @param string $table Table name which contains fields * @param mixed $fields String for one field or array of string for multiple field - * @return boolean|multitype:object + * @return false|object */ function GetFieldInformation($table,$fields) { $sql="SELECT * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='".$this->escape($table)."' AND COLUMN_NAME"; From 4a01cf1256ca2ad5a4a90cc9198ae0c7cdd20e82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 18:30:16 +0200 Subject: [PATCH 04/13] Better type hinting for the Database interface --- htdocs/core/db/Database.interface.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/db/Database.interface.php b/htdocs/core/db/Database.interface.php index b09e4e48db2..e3f6f47fb4d 100644 --- a/htdocs/core/db/Database.interface.php +++ b/htdocs/core/db/Database.interface.php @@ -216,7 +216,7 @@ interface Database * @param string $login login * @param string $passwd password * @param string $name name of database (not used for mysql, used for pgsql) - * @param string $port Port of database server + * @param int $port Port of database server * @return resource Database access handler * @see close */ @@ -293,10 +293,10 @@ interface Database * @param string $type Type de la table * @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur * @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext - * @param string $keys Tableau des champs cles noms => valeur + * @param array $keys Tableau des champs cles noms => valeur * @return int <0 if KO, >=0 if OK */ - function DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys = "", $fulltext_keys = "", $keys = ""); + function DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys = null, $fulltext_keys = null, $keys = null); /** * Return list of available charset that can be used to store data in database @@ -424,7 +424,7 @@ interface Database * @param resource $resultset Fre cursor * @return void */ - function free($resultset = 0); + function free($resultset = null); /** * Close database connexion From ccd14c83056bc77b9e95cec72d74a30c885af7af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 18:31:12 +0200 Subject: [PATCH 05/13] Better type hinting and code structure for the PgSQL database driver --- htdocs/core/db/pgsql.class.php | 56 +++++++++++++++++----------------- htdocs/install/etape2.php | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index e946d39e143..c276b132eb0 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -147,10 +147,10 @@ class DoliDBPgsql extends DoliDB * * @param string $line SQL request line to convert * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) - * @param string $unescapeslashquot Unescape slash quote with quote quote + * @param bool $unescapeslashquot Unescape slash quote with quote quote * @return string SQL request line converted */ - static function convertSQLFromMysql($line,$type='auto',$unescapeslashquot=0) + static function convertSQLFromMysql($line,$type='auto',$unescapeslashquot=false) { // Removed empty line if this is a comment line for SVN tagging if (preg_match('/^--\s\$Id/i',$line)) { @@ -353,7 +353,7 @@ class DoliDBPgsql extends DoliDB * On compare juste manuellement si la database choisie est bien celle activee par la connexion * * @param string $database Name of database - * @return boolean true if OK, false if KO + * @return bool true if OK, false if KO */ function select_db($database) { @@ -369,7 +369,7 @@ class DoliDBPgsql extends DoliDB * @param string $passwd Password * @param string $name Name of database (not used for mysql, used for pgsql) * @param integer $port Port of database server - * @return resource Database access handler + * @return false|resource Database access handler * @see close */ function connect($host, $login, $passwd, $name, $port=0) @@ -463,7 +463,7 @@ class DoliDBPgsql extends DoliDB * @param string $query SQL query string * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollback to savepoint if error (this allow to have some request with errors inside global transactions). * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) - * @return resource Resultset of answer + * @return false|resource Resultset of answer */ function query($query,$usesavepoint=0,$type='auto') { @@ -530,8 +530,8 @@ class DoliDBPgsql extends DoliDB /** * Renvoie la ligne courante (comme un objet) pour le curseur resultset * - * @param Resultset $resultset Curseur de la requete voulue - * @return Object Object result line or false if KO or end of cursor + * @param resource $resultset Curseur de la requete voulue + * @return false|object Object result line or false if KO or end of cursor */ function fetch_object($resultset) { @@ -544,7 +544,7 @@ class DoliDBPgsql extends DoliDB * Return datas as an array * * @param resource $resultset Resultset of request - * @return array Array + * @return false|array Array */ function fetch_array($resultset) { @@ -557,7 +557,7 @@ class DoliDBPgsql extends DoliDB * Return datas as an array * * @param resource $resultset Resultset of request - * @return array Array + * @return false|array Array */ function fetch_row($resultset) { @@ -569,8 +569,8 @@ class DoliDBPgsql extends DoliDB /** * Return number of lines for result of a SELECT * - * @param Resultset $resultset Resulset of requests - * @return int Nb of lines + * @param resourse $resultset Resulset of requests + * @return int Nb of lines, -1 on error * @see affected_rows */ function num_rows($resultset) @@ -583,7 +583,7 @@ class DoliDBPgsql extends DoliDB /** * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE * - * @param Resultset $resultset Result set of request + * @param resource $resultset Result set of request * @return int Nb of lines * @see num_rows */ @@ -600,10 +600,10 @@ class DoliDBPgsql extends DoliDB /** * Libere le dernier resultset utilise sur cette connexion * - * @param Resultset $resultset Result set of request + * @param resource $resultset Result set of request * @return void */ - function free($resultset=0) + function free($resultset=null) { // If resultset not provided, we take the last used by connexion if (! is_resource($resultset)) { $resultset=$this->_results; } @@ -746,7 +746,7 @@ class DoliDBPgsql extends DoliDB * * @param string $tab Table name concerned by insert. Ne sert pas sous MySql mais requis pour compatibilite avec Postgresql * @param string $fieldid Field name - * @return int Id of row + * @return string Id of row */ function last_insert_id($tab,$fieldid='rowid') { @@ -827,7 +827,7 @@ class DoliDBPgsql extends DoliDB * @param string $charset Charset used to store data * @param string $collation Charset used to sort data * @param string $owner Username of database owner - * @return resource resource defined if OK, null if KO + * @return false|resource resource defined if OK, null if KO */ function DDLCreateDb($database,$charset='',$collation='',$owner='') { @@ -910,11 +910,13 @@ class DoliDBPgsql extends DoliDB * @param string $type Type de la table * @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur * @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext - * @param string $keys Tableau des champs cles noms => valeur + * @param array $keys Tableau des champs cles noms => valeur * @return int <0 if KO, >=0 if OK */ - function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="") + function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null) { + // FIXME: $fulltext_keys parameter is unused + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "create table ".$table."("; @@ -944,7 +946,7 @@ class DoliDBPgsql extends DoliDB if($primary_key != "") $pk = "primary key(".$primary_key.")"; - if($unique_keys != "") + if(is_array($unique_keys)) { $i = 0; foreach($unique_keys as $key => $value) @@ -953,7 +955,7 @@ class DoliDBPgsql extends DoliDB $i++; } } - if($keys != "") + if(is_array($keys)) { $i = 0; foreach($keys as $key => $value) @@ -965,9 +967,9 @@ class DoliDBPgsql extends DoliDB $sql .= implode(',',$sqlfields); if($primary_key != "") $sql .= ",".$pk; - if($unique_keys != "") + if(is_array($unique_keys)) $sql .= ",".implode(',',$sqluq); - if($keys != "") + if(is_array($keys)) $sql .= ",".implode(',',$sqlk); $sql .=") type=".$type; @@ -1007,7 +1009,7 @@ class DoliDBPgsql extends DoliDB * * @param string $table Name of table * @param string $field Optionnel : Name of field if we want description of field - * @return resource Resultset x (x->attname) + * @return false|resource Resultset x (x->attname) */ function DDLDescTable($table,$field="") { @@ -1052,8 +1054,7 @@ class DoliDBPgsql extends DoliDB dol_syslog($sql,LOG_DEBUG); if(! $this -> query($sql)) - return -1; - else + return -1; return 1; } @@ -1078,8 +1079,7 @@ class DoliDBPgsql extends DoliDB dol_syslog($sql,LOG_DEBUG); if (! $this->query($sql)) - return -1; - else + return -1; return 1; } @@ -1099,7 +1099,7 @@ class DoliDBPgsql extends DoliDB $this->error=$this->lasterror(); return -1; } - else return 1; + return 1; } /** diff --git a/htdocs/install/etape2.php b/htdocs/install/etape2.php index 8c0e3f8ab5c..d803a622a3b 100644 --- a/htdocs/install/etape2.php +++ b/htdocs/install/etape2.php @@ -139,7 +139,7 @@ if ($action == "set") // To say sql requests are escaped for mysql so we need to unescape them - $db->unescapeslashquot=1; + $db->unescapeslashquot=true; /************************************************************************************** From 27d52cf2b074271cb025ec1749cee1c6e4f8ff8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 19:01:01 +0200 Subject: [PATCH 06/13] Better type hinting for DoliDB --- htdocs/core/db/Database.interface.php | 25 +++----- htdocs/core/db/DoliDB.class.php | 92 +++++++++++++-------------- htdocs/core/db/mssql.class.php | 28 ++++---- htdocs/core/db/mysql.class.php | 28 ++++---- htdocs/core/db/mysqli.class.php | 28 ++++---- htdocs/core/db/pgsql.class.php | 28 ++++---- htdocs/core/db/sqlite.class.php | 22 +++---- htdocs/core/db/sqlite3.class.php | 22 +++---- htdocs/install/check.php | 4 +- htdocs/install/etape1.php | 4 +- htdocs/install/etape2.php | 4 +- htdocs/install/etape4.php | 2 +- htdocs/install/etape5.php | 4 +- htdocs/install/repair.php | 4 +- htdocs/install/upgrade.php | 4 +- htdocs/install/upgrade2.php | 4 +- 16 files changed, 145 insertions(+), 158 deletions(-) diff --git a/htdocs/core/db/Database.interface.php b/htdocs/core/db/Database.interface.php index e3f6f47fb4d..ab38cdf378c 100644 --- a/htdocs/core/db/Database.interface.php +++ b/htdocs/core/db/Database.interface.php @@ -4,7 +4,7 @@ * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2006 Andre Cianfarani * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2014 Raphaël Doursenaud + * Copyright (C) 2014-2015 Raphaël Doursenaud * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -111,13 +111,6 @@ interface Database */ function error(); - /** - * Return label of manager - * - * @return string Label - */ - function getLabel(); - /** * List tables into a database * @@ -141,7 +134,7 @@ interface Database * @param string $sortorder Sort order * @return string String to provide syntax of a sort sql string */ - function order($sortfield = 0, $sortorder = 0); + function order($sortfield = null, $sortorder = null); /** * Decrypt sensitive data in database @@ -382,15 +375,15 @@ interface Database ); /** - * Convert (by PHP) a PHP server TZ string date into a Timestamps date (GMT if gm=true) - * 19700101020000 -> 3600 with TZ+1 and gmt=0 - * 19700101020000 -> 7200 whaterver is TZ if gmt=1 - * + * Convert (by PHP) a PHP server TZ string date into a Timestamps date (GMT if gm=true) + * 19700101020000 -> 3600 with TZ+1 and gmt=0 + * 19700101020000 -> 7200 whaterver is TZ if gmt=1 + * * @param string $string Date in a string (YYYYMMDDHHMMSS, YYYYMMDD, YYYY-MM-DD HH:MM:SS) - * @param int $gm 1=Input informations are GMT values, otherwise local to server TZ + * @param bool $gm 1=Input informations are GMT values, otherwise local to server TZ * @return int|string Date TMS or '' - */ - function jdate($string, $gm=false); + */ + function jdate($string, $gm=false); /** * Encrypt sensitive data in database diff --git a/htdocs/core/db/DoliDB.class.php b/htdocs/core/db/DoliDB.class.php index 0aae168be79..6a7c5276025 100644 --- a/htdocs/core/db/DoliDB.class.php +++ b/htdocs/core/db/DoliDB.class.php @@ -1,6 +1,6 @@ + * Copyright (C) 2013-2015 Raphaël Doursenaud * Copyright (C) 2014-2015 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify @@ -29,41 +29,43 @@ require_once DOL_DOCUMENT_ROOT .'/core/db/Database.interface.php'; */ abstract class DoliDB implements Database { - //! Database handler - public $db; - //! Database type - public $type; - //! Charset used to force charset when creating database - public $forcecharset='utf8'; - //! Collate used to force collate when creating database - public $forcecollate='utf8_general_ci'; - //! Resultset of last query - private $_results; - //! 1 if connected, else 0 - public $connected; - //! 1 if database selected, else 0 - public $database_selected; - //! Selected database name - public $database_name; - //! Database username - public $database_user; - //! Database host - public $database_host; - //! Database port - public $database_port; - //! >=1 if a transaction is opened, 0 otherwise - public $transaction_opened; - //! Last successful query - public $lastquery; - //! Last failed query - public $lastqueryerror; - //! Last error message - public $lasterror; - //! Last error number - public $lasterrno; + /** @var resource Database handler */ + public $db; + /** @var string Database type */ + public $type; + /** @var string Charset used to force charset when creating database */ + public $forcecharset='utf8'; + /** @var string Collate used to force collate when creating database */ + public $forcecollate='utf8_general_ci'; + /** @var resource Resultset of last query */ + private $_results; + /** @var bool true if connected, else false */ + public $connected; + /** @var bool true if database selected, else false */ + public $database_selected; + /** @var string Selected database name */ + public $database_name; + /** @var string Database username */ + public $database_user; + /** @var string Database host */ + public $database_host; + /** @var int Database port */ + public $database_port; + /** @var int >=1 if a transaction is opened, 0 otherwise */ + public $transaction_opened; + /** @var string Last successful query */ + public $lastquery; + /** @ar string Last failed query */ + public $lastqueryerror; + /** @var string Last error message */ + public $lasterror; + /** @var int Last error number */ + public $lasterrno; - public $ok; - public $error; + /** @var bool Status */ + public $ok; + /** @var string */ + public $error; /** * Format a SQL IF @@ -205,16 +207,6 @@ abstract class DoliDB implements Database return preg_split("/[\.,-]/",$this->getVersion()); } - /** - * Return label of manager - * - * @return string Label - */ - function getLabel() - { - return $this->label; - } - /** * Return last request executed with query() * @@ -232,9 +224,9 @@ abstract class DoliDB implements Database * @param string $sortorder Sort order * @return string String to provide syntax of a sort sql string */ - function order($sortfield=0,$sortorder=0) + function order($sortfield=null,$sortorder=null) { - if ($sortfield) + if (isset($sortfield)) { $return=''; $fields=explode(',',$sortfield); @@ -244,7 +236,9 @@ abstract class DoliDB implements Database else $return.=','; $return.=preg_replace('/[^0-9a-z_\.]/i','',$val); - if ($sortorder) $return.=' '.preg_replace('/[^0-9a-z]/i','',$sortorder); + if (isset($sortorder)) { + $return.=' '.preg_replace('/[^0-9a-z]/i','',$sortorder); + } } return $return; } @@ -270,7 +264,7 @@ abstract class DoliDB implements Database * 19700101020000 -> 7200 whaterver is TZ if gmt=1 * * @param string $string Date in a string (YYYYMMDDHHMMSS, YYYYMMDD, YYYY-MM-DD HH:MM:SS) - * @param int $gm 1=Input informations are GMT values, otherwise local to server TZ + * @param bool $gm 1=Input informations are GMT values, otherwise local to server TZ * @return int|string Date TMS or '' */ function jdate($string, $gm=false) diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index c3b2b93a7ee..0aed5a6ee11 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -66,8 +66,8 @@ class DoliDBMssql extends DoliDB if (! function_exists("mssql_connect")) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error="Mssql PHP functions for using MSSql driver are not available in this version of PHP"; dol_syslog(get_class($this)."::DoliDBMssql : MSsql PHP functions for using MSsql driver are not available in this version of PHP",LOG_ERR); return $this->ok; @@ -75,8 +75,8 @@ class DoliDBMssql extends DoliDB if (! $host) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=$langs->trans("ErrorWrongHostParameter"); dol_syslog(get_class($this)."::DoliDBMssql : Erreur Connect, wrong host parameters",LOG_ERR); return $this->ok; @@ -88,14 +88,14 @@ class DoliDBMssql extends DoliDB { // Si client connecte avec charset different de celui de la base Dolibarr // (La base Dolibarr a ete forcee en this->forcecharset a l'install) - $this->connected = 1; - $this->ok = 1; + $this->connected = true; + $this->ok = true; } else { // host, login ou password incorrect - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=mssql_get_last_message(); dol_syslog(get_class($this)."::DoliDBMssql : Erreur Connect mssql_get_last_message=".$this->error,LOG_ERR); } @@ -105,15 +105,15 @@ class DoliDBMssql extends DoliDB { if ($this->select_db($name)) { - $this->database_selected = 1; + $this->database_selected = true; $this->database_name = $name; - $this->ok = 1; + $this->ok = true; } else { - $this->database_selected = 0; + $this->database_selected = false; $this->database_name = ''; - $this->ok = 0; + $this->ok = false; $this->error=$this->error(); dol_syslog(get_class($this)."::DoliDBMssql : Erreur Select_db ".$this->error,LOG_ERR); } @@ -121,7 +121,7 @@ class DoliDBMssql extends DoliDB else { // Pas de selection de base demandee, ok ou ko - $this->database_selected = 0; + $this->database_selected = false; } return $this->ok; @@ -220,7 +220,7 @@ class DoliDBMssql extends DoliDB if ($this->db) { if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR); - $this->connected=0; + $this->connected=false; return mssql_close($this->db); } return false; diff --git a/htdocs/core/db/mysql.class.php b/htdocs/core/db/mysql.class.php index e4efaa50b97..5f913b38ae0 100644 --- a/htdocs/core/db/mysql.class.php +++ b/htdocs/core/db/mysql.class.php @@ -69,8 +69,8 @@ class DoliDBMysql extends DoliDB if (! function_exists("mysql_connect")) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error="Mysql PHP functions for using MySql driver are not available in this version of PHP. Try to use another driver."; dol_syslog(get_class($this)."::DoliDBMysql : Mysql PHP functions for using Mysql driver are not available in this version of PHP. Try to use another driver.",LOG_ERR); return $this->ok; @@ -78,8 +78,8 @@ class DoliDBMysql extends DoliDB if (! $host) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=$langs->trans("ErrorWrongHostParameter"); dol_syslog(get_class($this)."::DoliDBMysql : Erreur Connect, wrong host parameters",LOG_ERR); return $this->ok; @@ -89,14 +89,14 @@ class DoliDBMysql extends DoliDB $this->db = $this->connect($host, $user, $pass, $name, $port); if ($this->db) { - $this->connected = 1; - $this->ok = 1; + $this->connected = true; + $this->ok = true; } else { // host, login ou password incorrect - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=mysql_error(); dol_syslog(get_class($this)."::DoliDBMysql : Erreur Connect mysql_error=".$this->error,LOG_ERR); } @@ -106,9 +106,9 @@ class DoliDBMysql extends DoliDB { if ($this->select_db($name)) { - $this->database_selected = 1; + $this->database_selected = true; $this->database_name = $name; - $this->ok = 1; + $this->ok = true; // If client connected with different charset than Dolibarr HTML output $clientmustbe=''; @@ -122,9 +122,9 @@ class DoliDBMysql extends DoliDB } else { - $this->database_selected = 0; + $this->database_selected = false; $this->database_name = ''; - $this->ok = 0; + $this->ok = false; $this->error=$this->error(); dol_syslog(get_class($this)."::DoliDBMysql : Erreur Select_db ".$this->error,LOG_ERR); } @@ -132,7 +132,7 @@ class DoliDBMysql extends DoliDB else { // Pas de selection de base demandee, ok ou ko - $this->database_selected = 0; + $this->database_selected = false; if ($this->connected) { @@ -234,7 +234,7 @@ class DoliDBMysql extends DoliDB if ($this->db) { if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR); - $this->connected=0; + $this->connected=false; return mysql_close($this->db); } return false; diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 77d484b92bf..0a46e70e2ba 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -69,8 +69,8 @@ class DoliDBMysqli extends DoliDB if (! function_exists("mysqli_connect")) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error="Mysqli PHP functions for using Mysqli driver are not available in this version of PHP. Try to use another driver."; dol_syslog(get_class($this)."::DoliDBMysqli : Mysqli PHP functions for using Mysqli driver are not available in this version of PHP. Try to use another driver.",LOG_ERR); return $this->ok; @@ -78,8 +78,8 @@ class DoliDBMysqli extends DoliDB if (! $host) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=$langs->trans("ErrorWrongHostParameter"); dol_syslog(get_class($this)."::DoliDBMysqli : Erreur Connect, wrong host parameters",LOG_ERR); return $this->ok; @@ -91,14 +91,14 @@ class DoliDBMysqli extends DoliDB if ($this->db) { - $this->connected = 1; - $this->ok = 1; + $this->connected = true; + $this->ok = true; } else { // host, login ou password incorrect - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=mysqli_connect_error(); dol_syslog(get_class($this)."::DoliDBMysqli : Erreur Connect mysqli_connect_error=".$this->error,LOG_ERR); } @@ -108,9 +108,9 @@ class DoliDBMysqli extends DoliDB { if ($this->select_db($name)) { - $this->database_selected = 1; + $this->database_selected = true; $this->database_name = $name; - $this->ok = 1; + $this->ok = true; // If client connected with different charset than Dolibarr HTML output $clientmustbe=''; @@ -124,9 +124,9 @@ class DoliDBMysqli extends DoliDB } else { - $this->database_selected = 0; + $this->database_selected = false; $this->database_name = ''; - $this->ok = 0; + $this->ok = false; $this->error=$this->error(); dol_syslog(get_class($this)."::DoliDBMysqli : Erreur Select_db ".$this->error,LOG_ERR); } @@ -134,7 +134,7 @@ class DoliDBMysqli extends DoliDB else { // Pas de selection de base demandee, ok ou ko - $this->database_selected = 0; + $this->database_selected = false; if ($this->connected) { @@ -238,7 +238,7 @@ class DoliDBMysqli extends DoliDB if ($this->db) { if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR); - $this->connected=0; + $this->connected=false; return mysqli_close($this->db); } return false; diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index c276b132eb0..d4866daa1c2 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -80,8 +80,8 @@ class DoliDBPgsql extends DoliDB if (! function_exists("pg_connect")) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error="Pgsql PHP functions are not available in this version of PHP"; dol_syslog(get_class($this)."::DoliDBPgsql : Pgsql PHP functions are not available in this version of PHP",LOG_ERR); return $this->ok; @@ -89,8 +89,8 @@ class DoliDBPgsql extends DoliDB if (! $host) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=$langs->trans("ErrorWrongHostParameter"); dol_syslog(get_class($this)."::DoliDBPgsql : Erreur Connect, wrong host parameters",LOG_ERR); return $this->ok; @@ -102,14 +102,14 @@ class DoliDBPgsql extends DoliDB if ($this->db) { - $this->connected = 1; - $this->ok = 1; + $this->connected = true; + $this->ok = true; } else { // host, login ou password incorrect - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error='Host, login or password incorrect'; dol_syslog(get_class($this)."::DoliDBPgsql : Erreur Connect ".$this->error,LOG_ERR); } @@ -119,15 +119,15 @@ class DoliDBPgsql extends DoliDB { if ($this->select_db($name)) { - $this->database_selected = 1; + $this->database_selected = true; $this->database_name = $name; - $this->ok = 1; + $this->ok = true; } else { - $this->database_selected = 0; + $this->database_selected = false; $this->database_name = ''; - $this->ok = 0; + $this->ok = false; $this->error=$this->error(); dol_syslog(get_class($this)."::DoliDBPgsql : Erreur Select_db ".$this->error,LOG_ERR); } @@ -135,7 +135,7 @@ class DoliDBPgsql extends DoliDB else { // Pas de selection de base demandee, ok ou ko - $this->database_selected = 0; + $this->database_selected = false; } return $this->ok; @@ -451,7 +451,7 @@ class DoliDBPgsql extends DoliDB if ($this->db) { if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR); - $this->connected=0; + $this->connected=false; return pg_close($this->db); } return false; diff --git a/htdocs/core/db/sqlite.class.php b/htdocs/core/db/sqlite.class.php index c1819151a35..fca8dbeafee 100644 --- a/htdocs/core/db/sqlite.class.php +++ b/htdocs/core/db/sqlite.class.php @@ -70,8 +70,8 @@ class DoliDBSqlite extends DoliDB /*if (! function_exists("sqlite_query")) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error="Sqlite PHP functions for using Sqlite driver are not available in this version of PHP. Try to use another driver."; dol_syslog(get_class($this)."::DoliDBSqlite : Sqlite PHP functions for using Sqlite driver are not available in this version of PHP. Try to use another driver.",LOG_ERR); return $this->ok; @@ -79,8 +79,8 @@ class DoliDBSqlite extends DoliDB /*if (! $host) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=$langs->trans("ErrorWrongHostParameter"); dol_syslog(get_class($this)."::DoliDBSqlite : Erreur Connect, wrong host parameters",LOG_ERR); return $this->ok; @@ -92,9 +92,9 @@ class DoliDBSqlite extends DoliDB if ($this->db) { - $this->connected = 1; - $this->ok = 1; - $this->database_selected = 1; + $this->connected = true; + $this->ok = true; + $this->database_selected = true; $this->database_name = $name; $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); @@ -102,9 +102,9 @@ class DoliDBSqlite extends DoliDB else { // host, login ou password incorrect - $this->connected = 0; - $this->ok = 0; - $this->database_selected = 0; + $this->connected = false; + $this->ok = false; + $this->database_selected = false; $this->database_name = ''; //$this->error=sqlite_connect_error(); dol_syslog(get_class($this)."::DoliDBSqlite : Erreur Connect ".$this->error,LOG_ERR); @@ -360,7 +360,7 @@ class DoliDBSqlite extends DoliDB if ($this->db) { if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR); - $this->connected=0; + $this->connected=false; $this->db=null; // Clean this->db return true; } diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 1024dafd0cc..0efc201a696 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -74,8 +74,8 @@ class DoliDBSqlite3 extends DoliDB /*if (! function_exists("sqlite_query")) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error="Sqlite PHP functions for using Sqlite driver are not available in this version of PHP. Try to use another driver."; dol_syslog(get_class($this)."::DoliDBSqlite3 : Sqlite PHP functions for using Sqlite driver are not available in this version of PHP. Try to use another driver.",LOG_ERR); return $this->ok; @@ -83,8 +83,8 @@ class DoliDBSqlite3 extends DoliDB /*if (! $host) { - $this->connected = 0; - $this->ok = 0; + $this->connected = false; + $this->ok = false; $this->error=$langs->trans("ErrorWrongHostParameter"); dol_syslog(get_class($this)."::DoliDBSqlite3 : Erreur Connect, wrong host parameters",LOG_ERR); return $this->ok; @@ -96,9 +96,9 @@ class DoliDBSqlite3 extends DoliDB if ($this->db) { - $this->connected = 1; - $this->ok = 1; - $this->database_selected = 1; + $this->connected = true; + $this->ok = true; + $this->database_selected = true; $this->database_name = $name; $this->addCustomFunction('IF'); @@ -114,9 +114,9 @@ class DoliDBSqlite3 extends DoliDB else { // host, login ou password incorrect - $this->connected = 0; - $this->ok = 0; - $this->database_selected = 0; + $this->connected = false; + $this->ok = false; + $this->database_selected = false; $this->database_name = ''; //$this->error=sqlite_connect_error(); dol_syslog(get_class($this)."::DoliDBSqlite3 : Error Connect ".$this->error,LOG_ERR); @@ -380,7 +380,7 @@ class DoliDBSqlite3 extends DoliDB if ($this->db) { if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR); - $this->connected=0; + $this->connected=false; $this->db->close(); $this->db=null; // Clean this->db return true; diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 15ba736acd5..4149691302e 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -296,9 +296,9 @@ else $conf->db->user = $dolibarr_main_db_user; $conf->db->pass = $dolibarr_main_db_pass; $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port); - if ($db->connected == 1 && $db->database_selected == 1) + if ($db->connected && $db->database_selected) { - $ok=1; + $ok=true; } } } diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php index 32f85a0860d..5817af81e9b 100644 --- a/htdocs/install/etape1.php +++ b/htdocs/install/etape1.php @@ -637,7 +637,7 @@ if (! $error && $db->connected && $action == "set") $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port); - if ($db->connected == 1) + if ($db->connected) { dolibarr_install_syslog("etape1: connexion to server by user ".$conf->db->user." is ok", LOG_DEBUG); print ""; @@ -648,7 +648,7 @@ if (! $error && $db->connected && $action == "set") print ""; // si acces serveur ok et acces base ok, tout est ok, on ne va pas plus loin, on a meme pas utilise le compte root. - if ($db->database_selected == 1) + if ($db->database_selected) { dolibarr_install_syslog("etape1: connexion to database : ".$conf->db->name.", by user : ".$conf->db->user." is ok", LOG_DEBUG); print ""; diff --git a/htdocs/install/etape2.php b/htdocs/install/etape2.php index d803a622a3b..8de44812222 100644 --- a/htdocs/install/etape2.php +++ b/htdocs/install/etape2.php @@ -88,7 +88,7 @@ if ($action == "set") $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port); - if ($db->connected == 1) + if ($db->connected) { print ""; print $langs->trans("ServerConnection")." : ".$conf->db->host.'Ok'; @@ -101,7 +101,7 @@ if ($action == "set") if ($ok) { - if($db->database_selected == 1) + if($db->database_selected) { dolibarr_install_syslog("etape2: Connexion successful to database : ".$conf->db->name); } diff --git a/htdocs/install/etape4.php b/htdocs/install/etape4.php index 54639505701..fc4f47f4611 100644 --- a/htdocs/install/etape4.php +++ b/htdocs/install/etape4.php @@ -71,7 +71,7 @@ print ''; $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port); -if ($db->ok == 1) +if ($db->ok) { print ''; diff --git a/htdocs/install/etape5.php b/htdocs/install/etape5.php index d6a5d086b31..da871508176 100644 --- a/htdocs/install/etape5.php +++ b/htdocs/install/etape5.php @@ -159,7 +159,7 @@ if ($action == "set" || empty($action) || preg_match('/upgrade/i',$action)) $result=$objMod->init(); if (! $result) print 'ERROR in activating module file='.$file; - if ($db->connected == 1) + if ($db->connected) { $conf->setValues($db); @@ -255,7 +255,7 @@ if ($action == "set" || empty($action) || preg_match('/upgrade/i',$action)) // If upgrade elseif (empty($action) || preg_match('/upgrade/i',$action)) { - if ($db->connected == 1) + if ($db->connected) { $conf->setValues($db); diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index a8bbfdd09af..786a8efb430 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -101,7 +101,7 @@ $conf->db->dolibarr_main_db_cryptkey = isset($dolibarr_main_db_cryptkey)?$doliba $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port); -if ($db->connected == 1) +if ($db->connected) { print '"; @@ -117,7 +117,7 @@ else if ($ok) { - if($db->database_selected == 1) + if($db->database_selected) { print '"; diff --git a/htdocs/install/upgrade.php b/htdocs/install/upgrade.php index c001a771f06..9c2832f3623 100644 --- a/htdocs/install/upgrade.php +++ b/htdocs/install/upgrade.php @@ -141,7 +141,7 @@ if (! GETPOST("action") || preg_match('/upgrade/i',GETPOST('action'))) include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; $hookmanager=new HookManager($db); - if ($db->connected == 1) + if ($db->connected) { print '\n"; @@ -157,7 +157,7 @@ if (! GETPOST("action") || preg_match('/upgrade/i',GETPOST('action'))) if ($ok) { - if($db->database_selected == 1) + if($db->database_selected) { print '\n"; diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 8d63f02ddc8..091218513af 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -134,7 +134,7 @@ if (! GETPOST("action") || preg_match('/upgrade/i',GETPOST('action'))) include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'; $hookmanager=new HookManager($db); - if ($db->connected != 1) + if (!$db->connected) { print ''; dolibarr_install_syslog('upgrade2: Failed to connect to database : '.$conf->db->name.' on '.$conf->db->host.' for user '.$conf->db->user, LOG_ERR); @@ -143,7 +143,7 @@ if (! GETPOST("action") || preg_match('/upgrade/i',GETPOST('action'))) if (! $error) { - if($db->database_selected == 1) + if($db->database_selected) { dolibarr_install_syslog('upgrade2: Database connection successfull : '.$dolibarr_main_db_name); } From 053f6ae4943727bb4e9178649982c7f2203bfe29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 19:10:47 +0200 Subject: [PATCH 07/13] [Qual] Fixed missing return statements --- htdocs/core/db/mssql.class.php | 10 ++++++---- htdocs/core/db/sqlite3.class.php | 2 ++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index 0aed5a6ee11..b097ee6f759 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -282,8 +282,9 @@ class DoliDBMssql extends DoliDB elseif ($this->transaction_opened > 1) { return true; - } else - trigger_error("Commit requested but no transaction remain"); + } + trigger_error("Commit requested but no transaction remain"); + return false; } /** @@ -306,8 +307,9 @@ class DoliDBMssql extends DoliDB elseif ($this->transaction_opened > 1) { return true; - } else - trigger_error("Rollback requested but no transaction remain"); + } + trigger_error("Rollback requested but no transaction remain"); + return false; } /** diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 0efc201a696..75ed10175a0 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -504,6 +504,7 @@ class DoliDBSqlite3 extends DoliDB if ($ret) { return (object) $ret; } + return false; } @@ -522,6 +523,7 @@ class DoliDBSqlite3 extends DoliDB if ($ret) { return (array) $ret; } + return false; } /** From 1fdff27184b3674ef58776c38588f476527996d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 19:11:12 +0200 Subject: [PATCH 08/13] Fixed type hintings --- htdocs/core/db/sqlite3.class.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 75ed10175a0..b64223aab47 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -1427,10 +1427,10 @@ class DoliDBSqlite3 extends DoliDB /** * calc_daynr * - * @param string $year Year - * @param string $month Month - * @param string $day Day - * @return string La date formatee. + * @param int $year Year + * @param int $month Month + * @param int $day Day + * @return int Formatted date */ private static function calc_daynr($year, $month, $day) { $y = $year; @@ -1448,8 +1448,9 @@ class DoliDBSqlite3 extends DoliDB /** * calc_weekday * - * @param string $daynr ??? - * @param string $sunday_first_day_of_week ??? + * @param int $daynr ??? + * @param bool $sunday_first_day_of_week ??? + * @return int */ private static function calc_weekday($daynr, $sunday_first_day_of_week) { $ret = floor(($daynr + 5 + ($sunday_first_day_of_week ? 1 : 0)) % 7); From 67641280a4e6eb0b9d067f63ea3c04099cf38710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 19:16:29 +0200 Subject: [PATCH 09/13] Fixed parameter types --- htdocs/core/db/mysql.class.php | 14 ++++++++------ htdocs/core/db/sqlite.class.php | 14 ++++++++------ htdocs/core/db/sqlite3.class.php | 14 ++++++++------ 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/htdocs/core/db/mysql.class.php b/htdocs/core/db/mysql.class.php index 5f913b38ae0..87f05dee7f6 100644 --- a/htdocs/core/db/mysql.class.php +++ b/htdocs/core/db/mysql.class.php @@ -634,11 +634,13 @@ class DoliDBMysql extends DoliDB * @param string $type Type de la table * @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur * @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext - * @param string $keys Tableau des champs cles noms => valeur + * @param array $keys Tableau des champs cles noms => valeur * @return int <0 if KO, >=0 if OK */ - function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="") + function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null) { + // FIXME: $fulltext_keys parameter is unused + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "CREATE TABLE ".$table."("; @@ -673,7 +675,7 @@ class DoliDBMysql extends DoliDB if($primary_key != "") $pk = "primary key(".$primary_key.")"; - if($unique_keys != "") + if(is_array($unique_keys)) { $i = 0; foreach($unique_keys as $key => $value) @@ -682,7 +684,7 @@ class DoliDBMysql extends DoliDB $i++; } } - if($keys != "") + if(is_array($keys)) { $i = 0; foreach($keys as $key => $value) @@ -694,9 +696,9 @@ class DoliDBMysql extends DoliDB $sql .= implode(',',$sqlfields); if($primary_key != "") $sql .= ",".$pk; - if($unique_keys != "") + if(is_array($unique_keys)) $sql .= ",".implode(',',$sqluq); - if($keys != "") + if(is_array($keys)) $sql .= ",".implode(',',$sqlk); $sql .=") engine=".$type; diff --git a/htdocs/core/db/sqlite.class.php b/htdocs/core/db/sqlite.class.php index fca8dbeafee..e8295b9927d 100644 --- a/htdocs/core/db/sqlite.class.php +++ b/htdocs/core/db/sqlite.class.php @@ -786,11 +786,13 @@ class DoliDBSqlite extends DoliDB * @param string $type Type de la table * @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur * @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext - * @param string $keys Tableau des champs cles noms => valeur + * @param array $keys Tableau des champs cles noms => valeur * @return int <0 if KO, >=0 if OK */ - function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="") + function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null) { + // FIXME: $fulltext_keys parameter is unused + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "create table ".$table."("; @@ -820,7 +822,7 @@ class DoliDBSqlite extends DoliDB if($primary_key != "") $pk = "primary key(".$primary_key.")"; - if($unique_keys != "") + if(is_array($unique_keys)) { $i = 0; foreach($unique_keys as $key => $value) @@ -829,7 +831,7 @@ class DoliDBSqlite extends DoliDB $i++; } } - if($keys != "") + if(is_array($keys)) { $i = 0; foreach($keys as $key => $value) @@ -841,9 +843,9 @@ class DoliDBSqlite extends DoliDB $sql .= implode(',',$sqlfields); if($primary_key != "") $sql .= ",".$pk; - if($unique_keys != "") + if(is_array($unique_keys)) $sql .= ",".implode(',',$sqluq); - if($keys != "") + if(is_array($keys)) $sql .= ",".implode(',',$sqlk); $sql .=") type=".$type; diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index b64223aab47..3b2a85c3a1f 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -868,11 +868,13 @@ class DoliDBSqlite3 extends DoliDB * @param string $type Type de la table * @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur * @param array $fulltext_keys Tableau des Nom de champs qui seront indexes en fulltext - * @param string $keys Tableau des champs cles noms => valeur + * @param array $keys Tableau des champs cles noms => valeur * @return int <0 if KO, >=0 if OK */ - function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="") + function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null) { + // FIXME: $fulltext_keys parameter is unused + // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); $sql = "create table ".$table."("; @@ -902,7 +904,7 @@ class DoliDBSqlite3 extends DoliDB if($primary_key != "") $pk = "primary key(".$primary_key.")"; - if($unique_keys != "") + if(is_array($unique_keys)) { $i = 0; foreach($unique_keys as $key => $value) @@ -911,7 +913,7 @@ class DoliDBSqlite3 extends DoliDB $i++; } } - if($keys != "") + if(is_array($keys)) { $i = 0; foreach($keys as $key => $value) @@ -923,9 +925,9 @@ class DoliDBSqlite3 extends DoliDB $sql .= implode(',',$sqlfields); if($primary_key != "") $sql .= ",".$pk; - if($unique_keys != "") + if(is_array($unique_keys)) $sql .= ",".implode(',',$sqluq); - if($keys != "") + if(is_array($keys)) $sql .= ",".implode(',',$sqlk); $sql .=") type=".$type; From 70d36dd1e3000a4934ba44f73420e68b5721d7da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 19:30:04 +0200 Subject: [PATCH 10/13] Better type hinting for the SQLite database driver --- htdocs/core/db/sqlite.class.php | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/htdocs/core/db/sqlite.class.php b/htdocs/core/db/sqlite.class.php index e8295b9927d..a7852c18333 100644 --- a/htdocs/core/db/sqlite.class.php +++ b/htdocs/core/db/sqlite.class.php @@ -110,7 +110,7 @@ class DoliDBSqlite extends DoliDB dol_syslog(get_class($this)."::DoliDBSqlite : Erreur Connect ".$this->error,LOG_ERR); } - return $this->ok; + return (int) $this->ok; } @@ -285,6 +285,7 @@ class DoliDBSqlite extends DoliDB function select_db($database) { dol_syslog(get_class($this)."::select_db database=".$database, LOG_DEBUG); + // FIXME: sqlite_select_db() does not exist return sqlite_select_db($this->db,$database); } @@ -297,7 +298,7 @@ class DoliDBSqlite extends DoliDB * @param string $passwd password * @param string $name name of database (not used for mysql, used for pgsql) * @param integer $port Port of database server - * @return resource Database access handler + * @return PDO Database access handler * @see close */ function connect($host, $login, $passwd, $name, $port=0) @@ -352,7 +353,7 @@ class DoliDBSqlite extends DoliDB /** * Close database connexion * - * @return boolean True if disconnect successfull, false otherwise + * @return bool True if disconnect successfull, false otherwise * @see connect */ function close() @@ -374,7 +375,7 @@ class DoliDBSqlite extends DoliDB * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions). * Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints. * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) - * @return resource Resultset of answer + * @return PDOStatement Resultset of answer */ function query($query,$usesavepoint=0,$type='auto') { @@ -429,8 +430,8 @@ class DoliDBSqlite extends DoliDB /** * Renvoie la ligne courante (comme un objet) pour le curseur resultset * - * @param Resultset $resultset Curseur de la requete voulue - * @return Object Object result line or false if KO or end of cursor + * @param PDOStatement $resultset Curseur de la requete voulue + * @return false|object Object result line or false if KO or end of cursor */ function fetch_object($resultset) { @@ -443,8 +444,8 @@ class DoliDBSqlite extends DoliDB /** * Return datas as an array * - * @param Resultset $resultset Resultset of request - * @return array Array + * @param PDOStatement $resultset Resultset of request + * @return false|array Array or false if KO or end of cursor */ function fetch_array($resultset) { @@ -456,8 +457,8 @@ class DoliDBSqlite extends DoliDB /** * Return datas as an array * - * @param resource $resultset Resultset of request - * @return array Array + * @param PDOStatement $resultset Resultset of request + * @return false|array Array or false if KO or end of cursor */ function fetch_row($resultset) { @@ -477,7 +478,7 @@ class DoliDBSqlite extends DoliDB /** * Return number of lines for result of a SELECT * - * @param Resultset $resultset Resulset of requests + * @param PDOStatement $resultset Resulset of requests * @return int Nb of lines * @see affected_rows */ @@ -491,7 +492,7 @@ class DoliDBSqlite extends DoliDB /** * Return number of lines for result of a SELECT * - * @param Resultset $resultset Resulset of requests + * @param PDOStatement $resultset Resulset of requests * @return int Nb of lines * @see affected_rows */ @@ -508,10 +509,10 @@ class DoliDBSqlite extends DoliDB /** * Free last resultset used. * - * @param integer $resultset Curseur de la requete voulue + * @param PDOStatement $resultset Curseur de la requete voulue * @return void */ - function free($resultset=0) + function free($resultset=null) { // If resultset not provided, we take the last used by connexion if (! is_object($resultset)) { $resultset=$this->_results; } @@ -709,7 +710,7 @@ class DoliDBSqlite extends DoliDB * @param string $charset Charset used to store data * @param string $collation Charset used to sort data * @param string $owner Username of database owner - * @return resource resource defined if OK, null if KO + * @return PDOStatement resource defined if OK, null if KO */ function DDLCreateDb($database,$charset='',$collation='',$owner='') { From 3fdc4ca5e0661b95397cc553af694501ee142b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 19:45:14 +0200 Subject: [PATCH 11/13] Better type hinting for the SQLite3 database driver --- htdocs/core/db/sqlite3.class.php | 69 ++++++++++++++++---------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 3b2a85c3a1f..67d83ee8307 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -4,6 +4,7 @@ * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2006 Andre Cianfarani * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2015 Raphaël Doursenaud * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,13 +22,13 @@ /** * \file htdocs/core/db/sqlite.class.php - * \brief Class file to manage Dolibarr database access for a Sqlite database + * \brief Class file to manage Dolibarr database access for a SQLite database */ require_once DOL_DOCUMENT_ROOT .'/core/db/DoliDB.class.php'; /** - * Class to manage Dolibarr database access for a Sqlite database + * Class to manage Dolibarr database access for a SQLite database */ class DoliDBSqlite3 extends DoliDB { @@ -58,7 +59,7 @@ class DoliDBSqlite3 extends DoliDB */ function __construct($type, $host, $user, $pass, $name='', $port=0) { - global $conf,$langs; + global $conf; // Note that having "static" property for "$forcecharset" and "$forcecollate" will make error here in strict mode, so they are not static if (! empty($conf->db->character_set)) $this->forcecharset=$conf->db->character_set; @@ -304,6 +305,7 @@ class DoliDBSqlite3 extends DoliDB function select_db($database) { dol_syslog(get_class($this)."::select_db database=".$database, LOG_DEBUG); + // FIXME: sqlite_select_db() does not exist return sqlite_select_db($this->db,$database); } @@ -316,7 +318,7 @@ class DoliDBSqlite3 extends DoliDB * @param string $passwd password * @param string $name name of database (not used for mysql, used for pgsql) * @param integer $port Port of database server - * @return resource Database access handler + * @return SQLite3 Database access handler * @see close */ function connect($host, $login, $passwd, $name, $port=0) @@ -372,7 +374,7 @@ class DoliDBSqlite3 extends DoliDB /** * Close database connexion * - * @return boolean True if disconnect successfull, false otherwise + * @return bool True if disconnect successfull, false otherwise * @see connect */ function close() @@ -382,7 +384,7 @@ class DoliDBSqlite3 extends DoliDB if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR); $this->connected=false; $this->db->close(); - $this->db=null; // Clean this->db + unset($this->db); // Clean this->db return true; } return false; @@ -395,13 +397,13 @@ class DoliDBSqlite3 extends DoliDB * @param int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions). * Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints. * @param string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...) - * @return resource Resultset of answer + * @return SQLite3Result Resultset of answer */ function query($query,$usesavepoint=0,$type='auto') { $errmsg=''; - $ret=''; + $ret=null; $query = trim($query); $this->error = 0; @@ -492,8 +494,8 @@ class DoliDBSqlite3 extends DoliDB /** * Renvoie la ligne courante (comme un objet) pour le curseur resultset * - * @param Resultset $resultset Curseur de la requete voulue - * @return Object Object result line or false if KO or end of cursor + * @param SQLite3Result $resultset Curseur de la requete voulue + * @return false|object Object result line or false if KO or end of cursor */ function fetch_object($resultset) { @@ -511,8 +513,8 @@ class DoliDBSqlite3 extends DoliDB /** * Return datas as an array * - * @param Resultset $resultset Resultset of request - * @return array Array + * @param SQLite3Result $resultset Resultset of request + * @return false|array Array or false if KO or end of cursor */ function fetch_array($resultset) { @@ -520,17 +522,14 @@ class DoliDBSqlite3 extends DoliDB if (! is_object($resultset)) { $resultset=$this->_results; } //return $resultset->fetch(PDO::FETCH_ASSOC); $ret = $resultset->fetchArray(SQLITE3_ASSOC); - if ($ret) { - return (array) $ret; - } - return false; + return $ret; } /** * Return datas as an array * - * @param resource $resultset Resultset of request - * @return array Array + * @param SQLite3Result $resultset Resultset of request + * @return false|array Array or false if KO or end of cursor */ function fetch_row($resultset) { @@ -543,19 +542,21 @@ class DoliDBSqlite3 extends DoliDB else { // si le curseur est un booleen on retourne la valeur 0 - return 0; + return false; } } /** * Return number of lines for result of a SELECT * - * @param Resultset $resultset Resulset of requests + * @param SQLite3Result $resultset Resulset of requests * @return int Nb of lines * @see affected_rows */ function num_rows($resultset) { + // FIXME: SQLite3Result does not have a queryString member + // If resultset not provided, we take the last used by connexion if (! is_object($resultset)) { $resultset=$this->_results; } if (preg_match("/^SELECT/i", $resultset->queryString)) { @@ -567,12 +568,14 @@ class DoliDBSqlite3 extends DoliDB /** * Return number of lines for result of a SELECT * - * @param Resultset $resultset Resulset of requests + * @param SQLite3Result $resultset Resulset of requests * @return int Nb of lines * @see affected_rows */ function affected_rows($resultset) { + // FIXME: SQLite3Result does not have a queryString member + // If resultset not provided, we take the last used by connexion if (! is_object($resultset)) { $resultset=$this->_results; } if (preg_match("/^SELECT/i", $resultset->queryString)) { @@ -587,10 +590,10 @@ class DoliDBSqlite3 extends DoliDB /** * Free last resultset used. * - * @param integer $resultset Curseur de la requete voulue + * @param SQLite3Result $resultset Curseur de la requete voulue * @return void */ - function free($resultset=0) + function free($resultset=null) { // If resultset not provided, we take the last used by connexion if (! is_object($resultset)) { $resultset=$this->_results; } @@ -791,7 +794,7 @@ class DoliDBSqlite3 extends DoliDB * @param string $charset Charset used to store data * @param string $collation Charset used to sort data * @param string $owner Username of database owner - * @return resource resource defined if OK, null if KO + * @return SQLite3Result resource defined if OK, null if KO */ function DDLCreateDb($database,$charset='',$collation='',$owner='') { @@ -933,8 +936,7 @@ class DoliDBSqlite3 extends DoliDB dol_syslog($sql,LOG_DEBUG); if(! $this -> query($sql)) - return -1; - else + return -1; return 1; } @@ -943,7 +945,7 @@ class DoliDBSqlite3 extends DoliDB * * @param string $table Name of table * @param string $field Optionnel : Name of field if we want description of field - * @return resource Resource + * @return SQLite3Result Resource */ function DDLDescTable($table,$field="") { @@ -994,10 +996,7 @@ class DoliDBSqlite3 extends DoliDB { return -1; } - else - { - return 1; - } + return 1; } /** @@ -1018,8 +1017,7 @@ class DoliDBSqlite3 extends DoliDB dol_syslog(get_class($this)."::DDLUpdateField ".$sql,LOG_DEBUG); if (! $this->query($sql)) - return -1; - else + return -1; return 1; } @@ -1039,7 +1037,7 @@ class DoliDBSqlite3 extends DoliDB $this->error=$this->lasterror(); return -1; } - else return 1; + return 1; } @@ -1086,7 +1084,6 @@ class DoliDBSqlite3 extends DoliDB { return -1; } - return 1; } @@ -1145,6 +1142,7 @@ class DoliDBSqlite3 extends DoliDB */ function getPathOfDump() { + // FIXME: not for SQLite $fullpathofdump='/pathtomysqldump/mysqldump'; $resql=$this->query('SHOW VARIABLES LIKE \'basedir\''); @@ -1164,6 +1162,7 @@ class DoliDBSqlite3 extends DoliDB */ function getPathOfRestore() { + // FIXME: not for SQLite $fullpathofimport='/pathtomysql/mysql'; $resql=$this->query('SHOW VARIABLES LIKE \'basedir\''); From 6558c0f1f24bc5688b4bdab5606bce30c2632583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 19:47:15 +0200 Subject: [PATCH 12/13] Removed a bunch of unused variables --- htdocs/core/db/mssql.class.php | 2 +- htdocs/core/db/sqlite.class.php | 8 +++----- htdocs/core/db/sqlite3.class.php | 4 +--- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index b097ee6f759..1c9b8f97ba6 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -57,7 +57,7 @@ class DoliDBMssql extends DoliDB */ function __construct($type, $host, $user, $pass, $name='', $port=0) { - global $conf,$langs; + global $langs; $this->database_user=$user; $this->database_host=$host; diff --git a/htdocs/core/db/sqlite.class.php b/htdocs/core/db/sqlite.class.php index a7852c18333..d4762da4e96 100644 --- a/htdocs/core/db/sqlite.class.php +++ b/htdocs/core/db/sqlite.class.php @@ -54,7 +54,7 @@ class DoliDBSqlite extends DoliDB */ function __construct($type, $host, $user, $pass, $name='', $port=0) { - global $conf,$langs; + global $conf; // Note that having "static" property for "$forcecharset" and "$forcecollate" will make error here in strict mode, so they are not static if (! empty($conf->db->character_set)) $this->forcecharset=$conf->db->character_set; @@ -303,7 +303,7 @@ class DoliDBSqlite extends DoliDB */ function connect($host, $login, $passwd, $name, $port=0) { - global $conf,$main_data_dir; + global $main_data_dir; dol_syslog(get_class($this)."::connect name=".$name,LOG_DEBUG); @@ -379,9 +379,7 @@ class DoliDBSqlite extends DoliDB */ function query($query,$usesavepoint=0,$type='auto') { - $errmsg=''; - - $ret=''; + $ret=null; $query = trim($query); $this->error = 0; diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index 67d83ee8307..d40aed006dc 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -323,7 +323,7 @@ class DoliDBSqlite3 extends DoliDB */ function connect($host, $login, $passwd, $name, $port=0) { - global $conf,$main_data_dir; + global $main_data_dir; dol_syslog(get_class($this)."::connect name=".$name,LOG_DEBUG); @@ -401,8 +401,6 @@ class DoliDBSqlite3 extends DoliDB */ function query($query,$usesavepoint=0,$type='auto') { - $errmsg=''; - $ret=null; $query = trim($query); $this->error = 0; From 3b9388e57f1842da0c553f8cb5adc3ef03427a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Tue, 12 May 2015 19:51:41 +0200 Subject: [PATCH 13/13] Added typehinting to resultsets in database drivers --- htdocs/core/db/mssql.class.php | 2 +- htdocs/core/db/mysql.class.php | 2 +- htdocs/core/db/mysqli.class.php | 2 +- htdocs/core/db/pgsql.class.php | 2 +- htdocs/core/db/sqlite.class.php | 2 +- htdocs/core/db/sqlite3.class.php | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index 1c9b8f97ba6..0be65dfe2e6 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -41,7 +41,7 @@ class DoliDBMssql extends DoliDB var $forcecollate='latin1_swedish_ci'; // Can't be static as it may be forced with a dynamic value //! Version min database const VERSIONMIN='2000'; - //! Resultset of last query + /** @var resource Resultset of last query */ private $_results; /** diff --git a/htdocs/core/db/mysql.class.php b/htdocs/core/db/mysql.class.php index 87f05dee7f6..30a7780afdf 100644 --- a/htdocs/core/db/mysql.class.php +++ b/htdocs/core/db/mysql.class.php @@ -37,7 +37,7 @@ class DoliDBMysql extends DoliDB const LABEL='MySQL'; //! Version min database const VERSIONMIN='4.1.0'; - //! Resultset of last query + /** @var resource Resultset of last query */ private $_results; /** diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 0a46e70e2ba..591789fcd89 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -37,7 +37,7 @@ class DoliDBMysqli extends DoliDB const LABEL='MySQL'; //! Version min database const VERSIONMIN='4.1.3'; - //! Resultset of last query + /** @var mysqli_result Resultset of last query */ private $_results; /** diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index d4866daa1c2..0466c2ad96b 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -45,7 +45,7 @@ class DoliDBPgsql extends DoliDB var $forcecollate=''; // Can't be static as it may be forced with a dynamic value //! Version min database const VERSIONMIN='8.4.0'; // Version min database - //! Resultset of last query + /** @var resource Resultset of last query */ private $_results; public $unescapeslashquot; diff --git a/htdocs/core/db/sqlite.class.php b/htdocs/core/db/sqlite.class.php index d4762da4e96..647cd3a6798 100644 --- a/htdocs/core/db/sqlite.class.php +++ b/htdocs/core/db/sqlite.class.php @@ -37,7 +37,7 @@ class DoliDBSqlite extends DoliDB const LABEL='PDO Sqlite'; //! Version min database const VERSIONMIN='3.0.0'; - //! Resultset of last query + /** @var PDOStatement Resultset of last query */ private $_results; /** diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php index d40aed006dc..68d7ab672db 100644 --- a/htdocs/core/db/sqlite3.class.php +++ b/htdocs/core/db/sqlite3.class.php @@ -38,8 +38,8 @@ class DoliDBSqlite3 extends DoliDB const LABEL='Sqlite3'; //! Version min database const VERSIONMIN='3.0.0'; - //! Resultset of last query - private $_results; + /** @var SQLite3Result Resultset of last query */ + private $_results; const WEEK_MONDAY_FIRST=1; const WEEK_YEAR = 2;
'.$langs->trans("DolibarrAdminLogin").' :'; print '
'; print $langs->trans("ServerConnection")." : $dolibarr_main_db_host".$langs->trans("OK")."
'; print $langs->trans("DatabaseConnection")." : ".$dolibarr_main_db_name."".$langs->trans("OK")."
'; print $langs->trans("ServerConnection")." : $dolibarr_main_db_host".$langs->trans("OK")."
'; print $langs->trans("DatabaseConnection")." : ".$dolibarr_main_db_name."".$langs->trans("OK")."
'.$langs->trans("ErrorFailedToConnectToDatabase",$conf->db->name).''.$langs->trans('Error').'