<?php $TABLE = $_GET["indexes"]; $index_types = array("PRIMARY", "UNIQUE", "INDEX"); $table_status = table_status($TABLE, true); if (preg_match('~MyISAM|M?aria' . ($connection->server_info >= 5.6 ? '|InnoDB' : '') . '~i', $table_status["Engine"])) { $index_types[] = "FULLTEXT"; } $indexes = indexes($TABLE); $primary = array(); if ($jush == "mongo") { // doesn't support primary key $primary = $indexes["_id_"]; unset($index_types[0]); unset($indexes["_id_"]); } $row = $_POST; if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) { $alter = array(); foreach ($row["indexes"] as $index) { $name = $index["name"]; if (in_array($index["type"], $index_types)) { $columns = array(); $lengths = array(); $descs = array(); $set = array(); ksort($index["columns"]); foreach ($index["columns"] as $key => $column) { if ($column != "") { $length = $index["lengths"][$key]; $desc = $index["descs"][$key];
function select($result) { global $SELF; if (!$result->num_rows) { echo "<p class='message'>" . lang('No rows.') . "</p>\n"; } else { echo "<table border='1' cellspacing='0' cellpadding='2'>\n"; for ($i = 0; $row = $result->fetch_row(); $i++) { if (!$i) { echo "<thead><tr>"; $links = array(); $indexes = array(); $columns = array(); $blobs = array(); $types = array(); for ($j = 0; $j < count($row); $j++) { $field = $result->fetch_field(); if (strlen($field->orgtable)) { if (!isset($indexes[$field->orgtable])) { $indexes[$field->orgtable] = array(); foreach (indexes($field->orgtable) as $index) { if ($index["type"] == "PRIMARY") { $indexes[$field->orgtable] = array_flip($index["columns"]); break; } } $columns[$field->orgtable] = $indexes[$field->orgtable]; } if (isset($columns[$field->orgtable][$field->orgname])) { unset($columns[$field->orgtable][$field->orgname]); $indexes[$field->orgtable][$field->orgname] = $j; $links[$j] = $field->orgtable; } } if ($field->charsetnr == 63) { $blobs[$j] = true; } $types[$j] = $field->type; echo "<th>" . htmlspecialchars($field->name) . "</th>"; } echo "</tr></thead>\n"; } echo "<tr>"; foreach ($row as $key => $val) { if (!isset($val)) { $val = "<i>NULL</i>"; } else { if ($blobs[$key] && preg_match('~[\\x80-\\xFF]~', $val)) { $val = "<i>" . lang('%d byte(s)', strlen($val)) . "</i>"; } else { $val = strlen(trim($val)) ? nl2br(htmlspecialchars($val)) : " "; if ($types[$key] == 254) { $val = "<code>{$val}</code>"; } } if (isset($links[$key]) && !$columns[$links[$key]]) { $link = "edit=" . urlencode($links[$key]); foreach ($indexes[$links[$key]] as $col => $j) { $link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]); } $val = '<a href="' . htmlspecialchars($SELF) . $link . '">' . $val . '</a>'; } } echo "<td>{$val}</td>"; } echo "</tr>\n"; } echo "</table>\n"; } $result->free(); }
/** Print select result * @param Min_Result * @param Min_DB connection to examine indexes * @param array * @param int * @return array $orgtables */ function select($result, $connection2 = null, $orgtables = array(), $limit = 0) { global $jush; $links = array(); // colno => orgtable - create links from these columns $indexes = array(); // orgtable => array(column => colno) - primary keys $columns = array(); // orgtable => array(column => ) - not selected columns in primary key $blobs = array(); // colno => bool - display bytes for blobs $types = array(); // colno => type - display char in <code> $return = array(); // table => orgtable - mapping to use in EXPLAIN odd(''); // reset odd for each result for ($i = 0; (!$limit || $i < $limit) && ($row = $result->fetch_row()); $i++) { if (!$i) { echo "<table cellspacing='0' class='nowrap'>\n"; echo "<thead><tr>"; for ($j = 0; $j < count($row); $j++) { $field = $result->fetch_field(); $name = $field->name; $orgtable = $field->orgtable; $orgname = $field->orgname; $return[$field->table] = $orgtable; if ($orgtables && $jush == "sql") { // MySQL EXPLAIN $links[$j] = $name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null); } elseif ($orgtable != "") { if (!isset($indexes[$orgtable])) { // find primary key in each table $indexes[$orgtable] = array(); foreach (indexes($orgtable, $connection2) as $index) { if ($index["type"] == "PRIMARY") { $indexes[$orgtable] = array_flip($index["columns"]); break; } } $columns[$orgtable] = $indexes[$orgtable]; } if (isset($columns[$orgtable][$orgname])) { unset($columns[$orgtable][$orgname]); $indexes[$orgtable][$orgname] = $j; $links[$j] = $orgtable; } } if ($field->charsetnr == 63) { // 63 - binary $blobs[$j] = true; } $types[$j] = $field->type; echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "{$orgtable}." : "") . $orgname) . "'" : "") . ">" . h($name) . ($orgtables ? doc_link(array('sql' => "explain-output.html#explain_" . strtolower($name))) : ""); } echo "</thead>\n"; } echo "<tr" . odd() . ">"; foreach ($row as $key => $val) { if ($val === null) { $val = "<i>NULL</i>"; } elseif ($blobs[$key] && !is_utf8($val)) { $val = "<i>" . lang('%d byte(s)', strlen($val)) . "</i>"; //! link to download } elseif (!strlen($val)) { // strlen - SQLite can return int $val = " "; // some content to print a border } else { $val = h($val); if ($types[$key] == 254) { // 254 - char $val = "<code>{$val}</code>"; } } if (isset($links[$key]) && !$columns[$links[$key]]) { if ($orgtables && $jush == "sql") { // MySQL EXPLAIN $table = $row[array_search("table=", $links)]; $link = $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table); } else { $link = "edit=" . urlencode($links[$key]); foreach ($indexes[$links[$key]] as $col => $j) { $link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]); } } $val = "<a href='" . h(ME . $link) . "'>{$val}</a>"; } echo "<td>{$val}"; } } echo ($i ? "</table>" : "<p class='message'>" . lang('No rows.')) . "\n"; return $return; }
/** Generate modifier for auto increment column * @return string */ function auto_increment() { $auto_increment_index = " PRIMARY KEY"; // don't overwrite primary key by auto_increment if ($_GET["create"] != "" && $_POST["auto_increment_col"]) { foreach (indexes($_GET["create"]) as $index) { if (in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"], $index["columns"], true)) { $auto_increment_index = ""; break; } if ($index["type"] == "PRIMARY") { $auto_increment_index = " UNIQUE"; } } } return " AUTO_INCREMENT{$auto_increment_index}"; }