Better type hinting and code structure for the MySQLi database driver
This commit is contained in:
parent
04f5e73557
commit
6e6e63db50
@ -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
|
interface Database
|
||||||
{
|
{
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \file htdocs/core/db/mysql.class.php
|
* \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';
|
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
|
class DoliDBMysql extends DoliDB
|
||||||
{
|
{
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \file htdocs/core/db/mysqli.class.php
|
* \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';
|
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
|
class DoliDBMysqli extends DoliDB
|
||||||
{
|
{
|
||||||
@ -36,7 +36,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
//! Database label
|
//! Database label
|
||||||
const LABEL='MySQL';
|
const LABEL='MySQL';
|
||||||
//! Version min database
|
//! Version min database
|
||||||
const VERSIONMIN='4.1.0';
|
const VERSIONMIN='4.1.3';
|
||||||
//! Resultset of last query
|
//! Resultset of last query
|
||||||
private $_results;
|
private $_results;
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
* @param string $passwd password
|
* @param string $passwd password
|
||||||
* @param string $name name of database (not used for mysql, used for pgsql)
|
* @param string $name name of database (not used for mysql, used for pgsql)
|
||||||
* @param integer $port Port of database server
|
* @param integer $port Port of database server
|
||||||
* @return resource Database access handler
|
* @return mysqli Database access handler
|
||||||
* @see close
|
* @see close
|
||||||
*/
|
*/
|
||||||
function connect($host, $login, $passwd, $name, $port=0)
|
function connect($host, $login, $passwd, $name, $port=0)
|
||||||
@ -230,7 +230,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
/**
|
/**
|
||||||
* Close database connexion
|
* Close database connexion
|
||||||
*
|
*
|
||||||
* @return boolean True if disconnect successfull, false otherwise
|
* @return bool True if disconnect successfull, false otherwise
|
||||||
* @see connect
|
* @see connect
|
||||||
*/
|
*/
|
||||||
function close()
|
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).
|
* @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.
|
* 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...)
|
* @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')
|
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
|
* Renvoie la ligne courante (comme un objet) pour le curseur resultset
|
||||||
*
|
*
|
||||||
* @param Resultset $resultset Curseur de la requete voulue
|
* @param mysqli_result $resultset Curseur de la requete voulue
|
||||||
* @return Object Object result line or false if KO or end of cursor
|
* @return object|null Object result line or null if KO or end of cursor
|
||||||
*/
|
*/
|
||||||
function fetch_object($resultset)
|
function fetch_object($resultset)
|
||||||
{
|
{
|
||||||
@ -304,8 +304,8 @@ class DoliDBMysqli extends DoliDB
|
|||||||
/**
|
/**
|
||||||
* Return datas as an array
|
* Return datas as an array
|
||||||
*
|
*
|
||||||
* @param Resultset $resultset Resultset of request
|
* @param mysqli_result $resultset Resultset of request
|
||||||
* @return array Array
|
* @return array|null Array or null if KO or end of cursor
|
||||||
*/
|
*/
|
||||||
function fetch_array($resultset)
|
function fetch_array($resultset)
|
||||||
{
|
{
|
||||||
@ -317,8 +317,8 @@ class DoliDBMysqli extends DoliDB
|
|||||||
/**
|
/**
|
||||||
* Return datas as an array
|
* Return datas as an array
|
||||||
*
|
*
|
||||||
* @param resource $resultset Resultset of request
|
* @param mysqli_result $resultset Resultset of request
|
||||||
* @return array Array
|
* @return array|null|0 Array or null if KO or end of cursor or 0 if resultset is bool
|
||||||
*/
|
*/
|
||||||
function fetch_row($resultset)
|
function fetch_row($resultset)
|
||||||
{
|
{
|
||||||
@ -338,7 +338,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
/**
|
/**
|
||||||
* Return number of lines for result of a SELECT
|
* Return number of lines for result of a SELECT
|
||||||
*
|
*
|
||||||
* @param Resultset $resultset Resulset of requests
|
* @param mysqli_result $resultset Resulset of requests
|
||||||
* @return int Nb of lines
|
* @return int Nb of lines
|
||||||
* @see affected_rows
|
* @see affected_rows
|
||||||
*/
|
*/
|
||||||
@ -352,7 +352,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
/**
|
/**
|
||||||
* Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
|
* Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
|
||||||
*
|
*
|
||||||
* @param resultset $resultset Curseur de la requete voulue
|
* @param mysqli_result $resultset Curseur de la requete voulue
|
||||||
* @return int Nombre de lignes
|
* @return int Nombre de lignes
|
||||||
* @see num_rows
|
* @see num_rows
|
||||||
*/
|
*/
|
||||||
@ -369,10 +369,10 @@ class DoliDBMysqli extends DoliDB
|
|||||||
/**
|
/**
|
||||||
* Libere le dernier resultset utilise sur cette connexion
|
* 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
|
* @return void
|
||||||
*/
|
*/
|
||||||
function free($resultset=0)
|
function free($resultset=null)
|
||||||
{
|
{
|
||||||
// If resultset not provided, we take the last used by connexion
|
// If resultset not provided, we take the last used by connexion
|
||||||
if (! is_object($resultset)) { $resultset=$this->_results; }
|
if (! is_object($resultset)) { $resultset=$this->_results; }
|
||||||
@ -401,8 +401,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
if (! $this->connected) {
|
if (! $this->connected) {
|
||||||
// Si il y a eu echec de connexion, $this->db n'est pas valide.
|
// Si il y a eu echec de connexion, $this->db n'est pas valide.
|
||||||
return 'DB_ERROR_FAILED_TO_CONNECT';
|
return 'DB_ERROR_FAILED_TO_CONNECT';
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// Constants to convert a MySql error code to a generic Dolibarr error code
|
// Constants to convert a MySql error code to a generic Dolibarr error code
|
||||||
$errorcode_map = array(
|
$errorcode_map = array(
|
||||||
1004 => 'DB_ERROR_CANNOT_CREATE',
|
1004 => 'DB_ERROR_CANNOT_CREATE',
|
||||||
@ -434,8 +433,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
1451 => 'DB_ERROR_CHILD_EXISTS'
|
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)];
|
return $errorcode_map[mysqli_errno($this->db)];
|
||||||
}
|
}
|
||||||
$errno=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 $tab Table name concerned by insert. Ne sert pas sous MySql mais requis pour compatibilite avec Postgresql
|
||||||
* @param string $fieldid Field name
|
* @param string $fieldid Field name
|
||||||
* @return int Id of row
|
* @return int|string Id of row
|
||||||
*/
|
*/
|
||||||
function last_insert_id($tab,$fieldid='rowid')
|
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 $charset Charset used to store data
|
||||||
* @param string $collation Charset used to sort data
|
* @param string $collation Charset used to sort data
|
||||||
* @param string $owner Username of database owner
|
* @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='')
|
function DDLCreateDb($database,$charset='',$collation='',$owner='')
|
||||||
{
|
{
|
||||||
@ -638,11 +636,13 @@ class DoliDBMysqli extends DoliDB
|
|||||||
* @param string $type Type de la table
|
* @param string $type Type de la table
|
||||||
* @param array $unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur
|
* @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 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
|
* @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
|
// 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');
|
// ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
|
||||||
$sql = "CREATE TABLE ".$table."(";
|
$sql = "CREATE TABLE ".$table."(";
|
||||||
@ -677,8 +677,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
if($primary_key != "")
|
if($primary_key != "")
|
||||||
$pk = "primary key(".$primary_key.")";
|
$pk = "primary key(".$primary_key.")";
|
||||||
|
|
||||||
if($unique_keys != "")
|
if(is_array($unique_keys)) {
|
||||||
{
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach($unique_keys as $key => $value)
|
foreach($unique_keys as $key => $value)
|
||||||
{
|
{
|
||||||
@ -686,7 +685,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($keys != "")
|
if(is_array($keys))
|
||||||
{
|
{
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach($keys as $key => $value)
|
foreach($keys as $key => $value)
|
||||||
@ -700,7 +699,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
$sql .= ",".$pk;
|
$sql .= ",".$pk;
|
||||||
if($unique_keys != "")
|
if($unique_keys != "")
|
||||||
$sql .= ",".implode(',',$sqluq);
|
$sql .= ",".implode(',',$sqluq);
|
||||||
if($keys != "")
|
if(is_array($keys))
|
||||||
$sql .= ",".implode(',',$sqlk);
|
$sql .= ",".implode(',',$sqlk);
|
||||||
$sql .=") engine=".$type;
|
$sql .=") engine=".$type;
|
||||||
|
|
||||||
@ -716,7 +715,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
*
|
*
|
||||||
* @param string $table Name of table
|
* @param string $table Name of table
|
||||||
* @param string $field Optionnel : Name of field if we want description of field
|
* @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="")
|
function DDLDescTable($table,$field="")
|
||||||
{
|
{
|
||||||
@ -763,14 +762,10 @@ class DoliDBMysqli extends DoliDB
|
|||||||
$sql.= " ".$field_position;
|
$sql.= " ".$field_position;
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::DDLAddField ".$sql,LOG_DEBUG);
|
dol_syslog(get_class($this)."::DDLAddField ".$sql,LOG_DEBUG);
|
||||||
if(! $this->query($sql))
|
if($this->query($sql)) {
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -808,13 +803,12 @@ class DoliDBMysqli extends DoliDB
|
|||||||
{
|
{
|
||||||
$sql= "ALTER TABLE ".$table." DROP COLUMN `".$field_name."`";
|
$sql= "ALTER TABLE ".$table." DROP COLUMN `".$field_name."`";
|
||||||
dol_syslog(get_class($this)."::DDLDropField ".$sql,LOG_DEBUG);
|
dol_syslog(get_class($this)."::DDLDropField ".$sql,LOG_DEBUG);
|
||||||
if (! $this->query($sql))
|
if ($this->query($sql)) {
|
||||||
{
|
return 1;
|
||||||
|
}
|
||||||
$this->error=$this->lasterror();
|
$this->error=$this->lasterror();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else 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 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()
|
function getListOfCharacterSet()
|
||||||
{
|
{
|
||||||
@ -926,7 +920,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
/**
|
/**
|
||||||
* Return list of available collation that can be used for database
|
* Return list of available collation that can be used for database
|
||||||
*
|
*
|
||||||
* @return array Liste of Collation
|
* @return array|null Liste of Collation
|
||||||
*/
|
*/
|
||||||
function getListOfCollation()
|
function getListOfCollation()
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user