/** * PMA_insertIntoTargetTable() inserts missing rows in the target table using $array_insert[$matching_table_index] * * @todo this function uses undefined variables and is possibly broken: $matching_tables, * $matching_tables_fields, $remove_indexes_array, $matching_table_keys * * @param array $matching_table matching table names * @param string $src_db name of source database * @param string $trg_db name of target database * @param mixed $src_link connection established with source server * @param mixed $trg_link connection established with target server * @param array $table_fields field names of a table * @param array &$array_insert * @param int $matching_table_index index of matching table in matching_table_array * @param array $matching_tables_keys field names that are keys in the matching table * @param array $source_columns source column information * @param array &$add_column_array column names that are to be added in target table * @param array $criteria criteria like type, null, collation, default etc * @param array $target_tables_keys field names that are keys in the target table * @param array $uncommon_tables table names that are present in source db but not in targt db * @param array &$uncommon_tables_fields field names of the uncommon tables * @param array $uncommon_cols column names that are present in target table and not in source table * @param array &$alter_str_array column names that are to be altered * @param array &$source_indexes column names on which indexes are made in source table * @param array &$target_indexes column names on which indexes are made in target table * @param array &$add_indexes_array column names on which index is to be added in target table * @param array &$alter_indexes_array column names whose indexes are to be altered. Only index name and uniqueness of an index can be changed * @param array &$delete_array rows that are to be deleted * @param array &$update_array rows that are to be updated in target * @param bool $display */ function PMA_insertIntoTargetTable($matching_table, $src_db, $trg_db, $src_link, $trg_link, $table_fields, &$array_insert, $matching_table_index, $matching_tables_keys, $source_columns, &$add_column_array, $criteria, $target_tables_keys, $uncommon_tables, &$uncommon_tables_fields, $uncommon_cols, &$alter_str_array, &$source_indexes, &$target_indexes, &$add_indexes_array, &$alter_indexes_array, &$delete_array, &$update_array, $display) { if (isset($array_insert[$matching_table_index])) { if (sizeof($array_insert[$matching_table_index])) { for ($insert_row = 0; $insert_row < sizeof($array_insert[$matching_table_index]); $insert_row++) { if (isset($array_insert[$matching_table_index][$insert_row][$matching_tables_keys[$matching_table_index][0]])) { $select_query = "SELECT * FROM " . PMA_backquote($src_db) . "." . PMA_backquote($matching_table[$matching_table_index]) . " WHERE "; for ($i = 0; $i < sizeof($matching_tables_keys[$matching_table_index]); $i++) { $select_query .= $matching_tables_keys[$matching_table_index][$i] . "='"; $select_query .= $array_insert[$matching_table_index][$insert_row][$matching_tables_keys[$matching_table_index][$i]] . "'"; if ($i < sizeof($matching_tables_keys[$matching_table_index]) - 1) { $select_query .= " AND "; } } $select_query .= "; "; $result = PMA_DBI_fetch_result($select_query, null, null, $src_link); $insert_query = "INSERT INTO " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_table[$matching_table_index]) . " ("; for ($field_index = 0; $field_index < sizeof($table_fields[$matching_table_index]); $field_index++) { $insert_query .= PMA_backquote($table_fields[$matching_table_index][$field_index]); $is_fk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $trg_db . "'\n AND TABLE_NAME = '" . $matching_table[$matching_table_index] . "'AND COLUMN_NAME = '" . $table_fields[$matching_table_index][$field_index] . "' AND TABLE_NAME <> REFERENCED_TABLE_NAME;"; $is_fk_result = PMA_DBI_fetch_result($is_fk_query, null, null, $trg_link); if (sizeof($is_fk_result) > 0) { for ($j = 0; $j < sizeof($is_fk_result); $j++) { $table_index = array_keys($matching_table, $is_fk_result[$j]['REFERENCED_TABLE_NAME']); if (isset($alter_str_array[$table_index[0]])) { PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, $source_columns, $alter_str_array, $matching_tables_fields, $criteria, $matching_tables_keys, $target_tables_keys, $table_index[0], $display); unset($alter_str_array[$table_index[0]]); } if (isset($uncommon_columns[$table_index[0]])) { PMA_removeColumnsFromTargetTable($trg_db, $trg_link, $matching_tables, $uncommon_columns, $table_index[0], $display); unset($uncommon_columns[$table_index[0]]); } if (isset($add_column_array[$table_index[0]])) { PMA_findDeleteRowsFromTargetTables($delete_array, $matching_tables, $table_index[0], $target_tables_keys, $matching_tables_keys, $trg_db, $trg_link, $src_db, $src_link); if (isset($delete_array[$table_index[0]])) { PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $table_index[0], $target_tables_keys, $delete_array, $display); unset($delete_array[$table_index[0]]); } PMA_addColumnsInTargetTable($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns, $add_column_array, $matching_tables_fields, $criteria, $matching_tables_keys, $target_tables_keys, $uncommon_tables, $uncommon_tables_fields, $table_index[0], $uncommon_cols, $display); unset($add_column_array[$table_index[0]]); } if (isset($add_indexes_array[$table_index[0]]) || isset($remove_indexes_array[$table_index[0]]) || isset($alter_indexes_array[$table_index[0]])) { PMA_applyIndexesDiff($trg_db, $trg_link, $matching_tables, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array, $remove_indexes_array, $table_index[0], $display); unset($add_indexes_array[$table_index[0]]); unset($alter_indexes_array[$table_index[0]]); unset($remove_indexes_array[$table_index[0]]); } if (isset($update_array[$table_index[0]])) { PMA_updateTargetTables($matching_tables, $update_array, $src_db, $trg_db, $trg_link, $table_index[0], $matching_table_keys, $display); unset($update_array[$table_index[0]]); } if (isset($array_insert[$table_index[0]])) { PMA_insertIntoTargetTable($matching_table, $src_db, $trg_db, $src_link, $trg_link, $table_fields, $array_insert, $table_index[0], $matching_tables_keys, $source_columns, $add_column_array, $criteria, $target_tables_keys, $uncommon_tables, $uncommon_tables_fields, $uncommon_cols, $alter_str_array, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array, $delete_array, $update_array, $display); unset($array_insert[$table_index[0]]); } } } if ($field_index < sizeof($table_fields[$matching_table_index]) - 1) { $insert_query .= ", "; } } $insert_query .= ") VALUES("; if (sizeof($table_fields[$matching_table_index]) == 1) { $insert_query .= "'" . PMA_sqlAddSlashes($result[0]) . "'"; } else { for ($field_index = 0; $field_index < sizeof($table_fields[$matching_table_index]); $field_index++) { if (isset($result[0][$table_fields[$matching_table_index][$field_index]])) { $insert_query .= "'" . PMA_sqlAddSlashes($result[0][$table_fields[$matching_table_index][$field_index]]) . "'"; } else { $insert_query .= "'NULL'"; } if ($field_index < sizeof($table_fields[$matching_table_index]) - 1) { $insert_query .= " ,"; } } } $insert_query .= ");"; if ($display == true) { PMA_displayQuery($insert_query); } PMA_DBI_try_query($insert_query, $trg_link, 0); } } } } }
} if (isset($alter_str_array[$p])) { PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, $source_columns, $alter_str_array, $matching_tables_fields, $criteria, $matching_tables_keys, $target_tables_keys, $p, true); unset($alter_str_array[$p]); } if (!empty($add_column_array[$p])) { PMA_findDeleteRowsFromTargetTables($delete_array, $matching_tables, $p, $target_tables_keys, $matching_tables_keys, $trg_db, $trg_link, $src_db, $src_link); if (isset($delete_array[$p])) { PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $p, $target_tables_keys, $delete_array, true); unset($delete_array[$p]); } PMA_addColumnsInTargetTable($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns, $add_column_array, $matching_tables_fields, $criteria, $matching_tables_keys, $target_tables_keys, $uncommon_tables, $uncommon_tables_fields, $p, $uncommon_cols, true); unset($add_column_array[$p]); } if (isset($uncommon_columns[$p])) { PMA_removeColumnsFromTargetTable($trg_db, $trg_link, $matching_tables, $uncommon_columns, $p, true); unset($uncommon_columns[$p]); } if (isset($matching_table_structure_diff) && (isset($add_indexes_array[$matching_table_structure_diff[$p]]) || isset($remove_indexes_array[$matching_table_structure_diff[$p]]) || isset($alter_indexes_array[$matching_table_structure_diff[$p]]))) { PMA_applyIndexesDiff($trg_db, $trg_link, $matching_tables, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array, $remove_indexes_array, $matching_table_structure_diff[$p], true); unset($add_indexes_array[$matching_table_structure_diff[$p]]); unset($alter_indexes_array[$matching_table_structure_diff[$p]]); unset($remove_indexes_array[$matching_table_structure_diff[$p]]); } PMA_updateTargetTables($matching_tables, $update_array, $src_db, $trg_db, $trg_link, $p, $matching_tables_keys, true); PMA_insertIntoTargetTable($matching_tables, $src_db, $trg_db, $src_link, $trg_link, $matching_tables_fields, $insert_array, $p, $matching_tables_keys, $matching_tables_keys, $source_columns, $add_column_array, $criteria, $target_tables_keys, $uncommon_tables, $uncommon_tables_fields, $uncommon_cols, $alter_str_array, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array, $delete_array, $update_array, true); } /** * Creating and populating tables present in source but absent from target database. */ for ($q = 0; $q < sizeof($source_tables_uncommon); $q++) {