From 898290522460e418f3ee6b1699434a9341fd8f87 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 14 Jun 2007 22:28:53 +0000 Subject: [PATCH] Optimisation performances migration --- htdocs/install/upgrade.php | 59 +++++++++++++++-------------- htdocs/lib/databases/mysql.lib.php | 16 +++++--- htdocs/lib/databases/mysqli.lib.php | 16 +++++--- 3 files changed, 51 insertions(+), 40 deletions(-) diff --git a/htdocs/install/upgrade.php b/htdocs/install/upgrade.php index 663b74902a4..0c451f7cafd 100644 --- a/htdocs/install/upgrade.php +++ b/htdocs/install/upgrade.php @@ -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 ''.$sqldrop.";\n"; - } - $createsql=eregi_replace('CONSTRAINT `'.$reg[1].'`','XXX',$createsql); - $i++; - } - $db->free($resql); - } - } - } + { + //print "x".$val."
"; + $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 ''.$sqldrop.";\n"; + } + $createsql=eregi_replace('CONSTRAINT `'.$reg[1].'`','XXX',$createsql); + $i++; + } + $db->free($resql); + } + else + { + // \TODO Ignore only error DB_ERROR_NOSUCHTABLE + } + } } } diff --git a/htdocs/lib/databases/mysql.lib.php b/htdocs/lib/databases/mysql.lib.php index 93f22c99734..a0787311f64 100644 --- a/htdocs/lib/databases/mysql.lib.php +++ b/htdocs/lib/databases/mysql.lib.php @@ -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; } /** diff --git a/htdocs/lib/databases/mysqli.lib.php b/htdocs/lib/databases/mysqli.lib.php index aab0fadf300..3a844fb6cab 100644 --- a/htdocs/lib/databases/mysqli.lib.php +++ b/htdocs/lib/databases/mysqli.lib.php @@ -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; } /**