adminerevo/adminer/indexes.inc.php

122 lines
4.4 KiB
PHP
Raw Normal View History

<?php
$TABLE = $_GET["indexes"];
$index_types = array("PRIMARY", "UNIQUE", "INDEX");
2013-04-27 03:04:57 +00:00
$table_status = table_status($TABLE, true);
2013-02-20 00:57:04 +00:00
if (eregi("MyISAM|M?aria" . ($connection->server_info >= 5.6 ? "|InnoDB" : ""), $table_status["Engine"])) {
$index_types[] = "FULLTEXT";
}
$indexes = indexes($TABLE);
if ($jush == "sqlite") { // doesn't support primary key
unset($index_types[0]);
unset($indexes[""]);
}
2013-05-08 15:43:15 +00:00
$row = $_POST;
2013-05-02 01:28:04 +00:00
2013-07-07 06:35:26 +00:00
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
$alter = array();
2013-05-08 15:43:15 +00:00
foreach ($row["indexes"] as $index) {
2011-07-13 13:13:00 +00:00
$name = $index["name"];
if (in_array($index["type"], $index_types)) {
$columns = array();
$lengths = array();
2013-06-25 16:42:47 +00:00
$descs = array();
$set = array();
ksort($index["columns"]);
foreach ($index["columns"] as $key => $column) {
if ($column != "") {
$length = $index["lengths"][$key];
2013-06-25 16:42:47 +00:00
$desc = $index["descs"][$key];
$set[] = idf_escape($column) . ($length ? "(" . (+$length) . ")" : "") . ($desc ? " DESC" : "");
$columns[] = $column;
$lengths[] = ($length ? $length : null);
2013-06-25 16:42:47 +00:00
$descs[] = $desc;
}
}
2013-05-02 01:28:04 +00:00
if ($columns) {
2011-07-13 13:13:00 +00:00
$existing = $indexes[$name];
if ($existing) {
ksort($existing["columns"]);
ksort($existing["lengths"]);
2013-06-25 16:42:47 +00:00
ksort($existing["descs"]);
if ($index["type"] == $existing["type"]
&& array_values($existing["columns"]) === $columns
&& (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths)
&& array_values($existing["descs"]) === $descs
) {
// skip existing index
unset($indexes[$name]);
2011-07-13 13:13:00 +00:00
continue;
}
}
2011-07-13 13:13:00 +00:00
$alter[] = array($index["type"], $name, "(" . implode(", ", $set) . ")");
}
}
}
2013-05-02 01:28:04 +00:00
// drop removed indexes
foreach ($indexes as $name => $existing) {
2011-07-13 13:13:00 +00:00
$alter[] = array($existing["type"], $name, "DROP");
}
if (!$alter) {
redirect(ME . "table=" . urlencode($TABLE));
}
queries_redirect(ME . "table=" . urlencode($TABLE), lang('Indexes have been altered.'), alter_indexes($TABLE, $alter));
}
page_header(lang('Indexes'), $error, array("table" => $TABLE), h($TABLE));
$fields = array_keys(fields($TABLE));
2013-05-08 15:43:15 +00:00
if ($_POST["add"]) {
foreach ($row["indexes"] as $key => $index) {
if ($index["columns"][count($index["columns"])] != "") {
$row["indexes"][$key]["columns"][] = "";
}
}
2013-05-08 15:43:15 +00:00
$index = end($row["indexes"]);
2013-07-07 06:42:37 +00:00
if ($index["type"] || array_filter($index["columns"], 'strlen')) {
2013-05-08 15:43:15 +00:00
$row["indexes"][] = array("columns" => array(1 => ""));
}
}
if (!$row) {
foreach ($indexes as $key => $index) {
$indexes[$key]["name"] = $key;
$indexes[$key]["columns"][] = "";
}
2013-05-08 15:43:15 +00:00
$indexes[] = array("columns" => array(1 => ""));
$row["indexes"] = $indexes;
}
?>
<form action="" method="post">
2010-06-30 15:09:08 +00:00
<table cellspacing="0" class="nowrap">
2013-07-07 06:42:04 +00:00
<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?><th><?php echo lang('Name'); ?><th><noscript><input type='image' class='icon' name='add[0]' src='../adminer/static/plus.gif' alt='+' title='<?php echo lang('Add next'); ?>'></noscript>&nbsp;</thead>
<?php
2010-06-30 15:09:08 +00:00
$j = 1;
foreach ($row["indexes"] as $index) {
2013-07-07 06:35:26 +00:00
if (!$_POST["drop_col"] || $j != key($_POST["drop_col"])) {
echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow(this);" : 1));
echo "<td>";
ksort($index["columns"]);
$i = 1;
foreach ($index["columns"] as $key => $column) {
echo "<span>" . html_select("indexes[$j][columns][$i]", array(-1 => "") + $fields, $column, ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . "(this, '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "');");
echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "'>" : "");
echo ($jush != "sql" ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
echo " </span>";
$i++;
}
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "' autocapitalize='off'>\n";
echo "<td><input type='image' class='icon' name='drop_col[$j]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick=\"return !editingRemoveRow(this, 'indexes\$1[type]');\">\n";
}
$j++;
}
?>
</table>
<p>
<input type="submit" value="<?php echo lang('Save'); ?>">
2011-03-08 12:43:05 +00:00
<input type="hidden" name="token" value="<?php echo $token; ?>">
</form>