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;
|
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) {
|
function table_status($table) {
|
||||||
global $dbh;
|
global $dbh;
|
||||||
$result = $dbh->query("SHOW TABLE STATUS LIKE '" . $dbh->escape_string(addcslashes($table, "%_")) . "'");
|
$result = $dbh->query("SHOW TABLE STATUS LIKE '" . $dbh->escape_string(addcslashes($table, "%_")) . "'");
|
||||||
|
@ -58,77 +49,6 @@ function table_status($table) {
|
||||||
return $return;
|
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) {
|
function unique_idf($row, $indexes) {
|
||||||
foreach ($indexes as $index) {
|
foreach ($indexes as $index) {
|
||||||
if ($index["type"] == "PRIMARY" || $index["type"] == "UNIQUE") {
|
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));
|
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) {
|
function redirect($location, $message = null) {
|
||||||
if (isset($message)) {
|
if (isset($message)) {
|
||||||
$_SESSION["messages"][] = $message;
|
$_SESSION["messages"][] = $message;
|
||||||
|
@ -322,12 +227,6 @@ function shorten_utf8($string, $length) {
|
||||||
return nl2br(htmlspecialchars($match[1])) . ($match[2] ? "<em>...</em>" : "");
|
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()) {
|
function hidden_fields($process, $ignore = array()) {
|
||||||
while (list($key, $val) = each($process)) {
|
while (list($key, $val) = each($process)) {
|
||||||
if (is_array($val)) {
|
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 "./functions.inc.php";
|
||||||
include "./lang.inc.php";
|
include "./lang.inc.php";
|
||||||
include "./lang/$LANG.inc.php";
|
include "./lang/$LANG.inc.php";
|
||||||
|
include "./mysql.inc.php";
|
||||||
include "./design.inc.php";
|
include "./design.inc.php";
|
||||||
include "./abstraction.inc.php";
|
|
||||||
include "./auth.inc.php";
|
include "./auth.inc.php";
|
||||||
include "./connect.inc.php";
|
include "./connect.inc.php";
|
||||||
include "./editing.inc.php";
|
include "./editing.inc.php";
|
||||||
|
@ -60,17 +60,6 @@ if (isset($_GET["download"])) {
|
||||||
include "./download.inc.php";
|
include "./download.inc.php";
|
||||||
} else { // outputs footer
|
} else { // outputs footer
|
||||||
$on_actions = array("RESTRICT", "CASCADE", "SET NULL", "NO ACTION");
|
$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 = '\'(?:\'\'|[^\'\\\\]+|\\\\.)*\'|"(?:""|[^"\\\\]+|\\\\.)*"';
|
$enum_length = '\'(?:\'\'|[^\'\\\\]+|\\\\.)*\'|"(?:""|[^"\\\\]+|\\\\.)*"';
|
||||||
$inout = array("IN", "OUT", "INOUT");
|
$inout = array("IN", "OUT", "INOUT");
|
||||||
$confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\"";
|
$confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\"";
|
||||||
|
|
|
@ -262,3 +262,116 @@ if (extension_loaded("mysqli")) {
|
||||||
page_footer("auth");
|
page_footer("auth");
|
||||||
exit;
|
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