Optimisation performances migration

This commit is contained in:
Laurent Destailleur 2007-06-14 22:28:53 +00:00
parent 6745bc8950
commit 8982905224
3 changed files with 51 additions and 40 deletions

View File

@ -138,7 +138,8 @@ if (! isset($_GET["action"]) || $_GET["action"] == "upgrade")
{ {
// Suppression vieilles contraintes sans noms et en doubles // Suppression vieilles contraintes sans noms et en doubles
// Les contraintes indesirables ont un nom qui commence par 0_ ou se termine par ibfk_999 // Les contraintes indesirables ont un nom qui commence par 0_ ou se termine par ibfk_999
$listtables=array( 'llx_product_fournisseur_price', /*
$listtables=array( 'llx_product_fournisseur_price',
'llx_fichinter', 'llx_fichinter',
'llx_facture_fourn', 'llx_facture_fourn',
'llx_propal', 'llx_propal',
@ -148,34 +149,36 @@ if (! isset($_GET["action"]) || $_GET["action"] == "upgrade")
'llx_telephonie_contact_facture', 'llx_telephonie_contact_facture',
'llx_telephonie_societe_ligne', 'llx_telephonie_societe_ligne',
'llx_telephonie_tarif_client'); 'llx_telephonie_tarif_client');
*/
$listtables = $db->DDLListTables($conf->db->name,'');
foreach ($listtables as $val) foreach ($listtables as $val)
{ {
$searchTable = ''; //print "x".$val."<br>";
$searchTable = $db->DDLListTables($conf->db->name,$val); $sql = "SHOW CREATE TABLE ".$val;
if ($searchTable == $val) $resql = $db->query($sql);
{ if ($resql)
$sql = "SHOW CREATE TABLE ".$val; {
$resql = $db->query($sql); $values=$db->fetch_array($resql);
if (! $resql) dolibarr_print_error($db); $i=0;
{ $createsql=$values[1];
$values=$db->fetch_array($resql); while (eregi('CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`',$createsql,$reg) && $i < 100)
$i=0; {
$createsql=$values[1]; $sqldrop="ALTER TABLE ".$val." DROP FOREIGN KEY ".$reg[1];
while (eregi('CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`',$createsql,$reg) && $i < 100) $resqldrop = $db->query($sqldrop);
{ if ($resqldrop)
$sqldrop="ALTER TABLE ".$val." DROP FOREIGN KEY ".$reg[1]; {
$resqldrop = $db->query($sqldrop); print '<tr><td colspan="2">'.$sqldrop.";</td></tr>\n";
if ($resqldrop) }
{ $createsql=eregi_replace('CONSTRAINT `'.$reg[1].'`','XXX',$createsql);
print '<tr><td colspan="2">'.$sqldrop.";</td></tr>\n"; $i++;
} }
$createsql=eregi_replace('CONSTRAINT `'.$reg[1].'`','XXX',$createsql); $db->free($resql);
$i++; }
} else
$db->free($resql); {
} // \TODO Ignore only error DB_ERROR_NOSUCHTABLE
} }
} }
} }
} }

View File

@ -674,19 +674,23 @@ class DoliDb
/** /**
\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
\param table Nom de la table à rechercher \param table Filtre sur tables à rechercher
\return array Tableau des \return array Tableau des tables de la base
*/ */
function DDLListTables($database, $table='') function DDLListTables($database, $table='')
{ {
$listtables=array();
$like = ''; $like = '';
if ($table) $like = "LIKE '".$table."'" if ($table) $like = "LIKE '".$table."'";
$result = mysql_query($this->db, "SHOW TABLES FROM ".$database." ".$like." "); $sql="SHOW TABLES FROM ".$database." ".$like.";";
//print $sql;
$result = mysql_query($this->db, $sql);
while($row = mysql_fetch_array($result)) while($row = mysql_fetch_array($result))
{ {
$this->results = $row[0]; $listtables[] = $row[0];
} }
return $this->results; return $listtables;
} }
/** /**

View File

@ -678,19 +678,23 @@ class DoliDb
/** /**
\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
\param table Nom de la table à rechercher \param table Filtre sur tables à rechercher
\return array Tableau des \return array Tableau des tables de la base
*/ */
function DDLListTables($database, $table='') function DDLListTables($database, $table='')
{ {
$listtables=array();
$like = ''; $like = '';
if ($table) $like = "LIKE '".$table."'" if ($table) $like = "LIKE '".$table."'";
$result = mysqli_query($this->db, "SHOW TABLES FROM ".$database." ".$like." "); $sql="SHOW TABLES FROM ".$database." ".$like.";";
//print $sql;
$result = mysqli_query($this->db, $sql);
while($row = mysqli_fetch_array($result)) while($row = mysqli_fetch_array($result))
{ {
$this->results = $row[0]; $listtables[] = $row[0];
} }
return $this->results; return $listtables;
} }
/** /**