diff --git a/htdocs/lib/mysql.lib.php b/htdocs/lib/mysql.lib.php index aca4a0a8e0b..12fd4be307e 100644 --- a/htdocs/lib/mysql.lib.php +++ b/htdocs/lib/mysql.lib.php @@ -1,7 +1,7 @@ * Copyright (C) 2002-2004 Rodolphe Quiedeville - * Copyright (C) 2004 Laurent Destailleur + * Copyright (C) 2004-2005 Laurent Destailleur * * 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 @@ -22,312 +22,380 @@ * */ -/** \file htdocs/lib/mysql.lib.php - \brief Classe permettant de gérér la database de dolibarr. - \author Fabien Seisen - \author Rodolphe Quiedeville. - \author Laurent Destailleur. - \version $Revision$ - - Ensemble des fonctions permettant de gérer la database de dolibarr. +/** \file htdocs/lib/mysql.lib.php + \brief Fichier de la classe permettant de gérér la database de dolibarr. + \author Fabien Seisen + \author Rodolphe Quiedeville. + \author Laurent Destailleur. + \version $Revision$ */ -/** \class DoliDb - \brief Classe permettant de gérér la database de dolibarr - Ensemble des fonctions permettant de gérer la database de dolibarr +/** \class DoliDb + \brief Classe permettant de gérér la database de dolibarr */ class DoliDb { - var $db, $results, $ok, $connected, $database_selected; + var $db; // Handler de base + var $results; // Resultset de la dernière requete + + var $connected; // 1 si connecté, 0 sinon + var $database_selected; // 1 si base sélectionné, 0 sinon + var $transaction_opened; // 1 si une transaction est en cours, 0 sinon + + var $ok; + + // Constantes pour code erreurs + var $ERROR_DUPLICATE=1062; + var $ERROR_TABLEEXISTS=1050; - // Constantes pour code erreurs - var $ERROR_DUPLICATE=1062; - var $ERROR_TABLEEXISTS=1050; -/** - \brief Ouverture d'une connection vers le serveur et éventuellement une database. - \param type type de base de données (mysql ou pgsql) - \param host addresse de la base de données - \param user nom de l'utilisateur autorisé - \param pass mot de passe - \param name nom de la database - \return int 1 en cas de succès, 0 sinon -*/ - - function DoliDb($type = 'mysql', $host = '', $user = '', $pass = '', $name = '') - { - global $conf; - - if ($host == '') - { - $host = $conf->db->host; - } - - if ($user == '') - { - $user = $conf->db->user; - } - - if ($pass == '') - { - $pass = $conf->db->pass; - } - - if ($name == '') - { - $name = $conf->db->name; - } - - //print "Name DB: $host,$user,$pass,$name
"; - - // Essai connexion serveur - - $this->db = $this->connect($host, $user, $pass); - - if ($this->db) - { - $this->connected = 1; - $this->ok = 1; - } - else - { - $this->connected = 0; - $this->ok = 0; - } - - // Si connexion serveur ok et si connexion base demandée, on essaie connexion base - - if ($this->connected && $name) + /** + \brief Ouverture d'une connection vers le serveur et éventuellement une database. + \param type type de base de données (mysql ou pgsql) + \param host addresse de la base de données + \param user nom de l'utilisateur autorisé + \param pass mot de passe + \param name nom de la database + \return int 1 en cas de succès, 0 sinon + */ + function DoliDb($type = 'mysql', $host = '', $user = '', $pass = '', $name = '') + { + global $conf; + $this->transaction_opened=0; + + if ($host == '') $host = $conf->db->host; + if ($user == '') $user = $conf->db->user; + if ($pass == '') $pass = $conf->db->pass; + if ($name == '') $name = $conf->db->name; + + //print "Name DB: $host,$user,$pass,$name
"; + + // Essai connexion serveur + + $this->db = $this->connect($host, $user, $pass); + + if ($this->db) + { + $this->connected = 1; + $this->ok = 1; + } + else + { + $this->connected = 0; + $this->ok = 0; + } + + // Si connexion serveur ok et si connexion base demandée, on essaie connexion base + + if ($this->connected && $name) + { + if ($this->select_db($name) == 1) { - if ($this->select_db($name) == 1) - { - $this->database_selected = 1; - $this->ok = 1; - } - else - { - $this->database_selected = 0; - $this->ok = 0; - } + $this->database_selected = 1; + $this->ok = 1; } else { - // Pas de selection de base demandée, ok ou ko - $this->database_selected = 0; + $this->database_selected = 0; + $this->ok = 0; } - - return $this->ok; + } + else + { + // Pas de selection de base demandée, ok ou ko + $this->database_selected = 0; + } + + return $this->ok; } - -/** - \brief Selectionne une database. - \param database nom de la database - \return resource -*/ - - function select_db($database) + + /** + \brief Selectionne une database. + \param database nom de la database + \return resource + */ + + function select_db($database) { - return mysql_select_db($database, $this->db); + return mysql_select_db($database, $this->db); } - -/** - \brief Connection vers le serveur - \param host addresse de la base de données - \param login nom de l'utilisateur autorisé - \param passwd mot de passe - \return resource handler d'accès à la base -*/ - - function connect($host, $login, $passwd) + + /** + \brief Connection vers le serveur + \param host addresse de la base de données + \param login nom de l'utilisateur autoris + \param passwd mot de passe + \return resource handler d'accès à la base + */ + + function connect($host, $login, $passwd) { - $this->db = @mysql_connect($host, $login, $passwd); - //print "Resultat fonction connect: ".$this->db; - return $this->db; + $this->db = @mysql_connect($host, $login, $passwd); + //print "Resultat fonction connect: ".$this->db; + return $this->db; } - -/** - \brief Connexion sur une base de donnée - \param database nom de la database - \return result resultat 1 pour ok, 0 pour non ok -*/ - - function create_db($database) - { - if (mysql_create_db ($database, $this->db)) - { - return 1; - } - else - { - return 0; - } - } - -/** - \brief Copie d'une database. - \return resource -*/ - - function clone() + + /** + \brief Connexion sur une base de donnée + \param database nom de la database + \return result resultat 1 pour ok, 0 pour non ok + */ + + function create_db($database) { - $db2 = new DoliDb("", "", "", "", ""); - $db2->db = $this->db; - return $db2; + if (mysql_create_db ($database, $this->db)) + { + return 1; + } + else + { + return 0; + } } - -/** - \brief Ouverture d'une connection vers une database. - \param host addresse de la base de données - \param login nom de l'utilisateur autorisé - \param passwd mot de passe - \return resource handler d'accès à la base -*/ - - function pconnect($host, $login, $passwd) + + /** + \brief Copie d'un handler de database. + \return resource + */ + + function clone() { - $this->db = mysql_pconnect($host, $login, $passwd); - return $this->db; + $db2 = new DoliDb("", "", "", "", ""); + $db2->db = $this->db; + return $db2; } - -/** - \brief Fermeture d'une connection vers une database. - \return resource -*/ - - function close() - { - return mysql_close($this->db); - } - -/** - \brief Debut d'une transaction. - \param do - \return string -*/ - - function begin($do=1) - { - if ($do) - { - return $this->query("BEGIN"); - } - else - { - return 1; - } - } - -/** - \brief Ecriture d'une transaction. - \param do - \return string -*/ - - function commit($do=1) - { - if ($do) - { - return $this->query("COMMIT"); - } - else - { - return 1; - } - } - -/** - \brief Effacement d'une transaction et retour au ancienne valeurs. - \param do - \return string -*/ - - function rollback($do=1) - { - if ($do) - { - return $this->query("ROLLBACK"); - } - else - { - return 1; - } - } - -/** - \brief Effectue une requete et renvoi le resultset de réponse de la base - \param query contenu de la query - \param limit - \param offset - \return resource resultset -*/ - - function query($query, $limit="", $offset="") + + /** + \brief Ouverture d'une connection vers une database. + \param host Adresse de la base de données + \param login Nom de l'utilisateur autorisé + \param passwd Mot de passe + \return resource handler d'accès à la base + */ + + function pconnect($host, $login, $passwd) { - $query = trim($query); - $this->lastquery=$query; - - $this->results = mysql_query($query, $this->db); - - return $this->results; + $this->db = mysql_pconnect($host, $login, $passwd); + return $this->db; } - -/** - \brief Liste des tables dans une database. - \param database nom de la database - \return resource -*/ - - function list_tables($database) - { - $this->results = mysql_list_tables($database, $this->db); - return $this->results; - } - -/** - \brief Renvoie les données de la requete. - \param nb contenu de la query - \param fieldname nom du champ - \return resource -*/ - - function result($nb, $fieldname) + + /** + \brief Fermeture d'une connection vers une database. + \return resource + */ + + function close() { - return mysql_result($this->results, $nb, $fieldname); + return mysql_close($this->db); } -/** - \brief Libère le dernier resultset utilisé sur cette connexion. - \return resource -*/ - function free() + /** + \brief Debut d'une transaction. + \return int 1 si ouverture transaction ok ou deja ouverte, 0 en cas d'erreur + */ + + function begin() { - return mysql_free_result($this->results); + if (! $this->transaction_opened) + { + $ret=$this->query("BEGIN"); + if ($ret) $this->transaction_opened++; + return $ret; + } + else + { + $this->transaction_opened++; + return 1; + } } - -/** - \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset. - \param resultset curseur de la requete voulue - \return resource -*/ - - function fetch_object($resultset=0) + + /** + \brief Validation d'une transaction + \return int 1 si validation ok ou niveau de transaction non ouverte, 0 en cas d'erreur + */ + + function commit() + { + if ($this->transaction_opened==1) + { + $ret=$this->query("COMMIT"); + if ($ret) $this->transaction_opened=0; + return $ret; + } + else + { + $this->transaction_opened--; + return 1; + } + } + + /** + \brief Annulation d'une transaction et retour aux anciennes valeurs + \return int 1 si annulation ok ou transaction non ouverte, 0 en cas d'erreur + */ + + function rollback() + { + if ($this->transaction_opened) + { + $ret=$this->query("ROLLBACK"); + $this->transaction_opened=0; + return $ret; + } + else + { + return 1; + } + } + + /** + \brief Effectue une requete et renvoi le resultset de réponse de la base + \param query Contenu de la query + \return resource Resultset de la reponse + */ + + function query($query) + { + $query = trim($query); + $this->lastquery=$query; + + $this->results = mysql_query($query, $this->db); + + return $this->results; + } + + /** + \brief Renvoie les données de la requete. + \param nb Contenu de la query + \param fieldname Nom du champ + \return resource + */ + + function result($nb, $fieldname) + { + return mysql_result($this->results, $nb, $fieldname); + } + + /** + \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset. + \param resultset Curseur de la requete voulue + \return resource + */ + + function fetch_object($resultset=0) { // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion if (! is_resource($resultset)) { $resultset=$this->results; } return mysql_fetch_object($resultset); - } + } -/** - \brief défini les limites de la requète. - \param limit - \param offset - \return int limite -*/ + /** + \brief Renvoie les données dans un tableau. + \param resultset Curseur de la requete voulue + \return array + */ + + function fetch_array($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return mysql_fetch_array($resultset); + } + + /** + \brief Renvoie les données comme un tableau. + \param resultset Curseur de la requete voulue + \return array + */ + + function fetch_row($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return mysql_fetch_row($resultset); + } + + /** + \brief Obtient les données d'un colonne et renvoie les données sous forme d'objet. + \param resultset Curseur de la requete voulue + \return array + */ + + function fetch_field($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return mysql_fetch_field($resultset); + } + + /** + \brief Renvoie le nombre de lignes dans le resultat d'une requete SELECT + \see affected_rows + \param resultset Curseur de la requete voulue + \return int Nombre de lignes + */ + + function num_rows($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return mysql_num_rows($resultset); + } + + /** + \brief Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + \see num_rows + \param resultset Curseur de la requete voulue + \return int Nombre de lignes + */ + + function affected_rows($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + // mysql necessite un link de base pour cette fonction contrairement + // a pqsql qui prend un resultset + return mysql_affected_rows($this->db); + } + + + /** + \brief Renvoie le nombre de champs dans le resultat de la requete. + \param resultset Curseur de la requete voulue + \return int + */ + + function num_fields($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return mysql_num_fields($resultset); + } + + /** + \brief Libère le dernier resultset utilisé sur cette connexion. + \param resultset Curseur de la requete voulue + \return resource + */ + + function free($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return mysql_free_result($resultset); + } - function plimit($limit=0,$offset=0) + /** + \brief Défini les limites de la requète. + \param limit + \param offset + \return int Limite + */ + + function plimit($limit=0,$offset=0) { if ($offset > 0) { @@ -338,156 +406,98 @@ class DoliDb return " LIMIT $limit "; } } - - -/** - \brief Formatage par la base de données d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS) - afin de retourner une donnée toujours au format universel date tms unix. - \param fname - \return date -*/ - function pdate($fname) + + + /** + \brief Formatage par la base de données d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS) + afin de retourner une donnée toujours au format universel date tms unix. + \param fname + \return date + */ + function pdate($fname) { - return "unix_timestamp($fname)"; + return "unix_timestamp($fname)"; } - -/** - \brief Formatage de la date en fonction des locales. - \param fname - \return date -*/ - function idate($fname) + + /** + \brief Formatage de la date en fonction des locales. + \param fname + \return date + */ + function idate($fname) { - return strftime("%Y%m%d%H%M%S",$fname); + return strftime("%Y%m%d%H%M%S",$fname); } - - -/** - \brief Renvoie les données dans un tableau. - \return array -*/ - - function fetch_array() + + /** + \brief Renvoie la derniere requete soumise par la methode query() + \return lastquery + */ + + function lastquery() { - return mysql_fetch_array($this->results); + return $this->lastquery; } - -/** - \brief Renvoie les données comme un tableau. - \return array -*/ - - function fetch_row() + + /** + \brief Renvoie le texte de l'erreur mysql de l'operation precedente. + \return error_text + */ + + function error() { - return mysql_fetch_row($this->results); + return mysql_error($this->db); } - -/** - \brief Obtient les données d'un colonne et renvoie les données sous forme d'objet. - \return array -*/ - - function fetch_field() + + /** + \brief Renvoie la valeur numerique de l'erreur de l'operation precedente. + pour etre exploiter par l'appelant et détecter les erreurs du genre: + echec car doublons, table deja existante... + \return error_num + */ + + function errno() { - return mysql_fetch_field($this->results); + // $ERROR_DUPLICATE=1062; + // $ERROR_TABLEEXISTS=1050; + return mysql_errno($this->db); } - - -/** - \brief Renvoie le nombre de lignes dans le - resultat d'une requete SELECT - \see affected_rows - \return int nombre de lignes -*/ - - function num_rows() + + /** + \brief Obtient l'id genéré par le dernier INSERT. + \return id + */ + + function last_insert_id() { - return mysql_num_rows($this->results); + return mysql_insert_id($this->db); } - -/** - \brief Renvoie le nombre de lignes dans le - resultat d'une requete INSERT, DELETE ou UPDATE - \see num_rows - \return int nombre de lignes -*/ - - function affected_rows() + + /** + \brief Retourne le dsn pear + \return dsn + */ + + function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname) { - // mysql necessite un link de base pour cette fonction contrairement - // a pqsql qui prend un resultset - return mysql_affected_rows($this->db); + $pear = $db_type.'://'.$db_user.':'.$db_pass.'@'. + $db_host.'/'.$db_name; + + return $pear; } - - -/** - \brief Renvoie le nombre de champs dans le resultat de la requete. - \return int -*/ - - function num_fields() + + /** + \brief Liste des tables dans une database. + \param database Nom de la database + \return resource + */ + + function list_tables($database) { - return mysql_num_fields($this->results); + $this->results = mysql_list_tables($database, $this->db); + return $this->results; } - -/** - \brief Renvoie la derniere requete soumise par la methode query() - \return lastquery -*/ - - function lastquery() - { - return $this->lastquery; - } - -/** - \brief Renvoie le texte de l'erreur mysql de l'operation precedente. - \return error_text -*/ - - function error() - { - return mysql_error($this->db); - } - -/** - \brief Renvoie la valeur numerique de l'erreur de l'operation precedente. - pour etre exploiter par l'appelant et détecter les erreurs du genre: - echec car doublons, table deja existante... - \return error_num -*/ - - function errno() - { - // $ERROR_DUPLICATE=1062; - // $ERROR_TABLEEXISTS=1050; - - return mysql_errno($this->db); - } - -/** - \brief Obtient l'id genéré par le précedent INSERT. - \return id -*/ - - function last_insert_id() - { - return mysql_insert_id($this->db); - } - -/** - \brief Retourne le dsn pear - \return dsn -*/ - - function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname) - { - $pear = $db_type.'://'.$db_user.':'.$db_pass.'@'. - $db_host.'/'.$db_name; - - return $pear; - } - + } - + ?> diff --git a/htdocs/lib/pgsql.lib.php b/htdocs/lib/pgsql.lib.php index 6bfd26ced5d..19bc38e356c 100644 --- a/htdocs/lib/pgsql.lib.php +++ b/htdocs/lib/pgsql.lib.php @@ -25,486 +25,495 @@ */ /** \file htdocs/lib/pgsql.lib.php - \brief Classe permettant de gérér la database de dolibarr. + \brief Fichier de la classe permettant de gérér la database de dolibarr. \author Fabien Seisen \author Rodolphe Quiedeville. \author Laurent Destailleur. \author Sébastien Di Cintio \author Benoit Mortier \version $Revision$ - - Ensemble des fonctions permettant de gérer la database de dolibarr. */ /** \class DoliDb \brief Classe permettant de gérér la database de dolibarr - - Ensemble des fonctions permettant de gérer la database de dolibarr */ class DoliDb { - var $db, $results, $ok, $connected, $database_selected; - - // Constantes pour code erreurs - var $ERROR_DUPLICATE="23505"; - var $ERROR_TABLEEXISTS='42P07'; - -/** - \brief Ouverture d'une connection vers le serveur et une database. - \param type type de base de données (mysql ou pgsql) - \param host addresse de la base de données - \param user nom de l'utilisateur autorisé - \param pass mot de passe - \param name nom de la database - \return int 1 en cas de succès, 0 sinon -*/ - - function DoliDb($type = 'pgsql', $host = '', $user = '', $pass = '', $name = '') - { - global $conf; - - if ($host == '') - { - $host = $conf->db->host; - } - - if ($user == '') - { - $user = $conf->db->user; - } - - if ($pass == '') - { - $pass = $conf->db->pass; - } - - if ($name == '') - { - $name = $conf->db->name; - } - - //print "Name DB: $host,$user,$pass,$name
"; - - // Essai connexion serveur - - $this->db = $this->connect($host, $user, $pass,$name); - - if ($this->db) - { - $this->connected = 1; - $this->ok = 1; - } - else - { - $this->connected = 0; - $this->ok = 0; - } - - // Si connexion serveur ok et si connexion base demandée, on essaie connexion base - - if ($this->connected && $name) - { - if ($this->select_db($name) == 1) - { - $this->database_selected = 1; - $this->ok = 1; - } - else - { - $this->database_selected = 0; - $this->ok = 0; - } - } - else - { - // Pas de selection de base demandée, ok ou ko - $this->database_selected = 0; - } - - return $this->ok; - } - -/** - \brief Selectionne une database. - \param database nom de la database - \return resource - \remarks ici postgresql n'a aucune fonction equivalente de mysql_select_db - \remarks comparaison manuel si la database est bien celle choisie par l'utilisateur - \remarks en cas de succes renverra 1 ou 0 -*/ - - function select_db($database) + var $db; // Handler de base + var $results; // Resultset de la dernière requete + + var $connected; // 1 si connecté, 0 sinon + var $database_selected; // 1 si base sélectionné, 0 sinon + var $transaction_opened; // 1 si une transaction est en cours, 0 sinon + + var $ok; + + // Constantes pour code erreurs + var $ERROR_DUPLICATE="23505"; + var $ERROR_TABLEEXISTS='42P07'; + + /** + \brief Ouverture d'une connection vers le serveur et une database. + \param type type de base de données (mysql ou pgsql) + \param host addresse de la base de données + \param user nom de l'utilisateur autorisé + \param pass mot de passe + \param name nom de la database + \return int 1 en cas de succès, 0 sinon + */ + function DoliDb($type = 'pgsql', $host = '', $user = '', $pass = '', $name = '') { - if($database == "dolibarr") - return 1; - else - return 0; + global $conf; + $this->transaction_opened=0; + + if ($host == '') $host = $conf->db->host; + if ($user == '') $user = $conf->db->user; + if ($pass == '') $pass = $conf->db->pass; + if ($name == '') $name = $conf->db->name; + + //print "Name DB: $host,$user,$pass,$name
"; + + // Essai connexion serveur + + $this->db = $this->connect($host, $user, $pass, $name); + + if ($this->db) + { + $this->connected = 1; + $this->ok = 1; + } + else + { + $this->connected = 0; + $this->ok = 0; + } + + // Si connexion serveur ok et si connexion base demandée, on essaie connexion base + + if ($this->connected && $name) + { + if ($this->select_db($name) == 1) + { + $this->database_selected = 1; + $this->ok = 1; + } + else + { + $this->database_selected = 0; + $this->ok = 0; + } + } + else + { + // Pas de selection de base demandée, ok ou ko + $this->database_selected = 0; + } + + return $this->ok; } - -/** - \brief Connection vers le serveur - \param host addresse de la base de données - \param login nom de l'utilisateur autorisé - \param passwd mot de passe - \param name nom de la database - \return resource handler d'accès à la base -*/ - - function connect($host, $login, $passwd, $name) + + /** + \brief Selectionne une database. + \param database nom de la database + \return resource + \remarks ici postgresql n'a aucune fonction equivalente de mysql_select_db + \remarks comparaison manuel si la database est bien celle choisie par l'utilisateur + \remarks en cas de succes renverra 1 ou 0 + */ + + function select_db($database) { - $con_string = "host=$host dbname=$name user=$login password=$passwd "; - $this->db = pg_connect($con_string); - return $this->db; + if($database == "dolibarr") + return 1; + else + return 0; } - -/** - \brief Connexion sur une base de donnée - \param database nom de la database - \return result resultat 1 pour ok, 0 pour non ok -*/ - - function create_db($database) - { - if(createdb($database,$this->db)) - return 1; - else - return 0; - } - - -/** - \brief Copie d'une database. - \return resource -*/ - - function clone() + + /** + \brief Connection vers le serveur + \param host addresse de la base de données + \param login nom de l'utilisateur autoris + \param passwd mot de passe + \param name nom de la database + \return resource handler d'accès à la base + */ + + function connect($host, $login, $passwd, $name) { - $db2 = new DoliDb("", "", "", "", ""); - $db2->db = $this->db; - return $db2; + $con_string = "host=$host dbname=$name user=$login password=$passwd "; + $this->db = pg_connect($con_string); + return $this->db; } - -/** - \brief Ouverture d'une connection vers une database. - \param host addresse de la base de données - \param login nom de l'utilisateur autorisé - \param passwd mot de passe - \param name nom de la database - \return resource handler d'accès à la base -*/ - - function pconnect($host, $login, $passwd,$name) + + /** + \brief Connexion sur une base de donnée + \param database nom de la database + \return result resultat 1 pour ok, 0 pour non ok + */ + + function create_db($database) { - $con_string = "host=$host dbname=$name user=$login password=$passwd"; - $this->db = pg_pconnect($con_string); - return $this->db; + if(createdb($database, $this->db)) + { + return 1; + } + else + { + return 0; + } } - -/** - \brief Fermeture d'une connection vers une database. - \return resource -*/ - - function close() - { - return pg_close($this->db); - } - -/** - \brief Debut d'une transaction. - \param do - \return string -*/ - - function begin($do=1) - { - if ($do) - { - return $this->query("BEGIN"); - } - else - { - return 1; - } - } - -/** - \brief Ecriture d'une transaction. - \param do - \return string -*/ - - function commit($do=1) - { - if ($do) - { - return $this->query("COMMIT;"); - } - else - { - return 1; - } - } - - -/** - \brief Effacement d'une transaction et retour au ancienne valeurs. - \param do - \return string -*/ - - function rollback($do=1) - { - if ($do) - { - return $this->query("ROLLBACK;"); - } - else - { - return 1; - } - } - -/** - \brief Effectue une requete et renvoi le resultset de réponse de la base - \param query contenu de la query - \param limit - \param offset - \return resource resultset -*/ - - function query($query, $limit="", $offset="") + + + /** + \brief Copie d'un handler de database. + \return resource + */ + + function clone() { - $query = trim($query); - - $this->lastquery=$query; - - $this->results = pg_query($this->db,$query); - - return $this->results; + $db2 = new DoliDb("", "", "", "", ""); + $db2->db = $this->db; + return $db2; } - -/** - \brief Liste des tables dans une database. - \param database nom de la database - \return resource -*/ - - function list_tables($database) - { - $this->results = pg_query($this->db, "SHOW TABLES;"); - return $this->results; - } - - -/** - \brief Renvoie les données de la requete. - \param nb contenu de la query - \param fieldname nom du champ - \return resource -*/ - - function result($nb, $fieldname) + + /** + \brief Ouverture d'une connection vers une database. + \param host Adresse de la base de données + \param login Nom de l'utilisateur autorisé + \param passwd Mot de passe + \param name Nom de la database + \return resource handler d'accès à la base + */ + + function pconnect($host, $login, $passwd, $name) { - return pg_fetch_result($this->results, $nb, $fieldname); + $con_string = "host=$host dbname=$name user=$login password=$passwd"; + $this->db = pg_pconnect($con_string); + return $this->db; } - - -/** - \brief Libère le dernier resultset utilisé sur cette connexion. - \return resource -*/ - - function free() + + /** + \brief Fermeture d'une connection vers une database. + \return resource + */ + + function close() { - return pg_free_result($this->results); + return pg_close($this->db); } + + /** + \brief Debut d'une transaction. + \return int 1 si ouverture transaction ok ou deja ouverte, 0 en cas d'erreur + */ + + function begin() + { + if (! $this->transaction_opened) + { + $ret=$this->query("BEGIN;"); + if ($ret) $this->transaction_opened++; + return $ret; + } + else + { + $this->transaction_opened++; + return 1; + } + } + + /** + \brief Validation d'une transaction + \return int 1 si validation ok ou niveau de transaction non ouverte, 0 en cas d'erreur + */ -/** - \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset. - \param resultset curseur de la requete voulue - \return resource -*/ - - function fetch_object($resultset=0) + function commit() + { + if ($this->transaction_opened==1) + { + $ret=$this->query("COMMIT;"); + if ($ret) $this->transaction_opened=0; + return $ret; + } + else + { + $this->transaction_opened--; + return 1; + } + } + + /** + \brief Annulation d'une transaction et retour aux anciennes valeurs + \return int 1 si annulation ok ou transaction non ouverte, 0 en cas d'erreur + */ + + function rollback() + { + if ($this->transaction_opened) + { + $ret=$this->query("ROLLBACK;"); + $this->transaction_opened=0; + return $ret; + } + else + { + return 1; + } + } + + /** + \brief Effectue une requete et renvoi le resultset de réponse de la base + \param query Contenu de la query + \return resource Resultset de la reponse + */ + + function query($query) + { + $query = trim($query); + $this->lastquery=$query; + + $this->results = pg_query($this->db, $query); + + return $this->results; + } + + /** + \brief Renvoie les données de la requete. + \param nb Contenu de la query + \param fieldname Nom du champ + \return resource + */ + + function result($nb, $fieldname) + { + return pg_fetch_result($this->results, $nb, $fieldname); + } + + /** + \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset. + \param resultset Curseur de la requete voulue + \return resource + */ + + function fetch_object($resultset=0) { // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion if (! is_resource($resultset)) { $resultset=$this->results; } return pg_fetch_object($resultset); - } - -/** - \brief défini les limites de la requète. - \param limit - \param offset - \return int limite -*/ - - function plimit($limit=0,$offset=0) - { - if ($offset > 0) - { - return " LIMIT $offset,$limit "; - } - else - { - return " LIMIT $limit "; - } } - - -/** - \brief Formatage par la base de données d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS) - afin de retourner une donnée toujours au format universel date tms unix. - \param fname - \return date -*/ - function pdate($fname) + + /** + \brief Renvoie les données dans un tableau. + \param resultset Curseur de la requete voulue + \return array + */ + + function fetch_array($resultset=0) { - return "unix_timestamp($fname)"; + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return pg_fetch_array($resultset); } - - -/** - \brief formatage de la date en fonction des locales. - \param fname - \return date -*/ - function idate($fname) + + /** + \brief Renvoie les données comme un tableau. + \param resultset Curseur de la requete voulue + \return array + */ + + function fetch_row($resultset=0) { - return strftime("%Y%m%d%H%M%S",$fname); + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return pg_fetch_row($resultset); } - - -/** - \brief Renvoie les données dans un tableau. - \return array -*/ - - function fetch_array() - { - return pg_fetch_array($this->results); - } - -/** - \brief Renvoie les données comme un tableau. - \return array -*/ - - function fetch_row() - { - return pg_fetch_row($this->results); - } - -/** - \brief Obtient les données d'un colonne et renvoie les données sous forme d'objet. + + /** + \brief Obtient les données d'un colonne et renvoie les données sous forme d'objet. + \param resultset Curseur de la requete voulue \return array -*/ - - function fetch_field() + */ + + function fetch_field($resultset=0) { - return pg_field_name($this->results); + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return pg_field_name($resultset); + } + + /** + \brief Renvoie le nombre de lignes dans le resultat d'une requete SELECT + \see affected_rows + \param resultset Curseur de la requete voulue + \return int Nombre de lignes + */ + + function num_rows($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return pg_num_rows($resultset); + } + + /** + \brief Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + \see num_rows + \param resultset Curseur de la requete voulue + \return int Nombre de lignes + */ + + function affected_rows($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + // pgsql necessite un resultset pour cette fonction contrairement + // a mysql qui prend un link de base + return pg_affected_rows($resultset); + } + + + /** + \brief Renvoie le nombre de champs dans le resultat de la requete. + \param resultset Curseur de la requete voulue + \return int + */ + + function num_fields($resultset=0) + { + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return pg_num_fields($resultset); } - -/** - \brief Renvoie le nombre de lignes dans le - resultat d'une requete SELECT - \see affected_rows - \return int nombre de lignes -*/ - - function num_rows() + /** + \brief Libère le dernier resultset utilisé sur cette connexion. + \param resultset Curseur de la requete voulue + \return resource + */ + + function free($resultset=0) { - return pg_num_rows($this->results); + // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion + if (! is_resource($resultset)) { $resultset=$this->results; } + return pg_free_result($resultset); + } + + + /** + \brief Défini les limites de la requète. + \param limit + \param offset + \return int Limite + */ + + function plimit($limit=0,$offset=0) + { + if ($offset > 0) + { + return " LIMIT $offset,$limit "; + } + else + { + return " LIMIT $limit "; + } + } + + + /** + \brief Formatage par la base de données d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS) + afin de retourner une donnée toujours au format universel date tms unix. + \param fname + \return date + */ + function pdate($fname) + { + return "unix_timestamp($fname)"; + } + + /** + \brief Formatage de la date en fonction des locales. + \param fname + \return date + */ + function idate($fname) + { + return strftime("%Y%m%d%H%M%S",$fname); + } + + + /** + \brief Renvoie la derniere requete soumise par la methode query() + \return lastquery + */ + + function lastquery() + { + return $this->lastquery; + } + + /** + \brief Renvoie le texte de l'erreur mysql de l'operation precedente. + \return error_text + */ + + function error() + { + return pg_last_error($this->db); + } + + /** + \brief Renvoie la valeur numerique de l'erreur de l'operation precedente. + pour etre exploiter par l'appelant et détecter les erreurs du genre: + echec car doublons, table deja existante... + \return error_num + \remark pgsql ne permet pas de renvoyer un code générique d'une erreur, + mais juste un message. On utilise donc ces messages plutot qu'un code. + */ + + function errno() + { + return pg_last_error($this->db); + } + + /** + \brief Obtient l'id genéré par le dernier INSERT. + \return id + */ + + function last_insert_id($tab) + { + $result = pg_query($this->db,"select max(rowid) from ".$tab." ;"); + $nbre = pg_num_rows($result); + $row = pg_fetch_result($result,0,0); + return $row; + } + + /** + \brief Retourne le dsn pear + \return dsn + */ + + function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname) + { + $pear = $db_type.'://'.$db_user.':'.$db_pass.'@'. + $db_host.'/'.$db_name; + + return $pear; } -/** - \brief Renvoie le nombre de lignes dans le - resultat d'une requete INSERT, DELETE ou UPDATE - \see num_rows - \return int nombre de lignes -*/ - - function affected_rows() + /** + \brief Liste des tables dans une database. + \param database Nom de la database + \return resource + */ + + function list_tables($database) { - // pgsql necessite un resultset pour cette fonction contrairement - // a mysql qui prend un link de base - return pg_affected_rows($this->results); + $this->results = pg_query($this->db, "SHOW TABLES;"); + return $this->results; } - -/** - \brief Renvoie le nombre de champs dans le resultat de la requete. - \return int -*/ - - function num_fields() - { - return pg_num_fields($this->results); - } - -/** - \brief Renvoie la derniere requete soumise par la methode query() - \return lastquery -*/ - - function lastquery() - { - return $this->lastquery; - } - -/** - \brief Renvoie le texte de l'erreur mysql de l'operation precedente. - \return error_text -*/ - - function error() - { - return pg_last_error($this->db); - } - -/** - \brief Renvoie la valeur numerique de l'erreur de l'operation precedente. - pour etre exploiter par l'appelant et détecter les erreurs du genre: - echec car doublons, table deja existante... - \return error_num - \remark pgsql ne permet pas de renvoyer un code générique d'une erreur, - mais juste un message. On utilise donc ces messages plutot qu'un code. -*/ - - function errno() - { - return pg_last_error($this->db); - } - -/** - \brief Obtient l'id genéré par le précedent INSERT. - \return id -*/ - - function last_insert_id($tab) - { - $result = pg_query($this->db,"select max(rowid) from ".$tab." ;"); - $nbre = pg_num_rows($result); - $row = pg_fetch_result($result,0,0); - return $row; - } - - -/** - \brief Retourne le dsn pear - \return dsn -*/ - - function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname) - { - $pear = $db_type.'://'.$db_user.':'.$db_pass.'@'. - $db_host.'/'.$db_name; - - return $pear; - } - + } ?>