problems synchronizing when the number of columns is different for the same index name; code cleanup; typos

This commit is contained in:
Marc Delisle
2009-12-12 15:57:58 +00:00
parent e9777b1261
commit 80aeba75f4
2 changed files with 48 additions and 35 deletions

View File

@@ -1213,7 +1213,7 @@ function PMA_removeColumnsFromTargetTable($trg_db, $trg_link, $matching_tables,
* @param $source_indexes array containing the indexes of the source table * @param $source_indexes array containing the indexes of the source table
* @param $target_indexes array containing the indexes of the target table * @param $target_indexes array containing the indexes of the target table
* @param $add_indexes_array array containing the name of the column on which the index is to be added in the target table * @param $add_indexes_array array containing the name of the column on which the index is to be added in the target table
* @param $alter_indexes_array array containing the name of the column on which the index is to be altered * @param $alter_indexes_array array containing the key name which needs to be altered
* @param $remove_indexes_array array containing the key name of the index which is to be removed from the target table * @param $remove_indexes_array array containing the key name of the index which is to be removed from the target table
* @param $table_counter number of the matching table * @param $table_counter number of the matching table
*/ */
@@ -1228,14 +1228,16 @@ function PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matchi
$found = false; $found = false;
$z = 0; $z = 0;
//Compares key name and non_unique characteristic of source indexes with target indexes //Compares key name and non_unique characteristic of source indexes with target indexes
/*
* @todo compare the length of each sub part
*/
while (($z <= sizeof($target_indexes[$table_counter])) && ($found == false)) while (($z <= sizeof($target_indexes[$table_counter])) && ($found == false))
{ {
if($source_indexes[$table_counter][$a]['Column_name'] == $target_indexes[$table_counter][$z]['Column_name']) { if (isset($source_indexes[$table_counter][$a]) && isset($target_indexes[$table_counter][$z]) && $source_indexes[$table_counter][$a]['Key_name'] == $target_indexes[$table_counter][$z]['Key_name']) {
$found = true; $found = true;
if(($source_indexes[$table_counter][$a]['Key_name'] != $target_indexes[$table_counter][$z]['Key_name']) || ($source_indexes[$table_counter][$a]['Non_unique'] != $target_indexes[$table_counter][$z]['Non_unique'])) { if (($source_indexes[$table_counter][$a]['Column_name'] != $target_indexes[$table_counter][$z]['Column_name']) || ($source_indexes[$table_counter][$a]['Non_unique'] != $target_indexes[$table_counter][$z]['Non_unique'])) {
if (! (($source_indexes[$table_counter][$a]['Key_name'] == "PRIMARY") || ($target_indexes[$table_counter][$z]['Key_name'] == 'PRIMARY'))) { if (! (($source_indexes[$table_counter][$a]['Key_name'] == "PRIMARY") || ($target_indexes[$table_counter][$z]['Key_name'] == 'PRIMARY'))) {
$alter_indexes_array[$table_counter][] = $source_indexes[$table_counter][$a]['Column_name']; $alter_indexes_array[$table_counter][] = $source_indexes[$table_counter][$a]['Key_name'];
$alter_indexes_array[$table_counter][] = $target_indexes[$table_counter][$z]['Key_name'];
} }
} }
} }
@@ -1248,7 +1250,7 @@ function PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matchi
} }
} }
//Finds indexes that are made on target table but not on source table //Finds indexes that exist on target table but not on source table
for ($b = 0; $b < sizeof($target_indexes[$table_counter]); $b++) for ($b = 0; $b < sizeof($target_indexes[$table_counter]); $b++)
{ {
$found = false; $found = false;
@@ -1308,29 +1310,36 @@ function PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_ind
} }
} }
//Alter indexes of target table //Alter indexes of target table
if (isset($alter_indexes_array[$table_counter])) { if (isset($alter_indexes_array[$table_counter])) {
$query = "ALTER TABLE " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_tables[$table_counter]) . " DROP INDEX " ; $query = "ALTER TABLE " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_tables[$table_counter]);
for ($a = 0; $a < sizeof($source_indexes[$table_counter]); $a++) for ($a = 0; $a < sizeof($alter_indexes_array[$table_counter]); $a++) {
{
if (isset($alter_indexes_array[$table_counter][$a])) { if (isset($alter_indexes_array[$table_counter][$a])) {
$query .= $alter_indexes_array[$table_counter][$a+1] . " , ADD "; $query .= ' DROP INDEX ' . PMA_backquote($alter_indexes_array[$table_counter][$a]) . " , ADD ";
for ($z = 0; $z < sizeof($source_indexes[$table_counter]); $z++) $got_first_index_column = false;
{ for ($z = 0; $z < sizeof($source_indexes[$table_counter]); $z++) {
if($source_indexes[$table_counter][$z]['Column_name'] == $alter_indexes_array[$table_counter][$a]) { if ($source_indexes[$table_counter][$z]['Key_name'] == $alter_indexes_array[$table_counter][$a]) {
if (! $got_first_index_column) {
if ($source_indexes[$table_counter][$z]['Non_unique'] == '0') { if ($source_indexes[$table_counter][$z]['Non_unique'] == '0') {
$query .= " UNIQUE "; $query .= " UNIQUE ";
} }
$query .= " INDEX " .$source_indexes[$table_counter][$z]['Key_name'] . " (" . $alter_indexes_array[$table_counter][$a] . " );"; $query .= " INDEX " . PMA_backquote($source_indexes[$table_counter][$z]['Key_name']) . " (" . PMA_backquote($source_indexes[$table_counter][$z]['Column_name']);
$got_first_index_column = true;
} else {
// another column for this index
$query .= ', ' . PMA_backquote($source_indexes[$table_counter][$z]['Column_name']);
}
}
}
$query .= " )";
}
}
if ($display == true) { if ($display == true) {
echo '<p>' . $query . '</p>'; echo '<p>' . $query . '</p>';
} }
PMA_DBI_try_query($query, $trg_link, 0); PMA_DBI_try_query($query, $trg_link, 0);
} }
} //Removes indexes from target table
}
}
}
//Removes indexes from targe table
if(isset($remove_indexes_array[$table_counter])) { if(isset($remove_indexes_array[$table_counter])) {
$drop_index_query = "ALTER TABLE " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_tables[$table_counter]); $drop_index_query = "ALTER TABLE " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_tables[$table_counter]);
for ($a = 0; $a < sizeof($target_indexes[$table_counter]); $a++) for ($a = 0; $a < sizeof($target_indexes[$table_counter]); $a++)

View File

@@ -321,7 +321,7 @@ if ((isset($_REQUEST['submit_connect']))) {
<td align="center">'; <td align="center">';
/** /**
* Calculating the number of alter columns, number of columns to be added, number of columns to be removed, * Calculating the number of alter columns, number of columns to be added, number of columns to be removed,
* number of index to added and renmoved. * number of index to be added and removed.
*/ */
$num_alter_cols = 0; $num_alter_cols = 0;
$num_insert_cols = 0; $num_insert_cols = 0;
@@ -344,6 +344,10 @@ if ((isset($_REQUEST['submit_connect']))) {
if (isset($remove_indexes_array[$i])) { if (isset($remove_indexes_array[$i])) {
$num_remove_index = sizeof($remove_indexes_array[$i]); $num_remove_index = sizeof($remove_indexes_array[$i]);
} }
if (isset($alter_indexes_array[$i])) {
$num_add_index += sizeof($alter_indexes_array[$i]);
$num_remove_index += sizeof($alter_indexes_array[$i]);
}
/** /**
* Display the red button of structure synchronization if there exists any structure difference or index difference. * Display the red button of structure synchronization if there exists any structure difference or index difference.
*/ */