Qual: Renommage de quelques fonctions des drivers DB pour plus de clarté

This commit is contained in:
Laurent Destailleur 2006-11-15 01:04:38 +00:00
parent f2daee0011
commit 7b2533a21f
5 changed files with 343 additions and 311 deletions

View File

@ -50,15 +50,15 @@ else if ($_POST["action"] == 'multiprix_num')
} }
if ($_POST["action"] == 'multiprix') if ($_POST["action"] == 'multiprix')
{ {
$res=$db->desc_table(MAIN_DB_PREFIX."societe","price_level"); $res=$db->DDLDescTable(MAIN_DB_PREFIX."societe","price_level");
if(! $db->fetch_row()) if(! $db->fetch_row())
{ {
$field_desc = array('type'=>'TINYINT','value'=>'4','default'=>'1'); $field_desc = array('type'=>'TINYINT','value'=>'4','default'=>'1');
// on ajoute le champ price_level dans la table societe // on ajoute le champ price_level dans la table societe
if(! $db->add_field(MAIN_DB_PREFIX."societe","price_level",$field_desc)) if(! $db->DDLAddField(MAIN_DB_PREFIX."societe","price_level",$field_desc))
{ {
dolibarr_print_error($db); dolibarr_print_error($db);
print "<script language='JavaScript'>setTimeout(\"document.location='./produit.php'\",5000);</script>"; exit;
} }
// on crée la table societe_prices // on crée la table societe_prices
else else
@ -70,7 +70,7 @@ if ($_POST["action"] == 'multiprix')
$fields['datec'] = array('type'=>'datetime','default'=> 'null'); $fields['datec'] = array('type'=>'datetime','default'=> 'null');
$fields['fk_user_author'] = array('type'=>'int','value'=>'11','default'=> 'null'); $fields['fk_user_author'] = array('type'=>'int','value'=>'11','default'=> 'null');
$fields['price_level'] = array('type'=>'tinyint','value'=>'4','default'=> '1'); $fields['price_level'] = array('type'=>'tinyint','value'=>'4','default'=> '1');
if(! $db->create_table($table,$fields,"rowid","InnoDB")) if(! $db->DDLCreateTable($table,$fields,"rowid","InnoDB") > 0)
{ {
dolibarr_print_error($db); dolibarr_print_error($db);
print "<script language='JavaScript'>setTimeout(\"document.location='./produit.php'\",5000);</script>"; print "<script language='JavaScript'>setTimeout(\"document.location='./produit.php'\",5000);</script>";
@ -93,7 +93,7 @@ if ($_POST["action"] == 'multiprix')
} }
else if ($_POST["action"] == 'sousproduits') else if ($_POST["action"] == 'sousproduits')
{ {
$res=$db -> desc_table(MAIN_DB_PREFIX."product_association"); $res=$db->DDLDescTable(MAIN_DB_PREFIX."product_association");
if(! $db->fetch_row()) if(! $db->fetch_row())
{ {
$table = MAIN_DB_PREFIX."product_association"; $table = MAIN_DB_PREFIX."product_association";
@ -102,7 +102,7 @@ else if ($_POST["action"] == 'sousproduits')
$fields['qty'] = array('type'=>'double','default'=> 'null'); $fields['qty'] = array('type'=>'double','default'=> 'null');
$keys['idx_product_association_fk_product_pere'] = "fk_product_pere" ; $keys['idx_product_association_fk_product_pere'] = "fk_product_pere" ;
$keys['idx_product_association_fk_product_fils'] = "fk_product_fils" ; $keys['idx_product_association_fk_product_fils'] = "fk_product_fils" ;
if(! $db -> create_table($table,$fields,"","InnoDB","","",$keys)) if (! $db->DDLCreateTable($table,$fields,"","InnoDB","","",$keys) > 0)
{ {
dolibarr_print_error($db); dolibarr_print_error($db);
print "<script language='JavaScript'>setTimeout(\"document.location='./produit.php'\",5000);</script>"; print "<script language='JavaScript'>setTimeout(\"document.location='./produit.php'\",5000);</script>";

View File

@ -424,7 +424,7 @@ if ($_POST["action"] == "set")
if ($db->connected) if ($db->connected)
{ {
if ($db->create_db($dolibarr_main_db_name)) if ($db->DDLCreateDb($dolibarr_main_db_name))
{ {
print '<tr><td>'; print '<tr><td>';
print $langs->trans("DatabaseCreation").' : '; print $langs->trans("DatabaseCreation").' : ';

View File

@ -43,7 +43,7 @@ class DoliDb
var $type='mysql'; // Nom du gestionnaire var $type='mysql'; // Nom du gestionnaire
var $forcecharset='latin1'; var $forcecharset='latin1';
var $forcecollate='latin1_swedish_ci'; var $forcecollate='latin1_swedish_ci';
var $versionmin=array(4,1,0); var $versionmin=array(3,1,0); // Version min database
var $results; // Resultset de la dernière requete var $results; // Resultset de la dernière requete
@ -190,6 +190,7 @@ class DoliDb
\param passwd mot de passe \param passwd mot de passe
\param name nom de la database (ne sert pas sous mysql, sert sous pgsql) \param name nom de la database (ne sert pas sous mysql, sert sous pgsql)
\return resource handler d'accès à la base \return resource handler d'accès à la base
\seealso close
*/ */
function connect($host, $login, $passwd, $name) function connect($host, $login, $passwd, $name)
{ {
@ -222,33 +223,11 @@ class DoliDb
} }
/**
\brief Création d'une nouvelle base de donnée
\param database nom de la database à créer
\return resource resource définie si ok, null si ko
\remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated
*/
function create_db($database)
{
// ALTER DATABASE dolibarr_db DEFAULT CHARACTER SET latin DEFAULT COLLATE latin1_swedish_ci
$sql = 'CREATE DATABASE '.$database;
$sql.= ' DEFAULT CHARACTER SET '.$this->forcecharset.' DEFAULT COLLATE '.$this->forcecollate;
$ret=$this->query($sql);
if (! $ret)
{
// On réessaie pour compatibilité avec Mysql < 5.0
$sql = 'CREATE DATABASE '.$database;
$ret=$this->query($sql);
}
//print "database=".$this->database_name." ret=".$ret." mysqlerror=".mysql_error($this->db);
return $ret;
}
/** /**
\brief Fermeture d'une connection vers une database. \brief Fermeture d'une connection vers une database.
\return resource \return resource
\seealso connect
*/ */
function close() function close()
{ {
@ -578,7 +557,8 @@ class DoliDb
} }
/** /**
\brief Renvoie la commande sql qui donne les droits sur les tables \brief Renvoie la commande sql qui donne les droits à user sur toutes les tables
\param databaseuser User à autoriser
\return string Requete sql \return string Requete sql
*/ */
function getGrantForUserQuery($databaseuser) function getGrantForUserQuery($databaseuser)
@ -586,6 +566,50 @@ class DoliDb
return ''; return '';
} }
/**
\brief Retourne le dsn pear
\return dsn
*/
function getDSN($db_type,$db_user,$db_pass,$db_host,$db_name)
{
return $db_type.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name;
}
/**
\brief Création d'une nouvelle base de donnée
\param database nom de la database à créer
\return resource resource définie si ok, null si ko
\remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated
*/
function DDLCreateDb($database)
{
// ALTER DATABASE dolibarr_db DEFAULT CHARACTER SET latin DEFAULT COLLATE latin1_swedish_ci
$sql = 'CREATE DATABASE '.$database;
$sql.= ' DEFAULT CHARACTER SET '.$this->forcecharset.' DEFAULT COLLATE '.$this->forcecollate;
$ret=$this->query($sql);
if (! $ret)
{
// On réessaie pour compatibilité avec Mysql < 5.0
$sql = 'CREATE DATABASE '.$database;
$ret=$this->query($sql);
}
//print "database=".$this->database_name." ret=".$ret." mysqlerror=".mysql_error($this->db);
return $ret;
}
/**
\brief Liste des tables dans une database.
\param database Nom de la database
\return resource
*/
function DDLListTables($database)
{
$this->results = mysql_list_tables($database, $this->db);
return $this->results;
}
/** /**
\brief Crée une table \brief Crée une table
\param table Nom de la table \param table Nom de la table
@ -597,7 +621,7 @@ class DoliDb
\param type type de la table \param type type de la table
\return true/false selon si requête a provoqué un erreur mysql ou pas \return true/false selon si requête a provoqué un erreur mysql ou pas
*/ */
function create_table($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="") function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="")
{ {
// clés recherchées dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra // clés recherchées 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');
@ -661,6 +685,19 @@ class DoliDb
return true; return true;
} }
/**
\brief décrit une table dans une database.
\param table Nom de la table
\param field Optionnel : Nom du champ si l'on veut la desc d'un champ
\return resource
*/
function DDLDescTable($table,$field="")
{
// $this->results = $this->query("DESC ".$table." ".$field);
$this->results = $this->query("DESC ".$table." ".$field);
return $this->results;
}
/** /**
\brief Insère un nouveau champ dans une table \brief Insère un nouveau champ dans une table
\param table Nom de la table \param table Nom de la table
@ -669,7 +706,7 @@ class DoliDb
\param field_position Optionnel ex.: "after champtruc" \param field_position Optionnel ex.: "after champtruc"
\return true/false Selon si requête a provoqué un erreur mysql ou pas \return true/false Selon si requête a provoqué un erreur mysql ou pas
*/ */
function add_field($table,$field_name,$field_desc,$field_position="") function DDLAddField($table,$field_name,$field_desc,$field_position="")
{ {
// clés recherchées dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra // clés recherchées dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
// ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment'); // ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
@ -695,40 +732,6 @@ class DoliDb
else else
return true; return true;
} }
/**
\brief Retourne le dsn pear
\return dsn
*/
function getdsn($db_type,$db_user,$db_pass,$db_host,$db_name)
{
return $db_type.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name;
}
/**
\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 décrit une table dans une database.
\param table Nom de la table
\param field Optionnel : Nom du champ si l'on veut la desc d'un champ
\return resource
*/
function desc_table($table,$field="")
{
// $this->results = $this->query("DESC ".$table." ".$field);
$this->results = $this->query("DESC ".$table." ".$field);
return $this->results;
}
} }
?> ?>

View File

@ -43,6 +43,7 @@ class DoliDb
var $type='mysqli'; // Nom du gestionnaire var $type='mysqli'; // Nom du gestionnaire
var $forcecharset='latin1'; var $forcecharset='latin1';
var $forcecollate='latin1_swedish_ci'; var $forcecollate='latin1_swedish_ci';
var $versionmin=array(4,1,0); // Version min database
var $results; // Resultset de la dernière requete var $results; // Resultset de la dernière requete
@ -189,6 +190,7 @@ class DoliDb
\param passwd mot de passe \param passwd mot de passe
\param name nom de la database (ne sert pas sous mysql, sert sous pgsql) \param name nom de la database (ne sert pas sous mysql, sert sous pgsql)
\return resource handler d'accès à la base \return resource handler d'accès à la base
\seealso close
*/ */
function connect($host, $login, $passwd, $name) function connect($host, $login, $passwd, $name)
{ {
@ -221,32 +223,10 @@ class DoliDb
} }
/**
\brief Création d'une nouvelle base de donnée
\param database nom de la database à créer
\return resource resource définie si ok, null si ko
\remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated
*/
function create_db($database)
{
$sql = 'CREATE DATABASE '.$database;
$sql.= ' DEFAULT CHARACTER SET '.$this->forcecharset.' DEFAULT COLLATE '.$this->forcecollate;
$ret=$this->query($sql);
if (! $ret)
{
// On réessaie pour compatibilité avec Mysql < 5.0
$sql = 'CREATE DATABASE '.$database;
$ret=$this->query($sql);
}
//print "database=".$this->database_name." ret=".$ret." mysqlerror=".mysqli_error($this->db);
return $ret;
}
/** /**
\brief Fermeture d'une connection vers une database. \brief Fermeture d'une connection vers une database.
\return resource \return resource
\seealso connect
*/ */
function close() function close()
{ {
@ -359,142 +339,6 @@ class DoliDb
} }
// Next function are not required. Only minor features use them.
/**
\brief Renvoie l'id de la connection
\return string Id connection
*/
function getConnectId()
{
$resql=$this->query('SELECT CONNECTION_ID()');
$row=$this->fetch_row($resql);
return $row[0];
}
/**
\brief Renvoie la commande sql qui donne les droits sur les tables
\return string Requete sql
*/
function getGrantForUserQuery($databaseuser)
{
return '';
}
/**
\brief Crée une table
\param table Nom de la table
\param fields tableau associatif [nom champ][tableau des descriptions]
\param primary_key Nom du champ qui sera la clef primaire
\param unique_keys tableau associatifs Nom de champs qui seront clef unique => valeur
\param fulltext tableau des Nom de champs qui seront indexés en fulltext
\param key tableau des champs clés noms => valeur
\param type type de la table
\return true/false selon si requête a provoqué un erreur mysql ou pas
*/
function create_table($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="")
{
// clés recherchées 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."(";
$i=0;
foreach($fields as $field_name => $field_desc)
{
$sqlfields[$i] = $field_name." ";
$sqlfields[$i] .= $field_desc['type'];
if( eregi("^[^ ]",$field_desc['value']))
$sqlfields[$i] .= "(".$field_desc['value'].")";
else if( eregi("^[^ ]",$field_desc['attribute']))
$sqlfields[$i] .= " ".$field_desc['attribute'];
else if( eregi("^[^ ]",$field_desc['default']))
{
if(eregi("null",$field_desc['default']))
$sqlfields[$i] .= " default ".$field_desc['default'];
else
$sqlfields[$i] .= " default '".$field_desc['default']."'";
}
else if( eregi("^[^ ]",$field_desc['null']))
$sqlfields[$i] .= " ".$field_desc['null'];
else if( eregi("^[^ ]",$field_desc['extra']))
$sqlfields[$i] .= " ".$field_desc['extra'];
$i++;
}
if($primary_key != "")
$pk = "primary key(".$primary_key.")";
if($unique_keys != "")
{
$i = 0;
foreach($unique_keys as $key => $value)
{
$sqluq[$i] = "UNIQUE KEY '".$key."' ('".$value."')";
$i++;
}
}
if($keys != "")
{
$i = 0;
foreach($keys as $key => $value)
{
$sqlk[$i] = "KEY ".$key." (".$value.")";
$i++;
}
}
$sql .= implode(',',$sqlfields);
if($primary_key != "")
$sql .= ",".$pk;
if($unique_keys != "")
$sql .= ",".implode(',',$sqluq);
if($keys != "")
$sql .= ",".implode(',',$sqlk);
$sql .=") type=".$type;
// dolibarr_syslog($sql);
if(! $this -> query($sql))
return false;
else
return true;
}
/**
\brief Insère un nouveau champ dans une table
\param table Nom de la table
\param field_name Nom du champ à insérer
\param field_desc tableau associatif de description duchamp à insérer[nom du paramètre][valeur du paramètre]
\param field_position Optionnel ex.: "after champtruc"
\return true/false selon si requête a provoqué un erreur mysql ou pas
*/
function add_field($table,$field_name,$field_desc,$field_position="")
{
// clés recherchées dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
// ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
$sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
$sql .= $field_desc['type'];
if( eregi("^[^ ]",$field_desc['value']))
$sql .= "(".$field_desc['value'].")";
if( eregi("^[^ ]",$field_desc['attribute']))
$sql .= " ".$field_desc['attribute'];
if( eregi("^[^ ]",$field_desc['null']))
$sql .= " ".$field_desc['null'];
if( eregi("^[^ ]",$field_desc['default']))
if(eregi("null",$field_desc['default']))
$sql .= " default ".$field_desc['default'];
else
$sql .= " default '".$field_desc['default']."'";
if( eregi("^[^ ]",$field_desc['extra']))
$sql .= " ".$field_desc['extra'];
$sql .= " ".$field_position;
if(! $this -> query($sql))
return false;
else
return true;
}
/** /**
\brief Renvoie les données dans un tableau. \brief Renvoie les données dans un tableau.
\param resultset Curseur de la requete voulue \param resultset Curseur de la requete voulue
@ -696,38 +540,200 @@ class DoliDb
return mysqli_insert_id($this->db); return mysqli_insert_id($this->db);
} }
// Next function are not required. Only minor features use them.
//--------------------------------------------------------------
/**
\brief Renvoie l'id de la connection
\return string Id connection
*/
function getConnectId()
{
$resql=$this->query('SELECT CONNECTION_ID()');
$row=$this->fetch_row($resql);
return $row[0];
}
/**
\brief Renvoie la commande sql qui donne les droits sur les tables
\return string Requete sql
*/
function getGrantForUserQuery($databaseuser)
{
return '';
}
/** /**
\brief Retourne le dsn pear \brief Retourne le dsn pear
\return dsn \return dsn
*/ */
function getdsn($db_type,$db_user,$db_pass,$db_host,$db_name) function getDSN($db_type,$db_user,$db_pass,$db_host,$db_name)
{ {
return $db_type.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name; return $db_type.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name;
} }
/**
\brief Création d'une nouvelle base de donnée
\param database nom de la database à créer
\return resource resource définie si ok, null si ko
\remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated
*/
function DDLCreateDb($database)
{
$sql = 'CREATE DATABASE '.$database;
$sql.= ' DEFAULT CHARACTER SET '.$this->forcecharset.' DEFAULT COLLATE '.$this->forcecollate;
$ret=$this->query($sql);
if (! $ret)
{
// On réessaie pour compatibilité avec Mysql < 5.0
$sql = 'CREATE DATABASE '.$database;
$ret=$this->query($sql);
}
//print "database=".$this->database_name." ret=".$ret." mysqlerror=".mysqli_error($this->db);
return $ret;
}
/** /**
\brief Liste des tables dans une database. \brief Liste des tables dans une database.
\param database Nom de la database \param database Nom de la database
\return resource \return resource
*/ */
function list_tables($database) function DDLListTables($database)
{ {
$this->results = mysqli_list_tables($database, $this->db); $this->results = mysqli_list_tables($database, $this->db);
return $this->results; return $this->results;
} }
/**
\brief Crée une table
\param table Nom de la table
\param fields tableau associatif [nom champ][tableau des descriptions]
\param primary_key Nom du champ qui sera la clef primaire
\param unique_keys tableau associatifs Nom de champs qui seront clef unique => valeur
\param fulltext tableau des Nom de champs qui seront indexés en fulltext
\param key tableau des champs clés noms => valeur
\param type type de la table
\return true/false selon si requête a provoqué un erreur mysql ou pas
*/
function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="")
{
// clés recherchées 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."(";
$i=0;
foreach($fields as $field_name => $field_desc)
{
$sqlfields[$i] = $field_name." ";
$sqlfields[$i] .= $field_desc['type'];
if( eregi("^[^ ]",$field_desc['value']))
$sqlfields[$i] .= "(".$field_desc['value'].")";
else if( eregi("^[^ ]",$field_desc['attribute']))
$sqlfields[$i] .= " ".$field_desc['attribute'];
else if( eregi("^[^ ]",$field_desc['default']))
{
if(eregi("null",$field_desc['default']))
$sqlfields[$i] .= " default ".$field_desc['default'];
else
$sqlfields[$i] .= " default '".$field_desc['default']."'";
}
else if( eregi("^[^ ]",$field_desc['null']))
$sqlfields[$i] .= " ".$field_desc['null'];
else if( eregi("^[^ ]",$field_desc['extra']))
$sqlfields[$i] .= " ".$field_desc['extra'];
$i++;
}
if($primary_key != "")
$pk = "primary key(".$primary_key.")";
if($unique_keys != "")
{
$i = 0;
foreach($unique_keys as $key => $value)
{
$sqluq[$i] = "UNIQUE KEY '".$key."' ('".$value."')";
$i++;
}
}
if($keys != "")
{
$i = 0;
foreach($keys as $key => $value)
{
$sqlk[$i] = "KEY ".$key." (".$value.")";
$i++;
}
}
$sql .= implode(',',$sqlfields);
if($primary_key != "")
$sql .= ",".$pk;
if($unique_keys != "")
$sql .= ",".implode(',',$sqluq);
if($keys != "")
$sql .= ",".implode(',',$sqlk);
$sql .=") type=".$type;
// dolibarr_syslog($sql);
if(! $this -> query($sql))
return false;
else
return true;
}
/** /**
\brief décrit une table dans une database. \brief décrit une table dans une database.
\param table Nom de la table \param table Nom de la table
\param field Optionnel : Nom du champ si l'on veut la desc d'un champ \param field Optionnel : Nom du champ si l'on veut la desc d'un champ
\return resource \return resource
*/ */
function desc_table($table,$field="") function DDLDescTable($table,$field="")
{ {
// $this->results = $this->query("DESC ".$table." ".$field); // $this->results = $this->query("DESC ".$table." ".$field);
$this->results = $this->query("DESC ".$table." ".$field); $this->results = $this->query("DESC ".$table." ".$field);
return $this->results; return $this->results;
} }
/**
\brief Insère un nouveau champ dans une table
\param table Nom de la table
\param field_name Nom du champ à insérer
\param field_desc tableau associatif de description duchamp à insérer[nom du paramètre][valeur du paramètre]
\param field_position Optionnel ex.: "after champtruc"
\return true/false selon si requête a provoqué un erreur mysql ou pas
*/
function DDLAddField($table,$field_name,$field_desc,$field_position="")
{
// clés recherchées dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
// ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
$sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
$sql .= $field_desc['type'];
if( eregi("^[^ ]",$field_desc['value']))
$sql .= "(".$field_desc['value'].")";
if( eregi("^[^ ]",$field_desc['attribute']))
$sql .= " ".$field_desc['attribute'];
if( eregi("^[^ ]",$field_desc['null']))
$sql .= " ".$field_desc['null'];
if( eregi("^[^ ]",$field_desc['default']))
if(eregi("null",$field_desc['default']))
$sql .= " default ".$field_desc['default'];
else
$sql .= " default '".$field_desc['default']."'";
if( eregi("^[^ ]",$field_desc['extra']))
$sql .= " ".$field_desc['extra'];
$sql .= " ".$field_position;
if(! $this -> query($sql))
return false;
else
return true;
}
} }
?> ?>

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-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org> * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
* *
@ -44,7 +44,7 @@ class DoliDb
{ {
var $db; // Handler de base var $db; // Handler de base
var $type='pgsql'; // Nom du gestionnaire var $type='pgsql'; // Nom du gestionnaire
var $versionmin=array(8,1,0); var $versionmin=array(8,1,0); // Version min database
var $results; // Resultset de la dernière requete var $results; // Resultset de la dernière requete
@ -121,6 +121,7 @@ class DoliDb
else else
{ {
$this->database_selected = 0; $this->database_selected = 0;
$this->database_name = '';
$this->ok = 0; $this->ok = 0;
$this->error=$this->error(); $this->error=$this->error();
dolibarr_syslog("DoliDB::DoliDB : Erreur Select_db"); dolibarr_syslog("DoliDB::DoliDB : Erreur Select_db");
@ -270,7 +271,12 @@ class DoliDb
if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query)) if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query))
{ {
// Si requete utilisateur, on la sauvegarde ainsi que son resultset // Si requete utilisateur, on la sauvegarde ainsi que son resultset
if (! $ret) $this->lastqueryerror = $query; if (! $ret)
{
$this->lastqueryerror = $query;
$this->lasterror = $this->error();
$this->lasterrno = $this->errno();
}
$this->lastquery=$query; $this->lastquery=$query;
$this->results = $ret; $this->results = $ret;
} }
@ -290,66 +296,6 @@ class DoliDb
return pg_fetch_object($resultset); return pg_fetch_object($resultset);
} }
// Next function are not required. Only minor features use them.
/**
\brief Renvoie l'id de la connection
\return string Id connection
*/
function getConnectId()
{
return '?';
}
/**
\brief Renvoie la commande sql qui donne les droits à user sur les tables
\param databaseuse User à autoriser
\return string Requete sql
*/
function getGrantForUserQuery($databaseuser)
{
// Scan tables pour générer le grant
$dir = DOL_DOCUMENT_ROOT."/pgsql/tables";
$handle=opendir($dir);
$table_list="";
while (($file = readdir($handle))!==false)
{
if (! ereg("\.key\.sql",$file) && ereg("^(.*)\.sql",$file,$reg))
{
if ($table_list) {
$table_list.=", ".$reg[0];
}
else {
$table_list.=$reg[0];
}
}
}
// Genere le grant_query
$grant_query = 'GRANT ALL ON '.$table_list.' TO "'.$databaseuser.'";';
return $grant_query;
}
/**
\brief Création d'une nouvelle base de donnée
\param database nom de la database à créer
\return resource resource définie si ok, null si ko
\remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated
*/
function create_db($database)
{
$ret=$this->query('CREATE DATABASE '.$database.';');
return $ret;
}
/** /**
\brief Renvoie les données dans un tableau. \brief Renvoie les données dans un tableau.
\param resultset Curseur de la requete voulue \param resultset Curseur de la requete voulue
@ -435,8 +381,8 @@ class DoliDb
\brief Formatage (par la base de données) d'un champ de la base au format tms ou Date (YYYY-MM-DD HH:MM:SS) \brief Formatage (par la base de données) d'un champ de la base au format tms ou Date (YYYY-MM-DD HH:MM:SS)
afin de retourner une donnée toujours au format universel date tms unix. afin de retourner une donnée toujours au format universel date tms unix.
Fonction à utiliser pour générer les SELECT. Fonction à utiliser pour générer les SELECT.
\param param \param param Date au format text à convertir
\return date date au format tms. \return date Date au format tms.
*/ */
function pdate($param) function pdate($param)
{ {
@ -478,14 +424,32 @@ class DoliDb
} }
/** /**
\brief Renvoie la derniere requete en erreur() \brief Renvoie la derniere requete en erreur
\return lastqueryerror \return string lastqueryerror
*/ */
function lastqueryerror() function lastqueryerror()
{ {
return $this->lastqueryerror; return $this->lastqueryerror;
} }
/**
\brief Renvoie le libelle derniere erreur
\return string lasterror
*/
function lasterror()
{
return $this->lasterror;
}
/**
\brief Renvoie le code derniere erreur
\return string lasterrno
*/
function lasterrno()
{
return $this->lasterrno;
}
/** /**
\brief Renvoie le code erreur generique de l'operation precedente. \brief Renvoie le code erreur generique de l'operation precedente.
\return error_num (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...) \return error_num (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...)
@ -534,23 +498,82 @@ class DoliDb
$nbre = pg_num_rows($result); $nbre = pg_num_rows($result);
$row = pg_fetch_result($result,0,0); $row = pg_fetch_result($result,0,0);
return $row; return $row;
// Next function are not required. Only minor features use them.
//--------------------------------------------------------------
/**
\brief Renvoie l'id de la connection
\return string Id connection
*/
function getConnectId()
{
return '?';
}
/**
\brief Renvoie la commande sql qui donne les droits à user sur toutes les tables
\param databaseuser User à autoriser
\return string Requete sql
*/
function getGrantForUserQuery($databaseuser)
{
// Scan tables pour générer le grant
$dir = DOL_DOCUMENT_ROOT."/pgsql/tables";
$handle=opendir($dir);
$table_list="";
while (($file = readdir($handle))!==false)
{
if (! ereg("\.key\.sql",$file) && ereg("^(.*)\.sql",$file,$reg))
{
if ($table_list) {
$table_list.=", ".$reg[0];
}
else {
$table_list.=$reg[0];
}
}
}
// Genere le grant_query
$grant_query = 'GRANT ALL ON '.$table_list.' TO "'.$databaseuser.'";';
return $grant_query;
} }
/** /**
\brief Retourne le dsn pear \brief Retourne le dsn pear
\return dsn \return dsn
*/ */
function getdsn($db_type,$db_user,$db_pass,$db_host,$db_name) function getDSN($db_type,$db_user,$db_pass,$db_host,$db_name)
{ {
return $db_type.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name; return $db_type.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name;
} }
/**
\brief Création d'une nouvelle base de donnée
\param database nom de la database à créer
\return resource resource définie si ok, null si ko
\remarks Ne pas utiliser les fonctions xxx_create_db (xxx=mysql, ...) car elles sont deprecated
*/
function DDLCreateDb($database)
{
$ret=$this->query('CREATE DATABASE '.$database.';');
return $ret;
}
}
/** /**
\brief Liste des tables dans une database. \brief Liste des tables dans une database.
\param database Nom de la database \param database Nom de la database
\return resource \return resource
*/ */
function list_tables($database) function DDLListTables($database)
{ {
$this->results = pg_query($this->db, "SHOW TABLES;"); $this->results = pg_query($this->db, "SHOW TABLES;");
return $this->results; return $this->results;