Fix: add database prefix filter

This commit is contained in:
Regis Houssin 2012-01-07 08:36:13 +01:00
parent 602e64282c
commit 59a6e28315

View File

@ -238,45 +238,51 @@ if (! GETPOST("action") || preg_match('/upgrade/i',GETPOST('action')))
&& versioncompare($versioncommande,$versionarray) <= 0) // Si mysql >= 4.0 && versioncompare($versioncommande,$versionarray) <= 0) // Si mysql >= 4.0
{ {
// 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_adherent_options', $listtables=array(
'llx_bank_class', MAIN_DB_PREFIX.'adherent_options',
'llx_c_ecotaxe', MAIN_DB_PREFIX.'bank_class',
'llx_c_methode_commande_fournisseur', // table renamed MAIN_DB_PREFIX.'c_ecotaxe',
'llx_c_input_method'); MAIN_DB_PREFIX.'c_methode_commande_fournisseur', // table renamed
MAIN_DB_PREFIX.'c_input_method'
);
$listtables = $db->DDLListTables($conf->db->name,''); $listtables = $db->DDLListTables($conf->db->name,'');
foreach ($listtables as $val) foreach ($listtables as $val)
{ {
//print "x".$val."<br>"; // Database prefix filter
$sql = "SHOW CREATE TABLE ".$val; if (preg_match('/^'.MAIN_DB_PREFIX.'/', $val))
$resql = $db->query($sql); {
if ($resql) //print "x".$val."<br>";
{ $sql = "SHOW CREATE TABLE ".$val;
$values=$db->fetch_array($resql); $resql = $db->query($sql);
$i=0; if ($resql)
$createsql=$values[1]; {
while (preg_match('/CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`/i',$createsql,$reg) && $i < 100) $values=$db->fetch_array($resql);
{ $i=0;
$sqldrop="ALTER TABLE ".$val." DROP FOREIGN KEY ".$reg[1]; $createsql=$values[1];
$resqldrop = $db->query($sqldrop); while (preg_match('/CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`/i',$createsql,$reg) && $i < 100)
if ($resqldrop) {
{ $sqldrop="ALTER TABLE ".$val." DROP FOREIGN KEY ".$reg[1];
print '<tr><td colspan="2">'.$sqldrop.";</td></tr>\n"; $resqldrop = $db->query($sqldrop);
} if ($resqldrop)
$createsql=preg_replace('/CONSTRAINT `'.$reg[1].'`/i','XXX',$createsql); {
$i++; print '<tr><td colspan="2">'.$sqldrop.";</td></tr>\n";
} }
$db->free($resql); $createsql=preg_replace('/CONSTRAINT `'.$reg[1].'`/i','XXX',$createsql);
} $i++;
else }
{ $db->free($resql);
if ($db->lasterrno() != 'DB_ERROR_NOSUCHTABLE') }
{ else
print '<tr><td colspan="2"><font class="error">'.$sql.' : '.$db->lasterror()."</font></td></tr>\n"; {
} if ($db->lasterrno() != 'DB_ERROR_NOSUCHTABLE')
} {
} print '<tr><td colspan="2"><font class="error">'.$sql.' : '.$db->lasterror()."</font></td></tr>\n";
}
}
}
}
} }
} }