From cdf7099b18a3a53e132d6845ec92760699df2aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Thu, 21 Oct 2004 15:35:07 +0000 Subject: [PATCH] Allow index creating on multiple fields (RFE #990136). --- ChangeLog | 2 + mult_submits.inc.php | 133 ++++++++++++++++++++++++++++++----- tbl_properties_structure.php | 39 +++++++--- 3 files changed, 145 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index 07b3065f9..fb6d74d2c 100755 --- a/ChangeLog +++ b/ChangeLog @@ -15,6 +15,8 @@ $Source$ libraries/display_tbl.lib.php: New function PMA_buttonOrImage to display button or image to submit form and not to duplicate code on all places. * tbl_addfield.php: Display tabs. + * mult_submits.inc.php, tbl_properties_structure.php: Allow index creating + on multiple fields (RFE #990136). 2004-10-20 Marc Delisle * libraries/common.lib.php: there was already a tip icon in our collection, diff --git a/mult_submits.inc.php b/mult_submits.inc.php index c5147264e..ccc05ca6a 100644 --- a/mult_submits.inc.php +++ b/mult_submits.inc.php @@ -56,10 +56,50 @@ if (!empty($submit_mult) } } else if (!empty($selected_fld)) { $selected = $selected_fld; - if ($submit_mult == $strDrop) { - $what = 'drop_fld'; - } else { - require('./tbl_alter.php'); + switch ($submit_mult) { + case $strDrop: + $what = 'drop_fld'; + break; + case $strPrimary: + // Gets table primary key + PMA_DBI_select_db($db); + $result = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';'); + $primary = ''; + while ($row = PMA_DBI_fetch_assoc($result)) { + // Backups the list of primary keys + if ($row['Key_name'] == 'PRIMARY') { + $primary .= $row['Column_name'] . ', '; + } + } // end while + PMA_DBI_free_result($result); + if (empty($primary)) { + // no primary key, so we can safely create new + unset($submit_mult); + $query_type = 'primary_fld'; + $mult_btn = $strYes; + } else { + // primary key exists, so lets as user + $what = 'primary_fld'; + } + break; + case $strIndex: + unset($submit_mult); + $query_type = 'index_fld'; + $mult_btn = $strYes; + break; + case $strUnique: + unset($submit_mult); + $query_type = 'unique_fld'; + $mult_btn = $strYes; + break; + case $strIdxFulltext: + unset($submit_mult); + $query_type = 'fulltext_fld'; + $mult_btn = $strYes; + break; + case $strChange: + require('./tbl_alter.php'); + break; } } else { $what = 'row_delete'; @@ -115,6 +155,25 @@ if (!empty($submit_mult) && !empty($what)) { . ';
'; break; + case 'primary_fld': + if ($full_query == '') { + $full_query .= 'ALTER TABLE ' + . PMA_backquote(htmlspecialchars($table)) + . '
  DROP PRIMARY KEY,' + . '
   ADD PRIMARY KEY(' + . '
     ' + . PMA_backquote(htmlspecialchars(urldecode($sval))) + . ','; + } else { + $full_query .= '
     ' + . PMA_backquote(htmlspecialchars(urldecode($sval))) + . ','; + } + if ($i == $selected_cnt-1) { + $full_query = preg_replace('@,$@', ');
', $full_query); + } + break; + case 'drop_fld': if ($full_query == '') { $full_query .= 'ALTER TABLE ' @@ -203,10 +262,28 @@ else if ($mult_btn == $strYes) { $sql_query = ''; $selected_cnt = count($selected); + $run_parts = FALSE; // whether to run query after each pass + $use_sql = FALSE; // whether to include sql.php at the end (to display results) + + if ($query_type == 'primary_fld') { + // Gets table primary key + PMA_DBI_select_db($db); + $result = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';'); + $primary = ''; + while ($row = PMA_DBI_fetch_assoc($result)) { + // Backups the list of primary keys + if ($row['Key_name'] == 'PRIMARY') { + $primary .= $row['Column_name'] . ', '; + } + } // end while + PMA_DBI_free_result($result); + } + for ($i = 0; $i < $selected_cnt; $i++) { switch ($query_type) { case 'row_delete': $a_query = urldecode($selected[$i]); + $run_parts = TRUE; break; case 'drop_db': @@ -214,6 +291,7 @@ else if ($mult_btn == $strYes) { $a_query = 'DROP DATABASE ' . PMA_backquote(urldecode($selected[$i])); $reload = 1; + $run_parts = TRUE; break; case 'drop_tbl': @@ -227,21 +305,25 @@ else if ($mult_btn == $strYes) { case 'check_tbl': $sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ') . PMA_backquote(urldecode($selected[$i])); + $use_sql = TRUE; break; case 'optimize_tbl': $sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ') . PMA_backquote(urldecode($selected[$i])); + $use_sql = TRUE; break; case 'analyze_tbl': $sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ') . PMA_backquote(urldecode($selected[$i])); + $use_sql = TRUE; break; case 'repair_tbl': $sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ') . PMA_backquote(urldecode($selected[$i])); + $use_sql = TRUE; break; case 'empty_tbl': @@ -251,6 +333,7 @@ else if ($mult_btn == $strYes) { $a_query = 'DELETE FROM '; } $a_query .= PMA_backquote(htmlspecialchars(urldecode($selected[$i]))); + $run_parts = TRUE; break; case 'drop_fld': @@ -259,17 +342,35 @@ else if ($mult_btn == $strYes) { . ' DROP ' . PMA_backquote(urldecode($selected[$i])) . (($i == $selected_cnt-1) ? ';' : ''); break; + + case 'primary_fld': + $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ( empty($primary) ? '' : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( ' : ', ') + . PMA_backquote(urldecode($selected[$i])) + . (($i == $selected_cnt-1) ? ');' : ''); + break; + + case 'index_fld': + $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD INDEX( ' : ', ') + . PMA_backquote(urldecode($selected[$i])) + . (($i == $selected_cnt-1) ? ');' : ''); + break; + + case 'unique_fld': + $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD UNIQUE( ' : ', ') + . PMA_backquote(urldecode($selected[$i])) + . (($i == $selected_cnt-1) ? ');' : ''); + break; + + case 'fulltext_fld': + $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD FULLTEXT( ' : ', ') + . PMA_backquote(urldecode($selected[$i])) + . (($i == $selected_cnt-1) ? ');' : ''); + break; } // end switch // All "DROP TABLE","DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE" // statements will be run at once below - if ($query_type != 'drop_tbl' - && $query_type != 'drop_fld' - && $query_type != 'repair_tbl' - && $query_type != 'analyze_tbl' - && $query_type != 'optimize_tbl' - && $query_type != 'check_tbl') { - + if ($run_parts) { $sql_query .= $a_query . ';' . "\n"; if ($query_type != 'drop_db') { @@ -279,15 +380,11 @@ else if ($mult_btn == $strYes) { } // end if } // end for - if ($query_type == 'drop_tbl' - || $query_type == 'drop_fld') { + if ($use_sql) { + require('./sql.php'); + } else { PMA_DBI_select_db($db); $result = PMA_DBI_query($sql_query); - } elseif ($query_type == 'repair_tbl' - || $query_type == 'analyze_tbl' - || $query_type == 'check_tbl' - || $query_type == 'optimize_tbl') { - require('./sql.php'); } } diff --git a/tbl_properties_structure.php b/tbl_properties_structure.php index 968e41b27..142f0d718 100644 --- a/tbl_properties_structure.php +++ b/tbl_properties_structure.php @@ -13,9 +13,16 @@ require_once('./libraries/mysql_charsets.lib.php'); // workaround for IE problem: if (isset($submit_mult_change_x)) { $submit_mult = $strChange; -} -if (isset($submit_mult_drop_x)) { +} elseif (isset($submit_mult_drop_x)) { $submit_mult = $strDrop; +} elseif (isset($submit_mult_primary_x)) { + $submit_mult = $strPrimary; +} elseif (isset($submit_mult_index_x)) { + $submit_mult = $strIndex; +} elseif (isset($submit_mult_unique_x)) { + $submit_mult = $strUnique; +} elseif (isset($submit_mult_fulltext_x)) { + $submit_mult = $strIdxFulltext; } if ((!empty($submit_mult) && isset($selected_fld)) @@ -411,24 +418,34 @@ $checkall_url = 'tbl_properties_structure.php?' . PMA_generate_common_url($db,$t '; - $titles['Index'] = $iconic_spacer . '' . $strIndex . ''; - $titles['Unique'] = $iconic_spacer . '' . $strUnique . ''; - $titles['IdxFulltext'] = $iconic_spacer . '' . $strIdxFulltext . ''; - */ if ($cfg['PropertiesIconic']) { PMA_buttonOrImage('submit_mult', 'mult_submit', 'submin_mult_change', $strChange, 'b_edit.png'); // Drop button if there is at least two fields if ($fields_cnt > 1) { PMA_buttonOrImage('submit_mult', 'mult_submit', 'submin_mult_drop', $strDrop, 'b_drop.png'); } + PMA_buttonOrImage('submit_mult', 'mult_submit', 'submin_mult_primary', $strPrimary, 'b_primary.png'); + PMA_buttonOrImage('submit_mult', 'mult_submit', 'submin_mult_index', $strIndex, 'b_index.png'); + PMA_buttonOrImage('submit_mult', 'mult_submit', 'submin_mult_unique', $strUnique, 'b_unique.png'); + if ((!empty($tbl_type) && $tbl_type == 'MYISAM')) { + PMA_buttonOrImage('submit_mult', 'mult_submit', 'submin_mult_fulltext', $strIdxFulltext, 'b_ftext.png'); + } } else { - echo ' ' . "\n"; + echo '' . "\n"; // Drop button if there is at least two fields if ($fields_cnt > 1) { - echo '  ' . $strOr . ' ' . "\n" - . ' ' . "\n"; + echo ' ' . $strOr . ' ' . "\n" + . '' . "\n"; + } + echo ' ' . $strOr . ' ' . "\n" + . '' . "\n"; + echo ' ' . $strOr . ' ' . "\n" + . '' . "\n"; + echo ' ' . $strOr . ' ' . "\n" + . '' . "\n"; + if ((!empty($tbl_type) && $tbl_type == 'MYISAM')) { + echo ' ' . $strOr . ' ' . "\n" + . '' . "\n"; } }