Allow index creating on multiple fields (RFE #990136).

This commit is contained in:
Michal Čihař
2004-10-21 15:35:07 +00:00
parent 2a8826922f
commit cdf7099b18
3 changed files with 145 additions and 29 deletions

View File

@@ -15,6 +15,8 @@ $Source$
libraries/display_tbl.lib.php: New function PMA_buttonOrImage to display 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. button or image to submit form and not to duplicate code on all places.
* tbl_addfield.php: Display tabs. * 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 <lem9@users.sourceforge.net> 2004-10-20 Marc Delisle <lem9@users.sourceforge.net>
* libraries/common.lib.php: there was already a tip icon in our collection, * libraries/common.lib.php: there was already a tip icon in our collection,

View File

@@ -56,10 +56,50 @@ if (!empty($submit_mult)
} }
} else if (!empty($selected_fld)) { } else if (!empty($selected_fld)) {
$selected = $selected_fld; $selected = $selected_fld;
if ($submit_mult == $strDrop) { switch ($submit_mult) {
$what = 'drop_fld'; case $strDrop:
} else { $what = 'drop_fld';
require('./tbl_alter.php'); 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 { } else {
$what = 'row_delete'; $what = 'row_delete';
@@ -115,6 +155,25 @@ if (!empty($submit_mult) && !empty($what)) {
. ';<br />'; . ';<br />';
break; break;
case 'primary_fld':
if ($full_query == '') {
$full_query .= 'ALTER TABLE '
. PMA_backquote(htmlspecialchars($table))
. '<br />&nbsp;&nbsp;DROP PRIMARY KEY,'
. '<br />&nbsp;&nbsp; ADD PRIMARY KEY('
. '<br />&nbsp;&nbsp;&nbsp;&nbsp; '
. PMA_backquote(htmlspecialchars(urldecode($sval)))
. ',';
} else {
$full_query .= '<br />&nbsp;&nbsp;&nbsp;&nbsp; '
. PMA_backquote(htmlspecialchars(urldecode($sval)))
. ',';
}
if ($i == $selected_cnt-1) {
$full_query = preg_replace('@,$@', ');<br />', $full_query);
}
break;
case 'drop_fld': case 'drop_fld':
if ($full_query == '') { if ($full_query == '') {
$full_query .= 'ALTER TABLE ' $full_query .= 'ALTER TABLE '
@@ -203,10 +262,28 @@ else if ($mult_btn == $strYes) {
$sql_query = ''; $sql_query = '';
$selected_cnt = count($selected); $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++) { for ($i = 0; $i < $selected_cnt; $i++) {
switch ($query_type) { switch ($query_type) {
case 'row_delete': case 'row_delete':
$a_query = urldecode($selected[$i]); $a_query = urldecode($selected[$i]);
$run_parts = TRUE;
break; break;
case 'drop_db': case 'drop_db':
@@ -214,6 +291,7 @@ else if ($mult_btn == $strYes) {
$a_query = 'DROP DATABASE ' $a_query = 'DROP DATABASE '
. PMA_backquote(urldecode($selected[$i])); . PMA_backquote(urldecode($selected[$i]));
$reload = 1; $reload = 1;
$run_parts = TRUE;
break; break;
case 'drop_tbl': case 'drop_tbl':
@@ -227,21 +305,25 @@ else if ($mult_btn == $strYes) {
case 'check_tbl': case 'check_tbl':
$sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ') $sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ')
. PMA_backquote(urldecode($selected[$i])); . PMA_backquote(urldecode($selected[$i]));
$use_sql = TRUE;
break; break;
case 'optimize_tbl': case 'optimize_tbl':
$sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ') $sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ')
. PMA_backquote(urldecode($selected[$i])); . PMA_backquote(urldecode($selected[$i]));
$use_sql = TRUE;
break; break;
case 'analyze_tbl': case 'analyze_tbl':
$sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ') $sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ')
. PMA_backquote(urldecode($selected[$i])); . PMA_backquote(urldecode($selected[$i]));
$use_sql = TRUE;
break; break;
case 'repair_tbl': case 'repair_tbl':
$sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ') $sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ')
. PMA_backquote(urldecode($selected[$i])); . PMA_backquote(urldecode($selected[$i]));
$use_sql = TRUE;
break; break;
case 'empty_tbl': case 'empty_tbl':
@@ -251,6 +333,7 @@ else if ($mult_btn == $strYes) {
$a_query = 'DELETE FROM '; $a_query = 'DELETE FROM ';
} }
$a_query .= PMA_backquote(htmlspecialchars(urldecode($selected[$i]))); $a_query .= PMA_backquote(htmlspecialchars(urldecode($selected[$i])));
$run_parts = TRUE;
break; break;
case 'drop_fld': case 'drop_fld':
@@ -259,17 +342,35 @@ else if ($mult_btn == $strYes) {
. ' DROP ' . PMA_backquote(urldecode($selected[$i])) . ' DROP ' . PMA_backquote(urldecode($selected[$i]))
. (($i == $selected_cnt-1) ? ';' : ''); . (($i == $selected_cnt-1) ? ';' : '');
break; 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 } // end switch
// All "DROP TABLE","DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE" // All "DROP TABLE","DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE"
// statements will be run at once below // statements will be run at once below
if ($query_type != 'drop_tbl' if ($run_parts) {
&& $query_type != 'drop_fld'
&& $query_type != 'repair_tbl'
&& $query_type != 'analyze_tbl'
&& $query_type != 'optimize_tbl'
&& $query_type != 'check_tbl') {
$sql_query .= $a_query . ';' . "\n"; $sql_query .= $a_query . ';' . "\n";
if ($query_type != 'drop_db') { if ($query_type != 'drop_db') {
@@ -279,15 +380,11 @@ else if ($mult_btn == $strYes) {
} // end if } // end if
} // end for } // end for
if ($query_type == 'drop_tbl' if ($use_sql) {
|| $query_type == 'drop_fld') { require('./sql.php');
} else {
PMA_DBI_select_db($db); PMA_DBI_select_db($db);
$result = PMA_DBI_query($sql_query); $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');
} }
} }

View File

@@ -13,9 +13,16 @@ require_once('./libraries/mysql_charsets.lib.php');
// workaround for IE problem: // workaround for IE problem:
if (isset($submit_mult_change_x)) { if (isset($submit_mult_change_x)) {
$submit_mult = $strChange; $submit_mult = $strChange;
} } elseif (isset($submit_mult_drop_x)) {
if (isset($submit_mult_drop_x)) {
$submit_mult = $strDrop; $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)) if ((!empty($submit_mult) && isset($selected_fld))
@@ -411,24 +418,34 @@ $checkall_url = 'tbl_properties_structure.php?' . PMA_generate_common_url($db,$t
<td> <td>
<?php <?php
/*
$titles['Primary'] = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_primary.png" alt="' . $strPrimary . '" title="' . $strPrimary . '" border="0" />';
$titles['Index'] = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_index.png" alt="' . $strIndex . '" title="' . $strIndex . '" border="0" />';
$titles['Unique'] = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_unique.png" alt="' . $strUnique . '" title="' . $strUnique . '" border="0" />';
$titles['IdxFulltext'] = $iconic_spacer . '<img hspace="2" width="16" height="16" src="' . $pmaThemeImage . 'b_ftext.png" alt="' . $strIdxFulltext . '" title="' . $strIdxFulltext . '" border="0" />';
*/
if ($cfg['PropertiesIconic']) { if ($cfg['PropertiesIconic']) {
PMA_buttonOrImage('submit_mult', 'mult_submit', 'submin_mult_change', $strChange, 'b_edit.png'); PMA_buttonOrImage('submit_mult', 'mult_submit', 'submin_mult_change', $strChange, 'b_edit.png');
// Drop button if there is at least two fields // Drop button if there is at least two fields
if ($fields_cnt > 1) { 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_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 { } else {
echo ' <input type="submit" name="submit_mult" value="' . $strChange . '" title="' . $strChange . '" />' . "\n"; echo '<input type="submit" name="submit_mult" value="' . $strChange . '" title="' . $strChange . '" />' . "\n";
// Drop button if there is at least two fields // Drop button if there is at least two fields
if ($fields_cnt > 1) { if ($fields_cnt > 1) {
echo ' &nbsp;<i>' . $strOr . '</i>&nbsp;' . "\n" echo '&nbsp;<i>' . $strOr . '</i>&nbsp;' . "\n"
. ' <input type="submit" name="submit_mult" value="' . $strDrop . '" title="' . $strDrop . '" />' . "\n"; . '<input type="submit" name="submit_mult" value="' . $strDrop . '" title="' . $strDrop . '" />' . "\n";
}
echo '&nbsp;<i>' . $strOr . '</i>&nbsp;' . "\n"
. '<input type="submit" name="submit_mult" value="' . $strPrimary . '" title="' . $strPrimary . '" />' . "\n";
echo '&nbsp;<i>' . $strOr . '</i>&nbsp;' . "\n"
. '<input type="submit" name="submit_mult" value="' . $strIndex . '" title="' . $strIndex . '" />' . "\n";
echo '&nbsp;<i>' . $strOr . '</i>&nbsp;' . "\n"
. '<input type="submit" name="submit_mult" value="' . $strUnique . '" title="' . $strUnique . '" />' . "\n";
if ((!empty($tbl_type) && $tbl_type == 'MYISAM')) {
echo '&nbsp;<i>' . $strOr . '</i>&nbsp;' . "\n"
. '<input type="submit" name="submit_mult" value="' . $strIdxFulltext . '" title="' . $strIdxFulltext . '" />' . "\n";
} }
} }