The branch, STABLE has been updated via 2d9f23ba49e6b207c420961f308a45db0ef59c7a (commit) via 3550b5adee887540a44a31bd5654f8c93d98d408 (commit) via b00745d352c89a5e52673e717e6cbef43dc229d6 (commit) via 29455fe79bc9896129d7004e0242c451f4a32cc8 (commit) via ff0ea2f9b960359234fab02a74b156bc9bb1e383 (commit) via cf5faa1dd1bcae329eddb793765ad2ba3e4471dc (commit) via f414a0ec32626c3f0084bd020daba2b4553d244b (commit) via 035c112eafeb57201c63f0b94d7485d41762922f (commit) via 077c10020e349e8c1beb46309098992fde616913 (commit) via dac8d6ce256333ff45b5f46270304b8657452740 (commit) via bc45a1048d2f5ca8a532f774ddb1dd80985dff3d (commit) via 1490533d91e9d3820e78ca4eac7981886eaea2cb (commit) via b289fe082441dc739939b0ba15dae0d9dc6cee92 (commit) via e2b6af5a99b9a053609ff76724fdc4a6a48dd14e (commit) via e7877fba46743be0b351c526ccac216731ab8c1e (commit) via 81f6766f962d6cea3742f3936032d234e6ce9d53 (commit) via b5c45d0d35c203fe1b8e1c720ae8af7e40f4ce6c (commit) via 8219f7c544c8ffd2ba0df2034900a7f591af3219 (commit) via 2e92b86f92df4dc4d295e7ad7250ab4a3c29bbf2 (commit) via ac430ea21d6f49b781a9cda9940a5675d56f168e (commit) via b6f02c7aed3af85a00fbf05c47a5ccade75fa076 (commit) via 0212c7c01562418410c559ca081ef6239e6b13cb (commit) via 849b6818f81cae1d5ae0a6857b6e5839a8b3ea10 (commit) via e51a1cb73df8f3706fe0bb50ccdcae7fa2f893eb (commit) via f674e3dbe952d9c4a7864067d7c286e9b01f527a (commit) via edea25b07b51c2c5e277323f8047fcd82e695f7e (commit) via bd0ad7377e92325d92d1de40ba52b8e89bc19664 (commit) via 2dfd1dca1490959f4ee594eb7de9e3e996fd6b4c (commit) via efc03d8c8cfa354f703c7a40780035efa93235a4 (commit) via cc2fe91e767d2c38855f1bb866d71c4a721b82cd (commit) via 19c0de6be237e3393b65b93ee4ef67ee3be68c18 (commit) via c51353df21ea86afb8b6197b70560489bfee0e1d (commit) via 8721f7b1601295186f4b9df5dee285911c8aaaf7 (commit) via 8170d03d3cd4892f71db9b89cdf442006bcc1167 (commit) via b94febeb89b208e935b58dc80d2b07446d35d9b0 (commit) via d22fae4201f299d4f3fcac1ac4bc136a422c5d26 (commit) via 0b24e6943505fad97e7fba3263bf863cdb7c01dd (commit) via e2cb83aa24e1b750af2a4f83cfdfa9cab043988b (commit) via a691fce64ca56c90d0d4b9af525a785d95eabd6b (commit) via f7cb55cb626158d81ac606927142d8f55444b9ff (commit) via 694c1cdf751e1fcbe2435087e3cea0dcd85ca458 (commit) via d590bccda2409f3d1e168c470a6af3fe38531106 (commit) via bdfd9ead762a3003dcbdbb043a3288bfe1f1eecc (commit) via 0112ff6ba522b6d18fee298357a3fda1d9cea0cf (commit) via d4cce87b263ed00654588fa068c7ec73422fd465 (commit) via a3132f6e91f04dc8f885f4141e6d397460421fa4 (commit) from a8cea1918a48ddde91e52d59c26700d41499fcc8 (commit)
- Log ----------------------------------------------------------------- commit 2d9f23ba49e6b207c420961f308a45db0ef59c7a Merge: a8cea19 3550b5a Author: Marc Delisle marc@infomarc.info Date: Thu Dec 1 12:21:26 2011 -0500
Merge branch 'MAINT_3_4_8' into STABLE
-----------------------------------------------------------------------
Summary of changes: ChangeLog | 29 ++- Documentation.html | 12 +- README | 2 +- browse_foreigners.php | 5 + db_structure.php | 64 +++- import.php | 2 +- js/db_operations.js | 2 +- js/db_search.js | 24 +- js/functions.js | 68 ++-- js/sql.js | 5 + js/tbl_change.js | 19 +- js/tbl_structure.js | 5 + libraries/Config.class.php | 2 +- libraries/Error.class.php | 2 +- libraries/auth/cookie.auth.lib.php | 4 + libraries/auth/http.auth.lib.php | 4 + libraries/common.lib.php | 5 +- libraries/db_info.inc.php | 4 + libraries/import/ods.php | 3 - libraries/import/xml.php | 3 - libraries/select_lang.lib.php | 2 +- libraries/server_synchronize.lib.php | 639 ++++++++++++++++--------------- libraries/sqlparser.data.php | 3 +- libraries/vendor_config.php | 6 + po/af.po | 2 +- po/ar.po | 2 +- po/az.po | 2 +- po/be.po | 2 +- po/be@latin.po | 2 +- po/bg.po | 16 +- po/bn.po | 2 +- po/br.po | 2 +- po/bs.po | 2 +- po/ca.po | 2 +- po/cs.po | 2 +- po/cy.po | 2 +- po/da.po | 2 +- po/de.po | 2 +- po/el.po | 2 +- po/en_GB.po | 2 +- po/es.po | 2 +- po/et.po | 2 +- po/eu.po | 79 +++-- po/fa.po | 2 +- po/fi.po | 2 +- po/fr.po | 2 +- po/gl.po | 2 +- po/he.po | 2 +- po/hi.po | 2 +- po/hr.po | 2 +- po/hu.po | 95 ++++-- po/id.po | 2 +- po/it.po | 2 +- po/ja.po | 2 +- po/ka.po | 2 +- po/ko.po | 2 +- po/lt.po | 2 +- po/lv.po | 2 +- po/mk.po | 2 +- po/ml.po | 2 +- po/mn.po | 2 +- po/ms.po | 2 +- po/nb.po | 2 +- po/nl.po | 2 +- po/pl.po | 2 +- po/pt.po | 2 +- po/pt_BR.po | 2 +- po/ro.po | 4 +- po/ru.po | 2 +- po/si.po | 2 +- po/sk.po | 2 +- po/sl.po | 2 +- po/sq.po | 2 +- po/sr.po | 2 +- po/sr@latin.po | 2 +- po/sv.po | 2 +- po/ta.po | 2 +- po/te.po | 2 +- po/th.po | 2 +- po/tr.po | 2 +- po/tt.po | 2 +- po/ug.po | 2 +- po/uk.po | 2 +- po/ur.po | 2 +- po/uz.po | 2 +- po/uz@latin.po | 2 +- po/zh_CN.po | 2 +- po/zh_TW.po | 2 +- tbl_indexes.php | 4 +- tbl_select.php | 4 +- themes/pmahomme/css/theme_right.css.php | 6 +- 91 files changed, 700 insertions(+), 542 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 6ada51e..e7c3bf9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,35 @@ phpMyAdmin - ChangeLog ======================
+3.4.8.0 (2011-12-01) +- bug #3425230 [interface] enum data split at space char (more space to edit) +- bug #3426840 [interface] ENUM/SET editor can't handle commas in values +- bug #3427256 [interface] no links to browse/empty views and tables +- bug #3430377 [interface] Deleted search results remain visible +- bug #3428627 [import] ODS import ignores memory limits +- bug #3426836 [interface] Visual column separation +- bug #3428065 [parser] TRUE not recognized by parser ++ patch #3433770 [config] Make location of php-gettext configurable +- patch #3430291 [import] Handle conflicts in some open_basedir situations +- bug #3431427 [display] Dropdown results - setting NULL does not work +- patch #3428764 [edit] Inline edit on multi-server configuration +- patch #3437354 [core] Notice: Array to string conversion in PHP 5.4 +- [interface] When ShowTooltipAliasTB is true, VIEW is wrongly shown as the + view name in main panel db Structure page +- bug #3439292 [core] Fail to synchronize column with name of keyword +- bug #3425156 [interface] Add column after drop +- [interface] Avoid showing the password in phpinfo()'s output +- bug #3441572 [GUI] 'newer version of phpMyAdmin' message not shown in IE8 +- bug #3407235 [interface] Entering the key through a lookup window does not reset NULL +- [security] Self-XSS on database names (Synchronize), see PMASA-2011-18 +- [security] Self-XSS on database names (Operations/rename), see PMASA-2011-18 +- [security] Self-XSS on column type (Create index), see PMASA-2011-18 +- [security] Self-XSS on column type (table Search), see PMASA-2011-18 +- [security] Self-XSS on invalid query (table overview), see PMASA-2011-18 + 3.4.7.1 (2011-11-10) -- [security] Fixed possible local file inclusion in XML import (CVE-2011-4107). +- [security] Fixed possible local file inclusion in XML import +(CVE-2011-4107).
3.4.7.0 (2011-10-23) - bug #3418610 [interface] Links in navigation when $cfg['MainPageIconic'] = false diff --git a/Documentation.html b/Documentation.html index 083da6e..87a65d2 100644 --- a/Documentation.html +++ b/Documentation.html @@ -9,7 +9,7 @@ vim: expandtab ts=4 sw=4 sts=4 tw=78 <link rel="icon" href="./favicon.ico" type="image/x-icon" /> <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>phpMyAdmin 3.4.7.1 - Documentation</title> + <title>phpMyAdmin 3.4.8 - Documentation</title> <link rel="stylesheet" type="text/css" href="docs.css" /> </head>
@@ -17,7 +17,7 @@ vim: expandtab ts=4 sw=4 sts=4 tw=78 <div id="header"> <h1> <a href="http://www.phpmyadmin.net/">php<span class="myadmin">MyAdmin</span></a> - 3.4.7.1 + 3.4.8 Documentation </h1> </div> @@ -1446,7 +1446,7 @@ CREATE DATABASE,ALTER DATABASE,DROP DATABASE</pre> </dd>
<dt id="cfg_LeftFrameDBTree">$cfg['LeftFrameDBTree'] boolean</dt> - <dd>In light mode, defines whether to display the names of databases (in the + <dd>Defines whether to display the names of databases (in the selector) using a tree, see also <a href="#cfg_LeftFrameDBSeparator" class="configrule">$cfg['LeftFrameDBSeparator']</a>. </dd> @@ -3510,8 +3510,7 @@ have either the <a href="http://pecl.php.net/package/APC">APC</a> extension group under which Apache runs. </li> <li> - You should use PHP safe mode, to protect from other users that try - to include your <i>config.inc.php</i> in their scripts. + Follow security recommendations for PHP and your webserver. </li> </ul>
@@ -4585,7 +4584,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
<li>Marc Delisle <marc_at_infomarc.info> <ul> - <li>multi-language version</li> + <li>multi-language version in December 1998</li> <li>various fixes and improvements</li> <li><abbr title="structured query language">SQL</abbr> analyser (most of it)</li> <li>current project maintainer</li> @@ -4596,7 +4595,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA <li>started SourceForge phpMyAdmin project in March 2001</li> <li>sync'ed different existing CVS trees with new features and bugfixes</li> <li>multi-language improvements, dynamic language selection</li> - <li>current project maintainer</li> <li>many bugfixes and improvements</li> </ul></li>
diff --git a/README b/README index 488cb04..12e5e4e 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ phpMyAdmin - Readme ===================
-Version 3.4.7.1 +Version 3.4.8
A set of PHP-scripts to manage MySQL over the web.
diff --git a/browse_foreigners.php b/browse_foreigners.php index c8867af..e88c20f 100644 --- a/browse_foreigners.php +++ b/browse_foreigners.php @@ -104,9 +104,11 @@ require_once './libraries/header_scripts.inc.php';
if (opener && opener.document && opener.document.insertForm) { var field = 'fields'; + var field_null = 'fields_null';
<?php if (isset($rownumber)) { ?> var element_name = field + '[multi_edit][<?php echo htmlspecialchars($rownumber); ?>][' + fieldmd5 + ']'; + var null_name = field_null + '[multi_edit][<?php echo htmlspecialchars($rownumber); ?>][' + fieldmd5 + ']'; <?php } else { ?> var element_name = field + '[]'; <?php } ?> @@ -120,6 +122,9 @@ require_once './libraries/header_scripts.inc.php'; if (opener.document.insertForm.elements[element_name]) { // Edit/Insert form opener.document.insertForm.elements[element_name].value = key; + if (opener.document.insertForm.elements[null_name]) { + opener.document.insertForm.elements[null_name].checked = false; + } self.close(); return false; } else if (opener.document.insertForm.elements[element_name_alt]) { diff --git a/db_structure.php b/db_structure.php index d81af5d..b704759 100644 --- a/db_structure.php +++ b/db_structure.php @@ -254,31 +254,57 @@ foreach ($tables as $keyname => $each_table) { $hidden_fields[] = '<input type="hidden" name="views[]" value="' . htmlspecialchars($each_table['TABLE_NAME']) . '" />'; }
- if ($each_table['TABLE_ROWS'] > 0) { - $browse_table = '<a href="sql.php?' . $tbl_url_query . '&pos=0">' . $titles['Browse'] . '</a>'; - $search_table = '<a href="tbl_select.php?' . $tbl_url_query . '">' . $titles['Search'] . '</a>'; - $browse_table_label = '<a href="sql.php?' . $tbl_url_query . '&pos=0">' . $truename . '</a>'; + /* + * Always activate links for Browse, Search and Empty, even if + * the icons are greyed, because + * 1. for views, we don't know the number of rows at this point + * 2. for tables, another source could have populated them since the + * page was generated + * + * I could have used the PHP ternary conditional operator but I find + * the code easier to read without this operator. + */ + if ($each_table['TABLE_ROWS'] > 0 || $table_is_view) { + $may_have_rows = true; } else { - $browse_table = $titles['NoBrowse']; - $search_table = $titles['NoSearch']; - $browse_table_label = '<a href="tbl_structure.php?' . $tbl_url_query . '">' . $truename . '</a>'; + $may_have_rows = false; } + $browse_table = '<a href="sql.php?' . $tbl_url_query . '&pos=0">'; + if ($may_have_rows) { + $browse_table .= $titles['Browse']; + } else { + $browse_table .= $titles['NoBrowse']; + } + $browse_table .= '</a>'; + + $search_table = '<a href="tbl_select.php?' . $tbl_url_query . '">'; + if ($may_have_rows) { + $search_table .= $titles['Search']; + } else { + $search_table .= $titles['NoSearch']; + } + $search_table .= '</a>'; + + $browse_table_label = '<a href="sql.php?' . $tbl_url_query . '&pos=0">' . $truename . '</a>';
if (! $db_is_information_schema) { - if (! empty($each_table['TABLE_ROWS'])) { - $empty_table = '<a '; - if ($GLOBALS['cfg']['AjaxEnable']) { - $empty_table .= 'class="truncate_table_anchor"'; - } - $empty_table .= ' href="sql.php?' . $tbl_url_query - . '&sql_query='; - $empty_table .= urlencode('TRUNCATE ' . PMA_backquote($each_table['TABLE_NAME'])) - . '&message_to_show=' - . urlencode(sprintf(__('Table %s has been emptied'), htmlspecialchars($each_table['TABLE_NAME']))) - .'">' . $titles['Empty'] . '</a>'; + $empty_table = '<a '; + if ($GLOBALS['cfg']['AjaxEnable']) { + $empty_table .= 'class="truncate_table_anchor"'; + } + $empty_table .= ' href="sql.php?' . $tbl_url_query + . '&sql_query='; + $empty_table .= urlencode('TRUNCATE ' . PMA_backquote($each_table['TABLE_NAME'])) + . '&message_to_show=' + . urlencode(sprintf(__('Table %s has been emptied'), htmlspecialchars($each_table['TABLE_NAME']))) + .'">'; + if ($may_have_rows) { + $empty_table .= $titles['Empty']; } else { - $empty_table = $titles['NoEmpty']; + $empty_table .= $titles['NoEmpty']; } + $empty_table .= '</a>'; + $drop_query = 'DROP ' . ($table_is_view ? 'VIEW' : 'TABLE') . ' ' . PMA_backquote($each_table['TABLE_NAME']); diff --git a/import.php b/import.php index d706b60..07e5d18 100644 --- a/import.php +++ b/import.php @@ -259,7 +259,7 @@ if ($import_file != 'none' && !$error) { if (is_writable($tmp_subdir)) {
- $import_file_new = $tmp_subdir . basename($import_file); + $import_file_new = $tmp_subdir . basename($import_file) . uniqid(); if (move_uploaded_file($import_file, $import_file_new)) { $import_file = $import_file_new; $file_to_unlink = $import_file_new; diff --git a/js/db_operations.js b/js/db_operations.js index b053694..ad39635 100644 --- a/js/db_operations.js +++ b/js/db_operations.js @@ -32,7 +32,7 @@ $(document).ready(function() {
var $form = $(this);
- var question = 'CREATE DATABASE ' + $('#new_db_name').val() + ' / DROP DATABASE ' + window.parent.db; + var question = escapeHtml('CREATE DATABASE ' + $('#new_db_name').val() + ' / DROP DATABASE ' + window.parent.db);
PMA_prepareForAjaxRequest($form); /** diff --git a/js/db_search.js b/js/db_search.js index 79c444e..f9a9416 100644 --- a/js/db_search.js +++ b/js/db_search.js @@ -48,18 +48,20 @@ function deleteResult(result_path , msg , ajaxEnable){ { if(ajaxEnable) { + var $msg = PMA_ajaxShowMessage(PMA_messages['strDeleting']); /** Load the deleted option to the page*/ - $('#browse-results').load(result_path + " '"+'#result_query' + "'"); - $('#sqlqueryform').load(result_path + " '"+'#sqlqueryform' + "'"); - $('#togglequerybox').html(PMA_messages['strHideQueryBox']); - - /** Refresh the search results after the deletion */ - document.getElementById('buttonGo'). click(); - //PMA_ajaxShowMessage(PMA_messages['strDeleting']); - /** Show the results of the deletion option */ - $('#browse-results').show(); - $('#sqlqueryform').show(); - $('#togglequerybox').show(); + $('#browse-results').load(result_path + " '"+'#result_query' + "'", function () { // FIXME: no need for two ajax reqests here + $('#sqlqueryform').load(result_path + " '"+'#sqlqueryform' + "'", function () { // since they both fetch the same page + /** Refresh the search results after the deletion */ + document.getElementById('buttonGo').click(); + $('#togglequerybox').html(PMA_messages['strHideQueryBox']); + PMA_ajaxRemoveMessage($msg); + /** Show the results of the deletion option */ + $('#browse-results').show(); + $('#sqlqueryform').show(); + $('#togglequerybox').show(); + }); + }); } else { diff --git a/js/functions.js b/js/functions.js index b076661..824c174 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1842,24 +1842,48 @@ $(document).ready(function() { $("#popup_background").fadeIn("fast"); $("#enum_editor").fadeIn("fast");
- // Get the values - var values = $(this).parent().prev("input").attr("value").split(","); - $.each(values, function(index, val) { - if(jQuery.trim(val) != "") { - // enclose the string in single quotes if it's not already - if(val.substr(0, 1) != "'") { - val = "'" + val; - } - if(val.substr(val.length-1, val.length) != "'") { - val = val + "'"; - } - // escape the single quotes, except the mandatory ones enclosing the entire string - val = val.substr(1, val.length-2).replace(/''/g, "'").replace(/\\/g, '\').replace(/\'/g, "'").replace(/'/g, "'"); - // escape the greater-than symbol - val = val.replace(/>/g, ">"); - $("#enum_editor #values").append("<input type='text' value=" + val + " />"); + // Get the values as a string + var inputstring = $(this) + .parent() + .prev("input") + .val(); + // Escape html entities + inputstring = $('<div/>') + .text(inputstring) + .html(); + // Parse the values, escaping quotes and + // slashes on the fly, into an array + var values = []; + var in_string = false; + var curr, next, buffer = ''; + for (var i=0; i<inputstring.length; i++) { + curr = inputstring.charAt(i); + next = i == inputstring.length ? '' : inputstring.charAt(i+1); + if (! in_string && curr == "'") { + in_string = true; + } else if (in_string && curr == "\" && next == "\") { + buffer += "\"; + i++; + } else if (in_string && next == "'" && (curr == "'" || curr == "\")) { + buffer += "'"; + i++; + } else if (in_string && curr == "'") { + in_string = false; + values.push(buffer); + buffer = ''; + } else if (in_string) { + buffer += curr; } - }); + } + if (buffer.length > 0) { + values.push(buffer); + } + // Add the parsed values to the editor + for (var i=0; i<values.length; i++) { + $("#enum_editor #values").append( + "<input type='text' value='" + values[i] + "' />" + ); + } // So we know which column's data is being edited $("#enum_editor").append("<input type='hidden' value='" + $(this).parent().prev("input").attr("id") + "' />"); return false; @@ -2249,15 +2273,7 @@ $(document).ready(function() { * Load version information asynchronously. */ if ($('.jsversioncheck').length > 0) { - (function() { - var s = document.createElement('script'); - s.type = 'text/javascript'; - s.async = true; - s.src = 'http://www.phpmyadmin.net/home_page/version.js'; - s.onload = PMA_current_version; - var x = document.getElementsByTagName('script')[0]; - x.parentNode.insertBefore(s, x); - })(); + $.getScript('http://www.phpmyadmin.net/home_page/version.js', PMA_current_version); }
/** diff --git a/js/sql.js b/js/sql.js index ad91104..3ad3d6e 100644 --- a/js/sql.js +++ b/js/sql.js @@ -705,6 +705,7 @@ $(document).ready(function() { // Make the Ajax call and get the data, wrap it and insert it $.post('sql.php', { 'token' : window.parent.token, + 'server' : window.parent.server, 'db' : window.parent.db, 'ajax_request' : true, 'sql_query' : sql_query, @@ -728,6 +729,7 @@ $(document).ready(function() { var post_params = { 'ajax_request' : true, 'get_relational_values' : true, + 'server' : window.parent.server, 'db' : window.parent.db, 'table' : window.parent.table, 'column' : field_name, @@ -753,6 +755,7 @@ $(document).ready(function() { var post_params = { 'ajax_request' : true, 'get_enum_values' : true, + 'server' : window.parent.server, 'db' : window.parent.db, 'table' : window.parent.table, 'column' : field_name, @@ -776,6 +779,7 @@ $(document).ready(function() { var post_params = { 'ajax_request' : true, 'get_set_values' : true, + 'server' : window.parent.server, 'db' : window.parent.db, 'table' : window.parent.table, 'column' : field_name, @@ -991,6 +995,7 @@ $(document).ready(function() { 'sql_query' : sql_query, 'disp_direction' : disp_mode, 'token' : window.parent.token, + 'server' : window.parent.server, 'db' : window.parent.db, 'table' : window.parent.table, 'clause_is_unique' : nonunique, diff --git a/js/tbl_change.js b/js/tbl_change.js index 8fc7eca..234e4e1 100644 --- a/js/tbl_change.js +++ b/js/tbl_change.js @@ -26,14 +26,13 @@ function nullify(theType, urlField, md5Field, multi_edit) rowForm.elements['funcs' + multi_edit + '[' + md5Field + ']'].selectedIndex = -1; }
- // "SET" field , "ENUM" field with more than 20 characters - // or foreign key field (drop-down) - if (theType == 1 || theType == 3 || theType == 4) { - rowForm.elements['field_' + md5Field + multi_edit + '[]'].selectedIndex = -1; + // "ENUM" field with more than 20 characters + if (theType == 1) { + rowForm.elements['fields' + multi_edit + '[' + md5Field + ']'][1].selectedIndex = -1; } // Other "ENUM" field else if (theType == 2) { - var elts = rowForm.elements['field_' + md5Field + multi_edit + '[]']; + var elts = rowForm.elements['fields' + multi_edit + '[' + md5Field + ']']; // when there is just one option in ENUM: if (elts.checked) { elts.checked = false; @@ -45,9 +44,17 @@ function nullify(theType, urlField, md5Field, multi_edit)
} // end if } + // "SET" field + else if (theType == 3) { + rowForm.elements['fields' + multi_edit + '[' + md5Field + '][]'].selectedIndex = -1; + } + // Foreign key field (drop-down) + else if (theType == 4) { + rowForm.elements['fields' + multi_edit + '[' + md5Field + ']'].selectedIndex = -1; + } // foreign key field (with browsing icon for foreign values) else if (theType == 6) { - rowForm.elements['field_' + md5Field + multi_edit + '[]'].value = ''; + rowForm.elements['fields' + multi_edit + '[' + md5Field + ']'].value = ''; } // Other field types else /*if (theType == 5)*/ { diff --git a/js/tbl_structure.js b/js/tbl_structure.js index 493f0eb..97ec6c2 100644 --- a/js/tbl_structure.js +++ b/js/tbl_structure.js @@ -42,6 +42,10 @@ $(document).ready(function() { */ var curr_column_name = $(curr_row).children('th').children('label').text(); /** + * @var $after_field_item Corresponding entry in the 'After' field. + */ + var $after_field_item = $("select[name='after_field'] option[value='" + curr_column_name + "']"); + /** * @var question String containing the question to be asked for confirmation */ var question = PMA_messages['strDoYouReally'] + ' :\n ALTER TABLE `' + escapeHtml(curr_table_name) + '` DROP `' + escapeHtml(curr_column_name) + '`'; @@ -53,6 +57,7 @@ $(document).ready(function() { $.get(url, {'is_js_confirmed' : 1, 'ajax_request' : true}, function(data) { if(data.success == true) { PMA_ajaxShowMessage(data.message); + $after_field_item.remove(); $(curr_row).hide("medium").remove(); } else { diff --git a/libraries/Config.class.php b/libraries/Config.class.php index f42ad6e..cbcb3e4 100644 --- a/libraries/Config.class.php +++ b/libraries/Config.class.php @@ -96,7 +96,7 @@ class PMA_Config */ function checkSystem() { - $this->set('PMA_VERSION', '3.4.7.1'); + $this->set('PMA_VERSION', '3.4.8'); /** * @deprecated */ diff --git a/libraries/Error.class.php b/libraries/Error.class.php index 2cfd5fe..595799b 100644 --- a/libraries/Error.class.php +++ b/libraries/Error.class.php @@ -175,7 +175,7 @@ class PMA_Error extends PMA_Message $this->getMessage() . $this->getFile() . $this->getLine() . - $this->getBacktrace() + serialize($this->getBacktrace()) ); }
diff --git a/libraries/auth/cookie.auth.lib.php b/libraries/auth/cookie.auth.lib.php index c04d5a2..93b567a 100644 --- a/libraries/auth/cookie.auth.lib.php +++ b/libraries/auth/cookie.auth.lib.php @@ -549,6 +549,10 @@ function PMA_auth_set_user() $cfg['Server']['user'] = $GLOBALS['PHP_AUTH_USER']; $cfg['Server']['password'] = $GLOBALS['PHP_AUTH_PW'];
+ // Avoid showing the password in phpinfo()'s output + unset($GLOBALS['PHP_AUTH_PW']); + unset($_SERVER['PHP_AUTH_PW']); + $_SESSION['last_access_time'] = time();
// Name and password cookies need to be refreshed each time diff --git a/libraries/auth/http.auth.lib.php b/libraries/auth/http.auth.lib.php index b3d305a..b4bc030 100644 --- a/libraries/auth/http.auth.lib.php +++ b/libraries/auth/http.auth.lib.php @@ -207,6 +207,10 @@ function PMA_auth_set_user() $cfg['Server']['user'] = $PHP_AUTH_USER; $cfg['Server']['password'] = $PHP_AUTH_PW;
+ // Avoid showing the password in phpinfo()'s output + unset($GLOBALS['PHP_AUTH_PW']); + unset($_SERVER['PHP_AUTH_PW']); + return true; } // end of the 'PMA_auth_set_user()' function
diff --git a/libraries/common.lib.php b/libraries/common.lib.php index ad38266..caeeee2 100644 --- a/libraries/common.lib.php +++ b/libraries/common.lib.php @@ -1059,13 +1059,10 @@ function PMA_showMessage($message, $sql_query = null, $type = 'notice', $is_view } else { // Parse SQL if needed $parsed_sql = PMA_SQP_parse($query_base); - if (PMA_SQP_isError()) { - unset($parsed_sql); - } }
// Analyze it - if (isset($parsed_sql)) { + if (isset($parsed_sql) && ! PMA_SQP_isError()) { $analyzed_display_query = PMA_SQP_analyze($parsed_sql); // Here we append the LIMIT added for navigation, to // enable its display. Adding it higher in the code diff --git a/libraries/db_info.inc.php b/libraries/db_info.inc.php index 44dc3a8..4dc7eb0 100644 --- a/libraries/db_info.inc.php +++ b/libraries/db_info.inc.php @@ -75,6 +75,10 @@ function PMA_fillTooltip(&$tooltip_truename, &$tooltip_aliasname, $table) // remove InnoDB comment from end, just the minimal part (*? is non greedy) $table['Comment'] = preg_replace('@; InnoDB free:.*?$@', '', $table['Comment']); } + // views have VIEW as comment so it's not a real comment put by a user + if ('VIEW' == $table['Comment']) { + $table['Comment'] = ''; + } if (empty($table['Comment'])) { $table['Comment'] = $table['Name']; } else { diff --git a/libraries/import/ods.php b/libraries/import/ods.php index 9016016..cd48f68 100644 --- a/libraries/import/ods.php +++ b/libraries/import/ods.php @@ -42,9 +42,6 @@ if (isset($plugin_list)) { return; }
-ini_set('memory_limit', '128M'); -set_time_limit(120); - $i = 0; $len = 0; $buffer = ""; diff --git a/libraries/import/xml.php b/libraries/import/xml.php index ce20fe7..0afbd15 100644 --- a/libraries/import/xml.php +++ b/libraries/import/xml.php @@ -35,9 +35,6 @@ if (isset($plugin_list)) { return; }
-ini_set('memory_limit', '128M'); -set_time_limit(120); - $i = 0; $len = 0; $buffer = ""; diff --git a/libraries/select_lang.lib.php b/libraries/select_lang.lib.php index 137b83a..530f150 100644 --- a/libraries/select_lang.lib.php +++ b/libraries/select_lang.lib.php @@ -373,7 +373,7 @@ $GLOBALS['lang_path'] = './locale/'; /** * Load gettext functions. */ -require './libraries/php-gettext/gettext.inc'; +require GETTEXT_INC;
/** * @global string interface language diff --git a/libraries/server_synchronize.lib.php b/libraries/server_synchronize.lib.php index c9f1242..53ad9d7 100644 --- a/libraries/server_synchronize.lib.php +++ b/libraries/server_synchronize.lib.php @@ -1,27 +1,27 @@ -<?php +<?php /* vim: set expandtab sw=4 ts=4 sts=4: */
/** -* PMA_getMatchingTables places matching tables in source +* PMA_getMatchingTables places matching tables in source * and target databases in $matching_tables array whereas * $uncommon_source_tables array gets the tables present in * source database but are absent from target database. * Criterion for matching tables is just comparing their names. -* -* @param $trg_tables array of target database table names, -* @param $src_tables array of source database table names, -* -* @param &$matching_tables empty array passed by reference to save names of matching tables, -* @param &$uncommon_source_tables empty array passed by reference to save names of tables present in +* +* @param $trg_tables array of target database table names, +* @param $src_tables array of source database table names, +* +* @param &$matching_tables empty array passed by reference to save names of matching tables, +* @param &$uncommon_source_tables empty array passed by reference to save names of tables present in * source database but absent from target database */ - + function PMA_getMatchingTables($trg_tables, $src_tables, &$matching_tables, &$uncommon_source_tables) { - for($k=0; $k< sizeof($src_tables); $k++) { - $present_in_target = false; - for($l=0; $l < sizeof($trg_tables); $l++) { - if ($src_tables[$k] === $trg_tables[$l]) { + for($k=0; $k< sizeof($src_tables); $k++) { + $present_in_target = false; + for($l=0; $l < sizeof($trg_tables); $l++) { + if ($src_tables[$k] === $trg_tables[$l]) { $present_in_target = true; $matching_tables[] = $src_tables[$k]; } @@ -35,30 +35,30 @@ function PMA_getMatchingTables($trg_tables, $src_tables, &$matching_tables, &$un /** * PMA_getNonMatchingTargetTables() places tables present * in target database but are absent from source database -* -* @param $trg_tables array of target database table names, -* -* @param $matching_tables $matching tables array containing names of matching tables, -* @param &$uncommon_target_tables empty array passed by reference to save names of tables presnet in +* +* @param $trg_tables array of target database table names, +* +* @param $matching_tables $matching tables array containing names of matching tables, +* @param &$uncommon_target_tables empty array passed by reference to save names of tables presnet in * target database but absent from source database */
function PMA_getNonMatchingTargetTables($trg_tables, $matching_tables, &$uncommon_target_tables) { for($c=0; $c<sizeof($trg_tables) ;$c++) { - $match = false; + $match = false; for($d=0; $d < sizeof($matching_tables); $d++) { if ($trg_tables[$c] === $matching_tables[$d]) { $match=true; - } + } } if ($match === false) { $uncommon_target_tables[] = $trg_tables[$c]; - } + } } } - + /** * PMA_dataDiffInTables() finds the difference in source and target matching tables by * first comparing source table's primary key entries with target table enteries. @@ -67,32 +67,32 @@ function PMA_getNonMatchingTargetTables($trg_tables, $matching_tables, &$uncommo * field values also, in order to check whether update is required or not. * If update is required, it is placed in $update_array * Otherwise that entry is placed in the $insert_array. - * + * * @uses PMA_DBI_get_fields() * @uses PMA_DBI_get_column_values() * @uses PMA_DBI_fetch_result() - * + * * @param $src_db name of source database * @param $trg_db name of target database * @param $src_link connection established with source server * @param $trg_link connection established with target server - * @param $index Index of a table from $matching_table array - * - * @param $update_array A three dimensional array passed by reference to + * @param $index Index of a table from $matching_table array + * + * @param $update_array A three dimensional array passed by reference to * contain updates required for each matching table - * @param $insert_array A three dimensional array passed by reference to + * @param $insert_array A three dimensional array passed by reference to * contain inserts required for each matching table - * @param $fields_num A two dimensional array passed by reference to + * @param $fields_num A two dimensional array passed by reference to * contain number of fields for each matching table * @param $matching_table array containing matching table names - * + * * @param $matching_tables_fields A two dimensional array passed by reference to contain names of fields for each matching table - * + * * @param $matching_tables_keys A two dimensional array passed by reference to contain names of keys for each matching table - */ + */ function PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, &$matching_table, &$matching_tables_fields, &$update_array, &$insert_array, &$delete_array, &$fields_num, $matching_table_index, &$matching_tables_keys) -{ +{ if (isset($matching_table[$matching_table_index])) { $fld = array(); $fld_results = PMA_DBI_get_fields($src_db, $matching_table[$matching_table_index], $src_link); @@ -104,80 +104,80 @@ function PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, &$matching $is_key[] = $field_name; } $fld[] = $field_name; - } + } } - $matching_tables_fields[$matching_table_index] = $fld; + $matching_tables_fields[$matching_table_index] = $fld; $fields_num[$matching_table_index] = sizeof($fld); $matching_tables_keys[$matching_table_index] = $is_key; - - $source_result_set = PMA_DBI_get_column_values($src_db, $matching_table[$matching_table_index], $is_key, $src_link); + + $source_result_set = PMA_DBI_get_column_values($src_db, $matching_table[$matching_table_index], $is_key, $src_link); $source_size = sizeof($source_result_set); - + $trg_fld_results = PMA_DBI_get_fields($trg_db, $matching_table[$matching_table_index], $trg_link); $all_keys_match = true; $trg_keys = array(); - + if (isset($trg_fld_results)) { foreach ($trg_fld_results as $each_field) { if ($each_field['Key'] == 'PRI') { - $trg_keys[] = $each_field['Field']; + $trg_keys[] = $each_field['Field']; if (! (in_array($each_field['Field'], $is_key))) { $all_keys_match = false; - } - } - } + } + } + } } $update_row = 0; $insert_row = 0; $update_field = 0; $insert_field = 0; - $starting_index = 0; - - for ($j = 0; $j < $source_size; $j++) { + $starting_index = 0; + + for ($j = 0; $j < $source_size; $j++) { $starting_index = 0; - $update_field = 0; + $update_field = 0;
if (isset($source_result_set[$j]) && ($all_keys_match)) {
// Query the target server to see which rows already exist - $trg_select_query = "SELECT * FROM " . PMA_backquote($trg_db) . "." + $trg_select_query = "SELECT * FROM " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_table[$matching_table_index]) . " WHERE "; - + if (sizeof($is_key) == 1) { - $trg_select_query .= $is_key[0]. "='" . $source_result_set[$j] . "'"; + $trg_select_query .= PMA_backquote($is_key[0]). "='" . $source_result_set[$j] . "'"; } elseif (sizeof($is_key) > 1){ for ($k=0; $k < sizeof($is_key); $k++) { - $trg_select_query .= $is_key[$k] . "='" . $source_result_set[$j][$is_key[$k]] . "'"; + $trg_select_query .= PMA_backquote($is_key[$k]) . "='" . $source_result_set[$j][$is_key[$k]] . "'"; if ($k < (sizeof($is_key)-1)){ - $trg_select_query .= " AND "; + $trg_select_query .= " AND "; } - } + } } - + $target_result_set = PMA_DBI_fetch_result($trg_select_query, null, null, $trg_link); if ($target_result_set) {
// Fetch the row from the source server to do a comparison - $src_select_query = "SELECT * FROM " . PMA_backquote($src_db) . "." + $src_select_query = "SELECT * FROM " . PMA_backquote($src_db) . "." . PMA_backquote($matching_table[$matching_table_index]) . " WHERE "; - + if (sizeof($is_key) == 1) { - $src_select_query .= $is_key[0] . "='" . $source_result_set[$j] . "'"; + $src_select_query .= PMA_backquote($is_key[0]) . "='" . $source_result_set[$j] . "'"; } else if(sizeof($is_key) > 1){ for ($k=0; $k< sizeof($is_key); $k++) { - $src_select_query .= $is_key[$k] . "='" . $source_result_set[$j][$is_key[$k]] . "'"; + $src_select_query .= PMA_backquote($is_key[$k]) . "='" . $source_result_set[$j][$is_key[$k]] . "'"; if ($k < (sizeof($is_key) - 1)){ - $src_select_query .= " AND "; + $src_select_query .= " AND "; } } - } - + } + $src_result_set = PMA_DBI_fetch_result($src_select_query, null, null, $src_link); - + /** * Comparing each corresponding field of the source and target matching rows. - * Placing the primary key, value of primary key, field to be updated, and the - * new value of field to be updated in each row of the update array. + * Placing the primary key, value of primary key, field to be updated, and the + * new value of field to be updated in each row of the update array. */ for ($m = 0; ($m < $fields_num[$matching_table_index]) && ($starting_index == 0) ; $m++) { if (isset($src_result_set[0][$fld[$m]])) { @@ -187,19 +187,19 @@ function PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, &$matching if ($source_result_set[$j]) { $update_array[$matching_table_index][$update_row][$is_key[0]] = $source_result_set[$j]; } - } elseif (sizeof($is_key) > 1) { + } elseif (sizeof($is_key) > 1) { for ($n=0; $n < sizeof($is_key); $n++) { if (isset($src_result_set[0][$is_key[$n]])) { $update_array[$matching_table_index][$update_row][$is_key[$n]] = $src_result_set[0][$is_key[$n]]; } } } - + $update_array[$matching_table_index][$update_row][$update_field] = $fld[$m]; - + $update_field++; if (isset($src_result_set[0][$fld[$m]])) { - $update_array[$matching_table_index][$update_row][$update_field] = $src_result_set[0][$fld[$m]]; + $update_array[$matching_table_index][$update_row][$update_field] = $src_result_set[0][$fld[$m]]; $update_field++; } $starting_index = $m; @@ -209,21 +209,21 @@ function PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, &$matching if (sizeof($is_key) == 1) { if ($source_result_set[$j]) { $update_array[$matching_table_index][$update_row][$is_key[0]] = $source_result_set[$j]; - + } - } elseif (sizeof($is_key) > 1) { + } elseif (sizeof($is_key) > 1) { for ($n = 0; $n < sizeof($is_key); $n++) { if (isset($src_result_set[0][$is_key[$n]])) { $update_array[$matching_table_index][$update_row][$is_key[$n]] = $src_result_set[0][$is_key[$n]]; } } } - + $update_array[$matching_table_index][$update_row][$update_field] = $fld[$m]; - + $update_field++; if (isset($src_result_set[0][$fld[$m]])) { - $update_array[$matching_table_index][$update_row][$update_field] = $src_result_set[0][$fld[$m]]; + $update_array[$matching_table_index][$update_row][$update_field] = $src_result_set[0][$fld[$m]]; $update_field++; } $starting_index = $m; @@ -232,28 +232,28 @@ function PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, &$matching } } for ($m = $starting_index + 1; $m < $fields_num[$matching_table_index] ; $m++) - { + { if (isset($src_result_set[0][$fld[$m]])) { - if (isset($target_result_set[0][$fld[$m]])) { + if (isset($target_result_set[0][$fld[$m]])) { if (($src_result_set[0][$fld[$m]] != $target_result_set[0][$fld[$m]]) && (!(in_array($fld[$m], $is_key)))) { - $update_row--; + $update_row--; $update_array[$matching_table_index][$update_row][$update_field] = $fld[$m]; $update_field++; if ($src_result_set[0][$fld[$m]]) { $update_array[$matching_table_index][$update_row][$update_field] = $src_result_set[0][$fld[$m]]; $update_field++; } - $update_row++; + $update_row++; } } else { - $update_row--; + $update_row--; $update_array[$matching_table_index][$update_row][$update_field] = $fld[$m]; $update_field++; if ($src_result_set[0][$fld[$m]]) { $update_array[$matching_table_index][$update_row][$update_field] = $src_result_set[0][$fld[$m]]; $update_field++; } - $update_row++; + $update_row++; } } } @@ -265,7 +265,7 @@ function PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, &$matching if (isset($source_result_set[$j])) { $insert_array[$matching_table_index][$insert_row][$is_key[0]] = $source_result_set[$j]; } - } elseif (sizeof($is_key) > 1) { + } elseif (sizeof($is_key) > 1) { for($l = 0; $l < sizeof($is_key); $l++) { if (isset($source_result_set[$j][$matching_tables_fields[$matching_table_index][$l]])) { $insert_array[$matching_table_index][$insert_row][$is_key[$l]] = $source_result_set[$j][$matching_tables_fields[$matching_table_index][$l]]; @@ -277,13 +277,13 @@ function PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, &$matching } else { /** * Placing the primary key, and the value of primary key of the row that is to be inserted in the target table - * This condition is met when there is an additional column in the source table + * This condition is met when there is an additional column in the source table */ if (sizeof($is_key) == 1) { if (isset($source_result_set[$j])) { $insert_array[$matching_table_index][$insert_row][$is_key[0]] = $source_result_set[$j]; } - } elseif (sizeof($is_key) > 1) { + } elseif (sizeof($is_key) > 1) { for ($l = 0; $l < sizeof($is_key); $l++) { if (isset($source_result_set[$j][$matching_tables_fields[$matching_table_index][$l]])) { $insert_array[$matching_table_index][$insert_row][$is_key[$l]] = $source_result_set[$j][$matching_tables_fields[$matching_table_index][$l]]; @@ -293,34 +293,34 @@ function PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, &$matching $insert_row++; } } // for loop ends - } -} + } +} /** * PMA_findDeleteRowsFromTargetTables finds the rows which are to be deleted from target table. * @uses sizeof() * @uses PMA_DBI_get_column_values() * @uses in_array() -* -* @param $delete_array array containing rows that are to be deleted +* +* @param $delete_array array containing rows that are to be deleted * @param $matching_table array containing matching table names * @param $matching_table_index index of a table from $matching_table array * @param $trg_keys array of target table keys * @param $src_keys array of source table keys * @param $trg_db name of target database * @param $trg_link connection established with target server -* @param $src_db name of source database +* @param $src_db name of source database * @param $src_link connection established with source server -* +* */ function PMA_findDeleteRowsFromTargetTables(&$delete_array, $matching_table, $matching_table_index, $trg_keys, $src_keys, $trg_db, $trg_link,$src_db, $src_link) { if (isset($trg_keys[$matching_table_index])) { - $target_key_values = PMA_DBI_get_column_values($trg_db, $matching_table[$matching_table_index], $trg_keys[$matching_table_index], $trg_link); - $target_row_size = sizeof($target_key_values); + $target_key_values = PMA_DBI_get_column_values($trg_db, $matching_table[$matching_table_index], $trg_keys[$matching_table_index], $trg_link); + $target_row_size = sizeof($target_key_values); } if (isset($src_keys[$matching_table_index])) { - $source_key_values = PMA_DBI_get_column_values($src_db, $matching_table[$matching_table_index], $src_keys[$matching_table_index], $src_link); - $source_size = sizeof($source_key_values); + $source_key_values = PMA_DBI_get_column_values($src_db, $matching_table[$matching_table_index], $src_keys[$matching_table_index], $src_link); + $source_size = sizeof($source_key_values); } $all_keys_match = 1; for ($a = 0; $a < sizeof($trg_keys[$matching_table_index]); $a++) { @@ -328,7 +328,7 @@ function PMA_findDeleteRowsFromTargetTables(&$delete_array, $matching_table, $ma if (! (in_array($trg_keys[$matching_table_index][$a], $src_keys[$matching_table_index]))) { $all_keys_match = 0; } - } + } } if (! ($all_keys_match)) { if (isset($target_key_values)) { @@ -337,17 +337,17 @@ function PMA_findDeleteRowsFromTargetTables(&$delete_array, $matching_table, $ma } if (isset($trg_keys[$matching_table_index])) { if ((sizeof($trg_keys[$matching_table_index]) == 1) && $all_keys_match) { - $row = 0; + $row = 0; if (isset($target_key_values)) { for ($i = 0; $i < sizeof($target_key_values); $i++) { if (! (in_array($target_key_values[$i], $source_key_values))) { $delete_array[$matching_table_index][$row] = $target_key_values[$i]; - $row++; + $row++; } - } + } } } elseif ((sizeof($trg_keys[$matching_table_index]) > 1) && $all_keys_match) { - $row = 0; + $row = 0; if (isset($target_key_values)) { for ($i = 0; $i < sizeof($target_key_values); $i++) { $is_present = false; @@ -356,7 +356,7 @@ function PMA_findDeleteRowsFromTargetTables(&$delete_array, $matching_table, $ma for ($k = 0; $k < sizeof($trg_keys[$matching_table_index]); $k++) { if ($target_key_values[$i][$trg_keys[$matching_table_index][$k]] != $source_key_values[$j][$trg_keys[$matching_table_index][$k]]) { $check = false; - } + } } if ($check) { $is_present = true; @@ -368,16 +368,16 @@ function PMA_findDeleteRowsFromTargetTables(&$delete_array, $matching_table, $ma } $row++; } - } - } + } + } } - } + } }
/** * PMA_dataDiffInUncommonTables() finds the data difference in $source_tables_uncommon * @uses PMA_DBI_fetch_result() -* +* * @param $source_tables_uncommon array of table names; containing table names that are in source db and not in target db * @param $src_db name of source database * @param $src_link connection established with source server @@ -387,9 +387,9 @@ function PMA_findDeleteRowsFromTargetTables(&$delete_array, $matching_table, $ma
function PMA_dataDiffInUncommonTables($source_tables_uncommon, $src_db, $src_link, $index, &$row_count) { - $query = "SELECT COUNT(*) FROM " . PMA_backquote($src_db) . "." . PMA_backquote($source_tables_uncommon[$index]); - $rows = PMA_DBI_fetch_result($query, null, null, $src_link); - $row_count[$index] = $rows[0]; + $query = "SELECT COUNT(*) FROM " . PMA_backquote($src_db) . "." . PMA_backquote($source_tables_uncommon[$index]); + $rows = PMA_DBI_fetch_result($query, null, null, $src_link); + $row_count[$index] = $rows[0]; }
/** @@ -397,35 +397,35 @@ function PMA_dataDiffInUncommonTables($source_tables_uncommon, $src_db, $src_lin * * @uses PMA_DBI_fetch_result() * @uses PMA_backquote() -* -* @param $table Array containing matching tables' names +* +* @param $table Array containing matching tables' names * @param $update_array A three dimensional array containing field * value updates required for each matching table -* @param $src_db Name of source database +* @param $src_db Name of source database * @param $trg_db Name of target database * @param $trg_link Connection established with target server -* @param $matching_table_index index of matching table in matching_table_array +* @param $matching_table_index index of matching table in matching_table_array * @param $display true/false value -*/ +*/
function PMA_updateTargetTables($table, $update_array, $src_db, $trg_db, $trg_link, $matching_table_index, $matching_table_keys, $display) -{ +{ if (isset($update_array[$matching_table_index])) { if (sizeof($update_array[$matching_table_index])) { - + for ($update_row = 0; $update_row < sizeof($update_array[$matching_table_index]); $update_row++) { - - if (isset($update_array[$matching_table_index][$update_row])) { + + if (isset($update_array[$matching_table_index][$update_row])) { $update_fields_num = sizeof($update_array[$matching_table_index][$update_row])-sizeof($matching_table_keys[$matching_table_index]); if ($update_fields_num > 0) { - $query = "UPDATE " . PMA_backquote($trg_db) . "." .PMA_backquote($table[$matching_table_index]) . " SET "; - + $query = "UPDATE " . PMA_backquote($trg_db) . "." .PMA_backquote($table[$matching_table_index]) . " SET "; + for ($update_field = 0; $update_field < $update_fields_num; $update_field = $update_field+2) { if (isset($update_array[$matching_table_index][$update_row][$update_field]) && isset($update_array[$matching_table_index][$update_row][$update_field+1])) { - $query .= $update_array[$matching_table_index][$update_row][$update_field] . "='" . $update_array[$matching_table_index][$update_row][$update_field+1] . "'"; + $query .= PMA_backquote($update_array[$matching_table_index][$update_row][$update_field]) . "='" . $update_array[$matching_table_index][$update_row][$update_field+1] . "'"; } if ($update_field < ($update_fields_num - 2)) { - $query .= ", "; + $query .= ", "; } } $query .= " WHERE "; @@ -433,8 +433,8 @@ function PMA_updateTargetTables($table, $update_array, $src_db, $trg_db, $trg_li for ($key = 0; $key < sizeof($matching_table_keys[$matching_table_index]); $key++) { if (isset($matching_table_keys[$matching_table_index][$key])) { - - $query .= $matching_table_keys[$matching_table_index][$key] . "='" . $update_array[$matching_table_index][$update_row][$matching_table_keys[$matching_table_index][$key]] . "'"; + + $query .= PMA_backquote($matching_table_keys[$matching_table_index][$key]) . "='" . $update_array[$matching_table_index][$update_row][$matching_table_keys[$matching_table_index][$key]] . "'"; } if ($key < (sizeof($matching_table_keys[$matching_table_index]) - 1)) { $query .= " AND "; @@ -443,29 +443,29 @@ function PMA_updateTargetTables($table, $update_array, $src_db, $trg_db, $trg_li } if ($display == true) { echo "<p>" . $query . "</p>"; - } + } PMA_DBI_try_query($query, $trg_link, 0); } - } + } } } } } /** * PMA_insertIntoTargetTable() inserts missing rows in the target table using $array_insert[$matching_table_index] -* +* * @uses PMA_DBI_fetch_result() * @uses PMA_backquote() -* -* +* +* * @param $matching_table array containing matching table names * @param $src_db name of source database * @param $trg_db name of target database * @param $src_link connection established with source server * @param $trg_link connection established with target server * @param $table_fields array containing field names of a table -* @param $array_insert -* @param $matching_table_index index of matching table in matching_table_array +* @param $array_insert +* @param $matching_table_index index of matching table in matching_table_array * @param $matching_tables_keys array containing field names that are keys in the matching table * @param $source_columns array containing source column information * @param $add_column_array array containing column names that are to be added in target table @@ -474,79 +474,79 @@ function PMA_updateTargetTables($table, $update_array, $src_db, $trg_db, $trg_li * @param $uncommon_tables array containing table names that are present in source db but not in targt db * @param $uncommon_tables_fields array containing field names of the uncommon tables * @param $uncommon_cols column names that are present in target table and not in source table -* @param $alter_str_array array containing column names that are to be altered -* @param $source_indexes column names on which indexes are made in source table -* @param $target_indexes column names on which indexes are made in target table +* @param $alter_str_array array containing column names that are to be altered +* @param $source_indexes column names on which indexes are made in source table +* @param $target_indexes column names on which indexes are made in target table * @param $add_indexes_array array containing column names on which index is to be added in target table -* @param $alter_indexes_array array containing column names whose indexes are to be altered. Only index name and uniqueness of an index can be changed +* @param $alter_indexes_array array containing column names whose indexes are to be altered. Only index name and uniqueness of an index can be changed * @param $delete_array array containing rows that are to be deleted * @param $update_array array containing rows that are to be updated in target * @param $display true/false value * */ 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, + $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.= " 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++) + + for ($field_index = 0; $field_index < sizeof($table_fields[$matching_table_index]); $field_index++) { - $insert_query .= $table_fields[$matching_table_index][$field_index]; - - $is_fk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $trg_db ."' + $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 ."' 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]]); - } + 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]]); - } + 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, + 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]]) + 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); - + 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]]); @@ -559,16 +559,16 @@ function PMA_insertIntoTargetTable($matching_table, $src_db, $trg_db, $src_link, 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); + $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]) . "'"; @@ -581,35 +581,35 @@ function PMA_insertIntoTargetTable($matching_table, $src_db, $trg_db, $src_link, } 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); - } + } } } } -} +} /** -* PMA_createTargetTables() Create the missing table $uncommon_table in target database -* +* PMA_createTargetTables() Create the missing table $uncommon_table in target database +* * @uses PMA_DBI_get_fields() * @uses PMA_backquote() * @uses PMA_DBI_fetch_result() -* -* @param $src_db name of source database +* +* @param $src_db name of source database * @param $trg_db name of target database * @param $trg_link connection established with target server * @param $src_link connection established with source server * @param $uncommon_table name of table present in source but not in target -* @param $table_index index of table in matching_table_array +* @param $table_index index of table in matching_table_array * @param $uncommon_tables_fields field names of the uncommon table * @param $display true/false value -*/ +*/ function PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, &$uncommon_tables, $table_index, &$uncommon_tables_fields, $display) { if (isset($uncommon_tables[$table_index])) { @@ -619,20 +619,20 @@ function PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, &$uncomm $field_name = $each_field['Field']; $fields[] = $field_name; } - $uncommon_tables_fields[$table_index] = $fields; - + $uncommon_tables_fields[$table_index] = $fields; + $Create_Query = PMA_DBI_fetch_value("SHOW CREATE TABLE " . PMA_backquote($src_db) . '.' . PMA_backquote($uncommon_tables[$table_index]), 0, 1, $src_link);
// Replace the src table name with a `dbname`.`tablename` - $Create_Table_Query = preg_replace('/' . preg_quote(PMA_backquote($uncommon_tables[$table_index]), '/') . '/', + $Create_Table_Query = preg_replace('/' . preg_quote(PMA_backquote($uncommon_tables[$table_index]), '/') . '/', PMA_backquote($trg_db) . '.' .PMA_backquote($uncommon_tables[$table_index]), $Create_Query, $limit = 1 );
- $is_fk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $src_db . "' + $is_fk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $src_db . "' AND TABLE_NAME = '" . $uncommon_tables[$table_index] . "' AND TABLE_NAME <> REFERENCED_TABLE_NAME;" ; - + $is_fk_result = PMA_DBI_fetch_result($is_fk_query, null, null, $src_link); if (sizeof($is_fk_result) > 0) { for ($j = 0; $j < sizeof($is_fk_result); $j++) @@ -641,14 +641,14 @@ function PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, &$uncomm $table_index = array_keys($uncommon_tables, $is_fk_result[$j]['REFERENCED_TABLE_NAME']); PMA_createTargetTables($src_db, $trg_db, $trg_link, $src_link, $uncommon_tables, $table_index[0], $uncommon_tables_fields, $display); unset($uncommon_tables[$table_index[0]]); - } + } } } if ($display == true) { echo '<p>' . $Create_Table_Query . '</p>'; } PMA_DBI_try_query($Create_Table_Query, $trg_link, 0); - } + } } /** * PMA_populateTargetTables() inserts data into uncommon tables after they have been created @@ -656,24 +656,24 @@ function PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, &$uncomm * @uses PMA_backquote() * @uses sizeof() * @uses PMA_DBI_try_query() -* +* * @param $src_db name of source database * @param $trg_db name of target database * @param $src_link connection established with source server * @param $trg_link connection established with target server -* @param $uncommon_tables array containing uncommon table names (table names that are present in source but not in target db) -* @param $table_index index of table in matching_table_array +* @param $uncommon_tables array containing uncommon table names (table names that are present in source but not in target db) +* @param $table_index index of table in matching_table_array * @param $uncommon_tables_fields field names of the uncommon table * @param $display true/false value * * FIXME: This turns NULL values into '' (empty string) */ -function PMA_populateTargetTables($src_db, $trg_db, $src_link, $trg_link, $uncommon_tables, $table_index, $uncommon_tables_fields, $display) -{ +function PMA_populateTargetTables($src_db, $trg_db, $src_link, $trg_link, $uncommon_tables, $table_index, $uncommon_tables_fields, $display) +{ $display = false; // todo: maybe display some of the queries if they are not too numerous $unbuffered_result = PMA_DBI_try_query('SELECT * FROM ' . PMA_backquote($src_db) . '.' . PMA_backquote($uncommon_tables[$table_index]), $src_link, PMA_DBI_QUERY_UNBUFFERED); if (false !== $unbuffered_result) { - $insert_query = 'INSERT INTO ' . PMA_backquote($trg_db) . '.' .PMA_backquote($uncommon_tables[$table_index]) . ' VALUES'; + $insert_query = 'INSERT INTO ' . PMA_backquote($trg_db) . '.' .PMA_backquote($uncommon_tables[$table_index]) . ' VALUES'; while ($one_row = PMA_DBI_fetch_row($unbuffered_result)) { $insert_query .= '('; $key_of_last_value = count($one_row) - 1; @@ -694,53 +694,54 @@ function PMA_populateTargetTables($src_db, $trg_db, $src_link, $trg_link, $uncom } } /** -* PMA_deleteFromTargetTable() delete rows from target table +* PMA_deleteFromTargetTable() delete rows from target table * @uses sizeof() * @uses PMA_backquote() * @uses PMA_DBI_try_query() -* -* +* +* * @param $trg_db name of target database * @param $trg_link connection established with target server * @param $matching_tables array containing matching table names * @param $table_index index of table in matching_table_array * @param $target_table_keys primary key names of the target tables -* @param $delete array array containing the key values of rows that are to be deleted +* @param $delete array array containing the key values of rows that are to be deleted * @param $display true/false value */ -function PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $table_index, $target_tables_keys, $delete_array, $display) +function PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $table_index, $target_tables_keys, $delete_array, $display) { for($i = 0; $i < sizeof($delete_array[$table_index]); $i++) { if (isset($target_tables_keys[$table_index])) { - $delete_query = 'DELETE FROM ' . PMA_backquote($trg_db) . '.' .PMA_backquote($matching_tables[$table_index]) . ' WHERE '; + $delete_query = 'DELETE FROM ' . PMA_backquote($trg_db) . '.' .PMA_backquote($matching_tables[$table_index]) . ' WHERE '; for($y = 0; $y < sizeof($target_tables_keys[$table_index]); $y++) { - $delete_query .= $target_tables_keys[$table_index][$y] . " = '"; - + + $delete_query .= PMA_backquote($target_tables_keys[$table_index][$y]) . " = '"; + if (sizeof($target_tables_keys[$table_index]) == 1) { - $delete_query .= $delete_array[$table_index][$i] . "'"; + $delete_query .= $delete_array[$table_index][$i] . "'"; } elseif (sizeof($target_tables_keys[$table_index]) > 1) { $delete_query .= $delete_array[$table_index][$i][$target_tables_keys[$table_index][$y]] . "'"; } if ($y < (sizeof($target_tables_keys[$table_index]) - 1)) { $delete_query .= ' AND '; } - $pk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = '" . $trg_db . "' + $pk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = '" . $trg_db . "' AND REFERENCED_TABLE_NAME = '" . $matching_tables[$table_index]."' AND REFERENCED_COLUMN_NAME = '" . $target_tables_keys[$table_index][$y] . "' AND TABLE_NAME <> REFERENCED_TABLE_NAME;"; - + $pk_query_result = PMA_DBI_fetch_result($pk_query, null, null, $trg_link); $result_size = sizeof($pk_query_result); - + if ($result_size > 0) { for ($b = 0; $b < $result_size; $b++) { - $drop_pk_query = "DELETE FROM " . PMA_backquote($pk_query_result[$b]['TABLE_SCHEMA']) . "." . PMA_backquote($pk_query_result[$b]['TABLE_NAME']) . " WHERE " . $pk_query_result[$b]['COLUMN_NAME'] . " = " . $target_tables_keys[$table_index][$y] . ";"; + $drop_pk_query = "DELETE FROM " . PMA_backquote($pk_query_result[$b]['TABLE_SCHEMA']) . "." . PMA_backquote($pk_query_result[$b]['TABLE_NAME']) . " WHERE " . PMA_backquote($pk_query_result[$b]['COLUMN_NAME']) . " = " . $target_tables_keys[$table_index][$y] . ";"; PMA_DBI_try_query($drop_pk_query, $trg_link, 0); - } - } - } + } + } + } } if ($display == true) { - echo '<p>' . $delete_query . '</p>'; + echo '<p>' . $delete_query . '</p>'; } PMA_DBI_try_query($delete_query, $trg_link, 0); } @@ -753,45 +754,45 @@ function PMA_deleteFromTargetTable($trg_db, $trg_link, $matching_tables, $table_ * If column exists in target table but criteria is different then it is palced in $alter_str_array. * If column does not exist in source table but is present in target table then it is placed in $uncommon_columns. * Keys for all the source tables that have a corresponding target table are placed in $matching_tables_keys. -* Keys for all the target tables that have a corresponding source table are placed in $target_tables_keys. -* +* Keys for all the target tables that have a corresponding source table are placed in $target_tables_keys. +* * @uses PMA_DBI_get_columns_full() -* @uses sizeof() -* -* @param $src_db name of source database +* @uses sizeof() +* +* @param $src_db name of source database * @param $trg_db name of target database * @param $src_link connection established with source server * @param $trg_link connection established with target server * @param $matching_tables array containing names of matching tables * @param $source_columns array containing columns information of the source tables * @param $target_columns array containing columns information of the target tables -* @param $alter_str_array three dimensional associative array first index being the matching table index, second index being column name for which target +* @param $alter_str_array three dimensional associative array first index being the matching table index, second index being column name for which target * column have some criteria different and third index containing the criteria which is different. -* @param $add_column_array two dimensional associative array, first index of the array contain the matching table number and second index contain the +* @param $add_column_array two dimensional associative array, first index of the array contain the matching table number and second index contain the * column name which is to be added in the target table * @param $uncommon_columns array containing the columns that are present in the target table but not in the source table * @param $criteria array containing the criterias which are to be checked for field that is present in source table and target table * @param $target_tables_keys array containing the field names which is key in the target table -* @param $matching_table_index integer number of the matching table -* +* @param $matching_table_index integer number of the matching table +* */ function PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, &$source_columns, &$target_columns, &$alter_str_array, - &$add_column_array, &$uncommon_columns, $criteria, &$target_tables_keys, $matching_table_index) + &$add_column_array, &$uncommon_columns, $criteria, &$target_tables_keys, $matching_table_index) { //Gets column information for source and target table $source_columns[$matching_table_index] = PMA_DBI_get_columns_full($src_db, $matching_tables[$matching_table_index], null, $src_link); $target_columns[$matching_table_index] = PMA_DBI_get_columns_full($trg_db, $matching_tables[$matching_table_index], null, $trg_link); foreach ($source_columns[$matching_table_index] as $column_name => $each_column) { if (isset($target_columns[$matching_table_index][$column_name]['Field'])) { - //If column exists in target table then matches criterias like type, null, collation, key, default, comment of the column + //If column exists in target table then matches criterias like type, null, collation, key, default, comment of the column for ($i = 0; $i < sizeof($criteria); $i++) { if ($source_columns[$matching_table_index][$column_name][$criteria[$i]] != $target_columns[$matching_table_index][$column_name][$criteria[$i]]) { if (($criteria[$i] == 'Default') && ($source_columns[$matching_table_index][$column_name][$criteria[$i]] == '' )) { - $alter_str_array[$matching_table_index][$column_name][$criteria[$i]] = 'None'; + $alter_str_array[$matching_table_index][$column_name][$criteria[$i]] = 'None'; } else { if (! (($criteria[$i] == 'Key') && (($source_columns[$matching_table_index][$column_name][$criteria[$i]] == 'MUL') - || ($target_columns[$matching_table_index][$column_name][$criteria[$i]] == 'MUL') - || ($source_columns[$matching_table_index][$column_name][$criteria[$i]] == 'UNI') + || ($target_columns[$matching_table_index][$column_name][$criteria[$i]] == 'MUL') + || ($source_columns[$matching_table_index][$column_name][$criteria[$i]] == 'UNI') || ($target_columns[$matching_table_index][$column_name][$criteria[$i]] == 'UNI')))) { $alter_str_array[$matching_table_index][$column_name][$criteria[$i]] = $source_columns[$matching_table_index][$column_name][$criteria[$i]]; } @@ -805,17 +806,17 @@ function PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matc //Finds column names that are present in target table but not in source table foreach ($target_columns[$matching_table_index] as $fld_name => $each_column) { if (! (isset($source_columns[$matching_table_index][$fld_name]['Field']))) { - $fields_uncommon[] = $fld_name; + $fields_uncommon[] = $fld_name; } if ($target_columns[$matching_table_index][$fld_name]['Key'] == 'PRI') { $keys[] = $fld_name; } } if (isset($fields_uncommon)) { - $uncommon_columns[$matching_table_index] = $fields_uncommon; + $uncommon_columns[$matching_table_index] = $fields_uncommon; } if (isset($keys)) { - $target_tables_keys[$matching_table_index] = $keys; + $target_tables_keys[$matching_table_index] = $keys; } } /** @@ -827,8 +828,8 @@ function PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matc * @uses PMA_createTargetTables() * @uses PMA_DBI_try_query() * @uses PMA_DBI_fetch_result() -* -* @param $src_db name of source database +* +* @param $src_db name of source database * @param $trg_db name of target database * @param $src_link connection established with source server * @param $trg_link connection established with target server @@ -836,7 +837,7 @@ function PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matc * @param $source_columns array containing columns information of the source tables * @param $add_column_array array containing the names of the column(field) that are to be added in the target * @param $matching_tables_fields -* @param $criteria array containing the criterias +* @param $criteria array containing the criterias * @param $matching_tables_keys array containing the field names which is key in the source table * @param $target_tables_keys array containing the field names which is key in the target table * @param $uncommon_tables array containing the table names that are present in source db and not in target db @@ -851,12 +852,12 @@ function PMA_addColumnsInTargetTable($src_db, $trg_db, $src_link, $trg_link, $ma for ($i = 0; $i < sizeof($matching_tables_fields[$table_counter]); $i++) { if (isset($add_column_array[$table_counter][$matching_tables_fields[$table_counter][$i]])) { $query = "ALTER TABLE " . PMA_backquote($trg_db) . '.' . PMA_backquote($matching_tables[$table_counter]). " ADD COLUMN " . - $add_column_array[$table_counter][$matching_tables_fields[$table_counter][$i]] . " " . $source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Type']; - + PMA_backquote($add_column_array[$table_counter][$matching_tables_fields[$table_counter][$i]]) . " " . $source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Type']; + if($source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Null'] == 'NO') { $query .= ' Not Null '; } elseif ($source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Null'] == 'YES') { - $query .= ' Null '; + $query .= ' Null '; } if ($source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Collation'] != '') { $query .= ' COLLATE ' . $source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Collation']; @@ -865,45 +866,45 @@ function PMA_addColumnsInTargetTable($src_db, $trg_db, $src_link, $trg_link, $ma $query .= " DEFAULT " . $source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Default']; } if ($source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Comment'] != '') { - $query .= " COMMENT " . $source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Comment']; - } - if ($source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Key'] == 'PRI' ) { + $query .= " COMMENT " . $source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Comment']; + } + if ($source_columns[$table_counter][$matching_tables_fields[$table_counter][$i]]['Key'] == 'PRI' ) { $trg_key_size = sizeof($target_tables_keys[$table_counter]); if ($trg_key_size) { $check = true; - for ($a = 0; ($a < $trg_key_size) && ($check); $a++) { + for ($a = 0; ($a < $trg_key_size) && ($check); $a++) { if (! (in_array($target_tables_keys[$table_counter], $uncommon_cols))) { $check = false; - } + } } if (! $check) { - $query .= " ,DROP PRIMARY KEY " ; + $query .= " ,DROP PRIMARY KEY " ; } - } + } $query .= " , ADD PRIMARY KEY ("; for ($t = 0; $t < sizeof($matching_tables_keys[$table_counter]); $t++) { - $query .= $matching_tables_keys[$table_counter][$t]; + $query .= PMA_backquote($matching_tables_keys[$table_counter][$t]); if ($t < (sizeof($matching_tables_keys[$table_counter]) - 1)) { $query .= " , " ; } } $query .= ")"; } - + $query .= ";"; if ($display == true) { echo '<p>' . $query . '</p>'; } PMA_DBI_try_query($query, $trg_link, 0); - + //Checks if column to be added is a foreign key or not $is_fk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $trg_db . "' AND TABLE_NAME = '" . $matching_tables[$table_counter] . "' AND COLUMN_NAME ='" . $add_column_array[$table_counter][$matching_tables_fields[$table_counter][$i]] . "' AND TABLE_NAME <> REFERENCED_TABLE_NAME;"; - + $is_fk_result = PMA_DBI_fetch_result($is_fk_query, null, null, $src_link); - - //If column is a foreign key then it is checked that referenced table exist in target db. If referenced table does not exist in target db then + + //If column is a foreign key then it is checked that referenced table exist in target db. If referenced table does not exist in target db then //it is created first. if (isset($is_fk_result)) { if (in_array($is_fk_result[0]['REFERENCED_TABLE_NAME'], $uncommon_tables)) { @@ -912,12 +913,12 @@ function PMA_addColumnsInTargetTable($src_db, $trg_db, $src_link, $trg_link, $ma PMA_createTargetTables($src_db, $trg_db, $trg_link, $src_link, $uncommon_tables, $table_index[0], $uncommon_tables_fields); unset($uncommon_tables[$table_index[0]]); } - $fk_query = "ALTER TABLE " . PMA_backquote($trg_db) . '.' . PMA_backquote($matching_tables[$table_counter]) . - "ADD CONSTRAINT FOREIGN KEY " . $add_column_array[$table_counter][$matching_tables_fields[$table_counter][$i]] . " + $fk_query = "ALTER TABLE " . PMA_backquote($trg_db) . '.' . PMA_backquote($matching_tables[$table_counter]) . + "ADD CONSTRAINT FOREIGN KEY " . PMA_backquote($add_column_array[$table_counter][$matching_tables_fields[$table_counter][$i]]) . " (" . $add_column_array[$table_counter][$matching_tables_fields[$table_counter][$i]] . ") REFERENCES " . PMA_backquote($trg_db) . '.' . PMA_backquote($is_fk_result[0]['REFERENCED_TABLE_NAME']) . " (" . $is_fk_result[0]['REFERENCED_COLUMN_NAME'] . ");"; - - PMA_DBI_try_query($fk_query, $trg_link, null); + + PMA_DBI_try_query($fk_query, $trg_link, null); } } } @@ -929,31 +930,31 @@ function PMA_addColumnsInTargetTable($src_db, $trg_db, $src_link, $trg_link, $ma * @uses array_keys() * @uses PMA_checkForeignKeys() * uses PMA_createTargetTables() -* +* * @param $src_db name of source database * @param $src_link connection established with source server * @param $trg_db name of target database * @param $trg_link connection established with target server * @param $referenced_table table whose column is a foreign key in another table -* @param $uncommon_tables array containing names that are uncommon +* @param $uncommon_tables array containing names that are uncommon * @param $uncommon_tables_fields field names of the uncommon table * @param $display true/false value */ function PMA_checkForeignKeys($src_db, $src_link, $trg_db, $trg_link ,$referenced_table, &$uncommon_tables, &$uncommon_tables_fields, $display) { - $is_fk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $src_db . "' + $is_fk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $src_db . "' AND TABLE_NAME = '" . $referenced_table . "' AND TABLE_NAME <> REFERENCED_TABLE_NAME;"; - + $is_fk_result = PMA_DBI_fetch_result($is_fk_query, null, null, $src_link); if (sizeof($is_fk_result) > 0) { for ($j = 0; $j < sizeof($is_fk_result); $j++) { if (in_array($is_fk_result[$j]['REFERENCED_TABLE_NAME'], $uncommon_tables)) { $table_index = array_keys($uncommon_tables, $is_fk_result[$j]['REFERENCED_TABLE_NAME']); - PMA_checkForeignKeys($src_db, $src_link, $trg_db, $trg_link, $is_fk_result[$j]['REFERENCED_TABLE_NAME'], $uncommon_tables, - $uncommon_tables_fields, $display); + PMA_checkForeignKeys($src_db, $src_link, $trg_db, $trg_link, $is_fk_result[$j]['REFERENCED_TABLE_NAME'], $uncommon_tables, + $uncommon_tables_fields, $display); PMA_createTargetTables($src_db, $trg_db, $trg_link, $src_link, $uncommon_tables, $table_index[0], $uncommon_tables_fields, $display); unset($uncommon_tables[$table_index[0]]); - } + } } } } @@ -964,14 +965,14 @@ function PMA_checkForeignKeys($src_db, $src_link, $trg_db, $trg_link ,$reference * @uses is_string() * @uses is_numeric() * @uses PMA_DBI_try_query() -* -* +* +* * @param $trg_db name of target database * @param $trg_link connection established with target server * @param $matching_tables array containing names of matching tables * @param $source_columns array containing columns information of the source table * @param $alter_str_array array containing the column name and criteria which is to be altered for the targert table -* @param $matching_tables_fields array containing the name of the fields for the matching table +* @param $matching_tables_fields array containing the name of the fields for the matching table * @param $criteria array containing the criterias * @param $matching_tables_keys array containing the field names which is key in the source table * @param $target_tables_keys array containing the field names which is key in the target table @@ -979,7 +980,7 @@ function PMA_checkForeignKeys($src_db, $src_link, $trg_db, $trg_link ,$reference * @param $display true/false value */ function PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, &$source_columns, &$alter_str_array, $matching_tables_fields, $criteria, - &$matching_tables_keys, &$target_tables_keys, $matching_table_index, $display) + &$matching_tables_keys, &$target_tables_keys, $matching_table_index, $display) { $check = true; $sql_query = ''; @@ -1001,29 +1002,29 @@ function PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, &$s } $pri_query .= " ADD PRIMARY KEY ("; for ($z = 0; $z < sizeof($matching_tables_keys[$matching_table_index]); $z++) { - $pri_query .= $matching_tables_keys[$matching_table_index][$z]; + $pri_query .= PMA_backquote($matching_tables_keys[$matching_table_index][$z]); if ($z < (sizeof($matching_tables_keys[$matching_table_index]) - 1)) { $pri_query .= " , " ; } } $pri_query .= ");"; } - + if (isset($pri_query)) { if ($display == true) { echo '<p>' . $pri_query . '</p>'; } - PMA_DBI_try_query($pri_query, $trg_link, 0); + PMA_DBI_try_query($pri_query, $trg_link, 0); } for ($t = 0; $t < sizeof($matching_tables_fields[$matching_table_index]); $t++) { if ((isset($alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]])) && (sizeof($alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]]) > 0)) { - $sql_query = 'ALTER TABLE ' . PMA_backquote($trg_db) . '.' . PMA_backquote($matching_tables[$matching_table_index]) . ' MODIFY ' . - $matching_tables_fields[$matching_table_index][$t] . ' ' . $source_columns[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]]['Type']; + $sql_query = 'ALTER TABLE ' . PMA_backquote($trg_db) . '.' . PMA_backquote($matching_tables[$matching_table_index]) . ' MODIFY ' . + PMA_backquote($matching_tables_fields[$matching_table_index][$t]) . ' ' . $source_columns[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]]['Type']; $found = false; for ($i = 0; $i < sizeof($criteria); $i++) { if (isset($alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i]]) && $criteria[$i] != 'Key') { - $found = true; + $found = true; if (($criteria[$i] == 'Type') && (! isset($alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i+1]]))) { if ($source_columns[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i + 1]] == 'NO') { $sql_query .= " Not Null" ; @@ -1049,12 +1050,12 @@ function PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, &$s } elseif($criteria[$i] == 'Default') { if(! (isset($alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[2]]))) { $sql_query .= " Not Null " ; - } + } if (is_string($alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i]])) { if ($source_columns[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]]['Type'] != 'timestamp') { $sql_query .= " DEFAULT '" . $alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i]] . "'"; } elseif($source_columns[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]]['Type'] == 'timestamp') { - $sql_query .= " DEFAULT " . $alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i]]; + $sql_query .= " DEFAULT " . $alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i]]; } } elseif (is_numeric($alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i]])) { $sql_query .= " DEFAULT " . $alter_str_array[$matching_table_index][$matching_tables_fields[$matching_table_index][$t]][$criteria[$i]]; @@ -1082,7 +1083,7 @@ function PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, &$s for($p = 0; $p < sizeof($matching_tables_keys[$matching_table_index]); $p++) { if ((isset($alter_str_array[$matching_table_index][$matching_tables_keys[$matching_table_index][$p]]['Key']))) { $check = true; - $query .= ' MODIFY ' . $matching_tables_keys[$matching_table_index][$p] . ' ' + $query .= ' MODIFY ' . PMA_backquote($matching_tables_keys[$matching_table_index][$p]) . ' ' . $source_columns[$matching_table_index][$matching_tables_fields[$matching_table_index][$p]]['Type'] . ' Not Null '; if ($p < (sizeof($matching_tables_keys[$matching_table_index]) - 1)) { $query .= ', '; @@ -1092,7 +1093,7 @@ function PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, &$s if ($check) { if ($display == true) { echo '<p>' . $query . '</p>'; - } + } PMA_DBI_try_query($query, $trg_link, 0); } } @@ -1101,13 +1102,13 @@ function PMA_alterTargetTableStructure($trg_db, $trg_link, $matching_tables, &$s * PMA_removeColumnsFromTargetTable() removes the columns which are present in target table but not in source table. * @uses sizeof() * @uses PMA_DBI_try_query() -* @uses PMA_DBI_fetch_result() -* +* @uses PMA_DBI_fetch_result() +* * @param $trg_db name of target database * @param $trg_link connection established with target server * @param $matching_tables array containing names of matching tables * @param $uncommon_columns array containing the names of the column which are to be dropped from the target table -* @param $table_counter index of the matching table as in $matchiing_tables array +* @param $table_counter index of the matching table as in $matchiing_tables array * @param $display true/false value */ function PMA_removeColumnsFromTargetTable($trg_db, $trg_link, $matching_tables, $uncommon_columns, $table_counter, $display) @@ -1116,67 +1117,67 @@ function PMA_removeColumnsFromTargetTable($trg_db, $trg_link, $matching_tables, $drop_query = "ALTER TABLE " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_tables[$table_counter]); for ($a = 0; $a < sizeof($uncommon_columns[$table_counter]); $a++) { //Checks if column to be removed is a foreign key in any table - $pk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = '" . $trg_db . "' + $pk_query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = '" . $trg_db . "' AND REFERENCED_TABLE_NAME = '" . $matching_tables[$table_counter]."' AND REFERENCED_COLUMN_NAME = '" . $uncommon_columns[$table_counter][$a] . "' AND TABLE_NAME <> REFERENCED_TABLE_NAME;"; - + $pk_query_result = PMA_DBI_fetch_result($pk_query, null, null, $trg_link); $result_size = sizeof($pk_query_result); - + if ($result_size > 0) { for ($b = 0; $b < $result_size; $b++) { $drop_pk_query = "ALTER TABLE " . PMA_backquote($pk_query_result[$b]['TABLE_SCHEMA']) . "." . PMA_backquote($pk_query_result[$b]['TABLE_NAME']) . " - DROP FOREIGN KEY " . $pk_query_result[$b]['CONSTRAINT_NAME'] . ", DROP COLUMN " . $pk_query_result[$b]['COLUMN_NAME'] . ";"; - PMA_DBI_try_query($drop_pk_query, $trg_link, 0); - } - } - $query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $trg_db . "' AND TABLE_NAME = '" + DROP FOREIGN KEY " . PMA_backquote($pk_query_result[$b]['CONSTRAINT_NAME']) . ", DROP COLUMN " . PMA_backquote($pk_query_result[$b]['COLUMN_NAME']) . ";"; + PMA_DBI_try_query($drop_pk_query, $trg_link, 0); + } + } + $query = "SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '" . $trg_db . "' AND TABLE_NAME = '" . $matching_tables[$table_counter]. "' AND COLUMN_NAME = '" . $uncommon_columns[$table_counter][$a] . "' AND TABLE_NAME <> REFERENCED_TABLE_NAME;";
$result = PMA_DBI_fetch_result($query, null, null, $trg_link);
if (sizeof($result) > 0) { - $drop_query .= " DROP FOREIGN KEY " . $result[0]['CONSTRAINT_NAME'] . ","; + $drop_query .= " DROP FOREIGN KEY " . PMA_backquote($result[0]['CONSTRAINT_NAME']) . ","; } - $drop_query .= " DROP COLUMN " . $uncommon_columns[$table_counter][$a]; + $drop_query .= " DROP COLUMN " . PMA_backquote($uncommon_columns[$table_counter][$a]); if ($a < (sizeof($uncommon_columns[$table_counter]) - 1)) { $drop_query .= " , " ; - } + } } $drop_query .= ";" ; - + if ($display == true) { echo '<p>' . $drop_query . '</p>'; } - PMA_DBI_try_query($drop_query, $trg_link, 0); - } -} + PMA_DBI_try_query($drop_query, $trg_link, 0); + } +} /** * PMA_indexesDiffInTables() compares the source table indexes with target table indexes and keep the indexes to be added in target table in $add_indexes_array * indexes to be altered in $alter_indexes_array and indexes to be removed from target table in $remove_indexes_array. * Only keyname and uniqueness characteristic of the indexes are altered. * @uses sizeof() * @uses PMA_DBI_get_table_indexes() -* -* @param $src_db name of source database +* +* @param $src_db name of source database * @param $trg_db name of target database * @param $src_link connection established with source server * @param $trg_link connection established with target server * @param $matching_tables array containing the matching tables name -* @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 $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 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 $table_counter number of the matching table +* @param $table_counter number of the matching table */ function PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, &$source_indexes, &$target_indexes, &$add_indexes_array, &$alter_indexes_array, &$remove_indexes_array, $table_counter) { //Gets indexes information for source and target table $source_indexes[$table_counter] = PMA_DBI_get_table_indexes($src_db, $matching_tables[$table_counter],$src_link); - $target_indexes[$table_counter] = PMA_DBI_get_table_indexes($trg_db, $matching_tables[$table_counter],$trg_link); + $target_indexes[$table_counter] = PMA_DBI_get_table_indexes($trg_db, $matching_tables[$table_counter],$trg_link); for ($a = 0; $a < sizeof($source_indexes[$table_counter]); $a++) { $found = false; $z = 0; @@ -1194,15 +1195,15 @@ function PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matchi } } } - $z++; + $z++; } if ($found === false) { if(! ($source_indexes[$table_counter][$a]['Key_name'] == 'PRIMARY')) { - $add_indexes_array [$table_counter][] = $source_indexes[$table_counter][$a]['Column_name']; + $add_indexes_array [$table_counter][] = $source_indexes[$table_counter][$a]['Column_name']; } } } - + //Finds indexes that exist on target table but not on source table for ($b = 0; $b < sizeof($target_indexes[$table_counter]); $b++) { $found = false; @@ -1212,31 +1213,31 @@ function PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matchi if ($target_indexes[$table_counter][$b]['Column_name'] == $source_indexes[$table_counter][$c]['Column_name']) { $found = true; } - $c++; + $c++; } if ($found === false) { - $remove_indexes_array[$table_counter][] = $target_indexes[$table_counter][$b]['Key_name']; + $remove_indexes_array[$table_counter][] = $target_indexes[$table_counter][$b]['Key_name']; } } }
/** -* PMA_applyIndexesDiff() create indexes, alters indexes and remove indexes. +* PMA_applyIndexesDiff() create indexes, alters indexes and remove indexes. * @uses sizeof() * @uses PMA_DBI_try_query() -* +* * @param $trg_db name of target database * @param $trg_link connection established with target server * @param $matching_tables array containing the matching tables name -* @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 $add_indexes_array array containing the column names on which indexes are to be created in target table * @param $alter_indexes_array array containing the column names for which indexes are to be altered * @param $remove_indexes_array array containing the key name of the indexes which are to be removed from the target table -* @param $table_counter number of the matching table +* @param $table_counter number of the matching table * @param $display true/false value */ -function PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array, +function PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array, $remove_indexes_array, $table_counter, $display) { //Adds indexes on target table @@ -1244,12 +1245,12 @@ function PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_ind $sql = "ALTER TABLE " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_tables[$table_counter]) . " ADD" ; for ($a = 0; $a < sizeof($source_indexes[$table_counter]); $a++) { if (isset($add_indexes_array[$table_counter][$a])) { - for ($b = 0; $b < sizeof($source_indexes[$table_counter]); $b++) { + for ($b = 0; $b < sizeof($source_indexes[$table_counter]); $b++) { if ($source_indexes[$table_counter][$b]['Column_name'] == $add_indexes_array[$table_counter][$a]) { if ($source_indexes[$table_counter][$b]['Non_unique'] == '0') { $sql .= " UNIQUE "; } - $sql .= " INDEX " . $source_indexes[$table_counter][$b]['Key_name'] . " (" . $add_indexes_array[$table_counter][$a] . " );"; + $sql .= " INDEX " . PMA_backquote($source_indexes[$table_counter][$b]['Key_name']) . " (" . $add_indexes_array[$table_counter][$a] . " );"; if ($display == true) { echo '<p>' . $sql . '</p>'; } @@ -1265,9 +1266,9 @@ function PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_ind $query = "ALTER TABLE " . PMA_backquote($trg_db) . "." . PMA_backquote($matching_tables[$table_counter]); for ($a = 0; $a < sizeof($alter_indexes_array[$table_counter]); $a++) { if (isset($alter_indexes_array[$table_counter][$a])) { - $query .= ' DROP INDEX ' . PMA_backquote($alter_indexes_array[$table_counter][$a]) . " , ADD "; + $query .= ' DROP INDEX ' . PMA_backquote($alter_indexes_array[$table_counter][$a]) . " , ADD "; $got_first_index_column = false; - for ($z = 0; $z < sizeof($source_indexes[$table_counter]); $z++) { + for ($z = 0; $z < sizeof($source_indexes[$table_counter]); $z++) { 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') { @@ -1294,26 +1295,26 @@ function PMA_applyIndexesDiff ($trg_db, $trg_link, $matching_tables, $source_ind $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++) { if (isset($remove_indexes_array[$tab $table_counter]); $a++) { PMA_backquote($matching_tables[$table_counter]); er][$a] . " );"; [$b]['COLUMN_NAME']) . ";"; ing_table_index][$t]]) > 0)) { AME']) . " = " . $target_tables_keys[$table_index][$y] . ";"; �! �! �6*�� 07*�� xT"�* -*�� ��� �* ��� �* �6*�� `�� �* �6*�� �O"�* u�� �* @"�* �D"�* �I"�* ��� �* xT"�* -*�� �+*�� k�� �* �! �! �6*�� 07*�� H�!�* .*�� ��� �* ��� �* �6*�� `�� �* �6*�� �6*�� �6*�� 8�!�* �p� 07*�� u�� �* ��� �* .*�� �,*�� k�� �* G H I J K M N O P �6*�� 07*�� H��!�* �/*�� ��� �* ��� �* �6*�� 0O"�* u�� �* `"�* � �!�* @"�* �D"�* �I"�* ��� �* H��!�* �/*�� �-*�� k�� �* 8��!�* �/*�� .*�� k�� �* (��!�* �/*�� @.*�� k�� �* ��!�* �/*�� p.*�� k�� �* �N"�* u�� �* �I"�* �(*�� �X�!�* e�� �* �D"�* /*�� yX�!�* e�� �* @"�* @/*�� ZX�!�* e�� �* ��!�* `"�* � �!�* @"�* �d"�* �D"�* �I"�* ��� �* 8�!�* �z!�* 07*�� p��!�* �0*�� �/*�� k�� �* 5 6 7 8 : <