diff --git a/htdocs/admin/produit.php b/htdocs/admin/produit.php index 9dba914b6e8..816d497a480 100644 --- a/htdocs/admin/produit.php +++ b/htdocs/admin/produit.php @@ -50,15 +50,15 @@ else if ($_POST["action"] == 'multiprix_num') } 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()) { $field_desc = array('type'=>'TINYINT','value'=>'4','default'=>'1'); // 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); - print ""; + exit; } // on crée la table societe_prices else @@ -70,7 +70,7 @@ if ($_POST["action"] == 'multiprix') $fields['datec'] = array('type'=>'datetime','default'=> 'null'); $fields['fk_user_author'] = array('type'=>'int','value'=>'11','default'=> 'null'); $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); print ""; @@ -93,8 +93,8 @@ if ($_POST["action"] == 'multiprix') } else if ($_POST["action"] == 'sousproduits') { - $res=$db -> desc_table(MAIN_DB_PREFIX."product_association"); - if(! $db -> fetch_row()) + $res=$db->DDLDescTable(MAIN_DB_PREFIX."product_association"); + if(! $db->fetch_row()) { $table = MAIN_DB_PREFIX."product_association"; $fields['fk_product_pere'] = array('type'=>'int','value'=>'11','null'=> 'not null','default'=> '0'); @@ -102,7 +102,7 @@ else if ($_POST["action"] == 'sousproduits') $fields['qty'] = array('type'=>'double','default'=> 'null'); $keys['idx_product_association_fk_product_pere'] = "fk_product_pere" ; $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); print ""; diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php index 152087f0462..6d985bbe37c 100644 --- a/htdocs/install/etape1.php +++ b/htdocs/install/etape1.php @@ -424,7 +424,7 @@ if ($_POST["action"] == "set") if ($db->connected) { - if ($db->create_db($dolibarr_main_db_name)) + if ($db->DDLCreateDb($dolibarr_main_db_name)) { print ''; print $langs->trans("DatabaseCreation").' : '; diff --git a/htdocs/lib/databases/mysql.lib.php b/htdocs/lib/databases/mysql.lib.php index 2de269b40bb..0b03da31323 100644 --- a/htdocs/lib/databases/mysql.lib.php +++ b/htdocs/lib/databases/mysql.lib.php @@ -43,7 +43,7 @@ class DoliDb var $type='mysql'; // Nom du gestionnaire var $forcecharset='latin1'; 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 @@ -190,6 +190,7 @@ class DoliDb \param passwd mot de passe \param name nom de la database (ne sert pas sous mysql, sert sous pgsql) \return resource handler d'accès à la base + \seealso close */ 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. \return resource + \seealso connect */ function close() { @@ -578,14 +557,59 @@ class DoliDb } /** - \brief Renvoie la commande sql qui donne les droits sur les tables - \return string Requete sql + \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) { 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 \param table Nom de la table @@ -597,7 +621,7 @@ class DoliDb \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="") + 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'); @@ -661,6 +685,19 @@ class DoliDb 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 \param table Nom de la table @@ -669,7 +706,7 @@ class DoliDb \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="") + 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'); @@ -695,40 +732,6 @@ class DoliDb else 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; - } - } ?> diff --git a/htdocs/lib/databases/mysqli.lib.php b/htdocs/lib/databases/mysqli.lib.php index f5da9e7fc6f..19d3969d802 100644 --- a/htdocs/lib/databases/mysqli.lib.php +++ b/htdocs/lib/databases/mysqli.lib.php @@ -43,6 +43,7 @@ class DoliDb var $type='mysqli'; // Nom du gestionnaire var $forcecharset='latin1'; var $forcecollate='latin1_swedish_ci'; + var $versionmin=array(4,1,0); // Version min database var $results; // Resultset de la dernière requete @@ -189,6 +190,7 @@ class DoliDb \param passwd mot de passe \param name nom de la database (ne sert pas sous mysql, sert sous pgsql) \return resource handler d'accès à la base + \seealso close */ 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. \return resource + \seealso connect */ 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. \param resultset Curseur de la requete voulue @@ -696,38 +540,200 @@ class DoliDb 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 \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; } + /** + \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. \param database Nom de la database \return resource */ - function list_tables($database) + function DDLListTables($database) { $this->results = mysqli_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 + + /** + \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 desc_table($table,$field="") + 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. + \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 + \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; + } + } ?> diff --git a/htdocs/lib/databases/pgsql.lib.php b/htdocs/lib/databases/pgsql.lib.php index 32394d4cb13..dea6d84bc13 100644 --- a/htdocs/lib/databases/pgsql.lib.php +++ b/htdocs/lib/databases/pgsql.lib.php @@ -1,7 +1,7 @@ * Copyright (C) 2002-2005 Rodolphe Quiedeville - * Copyright (C) 2004 Laurent Destailleur + * Copyright (C) 2004-2006 Laurent Destailleur * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Benoit Mortier * @@ -36,15 +36,15 @@ /** - \class DoliDb - \brief Classe permettant de gérér la database de dolibarr + \class DoliDb + \brief Classe permettant de gérér la database de dolibarr */ class DoliDb { var $db; // Handler de base 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 @@ -121,6 +121,7 @@ class DoliDb else { $this->database_selected = 0; + $this->database_name = ''; $this->ok = 0; $this->error=$this->error(); dolibarr_syslog("DoliDB::DoliDB : Erreur Select_db"); @@ -270,7 +271,12 @@ class DoliDb if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query)) { // 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->results = $ret; } @@ -281,7 +287,7 @@ class DoliDb /** \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset. \param resultset Curseur de la requete voulue - \return resource + \return resource */ function fetch_object($resultset=0) { @@ -290,66 +296,6 @@ class DoliDb 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. \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) afin de retourner une donnée toujours au format universel date tms unix. Fonction à utiliser pour générer les SELECT. - \param param - \return date date au format tms. + \param param Date au format text à convertir + \return date Date au format tms. */ function pdate($param) { @@ -469,7 +415,7 @@ class DoliDb /** - \brief Renvoie la derniere requete soumise par la methode query() + \brief Renvoie la derniere requete soumise par la methode query() \return lastquery */ function lastquery() @@ -478,14 +424,32 @@ class DoliDb } /** - \brief Renvoie la derniere requete en erreur() - \return lastqueryerror + \brief Renvoie la derniere requete en erreur + \return string lastqueryerror */ function 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. \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); $row = pg_fetch_result($result,0,0); 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 \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; } + + /** + \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. \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;"); return $this->results;