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
// 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_facture_fourn',
'llx_propal',
@ -148,34 +149,36 @@ if (! isset($_GET["action"]) || $_GET["action"] == "upgrade")
'llx_telephonie_contact_facture',
'llx_telephonie_societe_ligne',
'llx_telephonie_tarif_client');
*/
$listtables = $db->DDLListTables($conf->db->name,'');
foreach ($listtables as $val)
{
$searchTable = '';
$searchTable = $db->DDLListTables($conf->db->name,$val);
if ($searchTable == $val)
{
$sql = "SHOW CREATE TABLE ".$val;
$resql = $db->query($sql);
if (! $resql) dolibarr_print_error($db);
{
$values=$db->fetch_array($resql);
$i=0;
$createsql=$values[1];
while (eregi('CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`',$createsql,$reg) && $i < 100)
{
$sqldrop="ALTER TABLE ".$val." DROP FOREIGN KEY ".$reg[1];
$resqldrop = $db->query($sqldrop);
if ($resqldrop)
{
print '<tr><td colspan="2">'.$sqldrop.";</td></tr>\n";
}
$createsql=eregi_replace('CONSTRAINT `'.$reg[1].'`','XXX',$createsql);
$i++;
}
$db->free($resql);
}
}
}
{
//print "x".$val."<br>";
$sql = "SHOW CREATE TABLE ".$val;
$resql = $db->query($sql);
if ($resql)
{
$values=$db->fetch_array($resql);
$i=0;
$createsql=$values[1];
while (eregi('CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`',$createsql,$reg) && $i < 100)
{
$sqldrop="ALTER TABLE ".$val." DROP FOREIGN KEY ".$reg[1];
$resqldrop = $db->query($sqldrop);
if ($resqldrop)
{
print '<tr><td colspan="2">'.$sqldrop.";</td></tr>\n";
}
$createsql=eregi_replace('CONSTRAINT `'.$reg[1].'`','XXX',$createsql);
$i++;
}
$db->free($resql);
}
else
{
// \TODO Ignore only error DB_ERROR_NOSUCHTABLE
}
}
}
}

View File

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