2
0
forked from Wavyzz/dolibarr

Qual: Les codes erreurs des requetes est remplac par l'quivalent gnrique, ce qui permet compatibilit des gestions d'erreurs entre mysql et pgsql.

This commit is contained in:
Laurent Destailleur
2005-02-15 22:08:51 +00:00
parent 264d8b3b0f
commit 18834d28c6
2 changed files with 35 additions and 22 deletions

View File

@@ -135,7 +135,7 @@ if ($_POST["action"] == "set")
} }
else else
{ {
if ($db->errno() == 1050) if ($db->errno() == DB_ERROR_TABLE_ALREADY_EXISTS)
{ {
//print "<td>D<>j<EFBFBD> existante</td></tr>"; //print "<td>D<>j<EFBFBD> existante</td></tr>";
$table_exists = 1; $table_exists = 1;
@@ -195,7 +195,7 @@ if ($_POST["action"] == "set")
} }
else else
{ {
if ($db->errno() == 1062) if ($db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS)
{ {
// print "<tr><td>Insertion ligne : $buffer</td><td> // print "<tr><td>Insertion ligne : $buffer</td><td>
} }
@@ -228,7 +228,7 @@ if ($_POST["action"] == "set")
} }
else else
{ {
if ($db->errno() == 1062) if ($db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS)
{ {
// print "<tr><td>Insertion ligne : $buffer</td><td>D<>ja existante</td></tr>"; // print "<tr><td>Insertion ligne : $buffer</td><td>D<>ja existante</td></tr>";
} }

View File

@@ -49,9 +49,6 @@ class DoliDb
var $ok; 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. \brief Ouverture d'une connection vers le serveur et une database.
@@ -457,7 +454,37 @@ class DoliDb
} }
/** /**
\brief Renvoie le texte de l'erreur mysql 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...)
*/
function errno()
{
static $error_regexps;
if (empty($error_regexps)) {
$error_regexps = array(
'/(Table does not exist\.|Relation [\"\'].*[\"\'] does not exist|sequence does not exist|class ".+" not found)$/' => DB_ERROR_NOSUCHTABLE,
'/table [\"\'].*[\"\'] does not exist/' => DB_ERROR_NOSUCHTABLE,
'/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*/' => DB_ERROR_ALREADY_EXISTS,
'/divide by zero$/' => DB_ERROR_DIVZERO,
'/pg_atoi: error in .*: can\'t parse /' => DB_ERROR_INVALID_NUMBER,
'/ttribute [\"\'].*[\"\'] not found$|Relation [\"\'].*[\"\'] does not have attribute [\"\'].*[\"\']/' => DB_ERROR_NOSUCHFIELD,
'/parser: parse error at or near \"/' => DB_ERROR_SYNTAX,
'/referential integrity violation/' => DB_ERROR_CONSTRAINT
);
}
foreach ($error_regexps as $regexp => $code) {
if (preg_match($regexp, pg_last_error($this->db))) {
return $code;
}
}
return DB_ERROR;
}
}
/**
\brief Renvoie le texte de l'erreur pgsql de l'operation precedente.
\return error_text \return error_text
*/ */
@@ -466,20 +493,6 @@ class DoliDb
return pg_last_error($this->db); 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<EFBFBD>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<65>r<EFBFBD> par le dernier INSERT. \brief Obtient l'id gen<65>r<EFBFBD> par le dernier INSERT.
\return id \return id
@@ -487,7 +500,7 @@ class DoliDb
function last_insert_id($tab) function last_insert_id($tab)
{ {
$result = pg_query($this->db,"select max(rowid) from ".$tab." ;"); $result = pg_query($this->db,"SELECT MAX(rowid) FROM ".$tab." ;");
$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;