Separate MySQL functions
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@603 7c3ca157-0c34-0410-bff1-cbf682f78f5c
This commit is contained in:
parent
5f16c75c1d
commit
812f350805
|
@ -41,15 +41,6 @@ function get_vals($query) {
|
|||
return $return;
|
||||
}
|
||||
|
||||
function get_databases() {
|
||||
$return = &$_SESSION["databases"][$_GET["server"]];
|
||||
if (!isset($return)) {
|
||||
flush();
|
||||
$return = get_vals("SHOW DATABASES");
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function table_status($table) {
|
||||
global $dbh;
|
||||
$result = $dbh->query("SHOW TABLE STATUS LIKE '" . $dbh->escape_string(addcslashes($table, "%_")) . "'");
|
||||
|
@ -58,77 +49,6 @@ function table_status($table) {
|
|||
return $return;
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
global $dbh;
|
||||
$return = array();
|
||||
$result = $dbh->query("SHOW FULL COLUMNS FROM " . idf_escape($table));
|
||||
if ($result) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
preg_match('~^([^( ]+)(?:\\((.+)\\))?( unsigned)?( zerofill)?$~', $row["Type"], $match);
|
||||
$return[$row["Field"]] = array(
|
||||
"field" => $row["Field"],
|
||||
"type" => $match[1],
|
||||
"length" => $match[2],
|
||||
"unsigned" => ltrim($match[3] . $match[4]),
|
||||
"default" => (strlen($row["Default"]) || ereg("char", $match[1]) ? $row["Default"] : null),
|
||||
"null" => ($row["Null"] == "YES"),
|
||||
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
||||
"collation" => $row["Collation"],
|
||||
"privileges" => array_flip(explode(",", $row["Privileges"])),
|
||||
"comment" => $row["Comment"],
|
||||
"primary" => ($row["Key"] == "PRI"),
|
||||
);
|
||||
}
|
||||
$result->free();
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function indexes($table) {
|
||||
global $dbh;
|
||||
$return = array();
|
||||
$result = $dbh->query("SHOW INDEX FROM " . idf_escape($table));
|
||||
if ($result) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$return[$row["Key_name"]]["type"] = ($row["Key_name"] == "PRIMARY" ? "PRIMARY" : ($row["Index_type"] == "FULLTEXT" ? "FULLTEXT" : ($row["Non_unique"] ? "INDEX" : "UNIQUE")));
|
||||
$return[$row["Key_name"]]["columns"][$row["Seq_in_index"]] = $row["Column_name"];
|
||||
$return[$row["Key_name"]]["lengths"][$row["Seq_in_index"]] = $row["Sub_part"];
|
||||
}
|
||||
$result->free();
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
global $dbh, $on_actions;
|
||||
static $pattern = '(?:[^`]+|``)+';
|
||||
$return = array();
|
||||
$result = $dbh->query("SHOW CREATE TABLE " . idf_escape($table));
|
||||
if ($result) {
|
||||
$create_table = $dbh->result($result, 1);
|
||||
$result->free();
|
||||
preg_match_all("~CONSTRAINT `($pattern)` FOREIGN KEY \\(((?:`$pattern`,? ?)+)\\) REFERENCES `($pattern)`(?:\\.`($pattern)`)? \\(((?:`$pattern`,? ?)+)\\)(?: ON DELETE (" . implode("|", $on_actions) . "))?(?: ON UPDATE (" . implode("|", $on_actions) . "))?~", $create_table, $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $match) {
|
||||
preg_match_all("~`($pattern)`~", $match[2], $source);
|
||||
preg_match_all("~`($pattern)`~", $match[5], $target);
|
||||
$return[$match[1]] = array(
|
||||
"db" => idf_unescape(strlen($match[4]) ? $match[3] : $match[4]),
|
||||
"table" => idf_unescape(strlen($match[4]) ? $match[4] : $match[3]),
|
||||
"source" => array_map('idf_unescape', $source[1]),
|
||||
"target" => array_map('idf_unescape', $target[1]),
|
||||
"on_delete" => $match[6],
|
||||
"on_update" => $match[7],
|
||||
);
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function view($name) {
|
||||
global $dbh;
|
||||
return array("select" => preg_replace('~^(?:[^`]+|`[^`]*`)* AS ~U', '', $dbh->result($dbh->query("SHOW CREATE VIEW " . idf_escape($name)), 1)));
|
||||
}
|
||||
|
||||
function unique_idf($row, $indexes) {
|
||||
foreach ($indexes as $index) {
|
||||
if ($index["type"] == "PRIMARY" || $index["type"] == "UNIQUE") {
|
||||
|
@ -168,21 +88,6 @@ function process_length($length) {
|
|||
return (preg_match("~^\\s*(?:$enum_length)(?:\\s*,\\s*(?:$enum_length))*\\s*\$~", $length) && preg_match_all("~$enum_length~", $length, $matches) ? implode(",", $matches[0]) : preg_replace('~[^0-9,+-]~', '', $length));
|
||||
}
|
||||
|
||||
function collations() {
|
||||
global $dbh;
|
||||
$return = array();
|
||||
$result = $dbh->query("SHOW COLLATION");
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
if ($row["Default"] && $return[$row["Charset"]]) {
|
||||
array_unshift($return[$row["Charset"]], $row["Collation"]);
|
||||
} else {
|
||||
$return[$row["Charset"]][] = $row["Collation"];
|
||||
}
|
||||
}
|
||||
$result->free();
|
||||
return $return;
|
||||
}
|
||||
|
||||
function redirect($location, $message = null) {
|
||||
if (isset($message)) {
|
||||
$_SESSION["messages"][] = $message;
|
||||
|
@ -322,12 +227,6 @@ function shorten_utf8($string, $length) {
|
|||
return nl2br(htmlspecialchars($match[1])) . ($match[2] ? "<em>...</em>" : "");
|
||||
}
|
||||
|
||||
function table_comment(&$row) {
|
||||
if ($row["Engine"] == "InnoDB") {
|
||||
$row["Comment"] = preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["Comment"]);
|
||||
}
|
||||
}
|
||||
|
||||
function hidden_fields($process, $ignore = array()) {
|
||||
while (list($key, $val) = each($process)) {
|
||||
if (is_array($val)) {
|
||||
|
|
13
index.php
13
index.php
|
@ -49,8 +49,8 @@ $SELF = preg_replace('~^[^?]*/([^?]*).*~', '\\1?', $_SERVER["REQUEST_URI"]) . (s
|
|||
include "./functions.inc.php";
|
||||
include "./lang.inc.php";
|
||||
include "./lang/$LANG.inc.php";
|
||||
include "./mysql.inc.php";
|
||||
include "./design.inc.php";
|
||||
include "./abstraction.inc.php";
|
||||
include "./auth.inc.php";
|
||||
include "./connect.inc.php";
|
||||
include "./editing.inc.php";
|
||||
|
@ -60,17 +60,6 @@ if (isset($_GET["download"])) {
|
|||
include "./download.inc.php";
|
||||
} else { // outputs footer
|
||||
$on_actions = array("RESTRICT", "CASCADE", "SET NULL", "NO ACTION");
|
||||
$types = array(
|
||||
"tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20,
|
||||
"float" => 12, "double" => 21, "decimal" => 66,
|
||||
"date" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4,
|
||||
"char" => 255, "varchar" => 65535,
|
||||
"binary" => 255, "varbinary" => 65535,
|
||||
"tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295,
|
||||
"tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295,
|
||||
"enum" => 65535, "set" => 64,
|
||||
);
|
||||
$unsigned = array("", "unsigned", "zerofill", "unsigned zerofill");
|
||||
$enum_length = '\'(?:\'\'|[^\'\\\\]+|\\\\.)*\'|"(?:""|[^"\\\\]+|\\\\.)*"';
|
||||
$inout = array("IN", "OUT", "INOUT");
|
||||
$confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\"";
|
||||
|
|
|
@ -262,3 +262,116 @@ if (extension_loaded("mysqli")) {
|
|||
page_footer("auth");
|
||||
exit;
|
||||
}
|
||||
|
||||
$types = array(
|
||||
"tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20,
|
||||
"float" => 12, "double" => 21, "decimal" => 66,
|
||||
"date" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4,
|
||||
"char" => 255, "varchar" => 65535,
|
||||
"binary" => 255, "varbinary" => 65535,
|
||||
"tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295,
|
||||
"tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295,
|
||||
"enum" => 65535, "set" => 64,
|
||||
);
|
||||
$unsigned = array("", "unsigned", "zerofill", "unsigned zerofill");
|
||||
|
||||
function get_databases() {
|
||||
$return = &$_SESSION["databases"][$_GET["server"]];
|
||||
if (!isset($return)) {
|
||||
flush();
|
||||
$return = get_vals("SHOW DATABASES");
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
global $dbh;
|
||||
$return = array();
|
||||
$result = $dbh->query("SHOW FULL COLUMNS FROM " . idf_escape($table));
|
||||
if ($result) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
preg_match('~^([^( ]+)(?:\\((.+)\\))?( unsigned)?( zerofill)?$~', $row["Type"], $match);
|
||||
$return[$row["Field"]] = array(
|
||||
"field" => $row["Field"],
|
||||
"type" => $match[1],
|
||||
"length" => $match[2],
|
||||
"unsigned" => ltrim($match[3] . $match[4]),
|
||||
"default" => (strlen($row["Default"]) || ereg("char", $match[1]) ? $row["Default"] : null),
|
||||
"null" => ($row["Null"] == "YES"),
|
||||
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
||||
"collation" => $row["Collation"],
|
||||
"privileges" => array_flip(explode(",", $row["Privileges"])),
|
||||
"comment" => $row["Comment"],
|
||||
"primary" => ($row["Key"] == "PRI"),
|
||||
);
|
||||
}
|
||||
$result->free();
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function indexes($table) {
|
||||
global $dbh;
|
||||
$return = array();
|
||||
$result = $dbh->query("SHOW INDEX FROM " . idf_escape($table));
|
||||
if ($result) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$return[$row["Key_name"]]["type"] = ($row["Key_name"] == "PRIMARY" ? "PRIMARY" : ($row["Index_type"] == "FULLTEXT" ? "FULLTEXT" : ($row["Non_unique"] ? "INDEX" : "UNIQUE")));
|
||||
$return[$row["Key_name"]]["columns"][$row["Seq_in_index"]] = $row["Column_name"];
|
||||
$return[$row["Key_name"]]["lengths"][$row["Seq_in_index"]] = $row["Sub_part"];
|
||||
}
|
||||
$result->free();
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
global $dbh, $on_actions;
|
||||
static $pattern = '(?:[^`]+|``)+';
|
||||
$return = array();
|
||||
$result = $dbh->query("SHOW CREATE TABLE " . idf_escape($table));
|
||||
if ($result) {
|
||||
$create_table = $dbh->result($result, 1);
|
||||
$result->free();
|
||||
preg_match_all("~CONSTRAINT `($pattern)` FOREIGN KEY \\(((?:`$pattern`,? ?)+)\\) REFERENCES `($pattern)`(?:\\.`($pattern)`)? \\(((?:`$pattern`,? ?)+)\\)(?: ON DELETE (" . implode("|", $on_actions) . "))?(?: ON UPDATE (" . implode("|", $on_actions) . "))?~", $create_table, $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $match) {
|
||||
preg_match_all("~`($pattern)`~", $match[2], $source);
|
||||
preg_match_all("~`($pattern)`~", $match[5], $target);
|
||||
$return[$match[1]] = array(
|
||||
"db" => idf_unescape(strlen($match[4]) ? $match[3] : $match[4]),
|
||||
"table" => idf_unescape(strlen($match[4]) ? $match[4] : $match[3]),
|
||||
"source" => array_map('idf_unescape', $source[1]),
|
||||
"target" => array_map('idf_unescape', $target[1]),
|
||||
"on_delete" => $match[6],
|
||||
"on_update" => $match[7],
|
||||
);
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function view($name) {
|
||||
global $dbh;
|
||||
return array("select" => preg_replace('~^(?:[^`]+|`[^`]*`)* AS ~U', '', $dbh->result($dbh->query("SHOW CREATE VIEW " . idf_escape($name)), 1)));
|
||||
}
|
||||
|
||||
function collations() {
|
||||
global $dbh;
|
||||
$return = array();
|
||||
$result = $dbh->query("SHOW COLLATION");
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
if ($row["Default"] && $return[$row["Charset"]]) {
|
||||
array_unshift($return[$row["Charset"]], $row["Collation"]);
|
||||
} else {
|
||||
$return[$row["Charset"]][] = $row["Collation"];
|
||||
}
|
||||
}
|
||||
$result->free();
|
||||
return $return;
|
||||
}
|
||||
|
||||
function table_comment(&$row) {
|
||||
if ($row["Engine"] == "InnoDB") {
|
||||
$row["Comment"] = preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["Comment"]);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue