From cd98246d440923d066edd2830ccfffbea4317187 Mon Sep 17 00:00:00 2001 From: xmujay Date: Thu, 15 Aug 2013 00:01:13 +0800 Subject: [PATCH 1/5] refactor PMA_mult_submits and Add UT --- libraries/mult_submits.inc.php | 146 +++--------------- libraries/mult_submits.lib.php | 173 ++++++++++++++++++++++ test/libraries/PMA_mult_submits_test.php | 181 +++++++++++++++++++++++ 3 files changed, 375 insertions(+), 125 deletions(-) create mode 100644 test/libraries/PMA_mult_submits_test.php diff --git a/libraries/mult_submits.inc.php b/libraries/mult_submits.inc.php index b1d1b5c2d8..3d5382c40f 100644 --- a/libraries/mult_submits.inc.php +++ b/libraries/mult_submits.inc.php @@ -89,51 +89,24 @@ if (! empty($submit_mult) } elseif (isset($selected_fld) && !empty($selected_fld)) { // coming from table structure view - do something with // selected columns - $selected = $selected_fld; - switch ($submit_mult) { - case 'drop': - $what = 'drop_fld'; - break; - case 'primary': - // Gets table primary key - $primary = PMA_getKeyForTablePrimary($db, $table); - if (empty($primary)) { - // no primary key, so we can safely create new - unset($submit_mult); - $query_type = 'primary_fld'; - $mult_btn = __('Yes'); - } else { - // primary key exists, so lets as user - $what = 'primary_fld'; - } - break; - case 'index': + $selected = $selected_fld; + list($what_ret, $query_type_ret, $is_unset_submit_mult, $mult_btn_ret) + = PMA_getDataForSubmitMult( + $submit_mult, $db, $table, + $selected, $action + ); + //update the exist variables + if (isset($what_ret)) { + $what = $what_ret; + } + if (isset($query_type_ret)) { + $query_type = $query_type_ret; + } + if (isset($is_unset_submit_mult)) { unset($submit_mult); - $query_type = 'index_fld'; - $mult_btn = __('Yes'); - break; - case 'unique': - unset($submit_mult); - $query_type = 'unique_fld'; - $mult_btn = __('Yes'); - break; - case 'spatial': - unset($submit_mult); - $query_type = 'spatial_fld'; - $mult_btn = __('Yes'); - break; - case 'ftext': - unset($submit_mult); - $query_type = 'fulltext_fld'; - $mult_btn = __('Yes'); - break; - case 'change': - PMA_displayHtmlForColumnChange($db, $table, $selected, $action); - // execution stops here but PMA_Response correctly finishes - // the rendering - exit; - case 'browse': - // this should already be handled by tbl_structure.php + } + if (isset($mult_btn_ret)) { + $mult_btn = $mult_btn_ret; } } else { // coming from browsing - do something with selected rows @@ -162,87 +135,10 @@ if (!empty($submit_mult) && !empty($what)) { } // Builds the query - $full_query = ''; - if ($what == 'drop_tbl') { - $full_query_views = ''; - } - $selected_cnt = count($selected); - $i = 0; - foreach ($selected as $idx => $sval) { - switch ($what) { - case 'row_delete': - $full_query .= 'DELETE FROM ' . PMA_Util::backquote($db) - . '.' . PMA_Util::backquote($table) - . ' WHERE ' . urldecode($sval) . ' LIMIT 1' - . ';
'; - break; - case 'drop_db': - $full_query .= 'DROP DATABASE ' - . PMA_Util::backquote(htmlspecialchars($sval)) - . ';
'; - $reload = 1; - break; - - case 'drop_tbl': - $current = $sval; - if (!empty($views) && in_array($current, $views)) { - $full_query_views .= (empty($full_query_views) ? 'DROP VIEW ' : ', ') - . PMA_Util::backquote(htmlspecialchars($current)); - } else { - $full_query .= (empty($full_query) ? 'DROP TABLE ' : ', ') - . PMA_Util::backquote(htmlspecialchars($current)); - } - break; - - case 'empty_tbl': - $full_query .= 'TRUNCATE '; - $full_query .= PMA_Util::backquote(htmlspecialchars($sval)) - . ';
'; - break; - - case 'primary_fld': - if ($full_query == '') { - $full_query .= 'ALTER TABLE ' - . PMA_Util::backquote(htmlspecialchars($table)) - . '
  DROP PRIMARY KEY,' - . '
   ADD PRIMARY KEY(' - . '
     ' - . PMA_Util::backquote(htmlspecialchars($sval)) - . ','; - } else { - $full_query .= '
     ' - . PMA_Util::backquote(htmlspecialchars($sval)) - . ','; - } - if ($i == $selected_cnt-1) { - $full_query = preg_replace('@,$@', ');
', $full_query); - } - break; - - case 'drop_fld': - if ($full_query == '') { - $full_query .= 'ALTER TABLE ' - . PMA_Util::backquote(htmlspecialchars($table)); - } - $full_query .= '
  DROP ' - . PMA_Util::backquote(htmlspecialchars($sval)) - . ','; - if ($i == $selected_cnt - 1) { - $full_query = preg_replace('@,$@', ';
', $full_query); - } - break; - } // end switch - $i++; - } - if ($what == 'drop_tbl') { - if (!empty($full_query)) { - $full_query .= ';
' . "\n"; - } - if (!empty($full_query_views)) { - $full_query .= $full_query_views . ';
' . "\n"; - } - unset($full_query_views); - } + list($full_query, $reload, $full_query_views) + = PMA_getQueryFormSelected( + $what, $db, $table, $selected, $action, $views + ); // Displays the confirmation form $_url_params = array( diff --git a/libraries/mult_submits.lib.php b/libraries/mult_submits.lib.php index 139e74e3e0..ee833ad0ed 100644 --- a/libraries/mult_submits.lib.php +++ b/libraries/mult_submits.lib.php @@ -174,4 +174,177 @@ function PMA_getHtmlForOtherActions($what, $action, $_url_params, $full_query) return $html; } +/** + * Get List of information for Submit Mult + * + * @param string $submit_mult mult_submit type + * @param string $db dtabase name + * @param array $table table name + * @param array $selected the selected columns + * @param array $action action type + * + * @return array() + */ +function PMA_getDataForSubmitMult($submit_mult, $db, $table, $selected, $action) +{ + $what = null; + $query_type = null; + $is_unset_submit_mult = false; + $mult_btn = null; + + switch ($submit_mult) { + case 'drop': + $what = 'drop_fld'; + break; + case 'primary': + // Gets table primary key + $primary = PMA_getKeyForTablePrimary($db, $table); + if (empty($primary)) { + // no primary key, so we can safely create new + $is_unset_submit_mult = true; + $query_type = 'primary_fld'; + $mult_btn = __('Yes'); + } else { + // primary key exists, so lets as user + $what = 'primary_fld'; + } + break; + case 'index': + $is_unset_submit_mult = true; + $query_type = 'index_fld'; + $mult_btn = __('Yes'); + break; + case 'unique': + $is_unset_submit_mult = true; + $query_type = 'unique_fld'; + $mult_btn = __('Yes'); + break; + case 'spatial': + $is_unset_submit_mult = true; + $query_type = 'spatial_fld'; + $mult_btn = __('Yes'); + break; + case 'ftext': + $is_unset_submit_mult = true; + $query_type = 'fulltext_fld'; + $mult_btn = __('Yes'); + break; + case 'change': + PMA_displayHtmlForColumnChange($db, $table, $selected, $action); + // execution stops here but PMA_Response correctly finishes + // the rendering + exit; + case 'browse': + // this should already be handled by tbl_structure.php + } + + return array($what, $query_type, $is_unset_submit_mult, $mult_btn); +} + +/** + * Get query string from Selected + * + * @param string $what mult_submit type + * @param string $db dtabase name + * @param array $table table name + * @param array $selected the selected columns + * @param array $action action type + * @param array $views table views + * + * @return array() + */ +function PMA_getQueryFormSelected($what, $db, $table, $selected, $action, $views) +{ + $reload = null; + $full_query_views = null; + $full_query = ''; + + if ($what == 'drop_tbl') { + $full_query_views = ''; + } + + $selected_cnt = count($selected); + $i = 0; + foreach ($selected as $idx => $sval) { + switch ($what) { + case 'row_delete': + $full_query .= 'DELETE FROM ' . PMA_Util::backquote($db) + . '.' . PMA_Util::backquote($table) + . ' WHERE ' . urldecode($sval) . ' LIMIT 1' + . ';
'; + break; + case 'drop_db': + $full_query .= 'DROP DATABASE ' + . PMA_Util::backquote(htmlspecialchars($sval)) + . ';
'; + $reload = 1; + break; + + case 'drop_tbl': + $current = $sval; + if (!empty($views) && in_array($current, $views)) { + $full_query_views .= (empty($full_query_views) ? 'DROP VIEW ' : ', ') + . PMA_Util::backquote(htmlspecialchars($current)); + } else { + $full_query .= (empty($full_query) ? 'DROP TABLE ' : ', ') + . PMA_Util::backquote(htmlspecialchars($current)); + } + break; + + case 'empty_tbl': + $full_query .= 'TRUNCATE '; + $full_query .= PMA_Util::backquote(htmlspecialchars($sval)) + . ';
'; + break; + + case 'primary_fld': + if ($full_query == '') { + $full_query .= 'ALTER TABLE ' + . PMA_Util::backquote(htmlspecialchars($table)) + . '
  DROP PRIMARY KEY,' + . '
   ADD PRIMARY KEY(' + . '
     ' + . PMA_Util::backquote(htmlspecialchars($sval)) + . ','; + } else { + $full_query .= '
     ' + . PMA_Util::backquote(htmlspecialchars($sval)) + . ','; + } + if ($i == $selected_cnt-1) { + $full_query = preg_replace('@,$@', ');
', $full_query); + } + break; + + case 'drop_fld': + if ($full_query == '') { + $full_query .= 'ALTER TABLE ' + . PMA_Util::backquote(htmlspecialchars($table)); + } + $full_query .= '
  DROP ' + . PMA_Util::backquote(htmlspecialchars($sval)) + . ','; + if ($i == $selected_cnt - 1) { + $full_query = preg_replace('@,$@', ';
', $full_query); + } + break; + } // end switch + $i++; + } + + if ($what == 'drop_tbl') { + if (!empty($full_query)) { + $full_query .= ';
' . "\n"; + } + if (!empty($full_query_views)) { + $full_query .= $full_query_views . ';
' . "\n"; + } + unset($full_query_views); + } + + $full_query_views = isset($full_query_views)? $full_query_views : null; + + return array($full_query, $reload, $full_query_views); +} + ?> diff --git a/test/libraries/PMA_mult_submits_test.php b/test/libraries/PMA_mult_submits_test.php new file mode 100644 index 0000000000..f84d636819 --- /dev/null +++ b/test/libraries/PMA_mult_submits_test.php @@ -0,0 +1,181 @@ +'PMA_original_url_query'); + + //Call the test function + $html = PMA_getHtmlForReplacePrefixTable($what, $action, $_url_params); + + //validate 1: form action + $this->assertContains( + '
', + $html + ); + //validate 2: $PMA_URL_getHiddenInputs + $this->assertContains( + PMA_URL_getHiddenInputs($_url_params), + $html + ); + //validate 3: title + $this->assertContains( + __('Replace table prefix:'), + $html + ); + //validate 4: from_prefix + $this->assertContains( + '', + $html + ); + //validate 5: Submit button + $this->assertContains( + __('Submit'), + $html + ); + } + + /** + * Test for PMA_getHtmlForAddPrefixTable + * + * @return void + */ + public function testPMAGetHtmlForAddPrefixTable() + { + $action = 'delete_row'; + $_url_params = array('url_query'=>'PMA_original_url_query'); + + //Call the test function + $html = PMA_getHtmlForAddPrefixTable($action, $_url_params); + + //validate 1: form action + $this->assertContains( + '', + $html + ); + //validate 2: $_url_params + $this->assertContains( + PMA_URL_getHiddenInputs($_url_params), + $html + ); + //validate 3: title + $this->assertContains( + '' . __('Add table prefix:') . '', + $html + ); + //validate 4: from_prefix + $this->assertContains( + __('Add prefix'), + $html + ); + //validate 5: Submit + $this->assertContains( + __('Submit'), + $html + ); + } + + /** + * Test for PMA_getHtmlForOtherActions + * + * @return void + */ + public function testPMAGetHtmlForOtherActions() + { + $what = 'replace_prefix_tbl'; + $action = 'delete_row'; + $_url_params = array('url_query'=>'PMA_original_url_query'); + $full_query = 'select column from PMA_table'; + + //Call the test function + $html = PMA_getHtmlForOtherActions( + $what, $action, $_url_params, $full_query + ); + + //validate 1: form action + $this->assertContains( + '', + $html + ); + //validate 2: $_url_params + $this->assertContains( + PMA_URL_getHiddenInputs($_url_params), + $html + ); + //validate 3: conform + $this->assertContains( + __('Do you really want to execute the following query?'), + $html + ); + //validate 4: query + $this->assertContains( + '' . $full_query . '', + $html + ); + //validate 5: button : yes or no + $this->assertContains( + __('Yes'), + $html + ); + $this->assertContains( + __('No'), + $html + ); + } + +} + From 63235d45ff73c57ce74d0feba43e31efe702d550 Mon Sep 17 00:00:00 2001 From: xmujay Date: Thu, 15 Aug 2013 00:06:31 +0800 Subject: [PATCH 2/5] rename PMA_getQueryFromSelected function --- libraries/mult_submits.inc.php | 2 +- libraries/mult_submits.lib.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/mult_submits.inc.php b/libraries/mult_submits.inc.php index 3d5382c40f..dfb31beab6 100644 --- a/libraries/mult_submits.inc.php +++ b/libraries/mult_submits.inc.php @@ -136,7 +136,7 @@ if (!empty($submit_mult) && !empty($what)) { // Builds the query list($full_query, $reload, $full_query_views) - = PMA_getQueryFormSelected( + = PMA_getQueryFromSelected( $what, $db, $table, $selected, $action, $views ); diff --git a/libraries/mult_submits.lib.php b/libraries/mult_submits.lib.php index ee833ad0ed..226c7e3aa0 100644 --- a/libraries/mult_submits.lib.php +++ b/libraries/mult_submits.lib.php @@ -253,7 +253,7 @@ function PMA_getDataForSubmitMult($submit_mult, $db, $table, $selected, $action) * * @return array() */ -function PMA_getQueryFormSelected($what, $db, $table, $selected, $action, $views) +function PMA_getQueryFromSelected($what, $db, $table, $selected, $action, $views) { $reload = null; $full_query_views = null; From 626f0f9308fbaffc23817ae3385b5ca2182b8067 Mon Sep 17 00:00:00 2001 From: xmujay Date: Fri, 16 Aug 2013 21:04:33 +0800 Subject: [PATCH 3/5] add function PMA_getUrlParams and PMA_getQueryStrFromSelected --- libraries/mult_submits.inc.php | 231 +++------------------------- libraries/mult_submits.lib.php | 266 +++++++++++++++++++++++++++++++++ 2 files changed, 284 insertions(+), 213 deletions(-) diff --git a/libraries/mult_submits.inc.php b/libraries/mult_submits.inc.php index dfb31beab6..b58eb4ee3a 100644 --- a/libraries/mult_submits.inc.php +++ b/libraries/mult_submits.inc.php @@ -141,36 +141,12 @@ if (!empty($submit_mult) && !empty($what)) { ); // Displays the confirmation form - $_url_params = array( - 'query_type' => $what, - 'reload' => (! empty($reload) ? 1 : 0), + $_url_params = PMA_getUrlParams( + $what, $reload, $action, $db, $table, $selected, $views, + isset($original_sql_query)? $original_sql_query : null, + isset($original_url_query)? $original_url_query : null ); - if (strpos(' ' . $action, 'db_') == 1) { - $_url_params['db']= $db; - } elseif (strpos(' ' . $action, 'tbl_') == 1 || $what == 'row_delete') { - $_url_params['db']= $db; - $_url_params['table']= $table; - } - foreach ($selected as $idx => $sval) { - if ($what == 'row_delete') { - $_url_params['selected'][] = 'DELETE FROM ' - . PMA_Util::backquote($db) . '.' . PMA_Util::backquote($table) - . ' WHERE ' . urldecode($sval) . ' LIMIT 1;'; - } else { - $_url_params['selected'][] = $sval; - } - } - if ($what == 'drop_tbl' && !empty($views)) { - foreach ($views as $current) { - $_url_params['views'][] = $current; - } - } - if ($what == 'row_delete') { - $_url_params['original_sql_query'] = $original_sql_query; - if (! empty($original_url_query)) { - $_url_params['original_url_query'] = $original_url_query; - } - } + if ($what == 'replace_prefix_tbl' || $what == 'copy_tbl_change_prefix') { echo PMA_getHtmlForReplacePrefixTable($what, $action, $_url_params); } elseif ($what == 'add_prefix_tbl') { @@ -191,16 +167,6 @@ if (!empty($submit_mult) && !empty($what)) { include_once './libraries/relation_cleanup.lib.php'; } - $sql_query = ''; - if ($query_type == 'drop_tbl') { - $sql_query_views = ''; - } - $selected_cnt = count($selected); - // whether to run query after each pass - $run_parts = false; - // whether to execute the query at the end (to display results) - $use_sql = false; - if ($query_type == 'primary_fld') { // Gets table primary key $GLOBALS['dbi']->selectDb($db); @@ -217,180 +183,19 @@ if (!empty($submit_mult) && !empty($what)) { $GLOBALS['dbi']->freeResult($result); } - $rebuild_database_list = false; - - for ($i = 0; $i < $selected_cnt; $i++) { - switch ($query_type) { - case 'row_delete': - $a_query = $selected[$i]; - $run_parts = true; - break; - - case 'drop_db': - PMA_relationsCleanupDatabase($selected[$i]); - $a_query = 'DROP DATABASE ' - . PMA_Util::backquote($selected[$i]); - $reload = 1; - $run_parts = true; - $rebuild_database_list = true; - break; - - case 'drop_tbl': - PMA_relationsCleanupTable($db, $selected[$i]); - $current = $selected[$i]; - if (!empty($views) && in_array($current, $views)) { - $sql_query_views .= (empty($sql_query_views) ? 'DROP VIEW ' : ', ') - . PMA_Util::backquote($current); - } else { - $sql_query .= (empty($sql_query) ? 'DROP TABLE ' : ', ') - . PMA_Util::backquote($current); - } - $reload = 1; - break; - - case 'check_tbl': - $sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ') - . PMA_Util::backquote($selected[$i]); - $use_sql = true; - break; - - case 'optimize_tbl': - $sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ') - . PMA_Util::backquote($selected[$i]); - $use_sql = true; - break; - - case 'analyze_tbl': - $sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ') - . PMA_Util::backquote($selected[$i]); - $use_sql = true; - break; - - case 'repair_tbl': - $sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ') - . PMA_Util::backquote($selected[$i]); - $use_sql = true; - break; - - case 'empty_tbl': - $a_query = 'TRUNCATE '; - $a_query .= PMA_Util::backquote($selected[$i]); - $run_parts = true; - break; - - case 'drop_fld': - PMA_relationsCleanupColumn($db, $table, $selected[$i]); - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) - : ',') - . ' DROP ' . PMA_Util::backquote($selected[$i]) - . (($i == $selected_cnt-1) ? ';' : ''); - break; - - case 'primary_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . (empty($primary) - ? '' - : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( ' - : ', ') - . PMA_Util::backquote($selected[$i]) - . (($i == $selected_cnt-1) ? ');' : ''); - break; - - case 'index_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD INDEX( ' - : ', ') - . PMA_Util::backquote($selected[$i]) - . (($i == $selected_cnt-1) ? ');' : ''); - break; - - case 'unique_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD UNIQUE( ' - : ', ') - . PMA_Util::backquote($selected[$i]) - . (($i == $selected_cnt-1) ? ');' : ''); - break; - - case 'spatial_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD SPATIAL( ' - : ', ') - . PMA_Util::backquote($selected[$i]) - . (($i == $selected_cnt-1) ? ');' : ''); - break; - - case 'fulltext_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD FULLTEXT( ' - : ', ') - . PMA_Util::backquote($selected[$i]) - . (($i == $selected_cnt-1) ? ');' : ''); - break; - - case 'add_prefix_tbl': - $newtablename = $_POST['add_prefix'] . $selected[$i]; - // ADD PREFIX TO TABLE NAME - $a_query = 'ALTER TABLE ' - . PMA_Util::backquote($selected[$i]) - . ' RENAME ' - . PMA_Util::backquote($newtablename); - $run_parts = true; - break; - - case 'replace_prefix_tbl': - $current = $selected[$i]; - if (substr($current, 0, strlen($from_prefix)) == $from_prefix) { - $newtablename = $to_prefix . substr($current, strlen($from_prefix)); - } else { - $newtablename = $current; - } - // CHANGE PREFIX PATTERN - $a_query = 'ALTER TABLE ' - . PMA_Util::backquote($selected[$i]) - . ' RENAME ' - . PMA_Util::backquote($newtablename); - $run_parts = true; - break; - - case 'copy_tbl_change_prefix': - $current = $selected[$i]; - if (substr($current, 0, strlen($from_prefix)) == $from_prefix) { - $newtablename = $to_prefix . substr($current, strlen($from_prefix)); - } else { - $newtablename = $current; - } - $newtablename = $to_prefix . substr($current, strlen($from_prefix)); - // COPY TABLE AND CHANGE PREFIX PATTERN - $a_query = 'CREATE TABLE ' - . PMA_Util::backquote($newtablename) - . ' SELECT * FROM ' - . PMA_Util::backquote($selected[$i]); - $run_parts = true; - break; - - } // end switch - - // All "DROP TABLE", "DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE" - // statements will be run at once below - if ($run_parts) { - $sql_query .= $a_query . ';' . "\n"; - if ($query_type != 'drop_db') { - $GLOBALS['dbi']->selectDb($db); - } - $result = $GLOBALS['dbi']->query($a_query); - - if ($query_type == 'drop_db') { - PMA_clearTransformations($selected[$i]); - } elseif ($query_type == 'drop_tbl') { - PMA_clearTransformations($db, $selected[$i]); - } else if ($query_type == 'drop_fld') { - PMA_clearTransformations($db, $table, $selected[$i]); - } - - } // end if - } // end for + list( + $result, $rebuild_database_list, $reload_ret, + $run_parts, $use_sql, $sql_query, $sql_query_views + ) = PMA_getQueryStrFromSelected( + $query_type, $selected, $db, $table, $views, + isset($primary) ? $primary : null, + isset($from_prefix) ? $from_prefix : null, + isset($to_prefix) ? $to_prefix : null + ); + //update the existed variable + if (isset($reload_ret)) { + $reload = $reload_ret; + } if ($query_type == 'drop_tbl') { $default_fk_check_value = $GLOBALS['dbi']->fetchValue( diff --git a/libraries/mult_submits.lib.php b/libraries/mult_submits.lib.php index 226c7e3aa0..43d062d3e3 100644 --- a/libraries/mult_submits.lib.php +++ b/libraries/mult_submits.lib.php @@ -11,6 +11,272 @@ if (! defined('PHPMYADMIN')) { exit; } +/** + * Gets url params + * + * @param string $what mult subimt type + * @param bool $reload is relaoad + * @param string $action action type + * @param string $db database name + * @param string $table table name + * @param array $selected selected rows(table,db) + * @param string $views table views + * @param string $original_sql_query original sql query + * @param string $original_url_query original url query + * + * @return array + */ +function PMA_getUrlParams( + $what, $reload, $action, $db, $table, $selected, $views, + $original_sql_query, $original_url_query +) { + $_url_params = array( + 'query_type' => $what, + 'reload' => (! empty($reload) ? 1 : 0), + ); + if (strpos(' ' . $action, 'db_') == 1) { + $_url_params['db']= $db; + } elseif (strpos(' ' . $action, 'tbl_') == 1 || $what == 'row_delete') { + $_url_params['db']= $db; + $_url_params['table']= $table; + } + foreach ($selected as $idx => $sval) { + if ($what == 'row_delete') { + $_url_params['selected'][] = 'DELETE FROM ' + . PMA_Util::backquote($db) . '.' . PMA_Util::backquote($table) + . ' WHERE ' . urldecode($sval) . ' LIMIT 1;'; + } else { + $_url_params['selected'][] = $sval; + } + } + if ($what == 'drop_tbl' && !empty($views)) { + foreach ($views as $current) { + $_url_params['views'][] = $current; + } + } + if ($what == 'row_delete') { + $_url_params['original_sql_query'] = $original_sql_query; + if (! empty($original_url_query)) { + $_url_params['original_url_query'] = $original_url_query; + } + } + + return $_url_params; +} + +/** + * Gets query results from + * + * @param string $query_type query type + * @param array $selected selected tables + * @param string $db db name + * @param string $table table name + * @param string $views table views + * @param string $primary table primary + * @param string $from_prefix from prefix original + * @param string $to_prefix to prefix original + * + * @return array + */ +function PMA_getQueryStrFromSelected( + $query_type, $selected, $db, $table, $views, $primary, + $from_prefix, $to_prefix +) { + $rebuild_database_list = false; + $reload = null; + $a_query = null; + $sql_query = ''; + $sql_query_views = null; + // whether to run query after each pass + $run_parts = false; + // whether to execute the query at the end (to display results) + $use_sql = false; + $result = null; + + if ($query_type == 'drop_tbl') { + $sql_query_views = ''; + } + + $selected_cnt = count($selected); + + for ($i = 0; $i < $selected_cnt; $i++) { + switch ($query_type) { + case 'row_delete': + $a_query = $selected[$i]; + $run_parts = true; + break; + + case 'drop_db': + PMA_relationsCleanupDatabase($selected[$i]); + $a_query = 'DROP DATABASE ' + . PMA_Util::backquote($selected[$i]); + $reload = 1; + $run_parts = true; + $rebuild_database_list = true; + break; + + case 'drop_tbl': + PMA_relationsCleanupTable($db, $selected[$i]); + $current = $selected[$i]; + if (!empty($views) && in_array($current, $views)) { + $sql_query_views .= (empty($sql_query_views) ? 'DROP VIEW ' : ', ') + . PMA_Util::backquote($current); + } else { + $sql_query .= (empty($sql_query) ? 'DROP TABLE ' : ', ') + . PMA_Util::backquote($current); + } + $reload = 1; + break; + + case 'check_tbl': + $sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ') + . PMA_Util::backquote($selected[$i]); + $use_sql = true; + break; + + case 'optimize_tbl': + $sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ') + . PMA_Util::backquote($selected[$i]); + $use_sql = true; + break; + + case 'analyze_tbl': + $sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ') + . PMA_Util::backquote($selected[$i]); + $use_sql = true; + break; + + case 'repair_tbl': + $sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ') + . PMA_Util::backquote($selected[$i]); + $use_sql = true; + break; + + case 'empty_tbl': + $a_query = 'TRUNCATE '; + $a_query .= PMA_Util::backquote($selected[$i]); + $run_parts = true; + break; + + case 'drop_fld': + PMA_relationsCleanupColumn($db, $table, $selected[$i]); + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) + : ',') + . ' DROP ' . PMA_Util::backquote($selected[$i]) + . (($i == $selected_cnt-1) ? ';' : ''); + break; + + case 'primary_fld': + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . (empty($primary) + ? '' + : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( ' + : ', ') + . PMA_Util::backquote($selected[$i]) + . (($i == $selected_cnt-1) ? ');' : ''); + break; + + case 'index_fld': + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD INDEX( ' + : ', ') + . PMA_Util::backquote($selected[$i]) + . (($i == $selected_cnt-1) ? ');' : ''); + break; + + case 'unique_fld': + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD UNIQUE( ' + : ', ') + . PMA_Util::backquote($selected[$i]) + . (($i == $selected_cnt-1) ? ');' : ''); + break; + + case 'spatial_fld': + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD SPATIAL( ' + : ', ') + . PMA_Util::backquote($selected[$i]) + . (($i == $selected_cnt-1) ? ');' : ''); + break; + + case 'fulltext_fld': + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD FULLTEXT( ' + : ', ') + . PMA_Util::backquote($selected[$i]) + . (($i == $selected_cnt-1) ? ');' : ''); + break; + + case 'add_prefix_tbl': + $newtablename = $_POST['add_prefix'] . $selected[$i]; + // ADD PREFIX TO TABLE NAME + $a_query = 'ALTER TABLE ' + . PMA_Util::backquote($selected[$i]) + . ' RENAME ' + . PMA_Util::backquote($newtablename); + $run_parts = true; + break; + + case 'replace_prefix_tbl': + $current = $selected[$i]; + if (substr($current, 0, strlen($from_prefix)) == $from_prefix) { + $newtablename = $to_prefix . substr($current, strlen($from_prefix)); + } else { + $newtablename = $current; + } + // CHANGE PREFIX PATTERN + $a_query = 'ALTER TABLE ' + . PMA_Util::backquote($selected[$i]) + . ' RENAME ' + . PMA_Util::backquote($newtablename); + $run_parts = true; + break; + + case 'copy_tbl_change_prefix': + $current = $selected[$i]; + if (substr($current, 0, strlen($from_prefix)) == $from_prefix) { + $newtablename = $to_prefix . substr($current, strlen($from_prefix)); + } else { + $newtablename = $current; + } + $newtablename = $to_prefix . substr($current, strlen($from_prefix)); + // COPY TABLE AND CHANGE PREFIX PATTERN + $a_query = 'CREATE TABLE ' + . PMA_Util::backquote($newtablename) + . ' SELECT * FROM ' + . PMA_Util::backquote($selected[$i]); + $run_parts = true; + break; + + } // end switch + + // All "DROP TABLE", "DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE" + // statements will be run at once below + if ($run_parts) { + $sql_query .= $a_query . ';' . "\n"; + if ($query_type != 'drop_db') { + $GLOBALS['dbi']->selectDb($db); + } + $result = $GLOBALS['dbi']->query($a_query); + + if ($query_type == 'drop_db') { + PMA_clearTransformations($selected[$i]); + } elseif ($query_type == 'drop_tbl') { + PMA_clearTransformations($db, $selected[$i]); + } else if ($query_type == 'drop_fld') { + PMA_clearTransformations($db, $table, $selected[$i]); + } + } // end if + } // end for + + return array( + $result, $rebuild_database_list, $reload, + $run_parts, $use_sql, $sql_query, $sql_query_views + ); +} + /** * Gets table primary key * From 4f2559d3a3ee405610183d3bdab32450f27bee49 Mon Sep 17 00:00:00 2001 From: xmujay Date: Sat, 17 Aug 2013 00:23:42 +0800 Subject: [PATCH 4/5] add UT for PMA_mult_submits --- test/libraries/PMA_mult_submits_test.php | 44 ++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/test/libraries/PMA_mult_submits_test.php b/test/libraries/PMA_mult_submits_test.php index f84d636819..56fbf73941 100644 --- a/test/libraries/PMA_mult_submits_test.php +++ b/test/libraries/PMA_mult_submits_test.php @@ -177,5 +177,49 @@ class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase ); } + /** + * Test for PMA_getUrlParams + * + * @return void + */ + public function testPMAGetUrlParams() + { + $what = 'row_delete'; + $reload = true; + $action = 'db_delete_row'; + $db = "PMA_db"; + $table = "PMA_table"; + $selected = array( + "index1" => "table1" + ); + $views = null; + $original_sql_query = "original_sql_query"; + $original_url_query = "original_url_query"; + + $_url_params = PMA_getUrlParams( + $what, $reload, $action, $db, $table, $selected, $views, + $original_sql_query, $original_url_query + ); + $this->assertEquals( + $what, + $_url_params['query_type'] + ); + $this->assertEquals( + $db, + $_url_params['db'] + ); + $this->assertEquals( + array('DELETE FROM `PMA_db`.`PMA_table` WHERE table1 LIMIT 1;'), + $_url_params['selected'] + ); + $this->assertEquals( + $original_sql_query, + $_url_params['original_sql_query'] + ); + $this->assertEquals( + $original_url_query, + $_url_params['original_url_query'] + ); + } } From 8c9d122c174ee018abb6c480506e63cb73641e86 Mon Sep 17 00:00:00 2001 From: xmujay Date: Sat, 17 Aug 2013 17:21:45 +0800 Subject: [PATCH 5/5] fix unset unset($submit_mult); and remove unneeded space --- libraries/mult_submits.inc.php | 12 +++--- libraries/mult_submits.lib.php | 76 +++++++++++++++++----------------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/libraries/mult_submits.inc.php b/libraries/mult_submits.inc.php index b58eb4ee3a..7d20872cdf 100644 --- a/libraries/mult_submits.inc.php +++ b/libraries/mult_submits.inc.php @@ -92,7 +92,7 @@ if (! empty($submit_mult) $selected = $selected_fld; list($what_ret, $query_type_ret, $is_unset_submit_mult, $mult_btn_ret) = PMA_getDataForSubmitMult( - $submit_mult, $db, $table, + $submit_mult, $db, $table, $selected, $action ); //update the exist variables @@ -102,7 +102,7 @@ if (! empty($submit_mult) if (isset($query_type_ret)) { $query_type = $query_type_ret; } - if (isset($is_unset_submit_mult)) { + if ($is_unset_submit_mult) { unset($submit_mult); } if (isset($mult_btn_ret)) { @@ -143,10 +143,10 @@ if (!empty($submit_mult) && !empty($what)) { // Displays the confirmation form $_url_params = PMA_getUrlParams( $what, $reload, $action, $db, $table, $selected, $views, - isset($original_sql_query)? $original_sql_query : null, + isset($original_sql_query)? $original_sql_query : null, isset($original_url_query)? $original_url_query : null ); - + if ($what == 'replace_prefix_tbl' || $what == 'copy_tbl_change_prefix') { echo PMA_getHtmlForReplacePrefixTable($what, $action, $_url_params); } elseif ($what == 'add_prefix_tbl') { @@ -187,7 +187,7 @@ if (!empty($submit_mult) && !empty($what)) { $result, $rebuild_database_list, $reload_ret, $run_parts, $use_sql, $sql_query, $sql_query_views ) = PMA_getQueryStrFromSelected( - $query_type, $selected, $db, $table, $views, + $query_type, $selected, $db, $table, $views, isset($primary) ? $primary : null, isset($from_prefix) ? $from_prefix : null, isset($to_prefix) ? $to_prefix : null @@ -214,7 +214,7 @@ if (!empty($submit_mult) && !empty($what)) { * Parse and analyze the query */ include_once 'libraries/parse_analyze.inc.php'; - + PMA_executeQueryAndSendQueryResponse( $analyzed_sql_results, false, $db, $table, null, null, null, false, null, null, null, null, $goto, $pmaThemeImage, null, null, diff --git a/libraries/mult_submits.lib.php b/libraries/mult_submits.lib.php index 43d062d3e3..7c57bf5b03 100644 --- a/libraries/mult_submits.lib.php +++ b/libraries/mult_submits.lib.php @@ -4,7 +4,7 @@ * functions for multi submit forms * * @usedby mult_submits.inc.php - * + * * @package PhpMyAdmin */ if (! defined('PHPMYADMIN')) { @@ -27,7 +27,7 @@ if (! defined('PHPMYADMIN')) { * @return array */ function PMA_getUrlParams( - $what, $reload, $action, $db, $table, $selected, $views, + $what, $reload, $action, $db, $table, $selected, $views, $original_sql_query, $original_url_query ) { $_url_params = array( @@ -60,12 +60,12 @@ function PMA_getUrlParams( $_url_params['original_url_query'] = $original_url_query; } } - + return $_url_params; } /** - * Gets query results from + * Gets query results from * * @param string $query_type query type * @param array $selected selected tables @@ -79,7 +79,7 @@ function PMA_getUrlParams( * @return array */ function PMA_getQueryStrFromSelected( - $query_type, $selected, $db, $table, $views, $primary, + $query_type, $selected, $db, $table, $views, $primary, $from_prefix, $to_prefix ) { $rebuild_database_list = false; @@ -88,17 +88,17 @@ function PMA_getQueryStrFromSelected( $sql_query = ''; $sql_query_views = null; // whether to run query after each pass - $run_parts = false; + $run_parts = false; // whether to execute the query at the end (to display results) - $use_sql = false; + $use_sql = false; $result = null; - + if ($query_type == 'drop_tbl') { $sql_query_views = ''; } $selected_cnt = count($selected); - + for ($i = 0; $i < $selected_cnt; $i++) { switch ($query_type) { case 'row_delete': @@ -160,50 +160,50 @@ function PMA_getQueryStrFromSelected( case 'drop_fld': PMA_relationsCleanupColumn($db, $table, $selected[$i]); - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) : ',') . ' DROP ' . PMA_Util::backquote($selected[$i]) . (($i == $selected_cnt-1) ? ';' : ''); break; case 'primary_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . (empty($primary) - ? '' - : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( ' + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . (empty($primary) + ? '' + : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( ' : ', ') . PMA_Util::backquote($selected[$i]) . (($i == $selected_cnt-1) ? ');' : ''); break; case 'index_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD INDEX( ' + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD INDEX( ' : ', ') . PMA_Util::backquote($selected[$i]) . (($i == $selected_cnt-1) ? ');' : ''); break; case 'unique_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD UNIQUE( ' + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD UNIQUE( ' : ', ') . PMA_Util::backquote($selected[$i]) . (($i == $selected_cnt-1) ? ');' : ''); break; case 'spatial_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD SPATIAL( ' + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD SPATIAL( ' : ', ') . PMA_Util::backquote($selected[$i]) . (($i == $selected_cnt-1) ? ');' : ''); break; case 'fulltext_fld': - $sql_query .= (empty($sql_query) - ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD FULLTEXT( ' + $sql_query .= (empty($sql_query) + ? 'ALTER TABLE ' . PMA_Util::backquote($table) . ' ADD FULLTEXT( ' : ', ') . PMA_Util::backquote($selected[$i]) . (($i == $selected_cnt-1) ? ');' : ''); @@ -270,11 +270,11 @@ function PMA_getQueryStrFromSelected( } } // end if } // end for - + return array( $result, $rebuild_database_list, $reload, $run_parts, $use_sql, $sql_query, $sql_query_views - ); + ); } /** @@ -299,7 +299,7 @@ function PMA_getKeyForTablePrimary($db, $table) } } // end while $GLOBALS['dbi']->freeResult($result); - + return $primary; } @@ -344,7 +344,7 @@ function PMA_getHtmlForReplacePrefixTable($what, $action, $_url_params) $html .= ''; $html .= ''; $html .= ''; - + return $html; } @@ -377,7 +377,7 @@ function PMA_getHtmlForAddPrefixTable($action, $_url_params) $html .= ''; $html .= ''; $html .= ''; - + return $html; } @@ -412,7 +412,7 @@ function PMA_getHtmlForOtherActions($what, $action, $_url_params, $full_query) $html .= __('Foreign key check:'); $html .= ''; $html .= ''; - $html .= 'fetchValue( 'SHOW VARIABLES LIKE \'foreign_key_checks\';', 0, 1 @@ -436,7 +436,7 @@ function PMA_getHtmlForOtherActions($what, $action, $_url_params, $full_query) $html .= ''; $html .= ''; $html .= ''; - + return $html; } @@ -444,7 +444,7 @@ function PMA_getHtmlForOtherActions($what, $action, $_url_params, $full_query) * Get List of information for Submit Mult * * @param string $submit_mult mult_submit type - * @param string $db dtabase name + * @param string $db dtabase name * @param array $table table name * @param array $selected the selected columns * @param array $action action type @@ -457,7 +457,7 @@ function PMA_getDataForSubmitMult($submit_mult, $db, $table, $selected, $action) $query_type = null; $is_unset_submit_mult = false; $mult_btn = null; - + switch ($submit_mult) { case 'drop': $what = 'drop_fld'; @@ -503,7 +503,7 @@ function PMA_getDataForSubmitMult($submit_mult, $db, $table, $selected, $action) case 'browse': // this should already be handled by tbl_structure.php } - + return array($what, $query_type, $is_unset_submit_mult, $mult_btn); } @@ -524,17 +524,17 @@ function PMA_getQueryFromSelected($what, $db, $table, $selected, $action, $views $reload = null; $full_query_views = null; $full_query = ''; - + if ($what == 'drop_tbl') { $full_query_views = ''; } - + $selected_cnt = count($selected); $i = 0; foreach ($selected as $idx => $sval) { switch ($what) { case 'row_delete': - $full_query .= 'DELETE FROM ' . PMA_Util::backquote($db) + $full_query .= 'DELETE FROM ' . PMA_Util::backquote($db) . '.' . PMA_Util::backquote($table) . ' WHERE ' . urldecode($sval) . ' LIMIT 1' . ';
'; @@ -607,9 +607,9 @@ function PMA_getQueryFromSelected($what, $db, $table, $selected, $action, $views } unset($full_query_views); } - + $full_query_views = isset($full_query_views)? $full_query_views : null; - + return array($full_query, $reload, $full_query_views); }