2
0
forked from Wavyzz/dolibarr

Amlioration des gestionnaires de bases: Meilleur commentaire et les fonctions qui ncessitent un resultset peuvent le recevoir en paramtre.

This commit is contained in:
Laurent Destailleur
2005-01-23 01:47:51 +00:00
parent 644e0c7039
commit 830137f270
2 changed files with 857 additions and 838 deletions

View File

@@ -1,7 +1,7 @@
<?php <?php
/* Copyright (C) 2001 Fabien Seisen <seisen@linuxfr.org> /* Copyright (C) 2001 Fabien Seisen <seisen@linuxfr.org>
* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
@@ -23,30 +23,35 @@
*/ */
/** \file htdocs/lib/mysql.lib.php /** \file htdocs/lib/mysql.lib.php
\brief Classe permettant de g<>r<EFBFBD>r la database de dolibarr. \brief Fichier de la classe permettant de g<>r<EFBFBD>r la database de dolibarr.
\author Fabien Seisen \author Fabien Seisen
\author Rodolphe Quiedeville. \author Rodolphe Quiedeville.
\author Laurent Destailleur. \author Laurent Destailleur.
\version $Revision$ \version $Revision$
Ensemble des fonctions permettant de g<>rer la database de dolibarr.
*/ */
/** \class DoliDb /** \class DoliDb
\brief Classe permettant de g<>r<EFBFBD>r la database de dolibarr \brief Classe permettant de g<>r<EFBFBD>r la database de dolibarr
Ensemble des fonctions permettant de g<>rer la database de dolibarr
*/ */
class DoliDb class DoliDb
{ {
var $db, $results, $ok, $connected, $database_selected; var $db; // Handler de base
var $results; // Resultset de la derni<6E>re requete
var $connected; // 1 si connect<63>, 0 sinon
var $database_selected; // 1 si base s<>lectionn<6E>, 0 sinon
var $transaction_opened; // 1 si une transaction est en cours, 0 sinon
var $ok;
// Constantes pour code erreurs // Constantes pour code erreurs
var $ERROR_DUPLICATE=1062; var $ERROR_DUPLICATE=1062;
var $ERROR_TABLEEXISTS=1050; var $ERROR_TABLEEXISTS=1050;
/**
/**
\brief Ouverture d'une connection vers le serveur et <20>ventuellement une database. \brief Ouverture d'une connection vers le serveur et <20>ventuellement une database.
\param type type de base de donn<6E>es (mysql ou pgsql) \param type type de base de donn<6E>es (mysql ou pgsql)
\param host addresse de la base de donn<6E>es \param host addresse de la base de donn<6E>es
@@ -54,31 +59,16 @@ class DoliDb
\param pass mot de passe \param pass mot de passe
\param name nom de la database \param name nom de la database
\return int 1 en cas de succ<63>s, 0 sinon \return int 1 en cas de succ<63>s, 0 sinon
*/ */
function DoliDb($type = 'mysql', $host = '', $user = '', $pass = '', $name = '') function DoliDb($type = 'mysql', $host = '', $user = '', $pass = '', $name = '')
{ {
global $conf; global $conf;
$this->transaction_opened=0;
if ($host == '') if ($host == '') $host = $conf->db->host;
{ if ($user == '') $user = $conf->db->user;
$host = $conf->db->host; if ($pass == '') $pass = $conf->db->pass;
} if ($name == '') $name = $conf->db->name;
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<br>"; //print "Name DB: $host,$user,$pass,$name<br>";
@@ -121,24 +111,24 @@ class DoliDb
return $this->ok; return $this->ok;
} }
/** /**
\brief Selectionne une database. \brief Selectionne une database.
\param database nom de la database \param database nom de la database
\return resource \return resource
*/ */
function select_db($database) function select_db($database)
{ {
return mysql_select_db($database, $this->db); return mysql_select_db($database, $this->db);
} }
/** /**
\brief Connection vers le serveur \brief Connection vers le serveur
\param host addresse de la base de donn<6E>es \param host addresse de la base de donn<6E>es
\param login nom de l'utilisateur autoris<EFBFBD> \param login nom de l'utilisateur autoris
\param passwd mot de passe \param passwd mot de passe
\return resource handler d'acc<63>s <20> la base \return resource handler d'acc<63>s <20> la base
*/ */
function connect($host, $login, $passwd) function connect($host, $login, $passwd)
{ {
@@ -147,11 +137,11 @@ class DoliDb
return $this->db; return $this->db;
} }
/** /**
\brief Connexion sur une base de donn<6E>e \brief Connexion sur une base de donn<6E>e
\param database nom de la database \param database nom de la database
\return result resultat 1 pour ok, 0 pour non ok \return result resultat 1 pour ok, 0 pour non ok
*/ */
function create_db($database) function create_db($database)
{ {
@@ -165,10 +155,10 @@ class DoliDb
} }
} }
/** /**
\brief Copie d'une database. \brief Copie d'un handler de database.
\return resource \return resource
*/ */
function clone() function clone()
{ {
@@ -177,13 +167,13 @@ class DoliDb
return $db2; return $db2;
} }
/** /**
\brief Ouverture d'une connection vers une database. \brief Ouverture d'une connection vers une database.
\param host addresse de la base de donn<6E>es \param host Adresse de la base de donn<6E>es
\param login nom de l'utilisateur autoris<69> \param login Nom de l'utilisateur autoris<69>
\param passwd mot de passe \param passwd Mot de passe
\return resource handler d'acc<63>s <20> la base \return resource handler d'acc<63>s <20> la base
*/ */
function pconnect($host, $login, $passwd) function pconnect($host, $login, $passwd)
{ {
@@ -191,27 +181,69 @@ class DoliDb
return $this->db; return $this->db;
} }
/** /**
\brief Fermeture d'une connection vers une database. \brief Fermeture d'une connection vers une database.
\return resource \return resource
*/ */
function close() function close()
{ {
return mysql_close($this->db); return mysql_close($this->db);
} }
/**
/**
\brief Debut d'une transaction. \brief Debut d'une transaction.
\param do \return int 1 si ouverture transaction ok ou deja ouverte, 0 en cas d'erreur
\return string */
*/
function begin($do=1) function begin()
{ {
if ($do) if (! $this->transaction_opened)
{ {
return $this->query("BEGIN"); $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
*/
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 else
{ {
@@ -219,51 +251,13 @@ class DoliDb
} }
} }
/** /**
\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 \brief Effectue une requete et renvoi le resultset de r<>ponse de la base
\param query contenu de la query \param query Contenu de la query
\param limit \return resource Resultset de la reponse
\param offset */
\return resource resultset
*/
function query($query, $limit="", $offset="") function query($query)
{ {
$query = trim($query); $query = trim($query);
$this->lastquery=$query; $this->lastquery=$query;
@@ -273,45 +267,23 @@ class DoliDb
return $this->results; return $this->results;
} }
/** /**
\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<6E>es de la requete. \brief Renvoie les donn<6E>es de la requete.
\param nb contenu de la query \param nb Contenu de la query
\param fieldname nom du champ \param fieldname Nom du champ
\return resource \return resource
*/ */
function result($nb, $fieldname) function result($nb, $fieldname)
{ {
return mysql_result($this->results, $nb, $fieldname); return mysql_result($this->results, $nb, $fieldname);
} }
/** /**
\brief Lib<69>re le dernier resultset utilis<69> sur cette connexion.
\return resource
*/
function free()
{
return mysql_free_result($this->results);
}
/**
\brief Renvoie la ligne courante (comme un objet) pour le curseur resultset. \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset.
\param resultset curseur de la requete voulue \param resultset Curseur de la requete voulue
\return resource \return resource
*/ */
function fetch_object($resultset=0) function fetch_object($resultset=0)
{ {
@@ -320,12 +292,108 @@ class DoliDb
return mysql_fetch_object($resultset); return mysql_fetch_object($resultset);
} }
/** /**
\brief d<EFBFBD>fini les limites de la requ<71>te. \brief Renvoie les donn<6E>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<69> sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_array($resultset);
}
/**
\brief Renvoie les donn<6E>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<69> sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_row($resultset);
}
/**
\brief Obtient les donn<6E>es d'un colonne et renvoie les donn<6E>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<69> 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<69> 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<69> 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<69> sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_num_fields($resultset);
}
/**
\brief Lib<69>re le dernier resultset utilis<69> 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<69> sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_free_result($resultset);
}
/**
\brief D<>fini les limites de la requ<71>te.
\param limit \param limit
\param offset \param offset
\return int limite \return int Limite
*/ */
function plimit($limit=0,$offset=0) function plimit($limit=0,$offset=0)
{ {
@@ -340,145 +408,75 @@ class DoliDb
} }
/** /**
\brief Formatage par la base de donn<6E>es d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS) \brief Formatage par la base de donn<6E>es d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS)
afin de retourner une donn<6E>e toujours au format universel date tms unix. afin de retourner une donn<6E>e toujours au format universel date tms unix.
\param fname \param fname
\return date \return date
*/ */
function pdate($fname) function pdate($fname)
{ {
return "unix_timestamp($fname)"; return "unix_timestamp($fname)";
} }
/** /**
\brief Formatage de la date en fonction des locales. \brief Formatage de la date en fonction des locales.
\param fname \param fname
\return date \return date
*/ */
function idate($fname) 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<6E>es dans un tableau.
\return array
*/
function fetch_array()
{
return mysql_fetch_array($this->results);
}
/**
\brief Renvoie les donn<6E>es comme un tableau.
\return array
*/
function fetch_row()
{
return mysql_fetch_row($this->results);
}
/**
\brief Obtient les donn<6E>es d'un colonne et renvoie les donn<6E>es sous forme d'objet.
\return array
*/
function fetch_field()
{
return mysql_fetch_field($this->results);
}
/**
\brief Renvoie le nombre de lignes dans le
resultat d'une requete SELECT
\see affected_rows
\return int nombre de lignes
*/
function num_rows()
{
return mysql_num_rows($this->results);
}
/**
\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()
{
// 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.
\return int
*/
function num_fields()
{
return mysql_num_fields($this->results);
}
/**
\brief Renvoie la derniere requete soumise par la methode query() \brief Renvoie la derniere requete soumise par la methode query()
\return lastquery \return lastquery
*/ */
function lastquery() function lastquery()
{ {
return $this->lastquery; return $this->lastquery;
} }
/** /**
\brief Renvoie le texte de l'erreur mysql de l'operation precedente. \brief Renvoie le texte de l'erreur mysql de l'operation precedente.
\return error_text \return error_text
*/ */
function error() function error()
{ {
return mysql_error($this->db); return mysql_error($this->db);
} }
/** /**
\brief Renvoie la valeur numerique de l'erreur de l'operation precedente. \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: pour etre exploiter par l'appelant et d<>tecter les erreurs du genre:
echec car doublons, table deja existante... echec car doublons, table deja existante...
\return error_num \return error_num
*/ */
function errno() function errno()
{ {
// $ERROR_DUPLICATE=1062; // $ERROR_DUPLICATE=1062;
// $ERROR_TABLEEXISTS=1050; // $ERROR_TABLEEXISTS=1050;
return mysql_errno($this->db); return mysql_errno($this->db);
} }
/** /**
\brief Obtient l'id gen<65>r<EFBFBD> par le pr<EFBFBD>cedent INSERT. \brief Obtient l'id gen<65>r<EFBFBD> par le dernier INSERT.
\return id \return id
*/ */
function last_insert_id() function last_insert_id()
{ {
return mysql_insert_id($this->db); return mysql_insert_id($this->db);
} }
/** /**
\brief Retourne le dsn pear \brief Retourne le dsn pear
\return dsn \return dsn
*/ */
function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname) function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname)
{ {
@@ -488,6 +486,18 @@ class DoliDb
return $pear; return $pear;
} }
/**
\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;
}
} }
?> ?>

View File

@@ -25,32 +25,35 @@
*/ */
/** \file htdocs/lib/pgsql.lib.php /** \file htdocs/lib/pgsql.lib.php
\brief Classe permettant de g<>r<EFBFBD>r la database de dolibarr. \brief Fichier de la classe permettant de g<>r<EFBFBD>r la database de dolibarr.
\author Fabien Seisen \author Fabien Seisen
\author Rodolphe Quiedeville. \author Rodolphe Quiedeville.
\author Laurent Destailleur. \author Laurent Destailleur.
\author S<>bastien Di Cintio \author S<>bastien Di Cintio
\author Benoit Mortier \author Benoit Mortier
\version $Revision$ \version $Revision$
Ensemble des fonctions permettant de g<>rer la database de dolibarr.
*/ */
/** \class DoliDb /** \class DoliDb
\brief Classe permettant de g<>r<EFBFBD>r la database de dolibarr \brief Classe permettant de g<>r<EFBFBD>r la database de dolibarr
Ensemble des fonctions permettant de g<>rer la database de dolibarr
*/ */
class DoliDb class DoliDb
{ {
var $db, $results, $ok, $connected, $database_selected; var $db; // Handler de base
var $results; // Resultset de la derni<6E>re requete
var $connected; // 1 si connect<63>, 0 sinon
var $database_selected; // 1 si base s<>lectionn<6E>, 0 sinon
var $transaction_opened; // 1 si une transaction est en cours, 0 sinon
var $ok;
// Constantes pour code erreurs // Constantes pour code erreurs
var $ERROR_DUPLICATE="23505"; var $ERROR_DUPLICATE="23505";
var $ERROR_TABLEEXISTS='42P07'; var $ERROR_TABLEEXISTS='42P07';
/** /**
\brief Ouverture d'une connection vers le serveur et une database. \brief Ouverture d'une connection vers le serveur et une database.
\param type type de base de donn<6E>es (mysql ou pgsql) \param type type de base de donn<6E>es (mysql ou pgsql)
\param host addresse de la base de donn<6E>es \param host addresse de la base de donn<6E>es
@@ -58,37 +61,22 @@ class DoliDb
\param pass mot de passe \param pass mot de passe
\param name nom de la database \param name nom de la database
\return int 1 en cas de succ<63>s, 0 sinon \return int 1 en cas de succ<63>s, 0 sinon
*/ */
function DoliDb($type = 'pgsql', $host = '', $user = '', $pass = '', $name = '') function DoliDb($type = 'pgsql', $host = '', $user = '', $pass = '', $name = '')
{ {
global $conf; global $conf;
$this->transaction_opened=0;
if ($host == '') if ($host == '') $host = $conf->db->host;
{ if ($user == '') $user = $conf->db->user;
$host = $conf->db->host; if ($pass == '') $pass = $conf->db->pass;
} if ($name == '') $name = $conf->db->name;
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<br>"; //print "Name DB: $host,$user,$pass,$name<br>";
// Essai connexion serveur // Essai connexion serveur
$this->db = $this->connect($host, $user, $pass,$name); $this->db = $this->connect($host, $user, $pass, $name);
if ($this->db) if ($this->db)
{ {
@@ -125,14 +113,14 @@ class DoliDb
return $this->ok; return $this->ok;
} }
/** /**
\brief Selectionne une database. \brief Selectionne une database.
\param database nom de la database \param database nom de la database
\return resource \return resource
\remarks ici postgresql n'a aucune fonction equivalente de mysql_select_db \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 comparaison manuel si la database est bien celle choisie par l'utilisateur
\remarks en cas de succes renverra 1 ou 0 \remarks en cas de succes renverra 1 ou 0
*/ */
function select_db($database) function select_db($database)
{ {
@@ -142,14 +130,14 @@ class DoliDb
return 0; return 0;
} }
/** /**
\brief Connection vers le serveur \brief Connection vers le serveur
\param host addresse de la base de donn<6E>es \param host addresse de la base de donn<6E>es
\param login nom de l'utilisateur autoris<EFBFBD> \param login nom de l'utilisateur autoris
\param passwd mot de passe \param passwd mot de passe
\param name nom de la database \param name nom de la database
\return resource handler d'acc<63>s <20> la base \return resource handler d'acc<63>s <20> la base
*/ */
function connect($host, $login, $passwd, $name) function connect($host, $login, $passwd, $name)
{ {
@@ -158,25 +146,29 @@ class DoliDb
return $this->db; return $this->db;
} }
/** /**
\brief Connexion sur une base de donn<6E>e \brief Connexion sur une base de donn<6E>e
\param database nom de la database \param database nom de la database
\return result resultat 1 pour ok, 0 pour non ok \return result resultat 1 pour ok, 0 pour non ok
*/ */
function create_db($database) function create_db($database)
{ {
if(createdb($database,$this->db)) if(createdb($database, $this->db))
{
return 1; return 1;
}
else else
{
return 0; return 0;
} }
}
/** /**
\brief Copie d'une database. \brief Copie d'un handler de database.
\return resource \return resource
*/ */
function clone() function clone()
{ {
@@ -185,43 +177,84 @@ class DoliDb
return $db2; return $db2;
} }
/** /**
\brief Ouverture d'une connection vers une database. \brief Ouverture d'une connection vers une database.
\param host addresse de la base de donn<6E>es \param host Adresse de la base de donn<6E>es
\param login nom de l'utilisateur autoris<69> \param login Nom de l'utilisateur autoris<69>
\param passwd mot de passe \param passwd Mot de passe
\param name nom de la database \param name Nom de la database
\return resource handler d'acc<63>s <20> la base \return resource handler d'acc<63>s <20> la base
*/ */
function pconnect($host, $login, $passwd,$name) function pconnect($host, $login, $passwd, $name)
{ {
$con_string = "host=$host dbname=$name user=$login password=$passwd"; $con_string = "host=$host dbname=$name user=$login password=$passwd";
$this->db = pg_pconnect($con_string); $this->db = pg_pconnect($con_string);
return $this->db; return $this->db;
} }
/** /**
\brief Fermeture d'une connection vers une database. \brief Fermeture d'une connection vers une database.
\return resource \return resource
*/ */
function close() function close()
{ {
return pg_close($this->db); return pg_close($this->db);
} }
/** /**
\brief Debut d'une transaction. \brief Debut d'une transaction.
\param do \return int 1 si ouverture transaction ok ou deja ouverte, 0 en cas d'erreur
\return string */
*/
function begin($do=1) function begin()
{ {
if ($do) if (! $this->transaction_opened)
{ {
return $this->query("BEGIN"); $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
*/
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 else
{ {
@@ -229,103 +262,39 @@ class DoliDb
} }
} }
/** /**
\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 \brief Effectue une requete et renvoi le resultset de r<>ponse de la base
\param query contenu de la query \param query Contenu de la query
\param limit \return resource Resultset de la reponse
\param offset */
\return resource resultset
*/
function query($query, $limit="", $offset="") function query($query)
{ {
$query = trim($query); $query = trim($query);
$this->lastquery=$query; $this->lastquery=$query;
$this->results = pg_query($this->db,$query); $this->results = pg_query($this->db, $query);
return $this->results; return $this->results;
} }
/** /**
\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<6E>es de la requete. \brief Renvoie les donn<6E>es de la requete.
\param nb contenu de la query \param nb Contenu de la query
\param fieldname nom du champ \param fieldname Nom du champ
\return resource \return resource
*/ */
function result($nb, $fieldname) function result($nb, $fieldname)
{ {
return pg_fetch_result($this->results, $nb, $fieldname); return pg_fetch_result($this->results, $nb, $fieldname);
} }
/**
/**
\brief Lib<69>re le dernier resultset utilis<69> sur cette connexion.
\return resource
*/
function free()
{
return pg_free_result($this->results);
}
/**
\brief Renvoie la ligne courante (comme un objet) pour le curseur resultset. \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset.
\param resultset curseur de la requete voulue \param resultset Curseur de la requete voulue
\return resource \return resource
*/ */
function fetch_object($resultset=0) function fetch_object($resultset=0)
{ {
@@ -334,12 +303,109 @@ class DoliDb
return pg_fetch_object($resultset); return pg_fetch_object($resultset);
} }
/** /**
\brief d<>fini les limites de la requ<71>te. \brief Renvoie les donn<6E>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<69> sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return pg_fetch_array($resultset);
}
/**
\brief Renvoie les donn<6E>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<69> sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return pg_fetch_row($resultset);
}
/**
\brief Obtient les donn<6E>es d'un colonne et renvoie les donn<6E>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<69> 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<69> 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<69> 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<69> sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return pg_num_fields($resultset);
}
/**
\brief Lib<69>re le dernier resultset utilis<69> 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<69> sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return pg_free_result($resultset);
}
/**
\brief D<>fini les limites de la requ<71>te.
\param limit \param limit
\param offset \param offset
\return int limite \return int Limite
*/ */
function plimit($limit=0,$offset=0) function plimit($limit=0,$offset=0)
{ {
@@ -354,134 +420,66 @@ class DoliDb
} }
/** /**
\brief Formatage par la base de donn<6E>es d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS) \brief Formatage par la base de donn<6E>es d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS)
afin de retourner une donn<6E>e toujours au format universel date tms unix. afin de retourner une donn<6E>e toujours au format universel date tms unix.
\param fname \param fname
\return date \return date
*/ */
function pdate($fname) function pdate($fname)
{ {
return "unix_timestamp($fname)"; return "unix_timestamp($fname)";
} }
/**
/** \brief Formatage de la date en fonction des locales.
\brief formatage de la date en fonction des locales.
\param fname \param fname
\return date \return date
*/ */
function idate($fname) 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<6E>es dans un tableau.
\return array
*/
function fetch_array()
{
return pg_fetch_array($this->results);
}
/**
\brief Renvoie les donn<6E>es comme un tableau.
\return array
*/
function fetch_row()
{
return pg_fetch_row($this->results);
}
/**
\brief Obtient les donn<6E>es d'un colonne et renvoie les donn<6E>es sous forme d'objet.
\return array
*/
function fetch_field()
{
return pg_field_name($this->results);
}
/**
\brief Renvoie le nombre de lignes dans le
resultat d'une requete SELECT
\see affected_rows
\return int nombre de lignes
*/
function num_rows()
{
return pg_num_rows($this->results);
}
/**
\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()
{
// pgsql necessite un resultset pour cette fonction contrairement
// a mysql qui prend un link de base
return pg_affected_rows($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() \brief Renvoie la derniere requete soumise par la methode query()
\return lastquery \return lastquery
*/ */
function lastquery() function lastquery()
{ {
return $this->lastquery; return $this->lastquery;
} }
/** /**
\brief Renvoie le texte de l'erreur mysql de l'operation precedente. \brief Renvoie le texte de l'erreur mysql de l'operation precedente.
\return error_text \return error_text
*/ */
function error() function error()
{ {
return pg_last_error($this->db); return pg_last_error($this->db);
} }
/** /**
\brief Renvoie la valeur numerique de l'erreur de l'operation precedente. \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: pour etre exploiter par l'appelant et d<>tecter les erreurs du genre:
echec car doublons, table deja existante... echec car doublons, table deja existante...
\return error_num \return error_num
\remark pgsql ne permet pas de renvoyer un code g<>n<EFBFBD>rique d'une erreur, \remark pgsql ne permet pas de renvoyer un code g<>n<EFBFBD>rique d'une erreur,
mais juste un message. On utilise donc ces messages plutot qu'un code. mais juste un message. On utilise donc ces messages plutot qu'un code.
*/ */
function errno() function errno()
{ {
return pg_last_error($this->db); return pg_last_error($this->db);
} }
/** /**
\brief Obtient l'id gen<65>r<EFBFBD> par le pr<EFBFBD>cedent INSERT. \brief Obtient l'id gen<65>r<EFBFBD> par le dernier INSERT.
\return id \return id
*/ */
function last_insert_id($tab) function last_insert_id($tab)
{ {
@@ -491,11 +489,10 @@ class DoliDb
return $row; return $row;
} }
/**
/**
\brief Retourne le dsn pear \brief Retourne le dsn pear
\return dsn \return dsn
*/ */
function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname) function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname)
{ {
@@ -505,6 +502,18 @@ class DoliDb
return $pear; return $pear;
} }
/**
\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;
}
} }
?> ?>