Thread: [adminer-svn] SF.net SVN: adminer:[1287] trunk (Page 2)
Database management in a single PHP file
Brought to you by:
jakubvrana
From: <jak...@us...> - 2010-01-08 17:12:10
|
Revision: 1287 http://adminer.svn.sourceforge.net/adminer/?rev=1287&view=rev Author: jakubvrana Date: 2010-01-08 17:12:03 +0000 (Fri, 08 Jan 2010) Log Message: ----------- Use XXTEA for permanent login Modified Paths: -------------- trunk/adminer/include/auth.inc.php trunk/adminer/include/bootstrap.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/include/version.inc.php trunk/changes.txt Added Paths: ----------- trunk/adminer/include/xxtea.inc.php Modified: trunk/adminer/include/auth.inc.php =================================================================== --- trunk/adminer/include/auth.inc.php 2010-01-08 10:07:54 UTC (rev 1286) +++ trunk/adminer/include/auth.inc.php 2010-01-08 17:12:03 UTC (rev 1287) @@ -7,7 +7,7 @@ cookie("adminer_permanent", base64_encode($_POST["server"]) . ":" . base64_encode($_POST["username"]) - . ":" . base64_encode(cipher_password($_POST["password"], pack("H*", sha1(str_pad($_POST["username"], 1) . $adminer->permanentLogin())))) // str_pad - to hide original key + . ":" . base64_encode(encrypt_string($_POST["password"], $adminer->permanentLogin())) ); } if (count($_POST) == 3 + ($_POST["permanent"] ? 1 : 0)) { // 3 - server, username, password @@ -40,36 +40,13 @@ if (!strlen($_GET["server"]) || $server == $_GET["server"]) { session_regenerate_id(); // defense against session fixation $_SESSION["usernames"][$server] = $username; - $_SESSION["passwords"][$server] = decipher_password($cipher, pack("H*", sha1(str_pad($username, 1) . $adminer->permanentLogin()))); + $_SESSION["passwords"][$server] = decrypt_string($cipher, $adminer->permanentLogin()); if (!$_POST && $server != $_GET["server"]) { redirect(preg_replace('~^([^?]*).*~', '\\1', ME) . '?server=' . urlencode($server)); } } } -/** Cipher password -* @param string plain-text password -* @param string binary key, should be longer than $password -* @return string binary cipher -*/ -function cipher_password($password, $key) { - $password2 = strlen($password) . ":" . str_pad($password, 17); - $repeat = ceil(strlen($password2) / strlen($key)); - return $password2 ^ str_repeat($key, $repeat); -} - -/** Decipher password -* @param string binary cipher -* @param string binary key -* @return string plain-text password -*/ -function decipher_password($cipher, $key) { - $repeat = ceil(strlen($cipher) / strlen($key)); - $password2 = $cipher ^ str_repeat($key, $repeat); - list($length, $password) = explode(":", $password2, 2); - return substr($password, 0, $length); -} - function auth_error($exception = null) { global $connection, $adminer; $session_name = session_name(); Modified: trunk/adminer/include/bootstrap.inc.php =================================================================== --- trunk/adminer/include/bootstrap.inc.php 2010-01-08 10:07:54 UTC (rev 1286) +++ trunk/adminer/include/bootstrap.inc.php 2010-01-08 17:12:03 UTC (rev 1287) @@ -85,6 +85,7 @@ include "../adminer/include/design.inc.php"; include "../adminer/include/pdo.inc.php"; include "../adminer/include/mysql.inc.php"; +include "../adminer/include/xxtea.inc.php"; include "../adminer/include/auth.inc.php"; include "./include/connect.inc.php"; include "./include/editing.inc.php"; Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2010-01-08 10:07:54 UTC (rev 1286) +++ trunk/adminer/include/functions.inc.php 2010-01-08 17:12:03 UTC (rev 1287) @@ -201,7 +201,7 @@ * @return bool */ function cookie($name, $value) { - $params = array($name, $value, time() + 2592000, preg_replace('~\\?.*~', '', ME), "", (bool) $_SERVER["HTTPS"]); // 2592000 = 30 * 24 * 60 * 60 + $params = array($name, $value, time() + 2592000, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]), "", (bool) $_SERVER["HTTPS"]); // 2592000 = 30 * 24 * 60 * 60 if (version_compare(PHP_VERSION, '5.2.0') >= 0) { $params[] = true; // HttpOnly } Modified: trunk/adminer/include/version.inc.php =================================================================== --- trunk/adminer/include/version.inc.php 2010-01-08 10:07:54 UTC (rev 1286) +++ trunk/adminer/include/version.inc.php 2010-01-08 17:12:03 UTC (rev 1287) @@ -1,2 +1,2 @@ <?php -$VERSION = "2.2.2-dev"; +$VERSION = "2.3.0-dev"; Added: trunk/adminer/include/xxtea.inc.php =================================================================== --- trunk/adminer/include/xxtea.inc.php (rev 0) +++ trunk/adminer/include/xxtea.inc.php 2010-01-08 17:12:03 UTC (rev 1287) @@ -0,0 +1,96 @@ +<?php +/** PHP implementation of XXTEA encryption algorithm. +* @author Ma Bingyao <an...@uj...> +* @link http://www.coolcode.cn/?action=show&id=128 +*/ + +function int32($n) { + while ($n >= 2147483648) { + $n -= 4294967296; + } + while ($n <= -2147483649) { + $n += 4294967296; + } + return (int) $n; +} + +function long2str($v, $w) { + $s = ''; + foreach ($v as $val) { + $s .= pack('V', $val); + } + if ($w) { + return substr($s, 0, end($v)); + } + return $s; +} + +function str2long($s, $w) { + $v = array_values(unpack('V*', str_pad($s, 4 * ceil(strlen($s) / 4), "\0"))); + if ($w) { + $v[] = strlen($s); + } + return $v; +} + +function xxtea_mx($z, $y, $sum, $k) { + return int32((($z >> 5 & 0x7FFFFFF) ^ $y << 2) + (($y >> 3 & 0x1FFFFFFF) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k ^ $z)); +} + +/** Cipher +* @param string plain-text password +* @param array 4 integers +* @return string binary cipher +*/ +function encrypt_string($str, $key) { + $v = str2long($str, true); + $n = count($v) - 1; + $z = $v[$n]; + $y = $v[0]; + $q = floor(6 + 52 / ($n + 1)); + $sum = 0; + while ($q-- > 0) { + $sum = int32($sum + 0x9E3779B9); + $e = $sum >> 2 & 3; + for ($p=0; $p < $n; $p++) { + $y = $v[$p + 1]; + $mx = xxtea_mx($z, $y, $sum, $key[$p & 3 ^ $e]); + $z = int32($v[$p] + $mx); + $v[$p] = $z; + } + $y = $v[0]; + $mx = xxtea_mx($z, $y, $sum, $key[$p & 3 ^ $e]); + $z = int32($v[$n] + $mx); + $v[$n] = $z; + } + return long2str($v, false); +} + +/** Decipher +* @param string binary cipher +* @param array 4 integers +* @return string plain-text password +*/ +function decrypt_string($str, $key) { + $v = str2long($str, false); + $n = count($v) - 1; + $z = $v[$n]; + $y = $v[0]; + $q = floor(6 + 52 / ($n + 1)); + $sum = int32($q * 0x9E3779B9); + while ($sum) { + $e = $sum >> 2 & 3; + for ($p=$n; $p > 0; $p--) { + $z = $v[$p - 1]; + $mx = xxtea_mx($z, $y, $sum, $key[$p & 3 ^ $e]); + $y = int32($v[$p] - $mx); + $v[$p] = $y; + } + $z = $v[$n]; + $mx = xxtea_mx($z, $y, $sum, $key[$p & 3 ^ $e]); + $y = int32($v[0] - $mx); + $v[0] = $y; + $sum = int32($sum - 0x9E3779B9); + } + return long2str($v, true); +} Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-01-08 10:07:54 UTC (rev 1286) +++ trunk/changes.txt 2010-01-08 17:12:03 UTC (rev 1287) @@ -1,9 +1,10 @@ -Adminer 2.2.2-dev: +Adminer 2.3.0-dev: Support for permanent login (customization required) +Show status variables Add Delete button to Edit page (regression from 2.0.0) Simplify SQL syntax error message -Print SQL query info if available -Delete length when changing type +Show SQL query info if available +Delete length when changing type in alter table Adminer 2.2.1 (released 2009-11-26): Highlight current links This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-02-16 10:52:19
|
Revision: 1312 http://adminer.svn.sourceforge.net/adminer/?rev=1312&view=rev Author: jakubvrana Date: 2010-02-16 10:52:13 +0000 (Tue, 16 Feb 2010) Log Message: ----------- Ability to check table prefix Modified Paths: -------------- trunk/adminer/dump.inc.php trunk/changes.txt Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2010-02-15 14:32:51 UTC (rev 1311) +++ trunk/adminer/dump.inc.php 2010-02-16 10:52:13 UTC (rev 1312) @@ -165,6 +165,7 @@ <table cellspacing="0"> <?php +$prefixes = array(); if (DB != "") { $checked = ($TABLE != "" ? "" : " checked"); echo "<thead><tr>"; @@ -173,23 +174,36 @@ echo "</thead>\n"; $views = ""; foreach (table_status() as $row) { - $checked = $TABLE == "" || $row["Name"] == $TABLE; - $print = "<tr><td>" . checkbox("tables[]", $row["Name"], $checked, $row["Name"], "formUncheck('check-tables');"); + $name = $row["Name"]; + $prefix = ereg_replace("_.*", "", $name); + $checked = ($TABLE == "" || $TABLE == (substr($TABLE, -1) == "%" ? "$prefix%" : $name)); //! % may be part of table name + $print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "formUncheck('check-tables');"); if (!$row["Engine"]) { $views .= "$print\n"; } else { - echo "$print<td align='right'><label>" . ($row["Engine"] == "InnoDB" && $row["Rows"] ? lang('~ %s', $row["Rows"]) : $row["Rows"]) . checkbox("data[]", $row["Name"], $checked, "", "formUncheck('check-data');") . "</label>\n"; + echo "$print<td align='right'><label>" . ($row["Engine"] == "InnoDB" && $row["Rows"] ? lang('~ %s', $row["Rows"]) : $row["Rows"]) . checkbox("data[]", $name, $checked, "", "formUncheck('check-data');") . "</label>\n"; } + $prefixes[$prefix]++; } echo $views; } else { - echo "<thead><tr><th style='text-align: left;'><label><input type='checkbox' id='check-databases' checked onclick='formCheck(this, /^databases\\[/);'>" . lang('Database') . "</label></thead>\n"; + echo "<thead><tr><th style='text-align: left;'><label><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . " onclick='formCheck(this, /^databases\\[/);'>" . lang('Database') . "</label></thead>\n"; foreach (get_databases() as $db) { if (!information_schema($db)) { - echo "<tr><td>" . checkbox("databases[]", $db, 1, $db, "formUncheck('check-databases');") . "</label>\n"; + $prefix = ereg_replace("_.*", "", $db); + echo "<tr><td>" . checkbox("databases[]", $db, $TABLE == "" || $TABLE == "$prefix%", $db, "formUncheck('check-databases');") . "</label>\n"; + $prefixes[$prefix]++; } } } ?> </table> </form> +<?php +$first = true; +foreach ($prefixes as $key => $val) { + if ($key != "" && $val > 1) { + echo ($first ? "<p>" : " ") . "<a href='" . h(ME) . "dump=" . urlencode("$key%") . "'>" . h($key) . "</a>"; + $first = false; + } +} Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-02-15 14:32:51 UTC (rev 1311) +++ trunk/changes.txt 2010-02-16 10:52:13 UTC (rev 1312) @@ -8,6 +8,7 @@ Simplify SQL syntax error message Show SQL query info if available Delete length when changing type in alter table +Ability to check table prefix in export Adminer 2.2.1 (released 2009-11-26): Highlight current links This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-02-26 15:55:55
|
Revision: 1334 http://adminer.svn.sourceforge.net/adminer/?rev=1334&view=rev Author: jakubvrana Date: 2010-02-26 15:55:49 +0000 (Fri, 26 Feb 2010) Log Message: ----------- Release Modified Paths: -------------- trunk/adminer/include/version.inc.php trunk/changes.txt trunk/version.js Modified: trunk/adminer/include/version.inc.php =================================================================== --- trunk/adminer/include/version.inc.php 2010-02-26 14:58:58 UTC (rev 1333) +++ trunk/adminer/include/version.inc.php 2010-02-26 15:55:49 UTC (rev 1334) @@ -1,2 +1,2 @@ <?php -$VERSION = "2.3.0-dev"; +$VERSION = "2.3.1-dev"; Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-02-26 14:58:58 UTC (rev 1333) +++ trunk/changes.txt 2010-02-26 15:55:49 UTC (rev 1334) @@ -1,4 +1,4 @@ -Adminer 2.3.0-dev: +Adminer 2.3.0 (released 2010-02-26): Support for permanent login (customization required) Search in all tables Show status variables Modified: trunk/version.js =================================================================== --- trunk/version.js 2010-02-26 14:58:58 UTC (rev 1333) +++ trunk/version.js 2010-02-26 15:55:49 UTC (rev 1334) @@ -1,2 +1,2 @@ // downloaded from repository by version_checker() -document.cookie = 'adminer_version=2.2.1'; // last released version +document.cookie = 'adminer_version=2.3.0'; // last released version This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-02 12:30:02
|
Revision: 1359 http://adminer.svn.sourceforge.net/adminer/?rev=1359&view=rev Author: jakubvrana Date: 2010-04-02 12:29:56 +0000 (Fri, 02 Apr 2010) Log Message: ----------- Correct redirect after change in where field Modified Paths: -------------- trunk/adminer/edit.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/select.inc.php trunk/changes.txt Modified: trunk/adminer/edit.inc.php =================================================================== --- trunk/adminer/edit.inc.php 2010-04-02 12:13:56 UTC (rev 1358) +++ trunk/adminer/edit.inc.php 2010-04-02 12:29:56 UTC (rev 1359) @@ -11,7 +11,7 @@ if ($_POST && !$error && !isset($_GET["select"])) { $location = $_POST["referer"]; if ($_POST["insert"]) { // continue edit or insert - $location = $_SERVER["REQUEST_URI"]; //! doesn't work with change in &where field + $location = ($update ? ME . "&edit=" . urlencode($TABLE) . unique_idf($_POST["fields"], indexes($TABLE)) : $_SERVER["REQUEST_URI"]); //! doesn't work with functions } elseif (!ereg('^.+&select=.+$', $location)) { $location = ME . "select=" . urlencode($TABLE); $i = 0; // append &set converted to &where Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2010-04-02 12:13:56 UTC (rev 1358) +++ trunk/adminer/include/functions.inc.php 2010-04-02 12:29:56 UTC (rev 1359) @@ -159,6 +159,19 @@ return $return; } +/** Get query string for unique identifier of a row +* @param array +* @param array result of indexes() +* @return string +*/ +function unique_idf($row, $indexes) { + $return = ""; + foreach (unique_array($row, $indexes) as $key => $val) { + $return .= "&" . (isset($val) ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key)); + } + return $return; +} + /** Create SQL condition from parsed query string * @param array parsed query string * @return string Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2010-04-02 12:13:56 UTC (rev 1358) +++ trunk/adminer/select.inc.php 2010-04-02 12:29:56 UTC (rev 1359) @@ -205,11 +205,7 @@ } echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n"; foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) { - $unique_array = unique_array($row, $indexes); - $unique_idf = ""; - foreach ($unique_array as $key => $val) { - $unique_idf .= "&" . (isset($val) ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key)); - } + $unique_idf = unique_idf($row, $indexes); echo "<tr" . odd() . "><td>" . checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]), "", "this.form['all'].checked = false; formUncheck('all-page');") . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "'>" . lang('edit') . "</a>"); foreach ($row as $key => $val) { if (isset($names[$key])) { @@ -247,7 +243,7 @@ if ($key == "COUNT(*)") { //! columns looking like functions $link = h(ME . "select=" . urlencode($TABLE)); $i = 0; - foreach ($unique_array as $k => $v) { + foreach (unique_array($row, $indexes) as $k => $v) { $link .= h("&where[$i][col]=" . urlencode($k) . "&where[$i][op]=" . (isset($v) ? "%3D&where[$i][val]=" . urlencode($v) : "IS+NULL")); $i++; } Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-04-02 12:13:56 UTC (rev 1358) +++ trunk/changes.txt 2010-04-02 12:29:56 UTC (rev 1359) @@ -1,5 +1,7 @@ Adminer 2.3.1-dev: Add Drop button to Alter pages (regression from 2.0.0) +Link COUNT(*) result to listing +Newlines in select query edit Return to referer after edit Adminer 2.3.0 (released 2010-02-26): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-05-05 16:27:45
|
Revision: 1518 http://adminer.svn.sourceforge.net/adminer/?rev=1518&view=rev Author: jakubvrana Date: 2010-05-05 16:27:39 +0000 (Wed, 05 May 2010) Log Message: ----------- Respect move and drop column support Modified Paths: -------------- trunk/adminer/drivers/mssql.inc.php trunk/adminer/drivers/mysql.inc.php trunk/adminer/drivers/pgsql.inc.php trunk/adminer/drivers/sqlite.inc.php trunk/adminer/include/editing.inc.php trunk/todo.txt Modified: trunk/adminer/drivers/mssql.inc.php =================================================================== --- trunk/adminer/drivers/mssql.inc.php 2010-05-05 16:26:41 UTC (rev 1517) +++ trunk/adminer/drivers/mssql.inc.php 2010-05-05 16:27:39 UTC (rev 1518) @@ -490,7 +490,7 @@ } function support($feature) { - return ereg('^(trigger)$', $feature); //! view|routine| + return ereg('^(trigger|drop_col)$', $feature); //! view|routine| } $driver = "mssql"; Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-05-05 16:26:41 UTC (rev 1517) +++ trunk/adminer/drivers/mysql.inc.php 2010-05-05 16:27:39 UTC (rev 1518) @@ -790,14 +790,7 @@ */ function support($feature) { global $connection; - $features = array( - "view" => ($connection->server_info >= 5), - "routine" => ($connection->server_info >= 5), - "trigger" => ($connection->server_info >= 5), - "event" => ($connection->server_info >= 5.1), - "partitioning" => ($connection->server_info >= 5.1), - ); - return (isset($features[$feature]) ? $features[$feature] : true); + return ($connection->server_info >= 5.1 || ($connection->server_info >= 5 && !ereg("event|partitioning")) || !ereg("view|routine|trigger")); } $driver = "sql"; ///< @var string JUSH identifier Modified: trunk/adminer/drivers/pgsql.inc.php =================================================================== --- trunk/adminer/drivers/pgsql.inc.php 2010-05-05 16:26:41 UTC (rev 1517) +++ trunk/adminer/drivers/pgsql.inc.php 2010-05-05 16:27:39 UTC (rev 1518) @@ -197,7 +197,7 @@ function table_status($name = "") { global $connection; $return = array(); - $result = $connection->query("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN '' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_catalog.obj_description(oid, 'pg_class') AS \"Comment\" + $result = $connection->query("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN '' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_total_relation_size(oid) - pg_relation_size(oid) AS \"Index_length\", pg_catalog.obj_description(oid, 'pg_class') AS \"Comment\" FROM pg_catalog.pg_class WHERE relkind IN ('r','v') AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())" @@ -457,7 +457,7 @@ } function support($feature) { - return ereg('^(comment|view|routine|trigger)$', $feature); + return ereg('^(comment|view|trigger|drop_col)$', $feature); //! routine| } $driver = "pgsql"; Modified: trunk/adminer/drivers/sqlite.inc.php =================================================================== --- trunk/adminer/drivers/sqlite.inc.php 2010-05-05 16:26:41 UTC (rev 1517) +++ trunk/adminer/drivers/sqlite.inc.php 2010-05-05 16:27:39 UTC (rev 1518) @@ -393,7 +393,9 @@ global $connection; $alter = array(); foreach ($fields as $field) { - $alter[] = ($table != "" && $field[0] == "" ? "ADD " : " ") . implode("", $field[1]); + if ($field[1]) { + $alter[] = ($table != "" && $field[0] == "" ? "ADD " : " ") . implode("", $field[1]); + } } $alter = array_merge($alter, $foreign); if ($table != "") { Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2010-05-05 16:26:41 UTC (rev 1517) +++ trunk/adminer/include/editing.inc.php 2010-05-05 16:27:39 UTC (rev 1518) @@ -203,16 +203,17 @@ <td class="hidden"><?php echo lang('Default values'); ?> <?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?> <?php } ?> -<td><?php echo "<input type='image' name='add[0]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script> +<td><?php echo "<input type='image' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script> </thead> <?php foreach ($fields as $i => $field) { $i++; - $display = (isset($_POST["add"][$i-1]) || (isset($field["field"]) && !$_POST["drop_col"][$i])); + $orig = $field[($_POST ? "orig" : "field")]; + $display = (isset($_POST["add"][$i-1]) || (isset($field["field"]) && !$_POST["drop_col"][$i])) && (support("drop_col") || $orig == ""); ?> <tr<?php echo ($display ? "" : " style='display: none;'"); ?>> <?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", $inout, $field["inout"]) : ""); ?> -<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" onchange="<?php echo ($field["field"] != "" || count($fields) > 1 ? "" : "editingAddRow(this, $allowed); "); ?>editingNameChange(this);" maxlength="64"><?php } ?><input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($field[($_POST ? "orig" : "field")]); ?>"> +<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" onchange="<?php echo ($field["field"] != "" || count($fields) > 1 ? "" : "editingAddRow(this, $allowed); "); ?>editingNameChange(this);" maxlength="64"><?php } ?><input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>"> <?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?> <?php if ($type == "TABLE") { ?> <td><?php echo checkbox("fields[$i][null]", 1, $field["null"]); ?> @@ -221,11 +222,13 @@ <?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . "><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' maxlength='255'>" : ""); ?> <?php } ?> <?php - //! hide operations not supported by the driver - column change, adding column not at the end, drop column, ... - echo "<td><input type='image' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, $allowed, 1);'>"; - echo " <input type='image' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editingRemoveRow(this);'>"; - echo " <input type='image' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'>"; - echo " <input type='image' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "'>"; + echo "<td>"; + echo (support("move_col") ? + "<input type='image' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, $allowed, 1);'> " + . "<input type='image' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'> " + . "<input type='image' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "'> " + : ""); + echo ($orig == "" || support("drop_col") ? "<input type='image' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editingRemoveRow(this);'>" : ""); echo "\n"; } return $comments; Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2010-05-05 16:26:41 UTC (rev 1517) +++ trunk/todo.txt 2010-05-05 16:27:39 UTC (rev 1518) @@ -37,7 +37,6 @@ ORDER BY COUNT(*) Table schema - SELECT * FROM pg_namespace, CREATE|ALTER|DROP SCHEMA, SET default_tablespace Export - http://www.postgresql.org/docs/8.4/static/functions-info.html -Table status - http://www.postgresql.org/docs/8.4/static/functions-admin.html Column rights - http://www.postgresql.org/docs/8.4/static/functions-info.html Dollar terminated string in SQL command Move table - ALTER TABLE SET SCHEMA This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-05-05 16:31:01
|
Revision: 1521 http://adminer.svn.sourceforge.net/adminer/?rev=1521&view=rev Author: jakubvrana Date: 2010-05-05 16:30:55 +0000 (Wed, 05 May 2010) Log Message: ----------- Schema support for PostgreSQL Modified Paths: -------------- trunk/adminer/database.inc.php trunk/adminer/db.inc.php trunk/adminer/drivers/mssql.inc.php trunk/adminer/drivers/mysql.inc.php trunk/adminer/drivers/pgsql.inc.php trunk/adminer/drivers/sqlite.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/auth.inc.php trunk/adminer/include/bootstrap.inc.php trunk/adminer/include/connect.inc.php trunk/adminer/include/design.inc.php trunk/adminer/index.php trunk/adminer/lang/cs.inc.php trunk/compile.php trunk/todo.txt Added Paths: ----------- trunk/adminer/scheme.inc.php Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/database.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -65,7 +65,7 @@ <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> <?php -if (strlen(DB)) { +if (DB != "") { echo "<input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n"; } elseif (!$_POST["add_x"] && $_GET["db"] == "") { echo "<input type='image' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n"; Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/db.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -36,125 +36,128 @@ queries_redirect(substr(ME, 0, -1), $message, $result); } -page_header(lang('Database') . ": " . h(DB), $error, true); -echo '<p><a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n"; -echo '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n"; -$sums = array("Data_length" => 0, "Index_length" => 0, "Data_free" => 0); - -echo "<h3>" . lang('Tables and views') . "</h3>\n"; -$tables_list = tables_list(); -if (!$tables_list) { - echo "<p class='message'>" . lang('No tables.') . "\n"; -} else { - echo "<form action='' method='post'>\n"; - echo "<p><input name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n"; - if ($_POST["search"] && $_POST["query"] != "") { - $_GET["where"][0]["op"] = "LIKE %%"; - $_GET["where"][0]["val"] = $_POST["query"]; - search_tables(); - } - echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n"; - echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);"><th>' . lang('Table') . '<td>' . lang('Engine') . '<td>' . lang('Collation') . '<td>' . lang('Data Length') . '<td>' . lang('Index Length') . '<td>' . lang('Data Free') . '<td>' . lang('Auto Increment') . '<td>' . lang('Rows') . (support("comment") ? '<td>' . lang('Comment') : '') . "</thead>\n"; - foreach ($tables_list as $name => $type) { - $view = (isset($type) && !eregi("table", $type)); - echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');"); - echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '">' . h($name) . '</a>'; - if ($view) { - echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '">' . lang('View') . '</a>'; - echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '">?</a>'; - } else { - echo "<td id='Engine-" . h($name) . "'> <td id='Collation-" . h($name) . "'> "; - foreach (array("Data_length" => "create", "Index_length" => "indexes", "Data_free" => "edit", "Auto_increment" => "auto_increment=1&create", "Rows" => "select") as $key => $link) { - echo "<td align='right'><a href='" . h(ME . "$link=") . urlencode($name) . "' id='$key-" . h($name) . "'>?</a>"; +page_header(($_GET["ns"] == "" ? lang('Database') . ": " . h(DB) : lang('Schema') . ": " . h($_GET["ns"])), $error, true); +echo '<p>' . ($_GET["ns"] == "" ? '<a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n" : ""); +echo (support("scheme") ? "<a href='" . h(ME) . "scheme='>" . ($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema')) . "</a>\n" : ""); +if ($_GET["ns"] !== "") { + echo '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n"; + $sums = array("Data_length" => 0, "Index_length" => 0, "Data_free" => 0); + + echo "<h3>" . lang('Tables and views') . "</h3>\n"; + $tables_list = tables_list(); + if (!$tables_list) { + echo "<p class='message'>" . lang('No tables.') . "\n"; + } else { + echo "<form action='' method='post'>\n"; + echo "<p><input name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n"; + if ($_POST["search"] && $_POST["query"] != "") { + $_GET["where"][0]["op"] = "LIKE %%"; + $_GET["where"][0]["val"] = $_POST["query"]; + search_tables(); + } + echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n"; + echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);"><th>' . lang('Table') . '<td>' . lang('Engine') . '<td>' . lang('Collation') . '<td>' . lang('Data Length') . '<td>' . lang('Index Length') . '<td>' . lang('Data Free') . '<td>' . lang('Auto Increment') . '<td>' . lang('Rows') . (support("comment") ? '<td>' . lang('Comment') : '') . "</thead>\n"; + foreach ($tables_list as $name => $type) { + $view = (isset($type) && !eregi("table", $type)); + echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');"); + echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '">' . h($name) . '</a>'; + if ($view) { + echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '">' . lang('View') . '</a>'; + echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '">?</a>'; + } else { + echo "<td id='Engine-" . h($name) . "'> <td id='Collation-" . h($name) . "'> "; + foreach (array("Data_length" => "create", "Index_length" => "indexes", "Data_free" => "edit", "Auto_increment" => "auto_increment=1&create", "Rows" => "select") as $key => $link) { + echo "<td align='right'><a href='" . h(ME . "$link=") . urlencode($name) . "' id='$key-" . h($name) . "'>?</a>"; + } } + echo (support("comment") ? "<td id='Comment-" . h($name) . "'> " : ""); } - echo (support("comment") ? "<td id='Comment-" . h($name) . "'> " : ""); + echo "<tr><td> <th>" . lang('%d in total', count($tables_list)); + echo "<td>" . $connection->result("SELECT @@storage_engine"); + echo "<td>" . db_collation(DB, collations()); + foreach ($sums as $key => $val) { + echo "<td align='right' id='sum-$key'> "; + } + echo "</table>\n"; + if (!information_schema(DB)) { + echo "<p><input type='hidden' name='token' value='$token'>" . ($driver == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'> <input type='submit' name='optimize' value='" . lang('Optimize') . "'> <input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables/) + ')');\"> <input type='submit' name='drop' value='" . lang('Drop') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables|views/) + ')');\">\n"; + $dbs = get_databases(); + if (count($dbs) != 1) { + $db = (isset($_POST["target"]) ? $_POST["target"] : DB); + echo "<p>" . lang('Move to other database') . ($dbs ? ": " . html_select("target", $dbs, $db) : ': <input name="target" value="' . h($db) . '">') . " <input type='submit' name='move' value='" . lang('Move') . "'>\n"; + } + } + echo "</form>\n"; } - echo "<tr><td> <th>" . lang('%d in total', count($tables_list)); - echo "<td>" . $connection->result("SELECT @@storage_engine"); - echo "<td>" . db_collation(DB, collations()); - foreach ($sums as $key => $val) { - echo "<td align='right' id='sum-$key'> "; + + echo '<p><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n"; + if (support("view")) { + echo '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n"; } - echo "</table>\n"; - if (!information_schema(DB)) { - echo "<p><input type='hidden' name='token' value='$token'>" . ($driver == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'> <input type='submit' name='optimize' value='" . lang('Optimize') . "'> <input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables/) + ')');\"> <input type='submit' name='drop' value='" . lang('Drop') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables|views/) + ')');\">\n"; - $dbs = get_databases(); - if (count($dbs) != 1) { - $db = (isset($_POST["target"]) ? $_POST["target"] : DB); - echo "<p>" . lang('Move to other database') . ($dbs ? ": " . html_select("target", $dbs, $db) : ': <input name="target" value="' . h($db) . '">') . " <input type='submit' name='move' value='" . lang('Move') . "'>\n"; + if (support("routine")) { + echo "<h3>" . lang('Routines') . "</h3>\n"; + $routines = routines(); + if ($routines) { + echo "<table cellspacing='0'>\n"; + echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td> </thead>\n"; + odd(''); + foreach ($routines as $row) { + echo '<tr' . odd() . '>'; + echo '<th><a href="' . h(ME) . ($row["ROUTINE_TYPE"] == "FUNCTION" ? 'callf=' : 'call=') . urlencode($row["ROUTINE_NAME"]) . '">' . h($row["ROUTINE_NAME"]) . '</a>'; + echo '<td>' . h($row["ROUTINE_TYPE"]); + echo '<td>' . h($row["DTD_IDENTIFIER"]); + echo '<td><a href="' . h(ME) . ($row["ROUTINE_TYPE"] == "FUNCTION" ? 'function=' : 'procedure=') . urlencode($row["ROUTINE_NAME"]) . '">' . lang('Alter') . "</a>"; + } + echo "</table>\n"; } + echo '<p><a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> <a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n"; } - echo "</form>\n"; -} - -echo '<p><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n"; -if (support("view")) { - echo '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n"; -} -if (support("routine")) { - echo "<h3>" . lang('Routines') . "</h3>\n"; - $routines = routines(); - if ($routines) { - echo "<table cellspacing='0'>\n"; - echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td> </thead>\n"; - odd(''); - foreach ($routines as $row) { - echo '<tr' . odd() . '>'; - echo '<th><a href="' . h(ME) . ($row["ROUTINE_TYPE"] == "FUNCTION" ? 'callf=' : 'call=') . urlencode($row["ROUTINE_NAME"]) . '">' . h($row["ROUTINE_NAME"]) . '</a>'; - echo '<td>' . h($row["ROUTINE_TYPE"]); - echo '<td>' . h($row["DTD_IDENTIFIER"]); - echo '<td><a href="' . h(ME) . ($row["ROUTINE_TYPE"] == "FUNCTION" ? 'function=' : 'procedure=') . urlencode($row["ROUTINE_NAME"]) . '">' . lang('Alter') . "</a>"; + + if (support("event")) { + echo "<h3>" . lang('Events') . "</h3>\n"; + $result = $connection->query("SHOW EVENTS"); + if ($result && $result->num_rows) { + echo "<table cellspacing='0'>\n"; + echo "<thead><tr><th>" . lang('Name') . "<td>" . lang('Schedule') . "<td>" . lang('Start') . "<td>" . lang('End') . "</thead>\n"; + while ($row = $result->fetch_assoc()) { + echo "<tr>"; + echo '<th><a href="' . h(ME) . 'event=' . urlencode($row["Name"]) . '">' . h($row["Name"]) . "</a>"; + echo "<td>" . ($row["Execute at"] ? lang('At given time') . "<td>" . $row["Execute at"] : lang('Every') . " " . $row["Interval value"] . " " . $row["Interval field"] . "<td>$row[Starts]"); + echo "<td>$row[Ends]"; + } + echo "</table>\n"; } - echo "</table>\n"; + echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n"; } - echo '<p><a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> <a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n"; -} - -if (support("event")) { - echo "<h3>" . lang('Events') . "</h3>\n"; - $result = $connection->query("SHOW EVENTS"); - if ($result && $result->num_rows) { - echo "<table cellspacing='0'>\n"; - echo "<thead><tr><th>" . lang('Name') . "<td>" . lang('Schedule') . "<td>" . lang('Start') . "<td>" . lang('End') . "</thead>\n"; - while ($row = $result->fetch_assoc()) { - echo "<tr>"; - echo '<th><a href="' . h(ME) . 'event=' . urlencode($row["Name"]) . '">' . h($row["Name"]) . "</a>"; - echo "<td>" . ($row["Execute at"] ? lang('At given time') . "<td>" . $row["Execute at"] : lang('Every') . " " . $row["Interval value"] . " " . $row["Interval field"] . "<td>$row[Starts]"); - echo "<td>$row[Ends]"; - } - echo "</table>\n"; - } - echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n"; -} - -page_footer(); -$table_status = table_status(); -if ($table_status) { - echo "<script type='text/javascript'>\n"; - foreach ($table_status as $row) { - $id = addcslashes($row["Name"], "\\'/"); - echo "setHtml('Comment-$id', '" . nbsp($row["Comment"]) . "');\n"; - if (!eregi("view", $row["Engine"])) { - foreach (array("Engine", "Collation") as $key) { - echo "setHtml('$key-$id', '" . nbsp($row[$key]) . "');\n"; - } - foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) { - if ($row[$key] != "") { - $val = number_format($row[$key], 0, '.', lang(',')); - echo "setHtml('$key-$id', '" . ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? "~ $val" : $val) . "');\n"; - if (isset($sums[$key])) { - $sums[$key] += ($row["Engine"] != "InnoDB" || $key != "Data_free" ? $row[$key] : 0); + + page_footer(); + $table_status = table_status(); + if ($table_status) { + echo "<script type='text/javascript'>\n"; + foreach ($table_status as $row) { + $id = addcslashes($row["Name"], "\\'/"); + echo "setHtml('Comment-$id', '" . nbsp($row["Comment"]) . "');\n"; + if (!eregi("view", $row["Engine"])) { + foreach (array("Engine", "Collation") as $key) { + echo "setHtml('$key-$id', '" . nbsp($row[$key]) . "');\n"; + } + foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) { + if ($row[$key] != "") { + $val = number_format($row[$key], 0, '.', lang(',')); + echo "setHtml('$key-$id', '" . ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? "~ $val" : $val) . "');\n"; + if (isset($sums[$key])) { + $sums[$key] += ($row["Engine"] != "InnoDB" || $key != "Data_free" ? $row[$key] : 0); + } + } elseif (array_key_exists($key, $row)) { + echo "setHtml('$key-$id');\n"; } - } elseif (array_key_exists($key, $row)) { - echo "setHtml('$key-$id');\n"; } } } + foreach ($sums as $key => $val) { + echo "setHtml('sum-$key', '" . number_format($val, 0, '.', lang(',')) . "');\n"; + } + echo "</script>\n"; } - foreach ($sums as $key => $val) { - echo "setHtml('sum-$key', '" . number_format($val, 0, '.', lang(',')) . "');\n"; - } - echo "</script>\n"; + exit; // page_footer() already called } -exit; // page_footer() already called Modified: trunk/adminer/drivers/mssql.inc.php =================================================================== --- trunk/adminer/drivers/mssql.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/drivers/mssql.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -490,7 +490,7 @@ } function support($feature) { - return ereg('^(trigger|drop_col)$', $feature); //! view|routine| + return ereg('^(trigger|drop_col)$', $feature); //! view|routine|scheme| } $driver = "mssql"; Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/drivers/mysql.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -755,6 +755,28 @@ return $connection->query("EXPLAIN $query"); } + /** Get existing schemas + * @return array + */ + function schemas() { + return array(); + } + + /** Get current schema + * @return string + */ + function get_schema() { + return ""; + } + + /** Set current schema + * @param string + * @return bool + */ + function set_schema($schema) { + return true; + } + /** Get SQL command to create table * @param string * @return string @@ -810,7 +832,7 @@ */ function support($feature) { global $connection; - return ($connection->server_info >= 5.1 || ($connection->server_info >= 5 && !ereg("event|partitioning")) || !ereg("view|routine|trigger")); + return !ereg("scheme" . ($connection->server_info < 5.1 ? "|event|partitioning" . ($connection->server_info < 5 ? "|view|routine|trigger" : "") : ""), $feature); } $driver = "sql"; ///< @var string JUSH identifier Modified: trunk/adminer/drivers/pgsql.inc.php =================================================================== --- trunk/adminer/drivers/pgsql.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/drivers/pgsql.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -452,12 +452,26 @@ return $connection->query("EXPLAIN $query"); } + function schemas() { + return get_vals("SELECT nspname FROM pg_namespace"); + } + + function get_schema() { + global $connection; + return $connection->result("SELECT current_schema()"); + } + + function set_schema($schema) { + global $connection; + return $connection->query("SET search_path TO " . idf_escape($schema)); + } + function use_sql($database) { return "\connect " . idf_escape($database); } function support($feature) { - return ereg('^(comment|view|trigger|drop_col)$', $feature); //! routine| + return ereg('^(comment|view|scheme|trigger|drop_col)$', $feature); //! routine|sequence| } $driver = "pgsql"; Modified: trunk/adminer/drivers/sqlite.inc.php =================================================================== --- trunk/adminer/drivers/sqlite.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/drivers/sqlite.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -496,6 +496,18 @@ return $connection->query("EXPLAIN $query"); } + function schemas() { + return array(); + } + + function get_schema() { + return ""; + } + + function set_schema($scheme) { + return true; + } + function create_sql($table) { global $connection; return $connection->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . $connection->quote($table)); Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/include/adminer.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -506,32 +506,40 @@ <p> <?php hidden_fields_get(); ?> <?php echo ($databases ? html_select("db", array("" => "(" . lang('database') . ")") + $databases, DB, "this.form.submit();") : '<input name="db" value="' . h(DB) . '">'); ?> -<?php if (isset($_GET["sql"])) { ?><input type="hidden" name="sql" value=""><?php } ?> -<?php if (isset($_GET["schema"])) { ?><input type="hidden" name="schema" value=""><?php } ?> -<?php if (isset($_GET["dump"])) { ?><input type="hidden" name="dump" value=""><?php } ?> <input type="submit" value="<?php echo lang('Use'); ?>"<?php echo ($databases ? " class='hidden'" : ""); ?>> -</p> -</form> <?php if ($missing != "db" && DB != "" && $connection->select_db(DB)) { - $tables = tables_list(); - if (!$tables) { - echo "<p class='message'>" . lang('No tables.') . "\n"; - } else { - $this->tablesPrint($tables); - $links = array(); - foreach ($tables as $table => $type) { - $links[] = preg_quote($table, '/'); + if (support("scheme")) { + echo "<br>" . html_select("ns", array("" => "(" . lang('schema') . ")") + schemas(), $_GET["ns"], "this.form.submit();"); + if ($_GET["ns"] != "") { + set_schema($_GET["ns"]); } - echo "<script type='text/javascript'>\n"; - echo "var jushLinks = { $driver: [ '" . addcslashes(h(ME), "\\'/") . "table=\$&', /\\b(" . implode("|", $links) . ")\\b/g ] };\n"; - foreach (array("bac", "bra", "sqlite_quo", "mssql_bra") as $val) { - echo "jushLinks.$val = jushLinks.$driver;\n"; + } + if ($_GET["ns"] !== "") { + $tables = tables_list(); + if (!$tables) { + echo "<p class='message'>" . lang('No tables.') . "\n"; + } else { + $this->tablesPrint($tables); + $links = array(); + foreach ($tables as $table => $type) { + $links[] = preg_quote($table, '/'); + } + echo "<script type='text/javascript'>\n"; + echo "var jushLinks = { $driver: [ '" . addcslashes(h(ME), "\\'/") . "table=\$&', /\\b(" . implode("|", $links) . ")\\b/g ] };\n"; + foreach (array("bac", "bra", "sqlite_quo", "mssql_bra") as $val) { + echo "jushLinks.$val = jushLinks.$driver;\n"; + } + echo "</script>\n"; } - echo "</script>\n"; + echo '<p><a href="' . h(ME) . 'create=">' . bold(lang('Create new table'), $_GET["create"] === "") . "</a>\n"; } - echo '<p><a href="' . h(ME) . 'create=">' . bold(lang('Create new table'), $_GET["create"] === "") . "</a>\n"; } + echo (isset($_GET["sql"]) ? '<input type="hidden" name="sql" value="">' + : (isset($_GET["schema"]) ? '<input type="hidden" name="schema" value="">' + : (isset($_GET["dump"]) ? '<input type="hidden" name="dump" value="">' + : ""))); + echo "</form>\n"; } } Modified: trunk/adminer/include/auth.inc.php =================================================================== --- trunk/adminer/include/auth.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/include/auth.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -46,7 +46,7 @@ set_session($key, null); } cookie("adminer_permanent", ""); - redirect(substr(preg_replace('~(username|db)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.')); + redirect(substr(preg_replace('~(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.')); } } elseif ($_COOKIE["adminer_permanent"]) { list($server, $username, $cipher, $system) = array_map('base64_decode', explode(":", $_COOKIE["adminer_permanent"])); // $driver is a global variable Modified: trunk/adminer/include/bootstrap.inc.php =================================================================== --- trunk/adminer/include/bootstrap.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/include/bootstrap.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -71,7 +71,7 @@ . (SID && !$_COOKIE ? SID . '&' : '') // !$_COOKIE - don't pass SID with permanent login . (SERVER !== null ? DRIVER . "=" . urlencode(SERVER) . '&' : '') . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') - . (DB != "" ? 'db=' . urlencode(DB) . '&' : '') + . (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '') ); include "../adminer/include/version.inc.php"; Modified: trunk/adminer/include/connect.inc.php =================================================================== --- trunk/adminer/include/connect.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/include/connect.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -61,3 +61,7 @@ connect_error(); // separate function to catch SQLite error exit; } + +if (support("scheme") && DB != "" && $_GET["ns"] !== "" && (!isset($_GET["ns"]) || !set_schema($_GET["ns"]))) { + redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema()); +} Modified: trunk/adminer/include/design.inc.php =================================================================== --- trunk/adminer/include/design.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/include/design.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -31,17 +31,20 @@ <div id="content"> <?php if (isset($breadcrumb)) { - $link = substr(preg_replace('~(username|db)=[^&]*&~', '', ME), 0, -1); + $link = substr(preg_replace('~(username|db|ns)=[^&]*&~', '', ME), 0, -1); echo '<p id="breadcrumb"><a href="' . ($link ? h($link) : ".") . '">' . $drivers[DRIVER] . '</a> » '; - $link = substr(preg_replace('~db=[^&]*&~', '', ME), 0, -1); + $link = substr(preg_replace('~(db|ns)=[^&]*&~', '', ME), 0, -1); $server = (SERVER != "" ? h(SERVER) : lang('Server')); if ($breadcrumb === false) { echo "$server\n"; } else { echo "<a href='" . ($link ? h($link) : ".") . "'>$server</a> » "; + if ($_GET["ns"] != "" || (DB != "" && is_array($breadcrumb))) { + echo '<a href="' . h($link . "&db=" . urlencode(DB) . (support("scheme") ? "&ns=" : "")) . '">' . h(DB) . '</a> » '; + } if (is_array($breadcrumb)) { - if (DB != "") { - echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h(DB) . '</a> » '; + if ($_GET["ns"] != "") { + echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h($_GET["ns"]) . '</a> » '; } foreach ($breadcrumb as $key => $val) { $desc = (is_array($val) ? $val[1] : $val); Modified: trunk/adminer/index.php =================================================================== --- trunk/adminer/index.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/index.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -40,6 +40,8 @@ include "./indexes.inc.php"; } elseif (isset($_GET["database"])) { include "./database.inc.php"; +} elseif (isset($_GET["scheme"])) { + include "./scheme.inc.php"; } elseif (isset($_GET["call"])) { include "./call.inc.php"; } elseif (isset($_GET["foreign"])) { Modified: trunk/adminer/lang/cs.inc.php =================================================================== --- trunk/adminer/lang/cs.inc.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/adminer/lang/cs.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -237,4 +237,11 @@ 'Double click on a value to modify it.' => 'Dvojklikněte na políčko, které chcete změnit.', 'Increase text length to modify this value.' => 'Ke změně této hodnoty zvyšte délku textů.', 'Use edit link to modify this value.' => 'Ke změně této hodnoty použijte odkaz upravit.', + 'Alter schema' => 'Pozměnit schéma', + 'Create schema' => 'Vytvořit schéma', + 'Schema has been dropped.' => 'Schéma bylo odstraněno.', + 'Schema has been created.' => 'Schéma bylo vytvořeno.', + 'Schema has been altered.' => 'Schéma bylo změněno.', + 'schema' => 'schéma', + 'Schema' => 'Schéma', ); Added: trunk/adminer/scheme.inc.php =================================================================== --- trunk/adminer/scheme.inc.php (rev 0) +++ trunk/adminer/scheme.inc.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -0,0 +1,35 @@ +<?php +if ($_POST && !$error) { + $link = preg_replace('~ns=[^&]*&~', '', ME) . "ns="; + if ($_POST["drop"]) { + query_redirect("DROP SCHEMA " . idf_escape($_GET["ns"]), $link, lang('Schema has been dropped.')); + } else { + $link .= urlencode($_POST["name"]); + if ($_GET["ns"] == "") { + query_redirect("CREATE SCHEMA " . idf_escape($_POST["name"]), $link, lang('Schema has been created.')); + } elseif ($_GET["ns"] != $_POST["name"]) { + query_redirect("ALTER SCHEMA " . idf_escape($_GET["ns"]) . " RENAME TO " . idf_escape($_POST["name"]), $link, lang('Schema has been altered.')); + } else { + redirect($link); + } + } +} + +page_header($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema'), $error); + +$row = array("name" => $_GET["ns"]); +if ($_POST) { + $row = $_POST; +} +?> + +<form action="" method="post"> +<p><input name="name" value="<?php echo h($row["name"]); ?>"> +<input type="hidden" name="token" value="<?php echo $token; ?>"> +<input type="submit" value="<?php echo lang('Save'); ?>"> +<?php +if ($_GET["ns"] != "") { + echo "<input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n"; +} +?> +</form> Modified: trunk/compile.php =================================================================== --- trunk/compile.php 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/compile.php 2010-05-05 16:30:55 UTC (rev 1521) @@ -190,13 +190,15 @@ } } +$drivers = array(); foreach (array("adminer", "editor") as $project) { $lang_ids = array(); // global variable simplifies usage in a callback function $file = file_get_contents(dirname(__FILE__) . "/$project/index.php"); - if ($DRIVER && $DRIVER != "mysql") { + if ($DRIVER) { + $connection = (object) array("server_info" => 5.1); // MySQL support is version specific $_GET[$DRIVER] = true; // to load the driver include_once dirname(__FILE__) . "/adminer/drivers/$DRIVER.inc.php"; - foreach (array("view", "event", "privileges", "user", "processlist", "variables", "trigger") as $feature) { + foreach (array("view", "event", "privileges", "user", "processlist", "variables", "trigger", "scheme") as $feature) { if (!support($feature)) { $file = str_replace("} elseif (isset(\$_GET[\"$feature\"])) {\n\tinclude \"./$feature.inc.php\";\n", "", $file); } Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2010-05-05 16:29:17 UTC (rev 1520) +++ trunk/todo.txt 2010-05-05 16:30:55 UTC (rev 1521) @@ -35,7 +35,6 @@ PostgreSQL: Users - SELECT * FROM pg_user ORDER BY COUNT(*) -Table schema - SELECT * FROM pg_namespace, CREATE|ALTER|DROP SCHEMA, SET default_tablespace Export - http://www.postgresql.org/docs/8.4/static/functions-info.html Column rights - http://www.postgresql.org/docs/8.4/static/functions-info.html Dollar terminated string in SQL command This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-05-07 11:55:30
|
Revision: 1523 http://adminer.svn.sourceforge.net/adminer/?rev=1523&view=rev Author: jakubvrana Date: 2010-05-07 11:55:19 +0000 (Fri, 07 May 2010) Log Message: ----------- Source codes moved to adminer.git.sourceforge.net Removed Paths: ------------- trunk/adminer/ trunk/changes.txt trunk/compile.php trunk/coverage.php trunk/editor/ trunk/lang.php trunk/tests/ trunk/todo.txt Deleted: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-05-05 16:31:39 UTC (rev 1522) +++ trunk/changes.txt 2010-05-07 11:55:19 UTC (rev 1523) @@ -1,260 +0,0 @@ -Adminer 3.0.0-dev: -Drivers for MS SQL, SQLite, PostgreSQL -Allow concurrent logins on the same server -In-place editation in select -Show number of tables in server overview -Operator LIKE %% -Remember export parameters in cookie -Allow semicolon as CSV separator -Autofocus username in login form -Disable spellchecking in SQL textareas -Japanese translation -Link table names in SQL queries -Defer table information in database overview to JavaScript (performance) -Big tables optimizations (performance) - -Adminer 2.3.2 (released 2010-04-21): -Fix COUNT(*) link -Fix Save and continue edit - -Adminer 2.3.1 (released 2010-04-06): -Add Drop button to Alter pages (regression from 2.0.0) -Link COUNT(*) result to listing -Newlines in select query edit -Return to referer after edit -Respect session.auto_start (bug #2967284) - -Adminer 2.3.0 (released 2010-02-26): -Support for permanent login (customization required) -Search in all tables -Show status variables -Print sums in tables overview -Add Delete button to Edit page (regression from 2.0.0) -Print error summary in SQL command -Simplify SQL syntax error message -Show SQL query info if available -Delete length when changing type in alter table -Ability to check table prefix in export - -Adminer 2.2.1 (released 2009-11-26): -Highlight current links -Improve concurrency -Move number of tables to DB info (performance) -Search by foreign keys (Editor) -Link new item in backward keys (Editor) - -Adminer 2.2.0 (released 2009-10-20): -Database list - bulk drop, number of tables -Enlarge field for enum and set definition -Display table links above table structure -Link URLs in select -Display number of manipulated rows in JS confirm -Set required memory in SQL command -Fix removed default in ALTER -Display whitespace in texts (bug #2858042) -ClickJacking protection in modern browsers -E-mail attachments (Editor) -Optional year in date (Editor) -Search operators (Editor) -Align numbers to right in select (Editor) -Move <h1> to $adminer->navigation (customization) -Rename get_dbh to connection (customization) - -Adminer 2.1.0 (released 2009-09-12): -Edit default values directly in table creation -Execute SQL file stored on server disk -Display EXPLAIN in SQL query -Compress export and import -Display column comments in table overview -Use ON DUPLICATE KEY UPDATE for CSV import -Print ALTER export instead of executing it -Click on row selects it -Fix Editor date format -Fix long SQL query crash (bug #2839231) -Speedup of simple alter table -Traditional Chinese translation - -Adminer 2.0.0 (released 2009-08-06): -Editor: User friendly data editor -Customization: Adminer class -Create single column foreign key in table structure -Table relations (Editor) -Send e-mails (Editor) -Display images in blob (Editor) -Localize date (Editor) -Treat tinyint(1) as bool (Editor) -Divide types to groups in table creation -Link e-mails in select -Show type in field name title (thanks to Jakub Sochor) -Preselect now() for timestamp columns (thanks to paranoiq) -Clear history (thanks to paranoiq) -Prefill insert by foreign key searches -Print number of rows in SQL command -Remove Delete button from Edit page - use mass operation for it -Faster multiple update, clone and delete -Faster table list in navigation -Download version checker and syntax highlighting from HTTPS -Use HTML Strict instead of XHTML -Remove function minification in favor of performance and customization -Fix grant ALL PRIVILEGES with GRANT OPTION -Fix CSV import -Fix work with default values (thanks to Jiri Pospisil) - -Adminer 1.11.1 (released 2009-07-03): -Fix problem with enabled Filter extension - -Adminer 1.11.0 (released 2009-07-02): -Connection through socket by server :/path/to/socket -Simplify export -Display execution time in SQL query -Relative date and time functions -Version checker -Save queries to history and display it on SQL page -Display MySQL variables -Ability to select all rows on current page of select -Separate JavaScript functions -Always use the default style before the external one -Always try to use the syntax highlighter -All privileges in user rights -Fix FOUND_ROWS() in SQL command -Export only selected columns in select -Bulk database creation -Include views in drop and move on database overview -Hide fieldsets in select -Automatically add new fields in table creation -Use \n in SQL commands - -phpMinAdmin 1.10.1 (released 2009-05-07): -Highlight odd and hover rows -Partition editing comfort (bug #2783446) -Allow full length in limited int (thanks to Vlasta Neubauer) - -phpMinAdmin 1.10.0 (released 2009-04-28): -Partitioning (MySQL 5.1) -CSV import -Plus and minus functions -Option to stop on error in SQL command (thanks to Vaclav Marik) -Cross links to select and table (bug #2236232), link new item -Suhosin compatibility (thanks to Klemens Hackel) -Remove max_allowed_packet from export -Read style from phpMinAdmin.css if exists -Size reduction by minification of variables and functions -Russian translation - -phpMinAdmin 1.9.1 (released 2008-10-27): -Update translations - -phpMinAdmin 1.9.0 (released 2008-10-16): -List of tables and views with maintenance commands -Clone rows -Bulk edit and clone -Function results in edit -NOT operators in select -Search without column restriction -Use type=password for unhashed password -Only one button for each action in select -Choose language through option-list -XHTML syntax errors (thanks to kozotoc) -Don't set global variable in export -SHOW DATABASES can be revoked -Order by function result working also in older MySQL versions -Tested on IIS (thanks to krasl.cz) - -phpMinAdmin 1.8.0 (released 2008-09-12): -Events (MySQL 5.1) -Access without login - accept ?username= -Print SQL query in select, messages and warnings -Display number of found rows -Don't wrap lines in select table -Italian and Estonian translation -Order by COUNT(*) - -phpMinAdmin 1.7.0 (released 2008-08-26): -Customizable export (select objects to export, SQL or CSV) -Ability to alter existing tables and drop old tables in export -Choose columns in select, aggregation -Order rows by clicking on table heading -Truncate only search results -Automatically select name for trigger -Chinese and French translation -Preserve default values when altering table -Maintain auto_increment when moving columns -Smaller multilingual file -Cache static files -Faster checking of number of results - -phpMinAdmin 1.6.1 (released 2008-05-22): -Set session parameters only if not session.auto_start - -phpMinAdmin 1.6.0 (released 2008-05-16): -Order of columns in table -Set max_allowed_packet in dump and use extended insert -Spanish and German translations -Use images for editing buttons -Protection against big POST data -Logout by POST -Information about logged user -Separate stylesheet -Last-Modified header for files -Several bug fixes - -phpMinAdmin 1.5.0 (released 2008-01-09): -Mass delete -Vertical privileges -Specify connection port by colon in server -Ignore length in date and time types -Boolean fulltext search for all columns in MyISAM -Shrink compiled output -Remove maxlength from server and username -Uncheck NULL by change -Mark shortened fields in select - -phpMinAdmin 1.4.0 (released 2007-08-15): -Privileges -New design -Dutch translation -Use NULL for auto_increment (bug #1768966) -Fix dropping procedure parameters - -phpMinAdmin 1.3.2 (released 2007-08-06): -Next field by JavaScript in foreign keys -Set time zone in dump -Refresh lang cookie -Remember drop result in case of faulty create -Move vertical lines in schema properly -Fix maximum page in select - -phpMinAdmin 1.3.1 (released 2007-07-31): -Move references lines in schema -Fix dump -Fix update links - -phpMinAdmin 1.3.0 (released 2007-07-27): -Breadcrumb navigation -Operator IN -Timestamp default values -Draggable tables in schema -Number of rows in navigation -Display MySQL version and used PHP extension -More friendly user interface -Slovak translation - -phpMinAdmin 1.2.0 (released 2007-07-25): -Manipulate triggers -PDO Abstraction -Auto_increment value -JavaScript for adding rows - -phpMinAdmin 1.1.0 (released 2007-07-19): -Routines manipulation -Views manipulation -Foreign keys manipulation -Database schema with references -Processlist -Index length -Dump individual tables -JavaScript for next rows in table edit -Cache databases list - -phpMinAdmin 1.0.0 (released 2007-07-11): -First official release Deleted: trunk/compile.php =================================================================== --- trunk/compile.php 2010-05-05 16:31:39 UTC (rev 1522) +++ trunk/compile.php 2010-05-07 11:55:19 UTC (rev 1523) @@ -1,238 +0,0 @@ -<?php -error_reporting(6135); // errors and warnings -include dirname(__FILE__) . "/adminer/include/version.inc.php"; -include dirname(__FILE__) . "/externals/jsmin-php/jsmin.php"; - -function add_apo_slashes($s) { - return addcslashes($s, "\\'"); -} - -function remove_lang($match) { - global $translations; - $idf = strtr($match[2], array("\\'" => "'", "\\\\" => "\\")); - $s = ($translations[$idf] ? $translations[$idf] : $idf); - if ($match[3] == ",") { // lang() has parameters - return "$match[1]" . (is_array($s) ? "lang(array('" . implode("', '", array_map('add_apo_slashes', $s)) . "')," : "sprintf('" . add_apo_slashes($s) . "',"); - } - return ($match[1] && $match[4] ? $s : "$match[1]'" . add_apo_slashes($s) . "'$match[4]"); -} - -function lang_ids($match) { - global $lang_ids; - $lang_id = &$lang_ids[stripslashes($match[1])]; - if (!isset($lang_id)) { - $lang_id = count($lang_ids) - 1; - } - return ($_SESSION["lang"] ? $match[0] : "lang($lang_id$match[2]"); -} - -function put_file($match) { - global $project; - if (basename($match[2]) == '$LANG.inc.php') { - return $match[0]; // processed later - } - $return = file_get_contents(dirname(__FILE__) . "/$project/$match[2]"); - if (basename($match[2]) != "lang.inc.php" || !$_SESSION["lang"]) { - $tokens = token_get_all($return); // to find out the last token - return "?>\n$return" . (in_array($tokens[count($tokens) - 1][0], array(T_CLOSE_TAG, T_INLINE_HTML), true) ? "<?php" : ""); - } elseif (preg_match('~\\s*(\\$pos = .*)~', $return, $match2)) { - // single language lang() is used for plural - return "function lang(\$translation, \$number) {\n\t" . str_replace('$LANG', "'$_SESSION[lang]'", $match2[1]) . "\n\treturn sprintf(\$translation[\$pos], \$number);\n}\n"; - } else { - echo "lang() not found\n"; - } -} - -function put_file_lang($match) { - global $lang_ids, $project; - if ($_SESSION["lang"]) { - return ""; - } - $return = ""; - foreach (glob(dirname(__FILE__) . "/adminer/lang/*.inc.php") as $filename) { - include $filename; // assign $translations - $translation_ids = array_flip($lang_ids); // default translation - foreach ($translations as $key => $val) { - if (isset($val)) { - $translation_ids[$lang_ids[$key]] = $val; - } - } - $return .= "\tcase \"" . basename($filename, '.inc.php') . '": $translations = array('; - foreach ($translation_ids as $val) { - $return .= (is_array($val) ? "array('" . implode("', '", array_map('add_apo_slashes', $val)) . "')" : "'" . add_apo_slashes($val) . "'") . ", "; - } - $return = substr($return, 0, -2) . "); break;\n"; - } - return "switch (\$LANG) {\n$return}\n"; -} - -function short_identifier($number, $chars) { - $return = ''; - while ($number >= 0) { - $return .= $chars{$number % strlen($chars)}; - $number = floor($number / strlen($chars)) - 1; - } - return $return; -} - -// based on http://latrine.dgx.cz/jak-zredukovat-php-skripty -function php_shrink($input) { - $special_variables = array_flip(array('$this', '$GLOBALS', '$_GET', '$_POST', '$_FILES', '$_COOKIE', '$_SESSION', '$_SERVER')); - $short_variables = array(); - $shortening = true; - $tokens = token_get_all($input); - - foreach ($tokens as $i => $token) { - if ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) { - $short_variables[$token[1]]++; - } - } - - arsort($short_variables); - foreach (array_keys($short_variables) as $number => $key) { - $short_variables[$key] = short_identifier($number, implode("", range('a', 'z')) . '_' . implode("", range('A', 'Z'))); // could use also numbers and \x7f-\xff - } - - $set = array_flip(preg_split('//', '!"#$&\'()*+,-./:;<=>?@[\]^`{|}')); - $space = ''; - $output = ''; - $in_echo = false; - $doc_comment = false; // include only first /** - for (reset($tokens); list($i, $token) = each($tokens); ) { - if (!is_array($token)) { - $token = array(0, $token); - } - if ($tokens[$i+2][0] === T_CLOSE_TAG && $tokens[$i+3][0] === T_INLINE_HTML && $tokens[$i+4][0] === T_OPEN_TAG - && strlen(addcslashes($tokens[$i+3][1], "'\\")) < strlen($tokens[$i+3][1]) + 3 - ) { - $tokens[$i+2] = array(T_ECHO, 'echo'); - $tokens[$i+3] = array(T_CONSTANT_ENCAPSED_STRING, "'" . addcslashes($tokens[$i+3][1], "'\\") . "'"); - $tokens[$i+4] = array(0, ';'); - } - if ($token[0] == T_COMMENT || $token[0] == T_WHITESPACE || ($token[0] == T_DOC_COMMENT && $doc_comment)) { - $space = "\n"; - } else { - if ($token[0] == T_DOC_COMMENT) { - $doc_comment = true; - } - if ($token[0] == T_VAR) { - $shortening = false; - } elseif (!$shortening) { - if ($token[1] == ';') { - $shortening = true; - } - } elseif ($token[0] == T_ECHO) { - $in_echo = true; - } elseif ($token[1] == ';' && $in_echo) { - if ($tokens[$i+1][0] === T_WHITESPACE && $tokens[$i+2][0] === T_ECHO) { - next($tokens); - $i++; - } - if ($tokens[$i+1][0] === T_ECHO) { - // join two consecutive echos - next($tokens); - $token[1] = ','; // '.' would conflict with "a".1+2 and would use more memory //! remove ',' and "," but not $var"," - } else { - $in_echo = false; - } - } elseif ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) { - $token[1] = '$' . $short_variables[$token[1]]; - } - if (isset($set[substr($output, -1)]) || isset($set[$token[1][0]])) { - $space = ''; - } - $output .= $space . $token[1]; - $space = ''; - } - } - return $output; -} - -function minify_css($file) { - return preg_replace('~\\s*([:;{},])\\s*~', '\\1', $file); -} - -function compile_file($match) { - global $project; - return call_user_func($match[2], file_get_contents(dirname(__FILE__) . "/$project/$match[1]")); -} - -$DRIVER = ""; -if (file_exists(dirname(__FILE__) . "/adminer/drivers/" . $_SERVER["argv"][1] . ".inc.php")) { - $DRIVER = $_SERVER["argv"][1]; - array_shift($_SERVER["argv"]); -} - -unset($_COOKIE["adminer_lang"]); -$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session -include dirname(__FILE__) . "/adminer/include/lang.inc.php"; -if (isset($_SESSION["lang"])) { - if (isset($_SERVER["argv"][2]) || !isset($langs[$_SESSION["lang"]])) { - echo "Usage: php compile.php [lang]\nPurpose: Compile adminer[-lang].php and editor[-lang].php.\n"; - exit(1); - } - include dirname(__FILE__) . "/adminer/lang/$_SESSION[lang].inc.php"; -} - -// check function definition in drivers -$filename = dirname(__FILE__) . "/adminer/drivers/mysql.inc.php"; -preg_match_all('~\\bfunction ([^(]+)~', file_get_contents($filename), $matches); //! respect context (extension, class) -$functions = array_combine($matches[1], $matches[0]); -unset($functions["__destruct"], $functions["Min_DB"], $functions["Min_Result"]); -foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($DRIVER ? $DRIVER : "*") . ".inc.php") as $filename) { - if ($filename != "mysql.inc.php") { - $file = file_get_contents($filename); - foreach ($functions as $val) { - if (!strpos($file, "$val(")) { - echo "Missing $val in $filename\n"; - } - } - } -} - -$drivers = array(); -foreach (array("adminer", "editor") as $project) { - $lang_ids = array(); // global variable simplifies usage in a callback function - $file = file_get_contents(dirname(__FILE__) . "/$project/index.php"); - if ($DRIVER) { - $connection = (object) array("server_info" => 5.1); // MySQL support is version specific - $_GET[$DRIVER] = true; // to load the driver - include_once dirname(__FILE__) . "/adminer/drivers/$DRIVER.inc.php"; - foreach (array("view", "event", "privileges", "user", "processlist", "variables", "trigger", "scheme") as $feature) { - if (!support($feature)) { - $file = str_replace("} elseif (isset(\$_GET[\"$feature\"])) {\n\tinclude \"./$feature.inc.php\";\n", "", $file); - } - } - if (!support("routine")) { - $file = str_replace("} elseif (isset(\$_GET[\"procedure\"])) {\n\tinclude \"./procedure.inc.php\";\n", "", $file); - $file = str_replace("} elseif (isset(\$_GET[\"call\"])) {\n\tinclude \"./call.inc.php\";\n", "", $file); - $file = str_replace("if (isset(\$_GET[\"callf\"])) {\n\t\$_GET[\"call\"] = \$_GET[\"callf\"];\n}\nif (isset(\$_GET[\"function\"])) {\n\t\$_GET[\"procedure\"] = \$_GET[\"function\"];\n}\n", "", $file); - } - } - $file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); - $file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file); - if ($DRIVER) { - $file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($DRIVER) . ').*\\s*)', '', $file); - } - $file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); // bootstrap.inc.php - $file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file); - $file = preg_replace_callback('~\\b(include|require) "([^"]*\\$LANG.inc.php)";~', 'put_file_lang', $file); - if ($_SESSION["lang"]) { - // single language version - $file = preg_replace_callback("~(<\\?php\\s*echo )?lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])(;\\s*\\?>)?~s", 'remove_lang', $file); - $file = str_replace("<?php switch_lang(); ?>\n", "", $file); - $file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file); - } - $file = str_replace('<script type="text/javascript" src="static/editing.js"></script>' . "\n", "", $file); - $file = preg_replace_callback("~compile_file\\('([^']+)', '([^']+)'\\);~", 'compile_file', $file); // integrate static files - $replace = 'h(preg_replace("~\\\\\\\\?.*~", "", $_SERVER["REQUEST_URI"])) . "?file=\\1&version=' . $VERSION; - $file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file); - $file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file); - $file = str_replace("../externals/jush/", "https://www.adminer.org/static/", $file); - $file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file); - $file = php_shrink($file); - - $filename = $project . (preg_match('~-dev$~', $VERSION) ? "" : "-$VERSION") . ($DRIVER ? "-$DRIVER" : "") . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php"; - fwrite(fopen($filename, "w"), $file); // file_put_contents() since PHP 5 - echo "$filename created (" . strlen($file) . " B).\n"; -} Deleted: trunk/coverage.php =================================================================== --- trunk/coverage.php 2010-05-05 16:31:39 UTC (rev 1522) +++ trunk/coverage.php 2010-05-07 11:55:19 UTC (rev 1523) @@ -1,82 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" lang="cs"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<title>Coverage</title> -</head> - -<body> - -<?php -function xhtml_open_tags($s) { - // returns array of opened tags in $s - $return = array(); - preg_match_all('~<([^>]+)~', $s, $matches); - foreach ($matches[1] as $val) { - if ($val[0] == "/") { - array_pop($return); - } elseif (substr($val, -1) != "/") { - $return[] = $val; - } - } - return $return; -} - -$coverage_filename = sys_get_temp_dir() . "/adminer_coverage.ser"; -if (!extension_loaded("xdebug")) { - echo "<p class='error'>Xdebug has to be enabled.</p>\n"; -} elseif ($_GET["coverage"] === "0") { - file_put_contents($coverage_filename, serialize(array())); - echo "<p class='message'>Coverage started.</p>\n"; -} elseif (preg_match('~^(adminer|editor)/(include/)?[-_.a-z0-9]+$~i', $_GET["coverage"])) { - // highlight single file - $filename = $_GET["coverage"]; - $coverage = (file_exists($coverage_filename) ? unserialize(file_get_contents($coverage_filename)) : array()); - $file = explode("<br />", highlight_file($filename, true)); - unset($prev_color); - $s = ""; - for ($l=0; $l <= count($file); $l++) { - $line = $file[$l]; - $color = "#C0FFC0"; // tested - switch ($coverage[realpath($filename)][$l+1]) { - case -1: $color = "#FFC0C0"; break; // untested - case -2: $color = "Silver"; break; // dead code - case null: $color = ""; break; // not executable - } - if (!isset($prev_color)) { - $prev_color = $color; - } - if ($prev_color != $color || !isset($line)) { - echo "<div" . ($prev_color ? " style='background-color: $prev_color;'" : "") . ">$s"; - $open_tags = xhtml_open_tags($s); - foreach (array_reverse($open_tags) as $tag) { - echo "</" . preg_replace('~ .*~', '', $tag) . ">"; - } - echo "</div>\n"; - $s = ($open_tags ? "<" . implode("><", $open_tags) . ">" : ""); - $prev_color = $color; - } - $s .= "$line<br />\n"; - } -} else { - if (file_exists($coverage_filename)) { - // display list of files - $coverage = unserialize(file_get_contents($coverage_filename)); - echo "<table border='1' cellspacing='0'>\n"; - foreach (array_merge(glob("adminer/*.php"), glob("adminer/include/*.php"), glob("editor/*.php"), glob("editor/include/*.php")) as $filename) { - $cov = $coverage[realpath($filename)]; - $ratio = 0; - if (is_array($cov)) { - $values = array_count_values($cov); - $ratio = round(100 - 100 * $values[-1] / (count($cov) - $values[-2])); - } - echo "<tr><td align='right' style='background-color: " . ($ratio < 50 ? "Red" : ($ratio < 75 ? "#FFEA20" : "#A7FC9D")) . ";'>$ratio%</td><td><a href='coverage.php?coverage=$filename'>$filename</a></td></tr>\n"; - } - echo "</table>\n"; - } - echo "<p><a href='coverage.php?coverage=0'>Start new coverage</a></p>\n"; -} -?> - -</body> -</html> Deleted: trunk/lang.php =================================================================== --- trunk/lang.php 2010-05-05 16:31:39 UTC (rev 1522) +++ trunk/lang.php 2010-05-07 11:55:19 UTC (rev 1523) @@ -1,55 +0,0 @@ -<?php -error_reporting(6135); // errors and warnings -unset($_COOKIE["adminer_lang"]); -$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session -if (isset($_SESSION["lang"])) { - include dirname(__FILE__) . "/adminer/include/lang.inc.php"; - if (isset($_SERVER["argv"][2]) || !isset($langs[$_SESSION["lang"]])) { - echo "Usage: php lang.php [lang]\nPurpose: Update adminer/lang/*.inc.php from source code messages.\n"; - exit(1); - } -} - -$messages_all = array(); -foreach (array_merge( - glob(dirname(__FILE__) . "/adminer/*.php"), - glob(dirname(__FILE__) . "/adminer/include/*.php"), - glob(dirname(__FILE__) . "/adminer/drivers/*.php"), - glob(dirname(__FILE__) . "/editor/*.php"), - glob(dirname(__FILE__) . "/editor/include/*.php") -) as $filename) { - $file = file_get_contents($filename); - if (preg_match_all("~lang\\(('(?:[^\\\\']+|\\\\.)*')([),])~", $file, $matches)) { // lang() always uses apostrophes - $messages_all += array_combine($matches[1], $matches[2]); - } -} - -foreach (glob(dirname(__FILE__) . "/adminer/lang/" . ($_SESSION["lang"] ? $_SESSION["lang"] : "*") . ".inc.php") as $filename) { - $messages = $messages_all; - $file = file_get_contents($filename); - preg_match_all("~^(\\s*)(?:// )?(('(?:[^\\\\']+|\\\\.)*') => .*[^,\n]),?~m", $file, $matches, PREG_SET_ORDER); - $s = ""; - foreach ($matches as $match) { - if (isset($messages[$match[3]])) { - // keep current messages - $s .= "$match[1]$match[2],\n"; - unset($messages[$match[3]]); - } else { - // comment deprecated messages - $s .= "$match[1]// $match[2],\n"; - } - } - foreach($messages as $idf => $val) { - // add new messages - if ($val == "," && strpos($idf, "%d")) { - $s .= "\t$idf => array(),\n"; - } elseif (basename($filename) != "en.inc.php") { - $s .= "\t$idf => null,\n"; - } - } - $s = "<?php\n\$translations = array(\n$s);\n"; - if ($s != $file) { - fwrite(fopen($filename, "w"), $s); // file_put_contents() since PHP 5 - echo "$filename updated.\n"; - } -} Deleted: trunk/todo.txt =================================================================== --- trunk/todo.txt 2010-05-05 16:31:39 UTC (rev 1522) +++ trunk/todo.txt 2010-05-07 11:55:19 UTC (rev 1523) @@ -1,49 +0,0 @@ -Transactions in export -Create view and routine options -Variables editation, especially timezone -Accept Tab in SQL textareas, Ctrl+Enter to send form -Highlight SQL textarea, then display query inside textarea in select - may use external CodePress -Blob download and image display in edit form (important for Editor with hidden fields in select) -Add title to Logout, edit (in select) and select (in menu) in style "hever" -Shift-click in checkboxes to select range -Export by GET parameters -Only first part of big BZ2 export is readable -Auto-refresh processlist (thanks to Jan Garaj) -Show pagination above and under the table in select -? Filter by value in row under <thead> in select -? Column and table names auto-completition in SQL textarea -? Aliasing of built-in functions can save 7 KB, function minification can save 7 KB, substitution of repetitive $a["a"] can save 4 KB, substitution of $_GET and friends can save 2 KB, aliasing of $connection->query, $connection->result and $connection->quote can save ~ 3 KB, JS packer can save 1 KB, not enclosing HTML attribute values can save 1.2 KB, replacing \\n by \n can save .3 KB -? Branch binary_compile: LZW compression of translations can save 30 KB, LZW compression of all texts can save 11 KB, remove of base64_decode() + using chars 127-255 in minification can save 1 KB - -Editor: -JavaScript data validation - columns containing word email, url, ... -Joining tables - PRIMARY KEY (table, joining) -Rank, Tree structure -Add whisperer to fields with foreign key to big table -In-place editation of foreign keys and date - -MySQL: -Saving of MySQL 5 BIT data type - don't use quote() -? Geometry support - -SQLite: -CSV import - ON DUPLICATE KEY UPDATE -Export - CREATE DATABASE -Delimiter in export and SQL command -Backward keys in Editor - -PostgreSQL: -Users - SELECT * FROM pg_user -ORDER BY COUNT(*) -Export - http://www.postgresql.org/docs/8.4/static/functions-info.html -Column rights - http://www.postgresql.org/docs/8.4/static/functions-info.html -Dollar terminated string in SQL command -Move table - ALTER TABLE SET SCHEMA -Sequences -bool in Editor -Check PDO driver - -MS SQL: -Rename by sp_rename -Detection of table collation -PDO driver with seek This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-21 17:01:34
|
Revision: 995 http://adminer.svn.sourceforge.net/adminer/?rev=995&view=rev Author: jakubvrana Date: 2009-08-21 17:01:22 +0000 (Fri, 21 Aug 2009) Log Message: ----------- Remove table_comment function Modified Paths: -------------- trunk/adminer/create.inc.php trunk/adminer/db.inc.php trunk/adminer/include/mysql.inc.php trunk/editor/include/adminer.inc.php Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2009-08-21 16:58:20 UTC (rev 994) +++ trunk/adminer/create.inc.php 2009-08-21 17:01:22 UTC (rev 995) @@ -103,7 +103,6 @@ process_fields($row["fields"]); } elseif (strlen($_GET["create"])) { $row = table_status($_GET["create"]); - table_comment($row); $row["name"] = $_GET["create"]; $row["fields"] = array(); foreach ($orig_fields as $field) { Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2009-08-21 16:58:20 UTC (rev 994) +++ trunk/adminer/db.inc.php 2009-08-21 17:01:22 UTC (rev 995) @@ -52,7 +52,6 @@ echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="form_check(this, /^(tables|views)\[/);"><th>' . lang('Table') . '<td>' . lang('Engine') . '<td>' . lang('Collation') . '<td>' . lang('Data Length') . '<td>' . lang('Index Length') . '<td>' . lang('Data Free') . '<td>' . lang('Auto Increment') . '<td>' . lang('Rows') . '<td>' . lang('Comment') . "</thead>\n"; foreach ($table_status as $row) { $name = $row["Name"]; - table_comment($row); echo '<tr' . odd() . '><td><input type="checkbox" name="' . (isset($row["Rows"]) ? 'tables' : 'views') . '[]" value="' . h($name) . '"' . (in_array($name, $tables_views, true) ? ' checked' : '') . ' onclick="form_uncheck(\'check-all\');">'; echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '">' . h($name) . '</a>'; if (isset($row["Rows"])) { Modified: trunk/adminer/include/mysql.inc.php =================================================================== --- trunk/adminer/include/mysql.inc.php 2009-08-21 16:58:20 UTC (rev 994) +++ trunk/adminer/include/mysql.inc.php 2009-08-21 17:01:22 UTC (rev 995) @@ -170,6 +170,10 @@ $return = array(); $result = $dbh->query("SHOW TABLE STATUS" . (strlen($name) ? " LIKE " . $dbh->quote(addcslashes($name, "%_")) : "")); while ($row = $result->fetch_assoc()) { + if ($row["Engine"] == "InnoDB") { + // ignore internal comment, unnecessary since MySQL 5.1.21 + $row["Comment"] = preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["Comment"]); + } $return[$row["Name"]] = $row; } $result->free(); @@ -282,13 +286,6 @@ return substr($dbh->quote($val), 1, -1); } -function table_comment(&$row) { - if ($row["Engine"] == "InnoDB") { - // ignore internal comment, unnecessary since MySQL 5.1.21 - $row["Comment"] = preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["Comment"]); - } -} - function information_schema($db) { global $dbh; return ($dbh->server_info >= 5 && $db == "information_schema"); Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-08-21 16:58:20 UTC (rev 994) +++ trunk/editor/include/adminer.inc.php 2009-08-21 17:01:22 UTC (rev 995) @@ -32,7 +32,6 @@ } function tableName($tableStatus) { - table_comment($tableStatus); return h(strlen($tableStatus["Comment"]) ? $tableStatus["Comment"] : $tableStatus["Name"]); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-21 17:08:20
|
Revision: 996 http://adminer.svn.sourceforge.net/adminer/?rev=996&view=rev Author: jakubvrana Date: 2009-08-21 17:08:10 +0000 (Fri, 21 Aug 2009) Log Message: ----------- Use now function instead of CURRENT_TIMESTAMP Modified Paths: -------------- trunk/adminer/edit.inc.php trunk/adminer/include/adminer.inc.php trunk/editor/include/adminer.inc.php Modified: trunk/adminer/edit.inc.php =================================================================== --- trunk/adminer/edit.inc.php 2009-08-21 17:01:22 UTC (rev 995) +++ trunk/adminer/edit.inc.php 2009-08-21 17:08:10 UTC (rev 996) @@ -78,6 +78,10 @@ $value = $adminer->editVal($value, $field); } $function = ($_POST["save"] ? (string) $_POST["function"][$name] : ($where && $field["on_update"] == "CURRENT_TIMESTAMP" ? "now" : ($value === false ? null : (isset($value) ? '' : 'NULL')))); + if ($field["type"] == "timestamp" && $value == "CURRENT_TIMESTAMP") { + $value = ""; + $function = "now"; + } input($field, $value, $function); echo "\n"; } Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-08-21 17:01:22 UTC (rev 995) +++ trunk/adminer/include/adminer.inc.php 2009-08-21 17:08:10 UTC (rev 996) @@ -400,8 +400,6 @@ $return = "$function(" . idf_escape($name) . ", $return)"; } elseif (ereg('^(md5|sha1|password)$', $function)) { $return = "$function($return)"; - } elseif (ereg('date|time', $field["type"]) && $value == "CURRENT_TIMESTAMP") { - $return = $value; } return $return; } Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-08-21 17:01:22 UTC (rev 995) +++ trunk/editor/include/adminer.inc.php 2009-08-21 17:08:10 UTC (rev 996) @@ -331,8 +331,6 @@ ); if (!ereg('varchar|text', $field["type"]) && $field["full_type"] != "tinyint(1)" && !strlen($value)) { $return = "NULL"; - } elseif (ereg('date|time', $field["type"]) && $value == "CURRENT_TIMESTAMP") { - $return = $value; } return $return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-25 10:26:05
|
Revision: 1003 http://adminer.svn.sourceforge.net/adminer/?rev=1003&view=rev Author: jakubvrana Date: 2009-08-25 10:25:56 +0000 (Tue, 25 Aug 2009) Log Message: ----------- Click on row selects it (fixes #2844098) Modified Paths: -------------- trunk/adminer/db.inc.php trunk/adminer/functions.js trunk/adminer/processlist.inc.php trunk/adminer/select.inc.php trunk/changes.txt Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2009-08-25 09:24:27 UTC (rev 1002) +++ trunk/adminer/db.inc.php 2009-08-25 10:25:56 UTC (rev 1003) @@ -48,7 +48,7 @@ echo "<p class='message'>" . lang('No tables.') . "\n"; } else { echo "<form action='' method='post'>\n"; - echo "<table cellspacing='0' class='nowrap'>\n"; + echo "<table cellspacing='0' class='nowrap' onclick='table_click(event);'>\n"; echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="form_check(this, /^(tables|views)\[/);"><th>' . lang('Table') . '<td>' . lang('Engine') . '<td>' . lang('Collation') . '<td>' . lang('Data Length') . '<td>' . lang('Index Length') . '<td>' . lang('Data Free') . '<td>' . lang('Auto Increment') . '<td>' . lang('Rows') . '<td>' . lang('Comment') . "</thead>\n"; foreach ($table_status as $row) { $name = $row["Name"]; Modified: trunk/adminer/functions.js =================================================================== --- trunk/adminer/functions.js 2009-08-25 09:24:27 UTC (rev 1002) +++ trunk/adminer/functions.js 2009-08-25 10:25:56 UTC (rev 1003) @@ -26,8 +26,21 @@ document.getElementById(id).checked = false; } +function table_click(event) { + var target = event.target || event.srcElement; + while (!/^tr$/i.test(target.tagName)) { + if (/^(table|a|input)$/i.test(target.tagName)) { + return; + } + target = target.parentNode; + } + var input = target.firstChild.firstChild; + input.click && input.click(); + input.onclick && input.onclick(); +} + function select_add_row(field) { var row = field.parentNode.cloneNode(true); var selects = row.getElementsByTagName('select'); Modified: trunk/adminer/processlist.inc.php =================================================================== --- trunk/adminer/processlist.inc.php 2009-08-25 09:24:27 UTC (rev 1002) +++ trunk/adminer/processlist.inc.php 2009-08-25 10:25:56 UTC (rev 1003) @@ -13,7 +13,7 @@ ?> <form action="" method="post"> -<table cellspacing="0"> +<table cellspacing="0" onclick="table_click(event);"> <?php $result = $dbh->query("SHOW PROCESSLIST"); for ($i=0; $row = $result->fetch_assoc(); $i++) { Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-08-25 09:24:27 UTC (rev 1002) +++ trunk/adminer/select.inc.php 2009-08-25 10:25:56 UTC (rev 1003) @@ -199,7 +199,7 @@ } } - echo "<table cellspacing='0' class='nowrap'>\n"; + echo "<table cellspacing='0' class='nowrap' onclick='table_click(event);'>\n"; echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='form_check(this, /check/);'>"; $names = array(); reset($select); Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-08-25 09:24:27 UTC (rev 1002) +++ trunk/changes.txt 2009-08-25 10:25:56 UTC (rev 1003) @@ -2,6 +2,7 @@ Edit default values directly in table creation Display column comments in table overview Respect max_allowed_packet in CSV import +Click on row selects it Fix Editor date format Fix long SQL query crash (bug #2839231) Traditional Chinese translation This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-25 14:11:26
|
Revision: 1010 http://adminer.svn.sourceforge.net/adminer/?rev=1010&view=rev Author: jakubvrana Date: 2009-08-25 14:11:15 +0000 (Tue, 25 Aug 2009) Log Message: ----------- Dump column names in CSV select export Modified Paths: -------------- trunk/adminer/include/export.inc.php trunk/adminer/select.inc.php trunk/editor/include/export.inc.php Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-08-25 13:56:37 UTC (rev 1009) +++ trunk/adminer/include/export.inc.php 2009-08-25 14:11:15 UTC (rev 1010) @@ -157,6 +157,6 @@ return $ext; } -$dump_output = "<select name='output'><option value='text'>" . lang('open') . "<option value='file'>" . lang('save') . "</select>"; -$dump_format = "<select name='format'><option value='sql'>" . lang('SQL') . "<option value='csv'>" . lang('CSV') . "</select>"; +$dump_output = "<select name='output'>" . optionlist(array('text' => lang('open'), 'file' => lang('save'))) . "</select>"; +$dump_output = "<select name='output'>" . optionlist(array('sql' => lang('SQL'), 'csv' => lang('CSV'))) . "</select>"; $max_packet = 1048576; // default, minimum is 1024 Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-08-25 13:56:37 UTC (rev 1009) +++ trunk/adminer/select.inc.php 2009-08-25 14:11:15 UTC (rev 1010) @@ -35,6 +35,9 @@ if ($_POST["export"]) { dump_headers($_GET["select"]); dump_table($_GET["select"], ""); + if ($_POST["format"] != "sql") { // Editor doesn't send format + dump_csv($select ? $select : array_keys($fields)); + } if (!is_array($_POST["check"]) || $primary === array()) { dump_data($_GET["select"], "INSERT", "SELECT $from" . (is_array($_POST["check"]) ? ($where ? " AND " : " WHERE ") . "($where_check)" : "") . $group_by); } else { Modified: trunk/editor/include/export.inc.php =================================================================== --- trunk/editor/include/export.inc.php 2009-08-25 13:56:37 UTC (rev 1009) +++ trunk/editor/include/export.inc.php 2009-08-25 14:11:15 UTC (rev 1010) @@ -1,7 +1,6 @@ <?php function dump_table($table) { echo "\xef\xbb\xbf"; // UTF-8 byte order mark - dump_csv(array_keys(fields($table))); } function dump_data($table, $style, $select = "") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-25 15:23:27
|
Revision: 1012 http://adminer.svn.sourceforge.net/adminer/?rev=1012&view=rev Author: jakubvrana Date: 2009-08-25 15:23:19 +0000 (Tue, 25 Aug 2009) Log Message: ----------- Compact dump output Modified Paths: -------------- trunk/adminer/dump.inc.php trunk/adminer/include/export.inc.php trunk/adminer/lang/cs.inc.php trunk/adminer/lang/de.inc.php trunk/adminer/lang/es.inc.php trunk/adminer/lang/et.inc.php trunk/adminer/lang/fr.inc.php trunk/adminer/lang/it.inc.php trunk/adminer/lang/nl.inc.php trunk/adminer/lang/ru.inc.php trunk/adminer/lang/sk.inc.php trunk/adminer/lang/zh-tw.inc.php trunk/adminer/lang/zh.inc.php trunk/adminer/select.inc.php trunk/editor/include/export.inc.php Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/dump.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -158,18 +158,17 @@ <form action="" method="post"> <table cellspacing="0"> <?php -$db_style = array('USE', 'DROP+CREATE', 'CREATE'); -$table_style = array('DROP+CREATE', 'CREATE'); -$data_style = array('TRUNCATE+INSERT', 'INSERT', 'INSERT+UPDATE'); +$db_style = array('', 'USE', 'DROP+CREATE', 'CREATE'); +$table_style = array('', 'DROP+CREATE', 'CREATE'); +$data_style = array('', 'TRUNCATE+INSERT', 'INSERT', 'INSERT+UPDATE'); if ($dbh->server_info >= 5) { $db_style[] = 'CREATE+ALTER'; $table_style[] = 'CREATE+ALTER'; } echo "<tr><th>" . lang('Output') . "<td><input type='hidden' name='token' value='$token'>$dump_output\n"; -echo "<tr><th>" . lang('Format') . "<td>$dump_format\n"; -echo "<tr><th>" . lang('Database') . "<td><select name='db_style'><option>" . optionlist($db_style, (strlen($_GET["db"]) ? '' : 'CREATE')) . "</select>\n"; -echo "<tr><th>" . lang('Tables') . "<td><select name='table_style'><option>" . optionlist($table_style, 'DROP+CREATE') . "</select>\n"; -echo "<tr><th>" . lang('Data') . "<td><select name='data_style'><option>" . optionlist($data_style, 'INSERT') . "</select>\n"; +echo "<tr><th>" . lang('Database') . "<td><select name='db_style'>" . optionlist($db_style, (strlen($_GET["db"]) ? '' : 'CREATE')) . "</select>\n"; +echo "<tr><th>" . lang('Tables') . "<td><select name='table_style'>" . optionlist($table_style, 'DROP+CREATE') . "</select>\n"; +echo "<tr><th>" . lang('Data') . "<td><select name='data_style'>" . optionlist($data_style, 'INSERT') . "</select>\n"; ?> </table> <p><input type="submit" value="<?php echo lang('Export'); ?>"> Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/include/export.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -157,6 +157,6 @@ return $ext; } -$dump_output = "<select name='output'>" . optionlist(array('text' => lang('open'), 'file' => lang('save'))) . "</select>"; -$dump_format = "<select name='format'>" . optionlist(array('sql' => lang('SQL'), 'csv' => lang('CSV'))) . "</select>"; +$dump_output = "<select name='output'>" . optionlist(array('text' => lang('open'), 'file' => lang('save'))) . "</select>" + . " <select name='format'>" . optionlist(array('sql' => 'SQL', 'csv' => 'CSV')) . "</select>" $max_packet = 1048576; // default, minimum is 1024 Modified: trunk/adminer/lang/cs.inc.php =================================================================== --- trunk/adminer/lang/cs.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/cs.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Výstup', 'open' => 'otevřít', 'save' => 'uložit', - 'Format' => 'Formát', - 'SQL' => 'SQL', - 'CSV' => 'CSV', 'Tables' => 'Tabulky', 'Data' => 'Data', 'Event has been dropped.' => 'Událost byla odstraněna.', Modified: trunk/adminer/lang/de.inc.php =================================================================== --- trunk/adminer/lang/de.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/de.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Ergebnis', 'open' => 'anzeigen', 'save' => 'Datei', - 'Format' => 'Format', - 'SQL' => 'SQL', - 'CSV' => 'CSV', 'Tables' => 'Tabellen', 'Data' => 'Daten', 'Event has been dropped.' => 'Ereignis entfernt.', Modified: trunk/adminer/lang/es.inc.php =================================================================== --- trunk/adminer/lang/es.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/es.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Salida', 'open' => 'mostrar', 'save' => 'archivo', - 'Format' => 'Formato', - 'SQL' => 'SQL', - 'CSV' => 'CSV', 'Tables' => 'Tablas', 'Data' => 'Datos', 'Event has been dropped.' => 'Evento eliminado.', Modified: trunk/adminer/lang/et.inc.php =================================================================== --- trunk/adminer/lang/et.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/et.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Väljund', 'open' => 'näita brauseris', 'save' => 'salvesta failina', - 'Format' => 'Formaat', - 'SQL' => 'SQL', - 'CSV' => 'CSV', 'Functions' => 'Funktsioonid', 'Aggregation' => 'Liitmine', 'Event has been dropped.' => 'Sündmus on edukalt kustutatud.', Modified: trunk/adminer/lang/fr.inc.php =================================================================== --- trunk/adminer/lang/fr.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/fr.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Sortie', 'open' => 'ouvrir', 'save' => 'sauvegarder', - 'Format' => 'Formatter', - 'SQL' => 'SQL', - 'CSV' => 'CVS', 'Functions' => 'Fonctions', 'Aggregation' => 'Agrégation', 'Event has been dropped.' => 'L\'évènement a été supprimé.', Modified: trunk/adminer/lang/it.inc.php =================================================================== --- trunk/adminer/lang/it.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/it.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Risultato', 'open' => 'apri', 'save' => 'salva', - 'Format' => 'Formato', - 'SQL' => 'SQL', - 'CSV' => 'CSV', 'Tables' => 'Tabelle', 'Data' => 'Dati', 'Event has been dropped.' => 'Evento eliminato.', Modified: trunk/adminer/lang/nl.inc.php =================================================================== --- trunk/adminer/lang/nl.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/nl.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Uitvoer', 'open' => 'openen', 'save' => 'opslaan', - 'Format' => 'Formaat', - 'SQL' => 'SQL', - 'CSV' => 'CSV', 'Functions' => 'Functies', 'Aggregation' => 'Totalen', 'Event has been dropped.' => 'Event werd verwijderd.', Modified: trunk/adminer/lang/ru.inc.php =================================================================== --- trunk/adminer/lang/ru.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/ru.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Выходные данные', 'open' => 'открыть', 'save' => 'сохранить', - 'Format' => 'Формат', - 'SQL' => 'SQL', - 'CSV' => 'CSV', 'Tables' => 'Таблицы', 'Data' => 'Данные', 'Event has been dropped.' => 'Событие было удалено.', Modified: trunk/adminer/lang/sk.inc.php =================================================================== --- trunk/adminer/lang/sk.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/sk.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => 'Výstup', 'open' => 'otvoriť', 'save' => 'uložiť', - 'Format' => 'Formát', - 'SQL' => 'SQL', - 'CSV' => 'CSV', 'Tables' => 'Tabuľky', 'Data' => 'Dáta', 'Event has been dropped.' => 'Udalosť bola odstránená.', Modified: trunk/adminer/lang/zh-tw.inc.php =================================================================== --- trunk/adminer/lang/zh-tw.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/zh-tw.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => '輸出', 'open' => '打開', 'save' => '儲存', - 'Format' => '格式', - 'SQL' => 'SQL', - 'CSV' => 'CVS', 'Functions' => '函數', 'Aggregation' => '集合', 'Event has been dropped.' => '已丟棄事件。', Modified: trunk/adminer/lang/zh.inc.php =================================================================== --- trunk/adminer/lang/zh.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/lang/zh.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -155,9 +155,6 @@ 'Output' => '输出', 'open' => '打开', 'save' => '保存', - 'Format' => '格式', - 'SQL' => 'SQL', - 'CSV' => 'CVS', 'Functions' => '函数', 'Aggregation' => '集合', 'Event has been dropped.' => '已丢弃事件。', Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/adminer/select.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -298,7 +298,7 @@ echo " (" . lang('%d row(s)', $found_rows) . ') <label><input type="checkbox" name="all" value="1">' . lang('whole result') . "</label>\n"; echo (information_schema($_GET["db"]) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "'$confirm></div></fieldset>\n"); - echo "<fieldset><legend>" . lang('Export') . "</legend><div>$dump_output $dump_format <input type='submit' name='export' value='" . lang('Export') . "'></div></fieldset>\n"; + echo "<fieldset><legend>" . lang('Export') . "</legend><div>$dump_output <input type='submit' name='export' value='" . lang('Export') . "'></div></fieldset>\n"; } echo "<fieldset><legend>" . lang('CSV Import') . "</legend><div><input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'></div></fieldset>\n"; Modified: trunk/editor/include/export.inc.php =================================================================== --- trunk/editor/include/export.inc.php 2009-08-25 14:17:58 UTC (rev 1011) +++ trunk/editor/include/export.inc.php 2009-08-25 15:23:19 UTC (rev 1012) @@ -22,5 +22,4 @@ return $ext; } -$dump_output = ""; -$dump_format = "CSV"; +$dump_output = "CSV"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-25 15:58:22
|
Revision: 1015 http://adminer.svn.sourceforge.net/adminer/?rev=1015&view=rev Author: jakubvrana Date: 2009-08-25 15:58:04 +0000 (Tue, 25 Aug 2009) Log Message: ----------- Execute SQL file stored on server disk Modified Paths: -------------- trunk/adminer/include/functions.inc.php trunk/adminer/lang/cs.inc.php trunk/adminer/sql.inc.php trunk/changes.txt trunk/todo.txt Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-08-25 15:42:43 UTC (rev 1014) +++ trunk/adminer/include/functions.inc.php 2009-08-25 15:58:04 UTC (rev 1015) @@ -164,7 +164,7 @@ function upload_error($error) { $max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : null); // post_max_size is checked in index.php - return lang('Unable to upload a file.') . ($max_size ? " " . lang('Maximum allowed file size is %sB.', $max_size) : ""); + return ($error ? lang('Unable to upload a file.') . ($max_size ? " " . lang('Maximum allowed file size is %sB.', $max_size) : "") : lang('File does not exist.')); } function odd($s = ' class="odd"') { Modified: trunk/adminer/lang/cs.inc.php =================================================================== --- trunk/adminer/lang/cs.inc.php 2009-08-25 15:42:43 UTC (rev 1014) +++ trunk/adminer/lang/cs.inc.php 2009-08-25 15:58:04 UTC (rev 1015) @@ -222,4 +222,6 @@ 'Maximum allowed file size is %sB.' => 'Maximální povolená velikost souboru je %sB.', 'Clear' => 'Vyčistit', 'Editor' => 'Editor', + 'Webserver file %s' => 'Soubor %s na webovém serveru', + 'File does not exist.' => 'Soubor neexistuje.', ); Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-08-25 15:42:43 UTC (rev 1014) +++ trunk/adminer/sql.inc.php 2009-08-25 15:58:04 UTC (rev 1015) @@ -8,7 +8,7 @@ page_header(lang('SQL command'), $error); if (!$error && $_POST) { - $query = (isset($_POST["file"]) ? get_file("sql_file") : $_POST["query"]); + $query = ($_POST["webfile"] ? @file_get_contents("adminer.sql") : ($_POST["file"] ? get_file("sql_file") : $_POST["query"])); if (is_string($query)) { // get_file() returns error as number $query = str_replace("\r", "", $query); // parser looks for \n $query = rtrim($query); @@ -109,6 +109,8 @@ <input type="submit" name="file" value="<?php echo lang('Run file'); ?>"> <?php } ?> +<p><?php echo lang('Webserver file %s', '<code>adminer.sql</code>'); ?> <input type="submit" name="webfile" value="<?php echo lang('Run file'); ?>"> + <?php if ($history) { echo "<fieldset><legend>" . lang('History') . "</legend>\n"; Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-08-25 15:42:43 UTC (rev 1014) +++ trunk/changes.txt 2009-08-25 15:58:04 UTC (rev 1015) @@ -1,5 +1,6 @@ -Adminer 2.1.0: +Adminer 2.1.0-dev: Edit default values directly in table creation +Execute SQL file stored on server disk Display column comments in table overview Respect max_allowed_packet in CSV import Click on row selects it Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2009-08-25 15:42:43 UTC (rev 1014) +++ trunk/todo.txt 2009-08-25 15:58:04 UTC (rev 1015) @@ -1,5 +1,4 @@ Bulk database drop -Execute SQL file stored on server disk Print CREATE+ALTER export instead of running it Add whisperer to fields with foreign key Highlight found fields This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-27 07:33:36
|
Revision: 1026 http://adminer.svn.sourceforge.net/adminer/?rev=1026&view=rev Author: jakubvrana Date: 2009-08-27 07:33:29 +0000 (Thu, 27 Aug 2009) Log Message: ----------- Auto-free result-set Modified Paths: -------------- trunk/adminer/create.inc.php trunk/adminer/database.inc.php trunk/adminer/db.inc.php trunk/adminer/dump.inc.php trunk/adminer/edit.inc.php trunk/adminer/event.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/export.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/include/mysql.inc.php trunk/adminer/include/pdo.inc.php trunk/adminer/privileges.inc.php trunk/adminer/processlist.inc.php trunk/adminer/select.inc.php trunk/adminer/sql.inc.php trunk/adminer/table.inc.php trunk/adminer/trigger.inc.php trunk/adminer/user.inc.php trunk/adminer/variables.inc.php trunk/editor/include/adminer.inc.php trunk/editor/include/export.inc.php Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/create.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -88,7 +88,6 @@ $engines[] = $row["Engine"]; } } -$result->free(); $row = array( "Engine" => $_COOKIE["adminer_engine"], @@ -116,7 +115,6 @@ $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . $dbh->quote($_GET["db"]) . " AND TABLE_NAME = " . $dbh->quote($_GET["create"]); $result = $dbh->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1"); list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row(); - $result->free(); $row["partition_names"] = array(); $row["partition_values"] = array(); $result = $dbh->query("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION"); @@ -124,7 +122,6 @@ $row["partition_names"][] = $row1["PARTITION_NAME"]; $row["partition_values"][] = $row1["PARTITION_DESCRIPTION"]; } - $result->free(); $row["partition_names"][] = ""; } } Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/database.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -24,7 +24,6 @@ break; } } - $result->free(); if (!$row) { queries("DROP DATABASE " . idf_escape($_GET["db"])); } @@ -56,7 +55,6 @@ break; } } - $result->free(); } elseif (($result = $dbh->query("SHOW CREATE DATABASE " . idf_escape($_GET["db"])))) { $create = $dbh->result($result, 1); if (preg_match('~ COLLATE ([^ ]+)~', $create, $match)) { @@ -65,7 +63,6 @@ // default collation $collate = $collations[$match[1]][0]; } - $result->free(); } ?> Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/db.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -89,7 +89,6 @@ } echo "</table>\n"; } - $result->free(); echo '<p><a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> <a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n"; } @@ -106,6 +105,5 @@ } echo "</table>\n"; } - $result->free(); echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n"; } Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/dump.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -21,7 +21,6 @@ } echo "\nDELIMITER ;\n"; } - $result->free(); } } @@ -44,7 +43,6 @@ } $create = $dbh->result($result, 1); echo ($style == "CREATE+ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n"; - $result->free(); } if ($style && $_POST["format"] != "csv") { echo "USE " . idf_escape($db) . ";\n\n"; @@ -56,7 +54,6 @@ $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") . $dbh->result($dbh->query("SHOW CREATE $routine " . idf_escape($row["Name"])), 2) . ";;\n\n"; } - $result->free(); } } if ($dbh->server_info >= 5.1) { @@ -65,7 +62,6 @@ $out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") . $dbh->result($dbh->query("SHOW CREATE EVENT " . idf_escape($row["Name"])), 3) . ";;\n\n"; } - $result->free(); } echo ($out ? "DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n" : ""); } @@ -130,7 +126,6 @@ ALTER TABLE " . idf_escape($row["TABLE_NAME"]) . " ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment; END IF" : "BEGIN END") . ";"; } -$result->free(); ?> ELSE Modified: trunk/adminer/edit.inc.php =================================================================== --- trunk/adminer/edit.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/edit.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -57,7 +57,6 @@ if ($select) { $result = $dbh->query("SELECT " . implode(", ", $select) . " FROM " . idf_escape($_GET["edit"]) . " WHERE $where " . (isset($_GET["select"]) ? "HAVING COUNT(*) = 1" : "LIMIT 1")); $row = $result->fetch_assoc(); - $result->free(); } } ?> Modified: trunk/adminer/event.inc.php =================================================================== --- trunk/adminer/event.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/event.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -31,7 +31,6 @@ } elseif (strlen($_GET["event"])) { $result = $dbh->query("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . $dbh->quote($_GET["db"]) . " AND EVENT_NAME = " . $dbh->quote($_GET["event"])); $row = $result->fetch_assoc(); - $result->free(); } ?> Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/include/adminer.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -449,7 +449,6 @@ echo '<a href="' . h(ME) . 'table=' . urlencode($row[0]) . '">' . $this->tableName(array("Name" => $row[0])) . "</a><br>\n"; //! Adminer::tableName may work with full table status } } - $result->free(); } echo '<p><a href="' . h(ME) . 'create=">' . lang('Create new table') . "</a>\n"; } Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/include/export.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -13,7 +13,6 @@ echo "DROP " . ($is_view ? "VIEW" : "TABLE") . " IF EXISTS " . idf_escape($table) . ";\n"; } $create = $dbh->result($result, 1); - $result->free(); echo ($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n"; } if ($style == "CREATE+ALTER" && !$is_view) { @@ -48,7 +47,6 @@ $fields[] = $row; $after = $row["COLUMN_NAME"]; } - $result->free(); ?>'; DECLARE columns CURSOR FOR <?php echo $query; ?>; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; @@ -142,7 +140,6 @@ if ($_POST["format"] != "csv" && $style != "INSERT+UPDATE" && $result->num_rows) { echo ";\n"; } - $result->free(); } } } Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/include/functions.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -51,7 +51,6 @@ while ($row = $result->fetch_row()) { $return[] = $row[$column]; } - $result->free(); } return $return; } @@ -245,7 +244,6 @@ } echo "</table>\n"; } - $result->free(); } function is_utf8($val) { Modified: trunk/adminer/include/mysql.inc.php =================================================================== --- trunk/adminer/include/mysql.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/include/mysql.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -118,8 +118,8 @@ return $row; } - function free() { - return mysql_free_result($this->_result); + function __destruct() { + mysql_free_result($this->_result); } } @@ -176,7 +176,6 @@ } $return[$row["Name"]] = $row; } - $result->free(); return (strlen($name) ? $return[$name] : $return); } @@ -213,7 +212,6 @@ "primary" => ($row["Key"] == "PRI"), ); } - $result->free(); } return $return; } @@ -231,7 +229,6 @@ $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; } @@ -243,7 +240,6 @@ $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); @@ -273,7 +269,6 @@ while ($row = $result->fetch_assoc()) { $return[$row["Charset"]][] = $row["Collation"]; } - $result->free(); ksort($return); foreach ($return as $key => $val) { sort($return[$key]); Modified: trunk/adminer/include/pdo.inc.php =================================================================== --- trunk/adminer/include/pdo.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/include/pdo.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -78,9 +78,5 @@ $row->charsetnr = (in_array("blob", $row->flags) ? 63 : 0); return $row; } - - function free() { - // $this->__destruct() is not callable - } } } Modified: trunk/adminer/privileges.inc.php =================================================================== --- trunk/adminer/privileges.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/privileges.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -22,4 +22,3 @@ echo '<tr' . odd() . '><td><a href="' . h(ME . 'user=' . urlencode($row["User"]) . '&host=' . urlencode($row["Host"])) . '">' . lang('edit') . '</a><td>' . h($row["User"]) . "<td>" . h($row["Host"]) . "\n"; } echo "</table>\n"; -$result->free(); Modified: trunk/adminer/processlist.inc.php =================================================================== --- trunk/adminer/processlist.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/processlist.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -22,7 +22,6 @@ } echo "<tr" . odd() . "><td><input type='checkbox' name='kill[]' value='$row[Id]'><td>" . implode("<td>", array_map('nbsp', $row)) . "\n"; } -$result->free(); ?> </table> <p> Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/select.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -182,7 +182,6 @@ while ($row = $result->fetch_assoc()) { $rows[] = $row; } - $result->free(); // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest) $found_rows = (intval($limit) && $group && count($group) < count($select) ? $dbh->result($dbh->query(" SELECT FOUND_ROWS()")) // space to allow mysql.trace_mode Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/sql.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -71,6 +71,7 @@ } echo "<p class='message'>" . lang('Query executed OK, %d row(s) affected.', $dbh->affected_rows) . "\n"; } + unset($result); // free resultset } while ($dbh->next_result()); } $query = substr($query, $offset); Modified: trunk/adminer/table.inc.php =================================================================== --- trunk/adminer/table.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/table.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -18,7 +18,6 @@ echo "\n"; } echo "</table>\n"; - $result->free(); echo "<p>"; if ($is_view) { @@ -74,7 +73,6 @@ } echo "</table>\n"; } - $result->free(); echo '<p><a href="' . h(ME) . 'trigger=' . urlencode($_GET["table"]) . '">' . lang('Add trigger') . "</a>\n"; } } Modified: trunk/adminer/trigger.inc.php =================================================================== --- trunk/adminer/trigger.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/trigger.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -22,7 +22,6 @@ } elseif (strlen($_GET["name"])) { $result = $dbh->query("SHOW TRIGGERS WHERE `Trigger` = " . $dbh->quote($_GET["name"])); $row = $result->fetch_assoc(); - $result->free(); } ?> Modified: trunk/adminer/user.inc.php =================================================================== --- trunk/adminer/user.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/user.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -6,7 +6,6 @@ $privileges[$context][$row["Privilege"]] = $row["Comment"]; } } -$result->free(); $privileges["Server Admin"] += $privileges["File access on server"]; $privileges["Databases"]["Create routine"] = $privileges["Procedures"]["Create routine"]; // MySQL bug #30305 unset($privileges["Procedures"]["Create routine"]); @@ -55,7 +54,6 @@ $old_pass = $match[1]; } } - $result->free(); } if ($_POST && !$error) { Modified: trunk/adminer/variables.inc.php =================================================================== --- trunk/adminer/variables.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/adminer/variables.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -8,5 +8,4 @@ echo "<th><code class='jush-sqlset'>" . h($row["Variable_name"]) . "</code>"; echo "<td>" . nbsp($row["Value"]); } -$result->free(); echo "</table>\n"; Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/editor/include/adminer.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -56,7 +56,6 @@ while ($row = $result->fetch_assoc()) { $return[$row["TABLE_NAME"]][$row["CONSTRAINT_NAME"]][$row["COLUMN_NAME"]] = $row["REFERENCED_COLUMN_NAME"]; } - $result->free(); } return $return; } @@ -95,7 +94,6 @@ while ($row = $result->fetch_row()) { $descriptions[$row[0]] = $row[1]; } - $result->free(); // use the descriptions foreach ($rows as $n => $row) { $return[$n][$key] = $descriptions[$row[$key]]; @@ -274,7 +272,6 @@ $sent++; } } - $result->free(); } redirect(remove_from_uri(), lang('%d e-mail(s) have been sent.', $sent)); } @@ -306,7 +303,6 @@ while ($row = $result->fetch_row()) { $return[$row[0]] = $row[1]; } - $result->free(); return "<select$attrs>" . optionlist($return, $value, true) . "</select>"; } } Modified: trunk/editor/include/export.inc.php =================================================================== --- trunk/editor/include/export.inc.php 2009-08-27 07:28:48 UTC (rev 1025) +++ trunk/editor/include/export.inc.php 2009-08-27 07:33:29 UTC (rev 1026) @@ -10,7 +10,6 @@ while ($row = $result->fetch_assoc()) { dump_csv($row); } - $result->free(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-27 08:22:13
|
Revision: 1028 http://adminer.svn.sourceforge.net/adminer/?rev=1028&view=rev Author: jakubvrana Date: 2009-08-27 08:22:07 +0000 (Thu, 27 Aug 2009) Log Message: ----------- Revert compact dump output (r1012) Modified Paths: -------------- trunk/adminer/include/export.inc.php trunk/adminer/lang/cs.inc.php trunk/adminer/lang/de.inc.php trunk/adminer/lang/es.inc.php trunk/adminer/lang/et.inc.php trunk/adminer/lang/fr.inc.php trunk/adminer/lang/it.inc.php trunk/adminer/lang/nl.inc.php trunk/adminer/lang/ru.inc.php trunk/adminer/lang/sk.inc.php trunk/adminer/lang/zh-tw.inc.php trunk/adminer/lang/zh.inc.php trunk/adminer/select.inc.php trunk/editor/include/export.inc.php Property Changed: ---------------- trunk/adminer/lang/zh.inc.php Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/include/export.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -154,7 +154,6 @@ return $ext; } -$dump_output = "<select name='output'>" . optionlist(array('text' => lang('open'), 'file' => lang('save'))) . "</select>" - . " <select name='format'>" . optionlist(array('sql' => 'SQL', 'csv' => 'CSV')) . "</select>" -; +$dump_output = "<select name='output'>" . optionlist(array('text' => lang('open'), 'file' => lang('save'))) . "</select>"; +$dump_format = "<select name='format'>" . optionlist(array('sql' => 'SQL', 'csv' => 'CSV')) . "</select>"; $max_packet = 1048576; // default, minimum is 1024 Modified: trunk/adminer/lang/cs.inc.php =================================================================== --- trunk/adminer/lang/cs.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/cs.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Výstup', 'open' => 'otevřít', 'save' => 'uložit', + 'Format' => 'Formát', 'Tables' => 'Tabulky', 'Data' => 'Data', 'Event has been dropped.' => 'Událost byla odstraněna.', Modified: trunk/adminer/lang/de.inc.php =================================================================== --- trunk/adminer/lang/de.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/de.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Ergebnis', 'open' => 'anzeigen', 'save' => 'Datei', + 'Format' => 'Format', 'Tables' => 'Tabellen', 'Data' => 'Daten', 'Event has been dropped.' => 'Ereignis entfernt.', Modified: trunk/adminer/lang/es.inc.php =================================================================== --- trunk/adminer/lang/es.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/es.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Salida', 'open' => 'mostrar', 'save' => 'archivo', + 'Format' => 'Formato', 'Tables' => 'Tablas', 'Data' => 'Datos', 'Event has been dropped.' => 'Evento eliminado.', Modified: trunk/adminer/lang/et.inc.php =================================================================== --- trunk/adminer/lang/et.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/et.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Väljund', 'open' => 'näita brauseris', 'save' => 'salvesta failina', + 'Format' => 'Formaat', 'Functions' => 'Funktsioonid', 'Aggregation' => 'Liitmine', 'Event has been dropped.' => 'Sündmus on edukalt kustutatud.', Modified: trunk/adminer/lang/fr.inc.php =================================================================== --- trunk/adminer/lang/fr.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/fr.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Sortie', 'open' => 'ouvrir', 'save' => 'sauvegarder', + 'Format' => 'Formatter', 'Functions' => 'Fonctions', 'Aggregation' => 'Agrégation', 'Event has been dropped.' => 'L\'évènement a été supprimé.', Modified: trunk/adminer/lang/it.inc.php =================================================================== --- trunk/adminer/lang/it.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/it.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Risultato', 'open' => 'apri', 'save' => 'salva', + 'Format' => 'Formato', 'Tables' => 'Tabelle', 'Data' => 'Dati', 'Event has been dropped.' => 'Evento eliminato.', Modified: trunk/adminer/lang/nl.inc.php =================================================================== --- trunk/adminer/lang/nl.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/nl.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Uitvoer', 'open' => 'openen', 'save' => 'opslaan', + 'Format' => 'Formaat', 'Functions' => 'Functies', 'Aggregation' => 'Totalen', 'Event has been dropped.' => 'Event werd verwijderd.', Modified: trunk/adminer/lang/ru.inc.php =================================================================== --- trunk/adminer/lang/ru.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/ru.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Выходные данные', 'open' => 'открыть', 'save' => 'сохранить', + 'Format' => 'Формат', 'Tables' => 'Таблицы', 'Data' => 'Данные', 'Event has been dropped.' => 'Событие было удалено.', Modified: trunk/adminer/lang/sk.inc.php =================================================================== --- trunk/adminer/lang/sk.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/sk.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => 'Výstup', 'open' => 'otvoriť', 'save' => 'uložiť', + 'Format' => 'Formát', 'Tables' => 'Tabuľky', 'Data' => 'Dáta', 'Event has been dropped.' => 'Udalosť bola odstránená.', Modified: trunk/adminer/lang/zh-tw.inc.php =================================================================== --- trunk/adminer/lang/zh-tw.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/zh-tw.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => '輸出', 'open' => '打開', 'save' => '儲存', + 'Format' => '格式', 'Functions' => '函數', 'Aggregation' => '集合', 'Event has been dropped.' => '已丟棄事件。', Modified: trunk/adminer/lang/zh.inc.php =================================================================== --- trunk/adminer/lang/zh.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/lang/zh.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -151,6 +151,7 @@ 'Output' => '输出', 'open' => '打开', 'save' => '保存', + 'Format' => '格式', 'Functions' => '函数', 'Aggregation' => '集合', 'Event has been dropped.' => '已丢弃事件。', Property changes on: trunk/adminer/lang/zh.inc.php ___________________________________________________________________ Deleted: svn:mergeinfo - Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/adminer/select.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -297,7 +297,7 @@ echo " (" . lang('%d row(s)', $found_rows) . ') <label><input type="checkbox" name="all" value="1">' . lang('whole result') . "</label>\n"; echo (information_schema($_GET["db"]) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "'$confirm></div></fieldset>\n"); - echo "<fieldset><legend>" . lang('Export') . "</legend><div>$dump_output <input type='submit' name='export' value='" . lang('Export') . "'></div></fieldset>\n"; + echo "<fieldset><legend>" . lang('Export') . "</legend><div>$dump_output $dump_format <input type='submit' name='export' value='" . lang('Export') . "'></div></fieldset>\n"; } echo "<fieldset><legend>" . lang('CSV Import') . "</legend><div><input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'></div></fieldset>\n"; Modified: trunk/editor/include/export.inc.php =================================================================== --- trunk/editor/include/export.inc.php 2009-08-27 07:36:41 UTC (rev 1027) +++ trunk/editor/include/export.inc.php 2009-08-27 08:22:07 UTC (rev 1028) @@ -21,4 +21,5 @@ return $ext; } -$dump_output = "CSV"; +$dump_output = ""; +$dump_format = "CSV"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-28 10:57:00
|
Revision: 1031 http://adminer.svn.sourceforge.net/adminer/?rev=1031&view=rev Author: jakubvrana Date: 2009-08-28 10:56:54 +0000 (Fri, 28 Aug 2009) Log Message: ----------- Report user errors Modified Paths: -------------- trunk/compile.php trunk/lang.php Modified: trunk/compile.php =================================================================== --- trunk/compile.php 2009-08-27 18:11:32 UTC (rev 1030) +++ trunk/compile.php 2009-08-28 10:56:54 UTC (rev 1031) @@ -1,4 +1,5 @@ <?php +error_reporting(6135); // errors and warnings include dirname(__FILE__) . "/adminer/include/version.inc.php"; include dirname(__FILE__) . "/externals/jsmin-php/jsmin.php"; @@ -158,7 +159,6 @@ return call_user_func($match[2], file_get_contents(dirname(__FILE__) . "/$project/$match[1]")); } -error_reporting(4343); // errors and warnings $project = "adminer"; if (file_exists(dirname(__FILE__) . "/" . $_SERVER["argv"][1] . "/index.php")) { $project = $_SERVER["argv"][1]; Modified: trunk/lang.php =================================================================== --- trunk/lang.php 2009-08-27 18:11:32 UTC (rev 1030) +++ trunk/lang.php 2009-08-28 10:56:54 UTC (rev 1031) @@ -1,5 +1,5 @@ <?php -error_reporting(4343); // errors and warnings +error_reporting(6135); // errors and warnings if (isset($_SERVER["argv"][1])) { $_COOKIE["adminer_lang"] = $_SERVER["argv"][1]; // Adminer functions read language from cookie include dirname(__FILE__) . "/adminer/include/lang.inc.php"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-28 11:50:06
|
Revision: 1032 http://adminer.svn.sourceforge.net/adminer/?rev=1032&view=rev Author: jakubvrana Date: 2009-08-28 11:49:57 +0000 (Fri, 28 Aug 2009) Log Message: ----------- Compress export and import Modified Paths: -------------- trunk/adminer/dump.inc.php trunk/adminer/include/export.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/include/mysql.inc.php trunk/adminer/lang/cs.inc.php trunk/adminer/select.inc.php trunk/adminer/sql.inc.php trunk/changes.txt trunk/editor/include/export.inc.php trunk/todo.txt Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/adminer/dump.inc.php 2009-08-28 11:49:57 UTC (rev 1032) @@ -11,41 +11,42 @@ function dump_triggers($table, $style) { global $dbh; - if ($_POST["format"] != "csv" && $style && $dbh->server_info >= 5) { + if ($_POST["format"] == "sql" && $style && $dbh->server_info >= 5) { $result = $dbh->query("SHOW TRIGGERS LIKE " . $dbh->quote(addcslashes($table, "%_"))); if ($result->num_rows) { - echo "\nDELIMITER ;;\n"; + $s = "\nDELIMITER ;;\n"; while ($row = $result->fetch_assoc()) { - echo "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "") + $s .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "") . "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . idf_escape($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n"; } - echo "\nDELIMITER ;\n"; + dump("$s\nDELIMITER ;\n"); } } } if ($_POST) { $ext = dump_headers((strlen($_GET["dump"]) ? $_GET["dump"] : $_GET["db"]), (!strlen($_GET["db"]) || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); - if ($_POST["format"] != "csv") { - echo "SET NAMES utf8;\n"; - echo "SET foreign_key_checks = 0;\n"; - echo "SET time_zone = " . $dbh->quote($dbh->result($dbh->query("SELECT @@time_zone"))) . ";\n"; - echo "SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';\n"; - echo "\n"; + if ($_POST["format"] == "sql") { + dump("SET NAMES utf8; +SET foreign_key_checks = 0; +SET time_zone = " . $dbh->quote($dbh->result($dbh->query("SELECT @@time_zone"))) . "; +SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; + +"); } $style = $_POST["db_style"]; foreach ((strlen($_GET["db"]) ? array($_GET["db"]) : (array) $_POST["databases"]) as $db) { if ($dbh->select_db($db)) { - if ($_POST["format"] != "csv" && ereg('CREATE', $style) && ($result = $dbh->query("SHOW CREATE DATABASE " . idf_escape($db)))) { + if ($_POST["format"] == "sql" && ereg('CREATE', $style) && ($result = $dbh->query("SHOW CREATE DATABASE " . idf_escape($db)))) { if ($style == "DROP+CREATE") { - echo "DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n"; + dump("DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n"); } $create = $dbh->result($result, 1); - echo ($style == "CREATE+ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n"; + dump(($style == "CREATE+ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n"); } - if ($style && $_POST["format"] != "csv") { - echo "USE " . idf_escape($db) . ";\n\n"; + if ($style && $_POST["format"] == "sql") { + dump("USE " . idf_escape($db) . ";\n\n"); $out = ""; if ($dbh->server_info >= 5) { foreach (array("FUNCTION", "PROCEDURE") as $routine) { @@ -63,7 +64,9 @@ . $dbh->result($dbh->query("SHOW CREATE EVENT " . idf_escape($row["Name"])), 3) . ";;\n\n"; } } - echo ($out ? "DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n" : ""); + if ($out) { + dump("DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n"); + } } if ($_POST["table_style"] || $_POST["data_style"]) { @@ -84,11 +87,11 @@ dump_triggers($row["Name"], $_POST["table_style"]); } if ($ext == "tar") { - echo tar_file((strlen($_GET["db"]) ? "" : "$db/") . "$row[Name].csv", ob_get_clean()); - } elseif ($_POST["format"] != "csv") { - echo "\n"; + dump(tar_file((strlen($_GET["db"]) ? "" : "$db/") . "$row[Name].csv", ob_get_clean())); + } elseif ($_POST["format"] == "sql") { + dump("\n"); } - } elseif ($_POST["format"] != "csv") { + } elseif ($_POST["format"] == "sql") { $views[] = $row["Name"]; } } @@ -97,41 +100,39 @@ dump_table($view, $_POST["table_style"], true); } if ($ext == "tar") { - echo pack("x512"); + dump(pack("x512")); } } - if ($style == "CREATE+ALTER" && $_POST["format"] != "csv") { + if ($style == "CREATE+ALTER" && $_POST["format"] == "sql") { // drop old tables $query = "SELECT TABLE_NAME, ENGINE, TABLE_COLLATION, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()"; -?> -DELIMITER ;; + dump("DELIMITER ;; CREATE PROCEDURE adminer_drop () BEGIN DECLARE _table_name, _engine, _table_collation varchar(64); DECLARE _table_comment varchar(64); DECLARE done bool DEFAULT 0; - DECLARE tables CURSOR FOR <?php echo $query; ?>; + DECLARE tables CURSOR FOR $query; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN tables; REPEAT FETCH tables INTO _table_name, _engine, _table_collation, _table_comment; IF NOT done THEN - CASE _table_name<?php + CASE _table_name"); $result = $dbh->query($query); while ($row = $result->fetch_assoc()) { $comment = $dbh->quote($row["ENGINE"] == "InnoDB" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["TABLE_COMMENT"]) : $row["TABLE_COMMENT"]); - echo " + dump(" WHEN " . $dbh->quote($row["TABLE_NAME"]) . " THEN " . (isset($row["ENGINE"]) ? "IF _engine != '$row[ENGINE]' OR _table_collation != '$row[TABLE_COLLATION]' OR _table_comment != $comment THEN ALTER TABLE " . idf_escape($row["TABLE_NAME"]) . " ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment; - END IF" : "BEGIN END") . ";"; + END IF" : "BEGIN END") . ";"); } -?> - +dump(" ELSE SET @alter_table = CONCAT('DROP TABLE `', REPLACE(_table_name, '`', '``'), '`'); PREPARE alter_command FROM @alter_table; - EXECUTE alter_command; -- returns "can't return a result set in the given context" with MySQL extension + EXECUTE alter_command; -- returns can't return a result set in the given context with MySQL extension DROP PREPARE alter_command; END CASE; END IF; @@ -141,10 +142,11 @@ DELIMITER ; CALL adminer_drop; DROP PROCEDURE adminer_drop; -<?php +"); } } } + dump(); exit; } @@ -163,6 +165,7 @@ } echo "<tr><th>" . lang('Output') . "<td><input type='hidden' name='token' value='$token'>$dump_output\n"; // token is not needed but checked in bootstrap for all POST data echo "<tr><th>" . lang('Format') . "<td>$dump_format\n"; +echo "<tr><th>" . lang('Compression') . "<td>" . ($dump_compress ? $dump_compress : lang('None of the supported PHP extensions (%s) are available.', 'zlib')) . "\n"; echo "<tr><th>" . lang('Database') . "<td><select name='db_style'>" . optionlist($db_style, (strlen($_GET["db"]) ? '' : 'CREATE')) . "</select>\n"; echo "<tr><th>" . lang('Tables') . "<td><select name='table_style'>" . optionlist($table_style, 'DROP+CREATE') . "</select>\n"; echo "<tr><th>" . lang('Data') . "<td><select name='data_style'>" . optionlist($data_style, 'INSERT') . "</select>\n"; Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/adminer/include/export.inc.php 2009-08-28 11:49:57 UTC (rev 1032) @@ -1,8 +1,10 @@ <?php +//! memory consumption, speed + function dump_table($table, $style, $is_view = false) { global $dbh; if ($_POST["format"] == "csv") { - echo "\xef\xbb\xbf"; // UTF-8 byte order mark + dump("\xef\xbb\xbf"); // UTF-8 byte order mark if ($style) { dump_csv(array_keys(fields($table))); } @@ -10,16 +12,15 @@ $result = $dbh->query("SHOW CREATE TABLE " . idf_escape($table)); if ($result) { if ($style == "DROP+CREATE") { - echo "DROP " . ($is_view ? "VIEW" : "TABLE") . " IF EXISTS " . idf_escape($table) . ";\n"; + dump("DROP " . ($is_view ? "VIEW" : "TABLE") . " IF EXISTS " . idf_escape($table) . ";\n"); } $create = $dbh->result($result, 1); - echo ($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n"; + dump(($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n"); } if ($style == "CREATE+ALTER" && !$is_view) { // create procedure which iterates over original columns and adds new and removes old $query = "SELECT COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE, COLLATION_NAME, COLUMN_TYPE, EXTRA, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = " . $dbh->quote($table) . " ORDER BY ORDINAL_POSITION"; -?> -DELIMITER ;; + dump("DELIMITER ;; CREATE PROCEDURE adminer_alter () BEGIN DECLARE _column_name, _collation_name, _column_type, after varchar(64) DEFAULT ''; DECLARE _column_default longtext; @@ -27,7 +28,7 @@ DECLARE _extra varchar(20); DECLARE _column_comment varchar(255); DECLARE done, set_after bool DEFAULT 0; - DECLARE add_columns text DEFAULT '<?php + DECLARE add_columns text DEFAULT '"); $fields = array(); $result = $dbh->query($query); $after = ""; @@ -43,12 +44,12 @@ . ($row["COLUMN_COMMENT"] ? " COMMENT " . $dbh->quote($row["COLUMN_COMMENT"]) : "") . ($after ? " AFTER " . idf_escape($after) : " FIRST") ); - echo ", ADD $row[alter]"; + dump(", ADD $row[alter]"); $fields[] = $row; $after = $row["COLUMN_NAME"]; } - ?>'; - DECLARE columns CURSOR FOR <?php echo $query; ?>; + dump("'; + DECLARE columns CURSOR FOR $query; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; SET @alter_table = ''; OPEN columns; @@ -56,17 +57,16 @@ FETCH columns INTO _column_name, _column_default, _is_nullable, _collation_name, _column_type, _extra, _column_comment; IF NOT done THEN SET set_after = 1; - CASE _column_name<?php + CASE _column_name"); foreach ($fields as $row) { - echo " + dump(" WHEN " . $dbh->quote($row["COLUMN_NAME"]) . " THEN SET add_columns = REPLACE(add_columns, ', ADD $row[alter]', ''); IF NOT (_column_default <=> $row[default]) OR _is_nullable != '$row[IS_NULLABLE]' OR _collation_name != '$row[COLLATION_NAME]' OR _column_type != '$row[COLUMN_TYPE]' OR _extra != '$row[EXTRA]' OR _column_comment != " . $dbh->quote($row["COLUMN_COMMENT"]) . " OR after != $row[after] THEN SET @alter_table = CONCAT(@alter_table, ', MODIFY $row[alter]'); - END IF;"; //! don't replace in comment + END IF;"); //! don't replace in comment } - ?> - + dump(" ELSE SET @alter_table = CONCAT(@alter_table, ', DROP ', _column_name); SET set_after = 0; @@ -78,7 +78,7 @@ UNTIL done END REPEAT; CLOSE columns; IF @alter_table != '' OR add_columns != '' THEN - SET @alter_table = CONCAT('ALTER TABLE <?php echo idf_escape($table); ?>', SUBSTR(CONCAT(add_columns, @alter_table), 2)); + SET @alter_table = CONCAT('ALTER TABLE " . idf_escape($table) . "', SUBSTR(CONCAT(add_columns, @alter_table), 2)); PREPARE alter_command FROM @alter_table; EXECUTE alter_command; DROP PREPARE alter_command; @@ -88,7 +88,7 @@ CALL adminer_alter; DROP PROCEDURE adminer_alter; -<?php +"); //! indexes } } @@ -98,7 +98,7 @@ global $dbh, $max_packet; if ($style) { if ($_POST["format"] != "csv" && $style == "TRUNCATE+INSERT") { - echo "TRUNCATE " . idf_escape($table) . ";\n"; + dump("TRUNCATE " . idf_escape($table) . ";\n"); } $result = $dbh->query(($select ? $select : "SELECT * FROM " . idf_escape($table))); //! enum and set as numbers, microtime if ($result) { @@ -119,18 +119,18 @@ foreach ($row2 as $key => $val) { $set[] = idf_escape($key) . " = $val"; } - echo "$insert ($s) ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n"; + dump("$insert ($s) ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n"); } else { $s = "\n($s)"; if (!$length) { - echo $insert . $s; + dump($insert . $s); $length = strlen($insert) + strlen($s); } else { $length += 1 + strlen($s); // 1 - separator length if ($length < $max_packet) { - echo ",$s"; + dump(",$s"); } else { - echo ";\n$insert$s"; + dump(";\n$insert$s"); $length = strlen($insert) + strlen($s); } } @@ -138,7 +138,7 @@ } } if ($_POST["format"] != "csv" && $style != "INSERT+UPDATE" && $result->num_rows) { - echo ";\n"; + dump(";\n"); } } } @@ -147,13 +147,22 @@ function dump_headers($identifier, $multi_table = false) { $filename = (strlen($identifier) ? friendly_url($identifier) : "dump"); $ext = ($_POST["format"] == "sql" ? "sql" : ($multi_table ? "tar" : "csv")); // multiple CSV packed to TAR - header("Content-Type: " . ($ext == "tar" ? "application/x-tar" : ($ext == "sql" || $_POST["output"] != "file" ? "text/plain" : "text/csv")) . "; charset=utf-8"); - if ($_POST["output"] == "file") { - header("Content-Disposition: attachment; filename=$filename.$ext"); + header("Content-Type: " . ($_POST["compress"] == "gz" ? "application/x-gzip" : ($ext == "tar" ? "application/x-tar" : ($ext == "sql" || $_POST["output"] != "file" ? "text/plain" : "text/csv")) . "; charset=utf-8")); + if ($_POST["output"] == "file" || $_POST["compress"]) { + header("Content-Disposition: attachment; filename=$filename.$ext" . ($_POST["compress"] == "gz" ? ".gz" : "")); } + ob_flush(); + flush(); return $ext; } +$compress = array(); +if (function_exists('gzencode')) { + $compress['gz'] = 'GZIP'; +} +// bzcompress can't be called repetitively, bzopen requires temporary file +// ZipArchive requires temporary file, ZIP can be created by gzcompress - see PEAR File_Archive $dump_output = "<select name='output'>" . optionlist(array('text' => lang('open'), 'file' => lang('save'))) . "</select>"; $dump_format = "<select name='format'>" . optionlist(array('sql' => 'SQL', 'csv' => 'CSV')) . "</select>"; +$dump_compress = ($compress ? "<select name='compress'><option>" . optionlist($compress) . "</select>" : ""); $max_packet = 1048576; // default, minimum is 1024 Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/adminer/include/functions.inc.php 2009-08-28 11:49:57 UTC (rev 1032) @@ -151,14 +151,22 @@ return " " . ($page == $_GET["page"] ? $page + 1 : '<a href="' . h(remove_from_uri("page") . ($page ? "&page=$page" : "")) . '">' . ($page + 1) . "</a>"); } -function get_file($key) { +function get_file($key, $decompress = false) { // returns int for error, string otherwise - if (isset($_POST["files"][$key])) { + $file = $_POST["files"][$key]; + if (isset($file)) { // get the file from hidden field if the user was logged out - $length = strlen($_POST["files"][$key]); - return ($length && $length < 4 ? intval($_POST["files"][$key]) : base64_decode($_POST["files"][$key])); + $length = strlen($file); + if ($length && $length < 4) { + return intval($file); + } + return base64_decode($file); } - return (!$_FILES[$key] || $_FILES[$key]["error"] ? $_FILES[$key]["error"] : file_get_contents($_FILES[$key]["tmp_name"])); + $file = $_FILES[$key]; + if (!$file || $file["error"]) { + return $file["error"]; + } + return file_get_contents($decompress && ereg('\\.gz$', $file["name"]) ? "compress.zlib://$file[tmp_name]" : $file["tmp_name"]); //! may not be reachable because of open_basedir } function upload_error($error) { @@ -352,13 +360,26 @@ } } +function dump($string = null) { // null $string forces sending of buffer + static $buffer = ""; + if ($_POST["compress"] == "gz") { + $buffer .= $string; + if (!isset($string) || strlen($buffer) > 1e6) { + echo gzencode($buffer); + $buffer = ""; + } + } else { + echo $string; + } +} + function dump_csv($row) { foreach ($row as $key => $val) { if (preg_match("~[\"\n,]~", $val) || (isset($val) && !strlen($val))) { $row[$key] = '"' . str_replace('"', '""', $val) . '"'; } } - echo implode(",", $row) . "\n"; + dump(implode(",", $row) . "\n"); } function apply_sql_function($function, $column) { Modified: trunk/adminer/include/mysql.inc.php =================================================================== --- trunk/adminer/include/mysql.inc.php 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/adminer/include/mysql.inc.php 2009-08-28 11:49:57 UTC (rev 1032) @@ -119,7 +119,7 @@ } function __destruct() { - mysql_free_result($this->_result); + mysql_free_result($this->_result); //! is not called in PHP 4 which is a problem with mysql.trace_mode } } Modified: trunk/adminer/lang/cs.inc.php =================================================================== --- trunk/adminer/lang/cs.inc.php 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/adminer/lang/cs.inc.php 2009-08-28 11:49:57 UTC (rev 1032) @@ -225,4 +225,5 @@ 'Editor' => 'Editor', 'Webserver file %s' => 'Soubor %s na webovém serveru', 'File does not exist.' => 'Soubor neexistuje.', + 'Compression' => 'Komprese', ); Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/adminer/select.inc.php 2009-08-28 11:49:57 UTC (rev 1032) @@ -48,6 +48,7 @@ } dump_data($_GET["select"], "INSERT", implode(" UNION ALL ", $union)); } + dump(); exit; } if (!$adminer->selectEmailProcess($where)) { @@ -84,7 +85,7 @@ } query_redirect(queries(), remove_from_uri("page"), lang('%d item(s) have been affected.', $affected), $result, false, !$result); //! display edit page in case of an error - } elseif (is_string($file = get_file("csv_file"))) { + } elseif (is_string($file = get_file("csv_file", true))) { $file = preg_replace("~^\xEF\xBB\xBF~", '', $file); //! character set $affected = 0; $length = 0; @@ -297,7 +298,7 @@ echo " (" . lang('%d row(s)', $found_rows) . ') <label><input type="checkbox" name="all" value="1">' . lang('whole result') . "</label>\n"; echo (information_schema($_GET["db"]) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "'$confirm></div></fieldset>\n"); - echo "<fieldset><legend>" . lang('Export') . "</legend><div>$dump_output $dump_format <input type='submit' name='export' value='" . lang('Export') . "'></div></fieldset>\n"; + echo "<fieldset><legend>" . lang('Export') . "</legend><div>$dump_output $dump_format $dump_compress <input type='submit' name='export' value='" . lang('Export') . "'></div></fieldset>\n"; } echo "<fieldset><legend>" . lang('CSV Import') . "</legend><div><input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'></div></fieldset>\n"; Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/adminer/sql.inc.php 2009-08-28 11:49:57 UTC (rev 1032) @@ -10,9 +10,9 @@ if (!$error && $_POST) { $query = $_POST["query"]; if ($_POST["webfile"]) { - $query = @file_get_contents("adminer.sql"); + $query = @file_get_contents(file_exists("adminer.sql") ? "adminer.sql" : "compress.zlib://adminer.sql.gz"); } elseif ($_POST["file"]) { - $query = get_file("sql_file"); + $query = get_file("sql_file", true); } if (is_string($query)) { // get_file() returns error as number, file_get_contents as false $space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)"; Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/changes.txt 2009-08-28 11:49:57 UTC (rev 1032) @@ -1,6 +1,7 @@ Adminer 2.1.0-dev: Edit default values directly in table creation Execute SQL file stored on server disk +Compress export and import Display column comments in table overview Respect max_allowed_packet in CSV import Click on row selects it Modified: trunk/editor/include/export.inc.php =================================================================== --- trunk/editor/include/export.inc.php 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/editor/include/export.inc.php 2009-08-28 11:49:57 UTC (rev 1032) @@ -1,6 +1,6 @@ <?php function dump_table($table) { - echo "\xef\xbb\xbf"; // UTF-8 byte order mark + dump("\xef\xbb\xbf"); // UTF-8 byte order mark } function dump_data($table, $style, $select = "") { @@ -23,3 +23,4 @@ $dump_output = ""; $dump_format = "CSV"; +$dump_compress = ""; Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2009-08-28 10:56:54 UTC (rev 1031) +++ trunk/todo.txt 2009-08-28 11:49:57 UTC (rev 1032) @@ -4,7 +4,6 @@ Highlight found fields MySQL 5 BIT data type Transactions in export -Compress export and import SQL query and CSV import - read file progressively to save memory Create view and routine options Function to fix database encoding - http://php.vrana.cz/prevod-kodovani-mysql.php This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-29 13:52:35
|
Revision: 1043 http://adminer.svn.sourceforge.net/adminer/?rev=1043&view=rev Author: jakubvrana Date: 2009-08-29 13:52:25 +0000 (Sat, 29 Aug 2009) Log Message: ----------- Simpler index.php structure Modified Paths: -------------- trunk/adminer/index.php trunk/editor/index.php Modified: trunk/adminer/index.php =================================================================== --- trunk/adminer/index.php 2009-08-29 13:51:32 UTC (rev 1042) +++ trunk/adminer/index.php 2009-08-29 13:52:25 UTC (rev 1043) @@ -11,6 +11,15 @@ $enum_length = '\'(?:\'\'|[^\'\\\\]|\\\\.)*\'|"(?:""|[^"\\\\]|\\\\.)*"'; $inout = array("IN", "OUT", "INOUT"); +if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) { + $_GET["edit"] = $_GET["select"]; +} +if (isset($_GET["callf"])) { + $_GET["call"] = $_GET["callf"]; +} +if (isset($_GET["function"])) { + $_GET["procedure"] = $_GET["function"]; +} if (isset($_GET["download"])) { include "./download.inc.php"; } elseif (isset($_GET["table"])) { @@ -21,49 +30,38 @@ include "./dump.inc.php"; } elseif (isset($_GET["privileges"])) { include "./privileges.inc.php"; +} elseif (isset($_GET["sql"])) { + include "./sql.inc.php"; +} elseif (isset($_GET["edit"])) { + include "./edit.inc.php"; +} elseif (isset($_GET["create"])) { + include "./create.inc.php"; +} elseif (isset($_GET["indexes"])) { + include "./indexes.inc.php"; +} elseif (isset($_GET["database"])) { + include "./database.inc.php"; +} elseif (isset($_GET["call"])) { + include "./call.inc.php"; +} elseif (isset($_GET["foreign"])) { + include "./foreign.inc.php"; +} elseif (isset($_GET["view"])) { + include "./view.inc.php"; +} elseif (isset($_GET["event"])) { + include "./event.inc.php"; +} elseif (isset($_GET["procedure"])) { + include "./procedure.inc.php"; +} elseif (isset($_GET["trigger"])) { + include "./trigger.inc.php"; +} elseif (isset($_GET["user"])) { + include "./user.inc.php"; +} elseif (isset($_GET["processlist"])) { + include "./processlist.inc.php"; +} elseif (isset($_GET["select"])) { + include "./select.inc.php"; +} elseif (isset($_GET["variables"])) { + include "./variables.inc.php"; } else { - if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) { - $_GET["edit"] = $_GET["select"]; - } - if (isset($_GET["callf"])) { - $_GET["call"] = $_GET["callf"]; - } - if (isset($_GET["function"])) { - $_GET["procedure"] = $_GET["function"]; - } - if (isset($_GET["sql"])) { - include "./sql.inc.php"; - } elseif (isset($_GET["edit"])) { - include "./edit.inc.php"; - } elseif (isset($_GET["create"])) { - include "./create.inc.php"; - } elseif (isset($_GET["indexes"])) { - include "./indexes.inc.php"; - } elseif (isset($_GET["database"])) { - include "./database.inc.php"; - } elseif (isset($_GET["call"])) { - include "./call.inc.php"; - } elseif (isset($_GET["foreign"])) { - include "./foreign.inc.php"; - } elseif (isset($_GET["view"])) { - include "./view.inc.php"; - } elseif (isset($_GET["event"])) { - include "./event.inc.php"; - } elseif (isset($_GET["procedure"])) { - include "./procedure.inc.php"; - } elseif (isset($_GET["trigger"])) { - include "./trigger.inc.php"; - } elseif (isset($_GET["user"])) { - include "./user.inc.php"; - } elseif (isset($_GET["processlist"])) { - include "./processlist.inc.php"; - } elseif (isset($_GET["select"])) { - include "./select.inc.php"; - } elseif (isset($_GET["variables"])) { - include "./variables.inc.php"; - } else { - include "./db.inc.php"; - } + include "./db.inc.php"; } // each page calls its own page_header(), if the footer should not be called then the page exits Modified: trunk/editor/index.php =================================================================== --- trunk/editor/index.php 2009-08-29 13:51:32 UTC (rev 1042) +++ trunk/editor/index.php 2009-08-29 13:52:25 UTC (rev 1043) @@ -8,19 +8,17 @@ include "../adminer/include/bootstrap.inc.php"; +if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) { + $_GET["edit"] = $_GET["select"]; +} if (isset($_GET["download"])) { include "../adminer/download.inc.php"; +} elseif (isset($_GET["edit"])) { + include "../adminer/edit.inc.php"; +} elseif (isset($_GET["select"])) { + include "../adminer/select.inc.php"; } else { - if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) { - $_GET["edit"] = $_GET["select"]; - } - if (isset($_GET["edit"])) { - include "../adminer/edit.inc.php"; - } elseif (isset($_GET["select"])) { - include "../adminer/select.inc.php"; - } else { - include "./db.inc.php"; - } + include "./db.inc.php"; } // each page calls its own page_header(), if the footer should not be called then the page exits This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-29 13:54:33
|
Revision: 1044 http://adminer.svn.sourceforge.net/adminer/?rev=1044&view=rev Author: jakubvrana Date: 2009-08-29 13:54:25 +0000 (Sat, 29 Aug 2009) Log Message: ----------- Define DB Modified Paths: -------------- trunk/adminer/create.inc.php trunk/adminer/database.inc.php trunk/adminer/db.inc.php trunk/adminer/dump.inc.php trunk/adminer/event.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/bootstrap.inc.php trunk/adminer/include/connect.inc.php trunk/adminer/include/design.inc.php trunk/adminer/schema.inc.php trunk/adminer/select.inc.php trunk/adminer/sql.inc.php trunk/editor/include/connect.inc.php Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/create.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -112,7 +112,7 @@ $row["fields"][] = $field; } if ($dbh->server_info >= 5.1) { - $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . $dbh->quote($_GET["db"]) . " AND TABLE_NAME = " . $dbh->quote($_GET["create"]); + $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . $dbh->quote(DB) . " AND TABLE_NAME = " . $dbh->quote($_GET["create"]); $result = $dbh->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1"); list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row(); $row["partition_names"] = array(); Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/database.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -2,8 +2,8 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x if ($_POST["drop"]) { unset($_SESSION["databases"][$_GET["server"]]); - query_redirect("DROP DATABASE " . idf_escape($_GET["db"]), substr(preg_replace('~db=[^&]*&~', '', ME), 0, -1), lang('Database has been dropped.')); - } elseif ($_GET["db"] !== $_POST["name"]) { + query_redirect("DROP DATABASE " . idf_escape(DB), substr(preg_replace('~db=[^&]*&~', '', ME), 0, -1), lang('Database has been dropped.')); + } elseif (DB !== $_POST["name"]) { // create or rename database unset($_SESSION["databases"][$_GET["server"]]); // clear cache $dbs = explode("\n", str_replace("\r", "", $_POST["name"])); @@ -17,7 +17,7 @@ $last = $db; } } - if (query_redirect(queries(), ME . "db=" . urlencode($last), lang('Database has been created.'), !strlen($_GET["db"]), false, $failed)) { + if (query_redirect(queries(), ME . "db=" . urlencode($last), lang('Database has been created.'), !strlen(DB), false, $failed)) { $result = $dbh->query("SHOW TABLES"); while ($row = $result->fetch_row()) { if (!queries("RENAME TABLE " . idf_escape($row[0]) . " TO " . idf_escape($_POST["name"]) . "." . idf_escape($row[0]))) { @@ -25,7 +25,7 @@ } } if (!$row) { - queries("DROP DATABASE " . idf_escape($_GET["db"])); + queries("DROP DATABASE " . idf_escape(DB)); } query_redirect(queries(), preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($_POST["name"]), lang('Database has been renamed.'), !$row, false, $row); } @@ -38,15 +38,15 @@ } } -page_header(strlen($_GET["db"]) ? lang('Alter database') : lang('Create database'), $error, array(), $_GET["db"]); +page_header(strlen(DB) ? lang('Alter database') : lang('Create database'), $error, array(), DB); $collations = collations(); -$name = $_GET["db"]; +$name = DB; $collate = array(); if ($_POST) { $name = $_POST["name"]; $collate = $_POST["collation"]; -} elseif (!strlen($_GET["db"])) { +} elseif (!strlen(DB)) { // propose database name with limited privileges $result = $dbh->query("SHOW GRANTS"); while ($row = $result->fetch_row()) { @@ -55,7 +55,7 @@ break; } } -} elseif (($result = $dbh->query("SHOW CREATE DATABASE " . idf_escape($_GET["db"])))) { +} elseif (($result = $dbh->query("SHOW CREATE DATABASE " . idf_escape(DB)))) { $create = $dbh->result($result, 1); if (preg_match('~ COLLATE ([^ ]+)~', $create, $match)) { $collate = $match[1]; @@ -76,7 +76,7 @@ <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> <?php -if (strlen($_GET["db"])) { +if (strlen(DB)) { echo "<input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n"; } elseif (!$_POST["add_x"]) { echo "<input type='image' name='add' src='../adminer/plus.gif' alt='+' title='" . lang('Add next') . "'>\n"; Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/db.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -38,7 +38,7 @@ query_redirect(queries(), substr(ME, 0, -1), $message, $result, false, !$result); } -page_header(lang('Database') . ": " . h($_GET["db"]), $error, false); +page_header(lang('Database') . ": " . h(DB), $error, false); echo '<p><a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n"; echo '<p><a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n"; @@ -69,7 +69,7 @@ echo "<p><input type='hidden' name='token' value='$token'><input type='submit' value='" . lang('Analyze') . "'> <input type='submit' name='optimize' value='" . lang('Optimize') . "'> <input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> <input type='submit' name='truncate' value='" . lang('Truncate') . "'$confirm> <input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n"; $dbs = get_databases(); if (count($dbs) != 1) { - $db = (isset($_POST["target"]) ? $_POST["target"] : $_GET["db"]); + $db = (isset($_POST["target"]) ? $_POST["target"] : DB); echo "<p>" . lang('Move to other database') . ($dbs ? ": <select name='target'>" . optionlist($dbs, $db) . "</select>" : ': <input name="target" value="' . h($db) . '">') . " <input type='submit' name='move' value='" . lang('Move') . "'>\n"; } echo "</form>\n"; @@ -78,7 +78,7 @@ if ($dbh->server_info >= 5) { echo '<p><a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n"; echo "<h3>" . lang('Routines') . "</h3>\n"; - $result = $dbh->query("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . $dbh->quote($_GET["db"])); + $result = $dbh->query("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . $dbh->quote(DB)); if ($result->num_rows) { echo "<table cellspacing='0'>\n"; while ($row = $result->fetch_assoc()) { Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/dump.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -25,7 +25,7 @@ } if ($_POST) { - $ext = dump_headers((strlen($_GET["dump"]) ? $_GET["dump"] : $_GET["db"]), (!strlen($_GET["db"]) || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); + $ext = dump_headers((strlen($_GET["dump"]) ? $_GET["dump"] : DB), (!strlen(DB) || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); if ($_POST["format"] == "sql") { dump("SET NAMES utf8; SET foreign_key_checks = 0; @@ -36,7 +36,7 @@ } $style = $_POST["db_style"]; - foreach ((strlen($_GET["db"]) ? array($_GET["db"]) : (array) $_POST["databases"]) as $db) { + foreach ((strlen(DB) ? array(DB) : (array) $_POST["databases"]) as $db) { if ($dbh->select_db($db)) { if ($_POST["format"] == "sql" && ereg('CREATE', $style) && ($result = $dbh->query("SHOW CREATE DATABASE " . idf_escape($db)))) { if ($style == "DROP+CREATE") { @@ -72,8 +72,8 @@ if ($_POST["table_style"] || $_POST["data_style"]) { $views = array(); foreach (table_status() as $row) { - $table = (!strlen($_GET["db"]) || in_array($row["Name"], (array) $_POST["tables"])); - $data = (!strlen($_GET["db"]) || in_array($row["Name"], (array) $_POST["data"])); + $table = (!strlen(DB) || in_array($row["Name"], (array) $_POST["tables"])); + $data = (!strlen(DB) || in_array($row["Name"], (array) $_POST["data"])); if ($table || $data) { if (isset($row["Engine"])) { if ($ext == "tar") { @@ -87,7 +87,7 @@ dump_triggers($row["Name"], $_POST["table_style"]); } if ($ext == "tar") { - dump(tar_file((strlen($_GET["db"]) ? "" : "$db/") . "$row[Name].csv", ob_get_clean())); + dump(tar_file((strlen(DB) ? "" : "$db/") . "$row[Name].csv", ob_get_clean())); } elseif ($_POST["format"] == "sql") { dump("\n"); } @@ -150,7 +150,7 @@ exit; } -page_header(lang('Export'), "", (strlen($_GET["export"]) ? array("table" => $_GET["export"]) : array()), $_GET["db"]); +page_header(lang('Export'), "", (strlen($_GET["export"]) ? array("table" => $_GET["export"]) : array()), DB); ?> <form action="" method="post"> @@ -166,7 +166,7 @@ echo "<tr><th>" . lang('Output') . "<td><input type='hidden' name='token' value='$token'>$dump_output\n"; // token is not needed but checked in bootstrap for all POST data echo "<tr><th>" . lang('Format') . "<td>$dump_format\n"; echo "<tr><th>" . lang('Compression') . "<td>" . ($dump_compress ? $dump_compress : lang('None of the supported PHP extensions (%s) are available.', 'zlib, bz2')) . "\n"; -echo "<tr><th>" . lang('Database') . "<td><select name='db_style'>" . optionlist($db_style, (strlen($_GET["db"]) ? '' : 'CREATE')) . "</select>\n"; +echo "<tr><th>" . lang('Database') . "<td><select name='db_style'>" . optionlist($db_style, (strlen(DB) ? '' : 'CREATE')) . "</select>\n"; echo "<tr><th>" . lang('Tables') . "<td><select name='table_style'>" . optionlist($table_style, 'DROP+CREATE') . "</select>\n"; echo "<tr><th>" . lang('Data') . "<td><select name='data_style'>" . optionlist($data_style, 'INSERT') . "</select>\n"; ?> @@ -175,7 +175,7 @@ <table cellspacing="0"> <?php -if (strlen($_GET["db"])) { +if (strlen(DB)) { $checked = (strlen($_GET["dump"]) ? "" : " checked"); echo "<thead><tr>"; echo "<th style='text-align: left;'><label><input type='checkbox' id='check-tables'$checked onclick='form_check(this, /^tables\\[/);'>" . lang('Tables') . "</label>"; Modified: trunk/adminer/event.inc.php =================================================================== --- trunk/adminer/event.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/event.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -29,7 +29,7 @@ if ($_POST) { $row = $_POST; } elseif (strlen($_GET["event"])) { - $result = $dbh->query("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . $dbh->quote($_GET["db"]) . " AND EVENT_NAME = " . $dbh->quote($_GET["event"])); + $result = $dbh->query("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . $dbh->quote(DB) . " AND EVENT_NAME = " . $dbh->quote($_GET["event"])); $row = $result->fetch_assoc(); } ?> Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/include/adminer.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -22,8 +22,8 @@ * @return string */ function database() { - // should be used everywhere instead of $_GET["db"] - return $_GET["db"]; + // should be used everywhere instead of DB + return DB; } /** Print login form @@ -336,8 +336,8 @@ */ function messageQuery($query) { $id = "sql-" . count($_SESSION["messages"]); - $_SESSION["history"][$_GET["server"]][$_GET["db"]][] = $query; - return " <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre class='jush-sql'>" . h($query) . '</pre><a href="' . h(ME . 'sql=&history=' . (count($_SESSION["history"][$_GET["server"]][$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a></div>'; + $_SESSION["history"][$_GET["server"]][DB][] = $query; + return " <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre class='jush-sql'>" . h($query) . '</pre><a href="' . h(ME . 'sql=&history=' . (count($_SESSION["history"][$_GET["server"]][DB]) - 1)) . '">' . lang('Edit') . '</a></div>'; } /** Functions displayed in edit form @@ -427,9 +427,9 @@ <form action=""> <p><?php if (strlen($_GET["server"])) { ?><input type="hidden" name="server" value="<?php echo h($_GET["server"]); ?>"><?php } ?> <?php if ($databases) { ?> -<select name="db" onchange="this.form.submit();"><option value="">(<?php echo lang('database'); ?>)<?php echo optionlist($databases, $_GET["db"]); ?></select> +<select name="db" onchange="this.form.submit();"><option value="">(<?php echo lang('database'); ?>)<?php echo optionlist($databases, DB); ?></select> <?php } else { ?> -<input name="db" value="<?php echo h($_GET["db"]); ?>"> +<input name="db" value="<?php echo h(DB); ?>"> <?php } ?> <?php if (isset($_GET["sql"])) { ?><input type="hidden" name="sql" value=""><?php } ?> <?php if (isset($_GET["schema"])) { ?><input type="hidden" name="schema" value=""><?php } ?> @@ -438,7 +438,7 @@ </p> </form> <?php - if ($missing != "db" && strlen($_GET["db"])) { + if ($missing != "db" && strlen(DB)) { $result = $dbh->query("SHOW TABLES"); if (!$result) { echo "<p class='error'>" . lang('No tables.') . "\n"; Modified: trunk/adminer/include/bootstrap.inc.php =================================================================== --- trunk/adminer/include/bootstrap.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/include/bootstrap.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -69,7 +69,8 @@ set_magic_quotes_runtime(false); @set_time_limit(0); // @ - can be disabled -define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?' . (strlen($_GET["server"]) ? 'server=' . urlencode($_GET["server"]) . '&' : '') . (strlen($_GET["db"]) ? 'db=' . urlencode($_GET["db"]) . '&' : '')); +define("DB", $_GET["db"]); // for the sake of speed and size +define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?' . (strlen($_GET["server"]) ? 'server=' . urlencode($_GET["server"]) . '&' : '') . (strlen(DB) ? 'db=' . urlencode(DB) . '&' : '')); $on_actions = array("RESTRICT", "CASCADE", "SET NULL", "NO ACTION"); // used in foreign_keys() include "../adminer/include/version.inc.php"; Modified: trunk/adminer/include/connect.inc.php =================================================================== --- trunk/adminer/include/connect.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/include/connect.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -1,8 +1,8 @@ <?php function connect_error() { global $dbh, $VERSION; - if (strlen($_GET["db"])) { - page_header(lang('Database') . ": " . h($_GET["db"]), lang('Invalid database.'), false); + if (strlen(DB)) { + page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), false); } else { page_header(lang('Select database'), "", null); foreach (array( @@ -19,8 +19,8 @@ page_footer("db"); } -if (!(strlen($_GET["db"]) ? $dbh->select_db($_GET["db"]) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]))) { - if (strlen($_GET["db"])) { +if (!(strlen(DB) ? $dbh->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]))) { + if (strlen(DB)) { unset($_SESSION["databases"][$_GET["server"]]); } connect_error(); // separate function to catch SQLite error Modified: trunk/adminer/include/design.inc.php =================================================================== --- trunk/adminer/include/design.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/include/design.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -25,8 +25,8 @@ $link = substr(preg_replace('~db=[^&]*&~', '', ME), 0, -1); echo '<p id="breadcrumb"><a href="' . (strlen($link) ? h($link) : ".") . '">' . (isset($_GET["server"]) ? h($_GET["server"]) : lang('Server')) . '</a> » '; if (is_array($breadcrumb)) { - if (strlen($_GET["db"])) { - echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h($_GET["db"]) . '</a> » '; + if (strlen(DB)) { + echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h(DB) . '</a> » '; } foreach ($breadcrumb as $key => $val) { $desc = (is_array($val) ? $val[1] : $val); @@ -43,7 +43,7 @@ $_SESSION["messages"] = array(); } $databases = &$_SESSION["databases"][$_GET["server"]]; - if (strlen($_GET["db"]) && $databases && !in_array($_GET["db"], $databases, true)) { + if (strlen(DB) && $databases && !in_array(DB, $databases, true)) { $databases = null; } if (isset($databases) && !isset($_GET["sql"])) { Modified: trunk/adminer/schema.inc.php =================================================================== --- trunk/adminer/schema.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/schema.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -1,5 +1,5 @@ <?php -page_header(lang('Database schema'), "", array(), $_GET["db"]); +page_header(lang('Database schema'), "", array(), DB); $table_pos = array(); $table_pos_js = array(); Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/select.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -156,7 +156,7 @@ echo "<form action='' id='form'>\n"; echo "<div style='display: none;'>"; echo (strlen($_GET["server"]) ? '<input type="hidden" name="server" value="' . h($_GET["server"]) . '">' : ""); - echo (strlen($_GET["db"]) ? '<input type="hidden" name="db" value="' . h($_GET["db"]) . '">' : ""); // not used in Editor + echo (strlen(DB) ? '<input type="hidden" name="db" value="' . h(DB) . '">' : ""); // not used in Editor echo '<input type="hidden" name="select" value="' . h($_GET["select"]) . '">'; echo "</div>\n"; $adminer->selectColumnsPrint($select, $columns); @@ -221,7 +221,7 @@ echo ($table_names ? "<th>" . lang('Relations') : "") . "</thead>\n"; foreach ($descriptions as $n => $row) { $unique_idf = implode('&', unique_idf($rows[$n], $indexes)); - echo "<tr" . odd() . "><td><input type='checkbox' name='check[]' value='$unique_idf' onclick=\"this.form['all'].checked = false; form_uncheck('all-page');\">" . (count($select) != count($group) || information_schema($_GET["db"]) ? '' : " <a href='" . h(ME) . "edit=" . urlencode($_GET['select']) . "&$unique_idf'>" . lang('edit') . "</a>"); + echo "<tr" . odd() . "><td><input type='checkbox' name='check[]' value='$unique_idf' onclick=\"this.form['all'].checked = false; form_uncheck('all-page');\">" . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME) . "edit=" . urlencode($_GET['select']) . "&$unique_idf'>" . lang('edit') . "</a>"); foreach ($row as $key => $val) { if (isset($names[$key])) { if (strlen($val) && (!isset($email_fields[$key]) || strlen($email_fields[$key]))) { @@ -297,7 +297,7 @@ } echo " (" . lang('%d row(s)', $found_rows) . ') <label><input type="checkbox" name="all" value="1">' . lang('whole result') . "</label>\n"; - echo (information_schema($_GET["db"]) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "'$confirm></div></fieldset>\n"); + echo (information_schema(DB) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "'$confirm></div></fieldset>\n"); echo "<fieldset><legend>" . lang('Export') . "</legend><div>$dump_output $dump_format $dump_compress <input type='submit' name='export' value='" . lang('Export') . "'></div></fieldset>\n"; } echo "<fieldset><legend>" . lang('CSV Import') . "</legend><div><input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'></div></fieldset>\n"; Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/adminer/sql.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -1,5 +1,5 @@ <?php -$history = &$_SESSION["history"][$_GET["server"]][$_GET["db"]]; +$history = &$_SESSION["history"][$_GET["server"]][DB]; if (!$error && $_POST["clear"]) { $history = array(); redirect(remove_from_uri("history")); @@ -30,9 +30,9 @@ $delimiter = ";"; $offset = 0; $empty = true; - $dbh2 = (strlen($_GET["db"]) ? connect() : null); // connection for exploring indexes (to not replace FOUND_ROWS()) //! PDO - silent error + $dbh2 = (strlen(DB) ? connect() : null); // connection for exploring indexes (to not replace FOUND_ROWS()) //! PDO - silent error if (is_object($dbh2)) { - $dbh2->select_db($_GET["db"]); + $dbh2->select_db(DB); } while (strlen($query)) { if (!$offset && preg_match('~^\\s*DELIMITER\\s+(.+)~i', $query, $match)) { @@ -105,7 +105,7 @@ ?> <form action="" method="post" enctype="multipart/form-data"> -<p><textarea name="query" rows="20" cols="80" style="width: 98%;"><?php echo h($_POST ? $_POST["query"] : (strlen($_GET["history"]) ? $_SESSION["history"][$_GET["server"]][$_GET["db"]][$_GET["history"]] : $_GET["sql"])); ?></textarea> +<p><textarea name="query" rows="20" cols="80" style="width: 98%;"><?php echo h($_POST ? $_POST["query"] : (strlen($_GET["history"]) ? $_SESSION["history"][$_GET["server"]][DB][$_GET["history"]] : $_GET["sql"])); ?></textarea> <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Execute'); ?>"> Modified: trunk/editor/include/connect.inc.php =================================================================== --- trunk/editor/include/connect.inc.php 2009-08-29 13:52:25 UTC (rev 1043) +++ trunk/editor/include/connect.inc.php 2009-08-29 13:54:25 UTC (rev 1044) @@ -1,3 +1,2 @@ <?php -$_GET["db"] = ""; // used here and there by Adminer $dbh->select_db($adminer->database()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-08-29 13:57:56
|
Revision: 1047 http://adminer.svn.sourceforge.net/adminer/?rev=1047&view=rev Author: jakubvrana Date: 2009-08-29 13:57:50 +0000 (Sat, 29 Aug 2009) Log Message: ----------- Substitute table name to $TABLE Modified Paths: -------------- trunk/adminer/call.inc.php trunk/adminer/create.inc.php trunk/adminer/download.inc.php trunk/adminer/dump.inc.php trunk/adminer/edit.inc.php trunk/adminer/event.inc.php trunk/adminer/foreign.inc.php trunk/adminer/indexes.inc.php trunk/adminer/procedure.inc.php trunk/adminer/select.inc.php trunk/adminer/table.inc.php trunk/adminer/trigger.inc.php trunk/adminer/user.inc.php trunk/adminer/view.inc.php trunk/todo.txt Modified: trunk/adminer/call.inc.php =================================================================== --- trunk/adminer/call.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/call.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,7 +1,8 @@ <?php -page_header(lang('Call') . ": " . h($_GET["call"]), $error); +$PROCEDURE = $_GET["call"]; +page_header(lang('Call') . ": " . h($PROCEDURE), $error); -$routine = routine($_GET["call"], (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDURE")); +$routine = routine($PROCEDURE, (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDURE")); $in = array(); $out = array(); foreach ($routine["fields"] as $i => $field) { @@ -27,7 +28,7 @@ } $call[] = (isset($out[$key]) ? "@" . idf_escape($field["field"]) : $val); } - $result = $dbh->multi_query((isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . idf_escape($_GET["call"]) . "(" . implode(", ", $call) . ")"); + $result = $dbh->multi_query((isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . idf_escape($PROCEDURE) . "(" . implode(", ", $call) . ")"); if (!$result) { echo "<p class='error'>" . h($dbh->error) . "\n"; } else { Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/create.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,21 +1,22 @@ <?php +$TABLE = $_GET["create"]; $partition_by = array('HASH', 'LINEAR HASH', 'KEY', 'LINEAR KEY', 'RANGE', 'LIST'); -$referencable_primary = referencable_primary($_GET["create"]); +$referencable_primary = referencable_primary($TABLE); $foreign_keys = array(); foreach ($referencable_primary as $table_name => $field) { $foreign_keys[idf_escape($table_name) . "." . idf_escape($field["field"])] = $table_name; } -if (strlen($_GET["create"])) { - $orig_fields = fields($_GET["create"]); +if (strlen($TABLE)) { + $orig_fields = fields($TABLE); } if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) { $auto_increment_index = " PRIMARY KEY"; // don't overwrite primary key by auto_increment - if (strlen($_GET["create"]) && strlen($_POST["fields"][$_POST["auto_increment_col"]]["orig"])) { - foreach (indexes($_GET["create"]) as $index) { + if (strlen($TABLE) && strlen($_POST["fields"][$_POST["auto_increment_col"]]["orig"])) { + foreach (indexes($TABLE) as $index) { foreach ($index["columns"] as $column) { if ($column === $_POST["fields"][$_POST["auto_increment_col"]]["orig"]) { $auto_increment_index = ""; @@ -33,17 +34,17 @@ foreach ($_POST["fields"] as $key => $field) { $type_field = (isset($types[$field["type"]]) ? $field : $referencable_primary[$foreign_keys[$field["type"]]]); if (strlen($field["field"]) && $type_field) { - $fields[] = "\n" . (strlen($_GET["create"]) ? (strlen($field["orig"]) ? "CHANGE " . idf_escape($field["orig"]) . " " : "ADD ") : " ") + $fields[] = "\n" . (strlen($TABLE) ? (strlen($field["orig"]) ? "CHANGE " . idf_escape($field["orig"]) . " " : "ADD ") : " ") . idf_escape($field["field"]) . process_type($type_field) . ($field["null"] ? " NULL" : " NOT NULL") // NULL for timestamp . (!$field["has_default"] || $field["auto_increment"] || ereg('text|blob', $field["type"]) ? "" : " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP( on update CURRENT_TIMESTAMP)?$", $field["default"]) ? $field["default"] : $dbh->quote($field["default"]))) . ($key == $_POST["auto_increment_col"] ? " AUTO_INCREMENT$auto_increment_index" : "") . " COMMENT " . $dbh->quote($field["comment"]) - . (strlen($_GET["create"]) ? " $after" : "") + . (strlen($TABLE) ? " $after" : "") ; $after = "AFTER " . idf_escape($field["field"]); if (!isset($types[$field["type"]])) { - $fields[] = (strlen($_GET["create"]) ? " ADD" : "") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . idf_escape($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")"; + $fields[] = (strlen($TABLE) ? " ADD" : "") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . idf_escape($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")"; } } elseif (strlen($field["orig"])) { $fields[] = "\nDROP " . idf_escape($field["orig"]); @@ -66,12 +67,12 @@ ? " (" . implode(",", $partitions) . "\n)" : ($_POST["partitions"] ? " PARTITIONS " . intval($_POST["partitions"]) : "") ); - } elseif ($dbh->server_info >= 5.1 && strlen($_GET["create"])) { + } elseif ($dbh->server_info >= 5.1 && strlen($TABLE)) { $status .= "\nREMOVE PARTITIONING"; } $location = ME . "table=" . urlencode($_POST["name"]); - if (strlen($_GET["create"])) { - query_redirect("ALTER TABLE " . idf_escape($_GET["create"]) . implode(",", $fields) . ",\nRENAME TO " . idf_escape($_POST["name"]) . ",\n$status", $location, lang('Table has been altered.')); + if (strlen($TABLE)) { + query_redirect("ALTER TABLE " . idf_escape($TABLE) . implode(",", $fields) . ",\nRENAME TO " . idf_escape($_POST["name"]) . ",\n$status", $location, lang('Table has been altered.')); } else { $path = preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]); setcookie("adminer_engine", $_POST["Engine"], gmmktime(0, 0, 0, gmdate("n") + 1), $path); @@ -79,7 +80,7 @@ } } -page_header((strlen($_GET["create"]) ? lang('Alter table') : lang('Create table')), $error, array("table" => $_GET["create"]), $_GET["create"]); +page_header((strlen($TABLE) ? lang('Alter table') : lang('Create table')), $error, array("table" => $TABLE), $TABLE); $engines = array(); $result = $dbh->query("SHOW ENGINES"); @@ -100,9 +101,9 @@ $row["fields"][$row["auto_increment_col"]]["auto_increment"] = true; } process_fields($row["fields"]); -} elseif (strlen($_GET["create"])) { - $row = table_status($_GET["create"]); - $row["name"] = $_GET["create"]; +} elseif (strlen($TABLE)) { + $row = table_status($TABLE); + $row["name"] = $TABLE; $row["fields"] = array(); foreach ($orig_fields as $field) { $field["has_default"] = isset($field["default"]); @@ -112,7 +113,7 @@ $row["fields"][] = $field; } if ($dbh->server_info >= 5.1) { - $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . $dbh->quote(DB) . " AND TABLE_NAME = " . $dbh->quote($_GET["create"]); + $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . $dbh->quote(DB) . " AND TABLE_NAME = " . $dbh->quote($TABLE); $result = $dbh->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1"); list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row(); $row["partition_names"] = array(); Modified: trunk/adminer/download.inc.php =================================================================== --- trunk/adminer/download.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/download.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,5 +1,6 @@ <?php +$TABLE = $_GET["download"]; header("Content-Type: application/octet-stream"); -header("Content-Disposition: attachment; filename=" . friendly_url("$_GET[download]-" . implode("_", $_GET["where"])) . "." . friendly_url($_GET["field"])); -echo $dbh->result($dbh->query("SELECT " . idf_escape($_GET["field"]) . " FROM " . idf_escape($_GET["download"]) . " WHERE " . where($_GET) . " LIMIT 1")); +header("Content-Disposition: attachment; filename=" . friendly_url("$TABLE-" . implode("_", $_GET["where"])) . "." . friendly_url($_GET["field"])); +echo $dbh->result($dbh->query("SELECT " . idf_escape($_GET["field"]) . " FROM " . idf_escape($TABLE) . " WHERE " . where($_GET) . " LIMIT 1")); exit; // don't output footer Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/dump.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,4 +1,5 @@ <?php +$TABLE = $_GET["dump"]; function tar_file($filename, $contents) { $return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time())); $checksum = 8*32; // space for checksum itself @@ -25,7 +26,7 @@ } if ($_POST) { - $ext = dump_headers((strlen($_GET["dump"]) ? $_GET["dump"] : DB), (!strlen(DB) || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); + $ext = dump_headers((strlen($TABLE) ? $TABLE : DB), (!strlen(DB) || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); if ($_POST["format"] == "sql") { dump("SET NAMES utf8; SET foreign_key_checks = 0; @@ -176,14 +177,14 @@ <table cellspacing="0"> <?php if (strlen(DB)) { - $checked = (strlen($_GET["dump"]) ? "" : " checked"); + $checked = (strlen($TABLE) ? "" : " checked"); echo "<thead><tr>"; echo "<th style='text-align: left;'><label><input type='checkbox' id='check-tables'$checked onclick='form_check(this, /^tables\\[/);'>" . lang('Tables') . "</label>"; echo "<th style='text-align: right;'><label>" . lang('Data') . "<input type='checkbox' id='check-data'$checked onclick='form_check(this, /^data\\[/);'></label>"; echo "</thead>\n"; $views = ""; foreach (table_status() as $row) { - $checked = (strlen($_GET["dump"]) && $row["Name"] != $_GET["dump"] ? '' : " checked"); + $checked = (strlen($TABLE) && $row["Name"] != $TABLE ? '' : " checked"); $print = "<tr><td><label><input type='checkbox' name='tables[]' value='" . h($row["Name"]) . "'$checked onclick=\"form_uncheck('check-tables');\">" . h($row["Name"]) . "</label>"; if (!$row["Engine"]) { $views .= "$print\n"; Modified: trunk/adminer/edit.inc.php =================================================================== --- trunk/adminer/edit.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/edit.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,7 +1,8 @@ <?php +$TABLE = $_GET["edit"]; $where = (isset($_GET["select"]) ? (count($_POST["check"]) == 1 ? where_check($_POST["check"][0]) : "") : where($_GET)); $update = (isset($_GET["select"]) ? $_POST["edit"] : $where); -$fields = fields($_GET["edit"]); +$fields = fields($TABLE); foreach ($fields as $name => $field) { if (!isset($field["privileges"][$update ? "update" : "insert"]) || !strlen($adminer->fieldName($field))) { unset($fields[$name]); @@ -10,7 +11,7 @@ if ($_POST && !$error && !isset($_GET["select"])) { $location = $_SERVER["REQUEST_URI"]; // continue edit or insert if (!$_POST["insert"]) { - $location = ME . "select=" . urlencode($_GET["edit"]); + $location = ME . "select=" . urlencode($TABLE); $i = 0; // append &set converted to &where foreach ((array) $_GET["set"] as $key => $val) { if ($val == $_POST["fields"][$key]) { @@ -29,17 +30,17 @@ redirect($location); } if ($update) { - query_redirect("UPDATE " . idf_escape($_GET["edit"]) . " SET" . implode(",", $set) . "\nWHERE $where\nLIMIT 1", $location, lang('Item has been updated.')); + query_redirect("UPDATE " . idf_escape($TABLE) . " SET" . implode(",", $set) . "\nWHERE $where\nLIMIT 1", $location, lang('Item has been updated.')); } else { - query_redirect("INSERT INTO " . idf_escape($_GET["edit"]) . " SET" . implode(",", $set), $location, lang('Item has been inserted.')); + query_redirect("INSERT INTO " . idf_escape($TABLE) . " SET" . implode(",", $set), $location, lang('Item has been inserted.')); } } -$table_name = $adminer->tableName(table_status($_GET["edit"])); +$table_name = $adminer->tableName(table_status($TABLE)); page_header( ($update ? lang('Edit') : lang('Insert')), $error, - array("select" => array($_GET["edit"], $table_name)), + array("select" => array($TABLE, $table_name)), $table_name ); @@ -55,7 +56,7 @@ } $row = array(); if ($select) { - $result = $dbh->query("SELECT " . implode(", ", $select) . " FROM " . idf_escape($_GET["edit"]) . " WHERE $where " . (isset($_GET["select"]) ? "HAVING COUNT(*) = 1" : "LIMIT 1")); + $result = $dbh->query("SELECT " . implode(", ", $select) . " FROM " . idf_escape($TABLE) . " WHERE $where " . (isset($_GET["select"]) ? "HAVING COUNT(*) = 1" : "LIMIT 1")); $row = $result->fetch_assoc(); } } Modified: trunk/adminer/event.inc.php =================================================================== --- trunk/adminer/event.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/event.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,10 +1,11 @@ <?php +$EVENT = $_GET["event"]; $intervals = array("YEAR", "QUARTER", "MONTH", "DAY", "HOUR", "MINUTE", "WEEK", "SECOND", "YEAR_MONTH", "DAY_HOUR", "DAY_MINUTE", "DAY_SECOND", "HOUR_MINUTE", "HOUR_SECOND", "MINUTE_SECOND"); $statuses = array("ENABLED" => "ENABLE", "DISABLED" => "DISABLE", "SLAVESIDE_DISABLED" => "DISABLE ON SLAVE"); if ($_POST && !$error) { if ($_POST["drop"]) { - query_redirect("DROP EVENT " . idf_escape($_GET["event"]), substr(ME, 0, -1), lang('Event has been dropped.')); + query_redirect("DROP EVENT " . idf_escape($EVENT), substr(ME, 0, -1), lang('Event has been dropped.')); } elseif (in_array($_POST["INTERVAL_FIELD"], $intervals) && isset($statuses[$_POST["STATUS"]])) { $schedule = "\nON SCHEDULE " . ($_POST["INTERVAL_VALUE"] ? "EVERY " . $dbh->quote($_POST["INTERVAL_VALUE"]) . " $_POST[INTERVAL_FIELD]" @@ -13,23 +14,23 @@ : "AT " . $dbh->quote($_POST["STARTS"]) ) . " ON COMPLETION" . ($_POST["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE" ; - query_redirect((strlen($_GET["event"]) - ? "ALTER EVENT " . idf_escape($_GET["event"]) . $schedule - . ($_GET["event"] != $_POST["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($_POST["EVENT_NAME"]) : "") + query_redirect((strlen($EVENT) + ? "ALTER EVENT " . idf_escape($EVENT) . $schedule + . ($EVENT != $_POST["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($_POST["EVENT_NAME"]) : "") : "CREATE EVENT " . idf_escape($_POST["EVENT_NAME"]) . $schedule ) . "\n" . $statuses[$_POST["STATUS"]] . " COMMENT " . $dbh->quote($_POST["EVENT_COMMENT"]) . " DO\n$_POST[EVENT_DEFINITION]" - , substr(ME, 0, -1), (strlen($_GET["event"]) ? lang('Event has been altered.') : lang('Event has been created.'))); + , substr(ME, 0, -1), (strlen($EVENT) ? lang('Event has been altered.') : lang('Event has been created.'))); } } -page_header((strlen($_GET["event"]) ? lang('Alter event') . ": " . h($_GET["event"]) : lang('Create event')), $error); +page_header((strlen($EVENT) ? lang('Alter event') . ": " . h($EVENT) : lang('Create event')), $error); $row = array(); if ($_POST) { $row = $_POST; -} elseif (strlen($_GET["event"])) { - $result = $dbh->query("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . $dbh->quote(DB) . " AND EVENT_NAME = " . $dbh->quote($_GET["event"])); +} elseif (strlen($EVENT)) { + $result = $dbh->query("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . $dbh->quote(DB) . " AND EVENT_NAME = " . $dbh->quote($EVENT)); $row = $result->fetch_assoc(); } ?> @@ -48,5 +49,5 @@ <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> -<?php if (strlen($_GET["event"])) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?> +<?php if (strlen($EVENT)) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?> </form> Modified: trunk/adminer/foreign.inc.php =================================================================== --- trunk/adminer/foreign.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/foreign.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,7 +1,8 @@ <?php +$TABLE = $_GET["foreign"]; if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-js"]) { if ($_POST["drop"]) { - query_redirect("ALTER TABLE " . idf_escape($_GET["foreign"]) . "\nDROP FOREIGN KEY " . idf_escape($_GET["name"]), ME . "table=" . urlencode($_GET["foreign"]), lang('Foreign key has been dropped.')); + query_redirect("ALTER TABLE " . idf_escape($TABLE) . "\nDROP FOREIGN KEY " . idf_escape($_GET["name"]), ME . "table=" . urlencode($TABLE), lang('Foreign key has been dropped.')); } else { $source = array_filter($_POST["source"], 'strlen'); ksort($source); // enforce input order @@ -9,19 +10,19 @@ foreach ($source as $key => $val) { $target[$key] = $_POST["target"][$key]; } - query_redirect("ALTER TABLE " . idf_escape($_GET["foreign"]) + query_redirect("ALTER TABLE " . idf_escape($TABLE) . (strlen($_GET["name"]) ? "\nDROP FOREIGN KEY " . idf_escape($_GET["name"]) . "," : "") . "\nADD FOREIGN KEY (" . implode(", ", array_map('idf_escape', $source)) . ") REFERENCES " . idf_escape($_POST["table"]) . " (" . implode(", ", array_map('idf_escape', $target)) . ")" . (in_array($_POST["on_delete"], $on_actions) ? " ON DELETE $_POST[on_delete]" : "") . (in_array($_POST["on_update"], $on_actions) ? " ON UPDATE $_POST[on_update]" : "") - , ME . "table=" . urlencode($_GET["foreign"]), (strlen($_GET["name"]) ? lang('Foreign key has been altered.') : lang('Foreign key has been created.'))); + , ME . "table=" . urlencode($TABLE), (strlen($_GET["name"]) ? lang('Foreign key has been altered.') : lang('Foreign key has been created.'))); $error = lang('Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.') . "<br>$error"; //! no partitioning } } -page_header(lang('Foreign key'), $error, array("table" => $_GET["foreign"]), $_GET["foreign"]); +page_header(lang('Foreign key'), $error, array("table" => $TABLE), $TABLE); -$row = array("table" => $_GET["foreign"], "source" => array("")); +$row = array("table" => $TABLE, "source" => array("")); if ($_POST) { $row = $_POST; ksort($row["source"]); @@ -31,13 +32,13 @@ $row["target"] = array(); } } elseif (strlen($_GET["name"])) { - $foreign_keys = foreign_keys($_GET["foreign"]); + $foreign_keys = foreign_keys($TABLE); $row = $foreign_keys[$_GET["name"]]; $row["source"][] = ""; } -$source = get_vals("SHOW COLUMNS FROM " . idf_escape($_GET["foreign"])); //! no text and blob -$target = ($_GET["foreign"] === $row["table"] ? $source : get_vals("SHOW COLUMNS FROM " . idf_escape($row["table"]))); +$source = get_vals("SHOW COLUMNS FROM " . idf_escape($TABLE)); //! no text and blob +$target = ($TABLE === $row["table"] ? $source : get_vals("SHOW COLUMNS FROM " . idf_escape($row["table"]))); ?> <form action="" method="post"> Modified: trunk/adminer/indexes.inc.php =================================================================== --- trunk/adminer/indexes.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/indexes.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,6 +1,7 @@ <?php +$TABLE = $_GET["indexes"]; $index_types = array("PRIMARY", "UNIQUE", "INDEX", "FULLTEXT"); -$indexes = indexes($_GET["indexes"]); +$indexes = indexes($TABLE); if ($_POST && !$error && !$_POST["add"]) { $alter = array(); foreach ($_POST["indexes"] as $index) { @@ -34,14 +35,14 @@ $alter[] = "\nDROP INDEX " . idf_escape($name); } if (!$alter) { - redirect(ME . "table=" . urlencode($_GET["indexes"])); + redirect(ME . "table=" . urlencode($TABLE)); } - query_redirect("ALTER TABLE " . idf_escape($_GET["indexes"]) . implode(",", $alter), ME . "table=" . urlencode($_GET["indexes"]), lang('Indexes have been altered.')); + query_redirect("ALTER TABLE " . idf_escape($TABLE) . implode(",", $alter), ME . "table=" . urlencode($TABLE), lang('Indexes have been altered.')); } -page_header(lang('Indexes'), $error, array("table" => $_GET["indexes"]), $_GET["indexes"]); +page_header(lang('Indexes'), $error, array("table" => $TABLE), $TABLE); -$fields = array_keys(fields($_GET["indexes"])); +$fields = array_keys(fields($TABLE)); $row = array("indexes" => $indexes); if ($_POST) { $row = $_POST; Modified: trunk/adminer/procedure.inc.php =================================================================== --- trunk/adminer/procedure.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/procedure.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,10 +1,11 @@ <?php +$PROCEDURE = $_GET["procedure"]; $routine = (isset($_GET["function"]) ? "FUNCTION" : "PROCEDURE"); $dropped = false; if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) { - if (strlen($_GET["procedure"])) { - $dropped = query_redirect("DROP $routine " . idf_escape($_GET["procedure"]), substr(ME, 0, -1), lang('Routine has been dropped.'), $_POST["drop"], !$_POST["dropped"]); + if (strlen($PROCEDURE)) { + $dropped = query_redirect("DROP $routine " . idf_escape($PROCEDURE), substr(ME, 0, -1), lang('Routine has been dropped.'), $_POST["drop"], !$_POST["dropped"]); } if (!$_POST["drop"]) { $set = array(); @@ -19,11 +20,11 @@ . " (" . implode(", ", $set) . ")" . (isset($_GET["function"]) ? " RETURNS" . process_type($_POST["returns"], "CHARACTER SET") : "") . "\n$_POST[definition]" - , substr(ME, 0, -1), (strlen($_GET["procedure"]) ? lang('Routine has been altered.') : lang('Routine has been created.'))); + , substr(ME, 0, -1), (strlen($PROCEDURE) ? lang('Routine has been altered.') : lang('Routine has been created.'))); } } -page_header((strlen($_GET["procedure"]) ? (isset($_GET["function"]) ? lang('Alter function') : lang('Alter procedure')) . ": " . h($_GET["procedure"]) : (isset($_GET["function"]) ? lang('Create function') : lang('Create procedure'))), $error); +page_header((strlen($PROCEDURE) ? (isset($_GET["function"]) ? lang('Alter function') : lang('Alter procedure')) . ": " . h($PROCEDURE) : (isset($_GET["function"]) ? lang('Create function') : lang('Create procedure'))), $error); $collations = get_vals("SHOW CHARACTER SET"); sort($collations); @@ -32,9 +33,9 @@ $row = $_POST; $row["fields"] = (array) $row["fields"]; process_fields($row["fields"]); -} elseif (strlen($_GET["procedure"])) { - $row = routine($_GET["procedure"], $routine); - $row["name"] = $_GET["procedure"]; +} elseif (strlen($PROCEDURE)) { + $row = routine($PROCEDURE, $routine); + $row["name"] = $PROCEDURE; } ?> @@ -49,5 +50,5 @@ <?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?> <?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64"> <input type="submit" value="<?php echo lang('Save'); ?>"> -<?php if (strlen($_GET["procedure"])) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?> +<?php if (strlen($PROCEDURE)) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?> </form> Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/select.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,7 +1,8 @@ <?php -$table_status = table_status($_GET["select"]); -$indexes = indexes($_GET["select"]); -$fields = fields($_GET["select"]); +$TABLE = $_GET["select"]; +$table_status = table_status($TABLE); +$indexes = indexes($TABLE); +$fields = fields($TABLE); $rights = array(); // privilege => 0 $columns = array(); // selectable columns unset($text_length); @@ -20,7 +21,7 @@ $where = $adminer->selectSearchProcess($fields, $indexes); $order = $adminer->selectOrderProcess($fields, $indexes); $limit = $adminer->selectLimitProcess(); -$from = ($select ? implode(", ", $select) : "*") . " FROM " . idf_escape($_GET["select"]) . ($where ? " WHERE " . implode(" AND ", $where) : ""); +$from = ($select ? implode(", ", $select) : "*") . " FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""); $group_by = ($group && count($group) < count($select) ? " GROUP BY " . implode(", ", $group) : "") . ($order ? " ORDER BY " . implode(", ", $order) : ""); if ($_POST && !$error) { @@ -33,20 +34,20 @@ } } if ($_POST["export"]) { - dump_headers($_GET["select"]); - dump_table($_GET["select"], ""); + dump_headers($TABLE); + dump_table($TABLE, ""); if ($_POST["format"] != "sql") { // Editor doesn't send format dump_csv($select ? $select : array_keys($fields)); } if (!is_array($_POST["check"]) || $primary === array()) { - dump_data($_GET["select"], "INSERT", "SELECT $from" . (is_array($_POST["check"]) ? ($where ? " AND " : " WHERE ") . "($where_check)" : "") . $group_by); + dump_data($TABLE, "INSERT", "SELECT $from" . (is_array($_POST["check"]) ? ($where ? " AND " : " WHERE ") . "($where_check)" : "") . $group_by); } else { $union = array(); foreach ($_POST["check"] as $val) { // where is not unique so OR can't be used $union[] = "(SELECT $from " . ($where ? "AND " : "WHERE ") . where_check($val) . $group_by . " LIMIT 1)"; } - dump_data($_GET["select"], "INSERT", implode(" UNION ALL ", $union)); + dump_data($TABLE, "INSERT", implode(" UNION ALL ", $union)); } dump(); exit; @@ -55,7 +56,7 @@ if (!$_POST["import"]) { // edit $result = true; $affected = 0; - $command = ($_POST["delete"] ? ($_POST["all"] && !$where ? "TRUNCATE " : "DELETE FROM ") : ($_POST["clone"] ? "INSERT INTO " : "UPDATE ")) . idf_escape($_GET["select"]); + $command = ($_POST["delete"] ? ($_POST["all"] && !$where ? "TRUNCATE " : "DELETE FROM ") : ($_POST["clone"] ? "INSERT INTO " : "UPDATE ")) . idf_escape($TABLE); $set = array(); if (!$_POST["delete"]) { foreach ($columns as $name => $val) { //! should check also for edit or insert privileges @@ -66,7 +67,7 @@ $set[] = idf_escape($name) . " = $val"; } } - $command .= ($_POST["clone"] ? "\nSELECT " . implode(", ", $set) . "\nFROM " . idf_escape($_GET["select"]) : " SET\n" . implode(",\n", $set)); + $command .= ($_POST["clone"] ? "\nSELECT " . implode(", ", $set) . "\nFROM " . idf_escape($TABLE) : " SET\n" . implode(",\n", $set)); } if ($_POST["delete"] || $set) { if ($_POST["all"] || ($primary === array() && $_POST["check"])) { @@ -91,7 +92,7 @@ $length = 0; $result = true; $dbh->query("SET foreign_key_checks = 0"); - $query = "REPLACE " . idf_escape($_GET["select"]); // ON DUPLICATE KEY UPDATE would require one query per record + $query = "REPLACE " . idf_escape($TABLE); // ON DUPLICATE KEY UPDATE would require one query per record $packet_size = $dbh->result($dbh->query("SELECT @@max_allowed_packet")); $rows = array(); preg_match_all('~("[^"]*"|[^"\\n])+~', $file, $matches); @@ -136,7 +137,7 @@ page_header(lang('Select') . ": " . $adminer->tableName($table_status), $error); -$foreign_keys = column_foreign_keys($_GET["select"]); +$foreign_keys = column_foreign_keys($TABLE); echo "<p>"; if (isset($rights["insert"])) { $set = ""; @@ -147,7 +148,7 @@ $set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]); } } - echo '<a href="' . h(ME . 'edit=' . urlencode($_GET['select']) . $set) . '">' . lang('New item') . '</a> '; + echo '<a href="' . h(ME . 'edit=' . urlencode($TABLE) . $set) . '">' . lang('New item') . '</a> '; } echo $adminer->selectLinks($table_status); @@ -158,7 +159,7 @@ echo "<div style='display: none;'>"; echo (strlen($_GET["server"]) ? '<input type="hidden" name="server" value="' . h($_GET["server"]) . '">' : ""); echo (strlen(DB) ? '<input type="hidden" name="db" value="' . h(DB) . '">' : ""); // not used in Editor - echo '<input type="hidden" name="select" value="' . h($_GET["select"]) . '">'; + echo '<input type="hidden" name="select" value="' . h($TABLE) . '">'; echo "</div>\n"; $adminer->selectColumnsPrint($select, $columns); $adminer->selectSearchPrint($where, $columns, $indexes); @@ -192,7 +193,7 @@ $descriptions = $adminer->rowDescriptions($rows, $foreign_keys); - $backward_keys = $adminer->backwardKeys($_GET["select"]); + $backward_keys = $adminer->backwardKeys($TABLE); $table_names = array(); if ($backward_keys) { foreach ($backward_keys as $key => $val) { @@ -222,7 +223,7 @@ echo ($table_names ? "<th>" . lang('Relations') : "") . "</thead>\n"; foreach ($descriptions as $n => $row) { $unique_idf = implode('&', unique_idf($rows[$n], $indexes)); - echo "<tr" . odd() . "><td><input type='checkbox' name='check[]' value='$unique_idf' onclick=\"this.form['all'].checked = false; form_uncheck('all-page');\">" . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME) . "edit=" . urlencode($_GET['select']) . "&$unique_idf'>" . lang('edit') . "</a>"); + echo "<tr" . odd() . "><td><input type='checkbox' name='check[]' value='$unique_idf' onclick=\"this.form['all'].checked = false; form_uncheck('all-page');\">" . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME) . "edit=" . urlencode($TABLE) . "&$unique_idf'>" . lang('edit') . "</a>"); foreach ($row as $key => $val) { if (isset($names[$key])) { if (strlen($val) && (!isset($email_fields[$key]) || strlen($email_fields[$key]))) { @@ -234,7 +235,7 @@ $val = "<i>NULL</i>"; } else { if (ereg('blob|binary', $fields[$key]["type"]) && strlen($val)) { - $link = h(ME . 'download=' . urlencode($_GET["select"]) . '&field=' . urlencode($key) . '&') . $unique_idf; + $link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . '&') . $unique_idf; } if (!strlen(trim($val, " \t"))) { $val = " "; @@ -284,7 +285,7 @@ // slow with big tables ob_flush(); flush(); - $found_rows = $dbh->result($dbh->query("SELECT COUNT(*) FROM " . idf_escape($_GET["select"]) . ($where ? " WHERE " . implode(" AND ", $where) : ""))); + $found_rows = $dbh->result($dbh->query("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""))); } echo "<p>"; if (intval($limit) && $found_rows > $limit) { Modified: trunk/adminer/table.inc.php =================================================================== --- trunk/adminer/table.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/table.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,12 +1,13 @@ <?php -$result = $dbh->query("SHOW FULL COLUMNS FROM " . idf_escape($_GET["table"])); +$TABLE = $_GET["table"]; +$result = $dbh->query("SHOW FULL COLUMNS FROM " . idf_escape($TABLE)); if (!$result) { $error = h($dbh->error); } -$table_status = ($result ? table_status($_GET["table"]) : array()); +$table_status = ($result ? table_status($TABLE) : array()); $is_view = !isset($table_status["Rows"]); -page_header(($result && $is_view ? lang('View') : lang('Table')) . ": " . h($_GET["table"]), $error); +page_header(($result && $is_view ? lang('View') : lang('Table')) . ": " . h($TABLE), $error); if ($result) { echo "<table cellspacing='0'>\n"; @@ -21,16 +22,16 @@ echo "<p>"; if ($is_view) { - echo '<a href="' . h(ME) . 'view=' . urlencode($_GET["table"]) . '">' . lang('Alter view') . '</a>'; + echo '<a href="' . h(ME) . 'view=' . urlencode($TABLE) . '">' . lang('Alter view') . '</a>'; } else { - echo '<a href="' . h(ME) . 'create=' . urlencode($_GET["table"]) . '">' . lang('Alter table') . '</a>'; + echo '<a href="' . h(ME) . 'create=' . urlencode($TABLE) . '">' . lang('Alter table') . '</a>'; } - echo ' <a href="' . h(ME) . 'select=' . urlencode($_GET["table"]) . '">' . lang('Select table') . '</a>'; - echo ' <a href="' . h(ME) . 'edit=' . urlencode($_GET["table"]) . '">' . lang('New item') . '</a>'; + echo ' <a href="' . h(ME) . 'select=' . urlencode($TABLE) . '">' . lang('Select table') . '</a>'; + echo ' <a href="' . h(ME) . 'edit=' . urlencode($TABLE) . '">' . lang('New item') . '</a>'; if (!$is_view) { echo "<h3>" . lang('Indexes') . "</h3>\n"; - $indexes = indexes($_GET["table"]); + $indexes = indexes($TABLE); if ($indexes) { echo "<table cellspacing='0'>\n"; foreach ($indexes as $index) { @@ -43,11 +44,11 @@ } echo "</table>\n"; } - echo '<p><a href="' . h(ME) . 'indexes=' . urlencode($_GET["table"]) . '">' . lang('Alter indexes') . "</a>\n"; + echo '<p><a href="' . h(ME) . 'indexes=' . urlencode($TABLE) . '">' . lang('Alter indexes') . "</a>\n"; if ($table_status["Engine"] == "InnoDB") { echo "<h3>" . lang('Foreign keys') . "</h3>\n"; - $foreign_keys = foreign_keys($_GET["table"]); + $foreign_keys = foreign_keys($TABLE); if ($foreign_keys) { echo "<table cellspacing='0'>\n"; foreach ($foreign_keys as $name => $foreign_key) { @@ -56,24 +57,24 @@ echo "<th><i>" . implode("</i>, <i>", array_map('h', $foreign_key["source"])) . "</i>"; echo "<td><a href='" . h(strlen($foreign_key["db"]) ? preg_replace('~db=[^&]*~', "db=" . urlencode($foreign_key["db"]), ME) : ME) . "table=" . urlencode($foreign_key["table"]) . "'>$link</a>"; echo "(<em>" . implode("</em>, <em>", array_map('h', $foreign_key["target"])) . "</em>)"; - echo "<td>" . (!strlen($foreign_key["db"]) ? '<a href="' . h(ME . 'foreign=' . urlencode($_GET["table"]) . '&name=' . urlencode($name)) . '">' . lang('Alter') . '</a>' : ' '); + echo "<td>" . (!strlen($foreign_key["db"]) ? '<a href="' . h(ME . 'foreign=' . urlencode($TABLE) . '&name=' . urlencode($name)) . '">' . lang('Alter') . '</a>' : ' '); } echo "</table>\n"; } - echo '<p><a href="' . h(ME) . 'foreign=' . urlencode($_GET["table"]) . '">' . lang('Add foreign key') . "</a>\n"; + echo '<p><a href="' . h(ME) . 'foreign=' . urlencode($TABLE) . '">' . lang('Add foreign key') . "</a>\n"; } if ($dbh->server_info >= 5) { echo "<h3>" . lang('Triggers') . "</h3>\n"; - $result = $dbh->query("SHOW TRIGGERS LIKE " . $dbh->quote(addcslashes($_GET["table"], "%_"))); + $result = $dbh->query("SHOW TRIGGERS LIKE " . $dbh->quote(addcslashes($TABLE, "%_"))); if ($result->num_rows) { echo "<table cellspacing='0'>\n"; while ($row = $result->fetch_assoc()) { - echo "<tr valign='top'><td>$row[Timing]<td>$row[Event]<th>" . h($row["Trigger"]) . "<td><a href='" . h(ME . 'trigger=' . urlencode($_GET["table"]) . '&name=' . urlencode($row["Trigger"])) . "'>" . lang('Alter') . "</a>\n"; + echo "<tr valign='top'><td>$row[Timing]<td>$row[Event]<th>" . h($row["Trigger"]) . "<td><a href='" . h(ME . 'trigger=' . urlencode($TABLE) . '&name=' . urlencode($row["Trigger"])) . "'>" . lang('Alter') . "</a>\n"; } echo "</table>\n"; } - echo '<p><a href="' . h(ME) . 'trigger=' . urlencode($_GET["table"]) . '">' . lang('Add trigger') . "</a>\n"; + echo '<p><a href="' . h(ME) . 'trigger=' . urlencode($TABLE) . '">' . lang('Add trigger') . "</a>\n"; } } } Modified: trunk/adminer/trigger.inc.php =================================================================== --- trunk/adminer/trigger.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/trigger.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,22 +1,23 @@ <?php +$TABLE = $_GET["trigger"]; $trigger_time = array("BEFORE", "AFTER"); $trigger_event = array("INSERT", "UPDATE", "DELETE"); $dropped = false; if ($_POST && !$error) { if (strlen($_GET["name"])) { - $dropped = query_redirect("DROP TRIGGER " . idf_escape($_GET["name"]), ME . "table=" . urlencode($_GET["trigger"]), lang('Trigger has been dropped.'), $_POST["drop"], !$_POST["dropped"]); + $dropped = query_redirect("DROP TRIGGER " . idf_escape($_GET["name"]), ME . "table=" . urlencode($TABLE), lang('Trigger has been dropped.'), $_POST["drop"], !$_POST["dropped"]); } if (!$_POST["drop"]) { if (in_array($_POST["Timing"], $trigger_time) && in_array($_POST["Event"], $trigger_event)) { - query_redirect("CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . " $_POST[Timing] $_POST[Event] ON " . idf_escape($_GET["trigger"]) . " FOR EACH ROW\n$_POST[Statement]", ME . "table=" . urlencode($_GET["trigger"]), (strlen($_GET["name"]) ? lang('Trigger has been altered.') : lang('Trigger has been created.'))); + query_redirect("CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . " $_POST[Timing] $_POST[Event] ON " . idf_escape($TABLE) . " FOR EACH ROW\n$_POST[Statement]", ME . "table=" . urlencode($TABLE), (strlen($_GET["name"]) ? lang('Trigger has been altered.') : lang('Trigger has been created.'))); } } } -page_header((strlen($_GET["name"]) ? lang('Alter trigger') . ": " . h($_GET["name"]) : lang('Create trigger')), $error, array("table" => $_GET["trigger"])); +page_header((strlen($_GET["name"]) ? lang('Alter trigger') . ": " . h($_GET["name"]) : lang('Create trigger')), $error, array("table" => $TABLE)); -$row = array("Trigger" => "$_GET[trigger]_bi"); +$row = array("Trigger" => $TABLE . "_bi"); if ($_POST) { $row = $_POST; } elseif (strlen($_GET["name"])) { @@ -27,7 +28,7 @@ <form action="" method="post" id="form"> <table cellspacing="0"> -<tr><th><?php echo lang('Time'); ?><td><select name="Timing" onchange="if (/^<?php echo h(preg_quote($_GET["trigger"], "/")); ?>_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '<?php echo h(addcslashes($_GET["trigger"], "\r\n'\\")); ?>_' + this.value.charAt(0).toLowerCase() + this.form['Event'].value.charAt(0).toLowerCase();"><?php echo optionlist($trigger_time, $row["Timing"]); ?></select> +<tr><th><?php echo lang('Time'); ?><td><select name="Timing" onchange="if (/^<?php echo h(preg_quote($TABLE, "/")); ?>_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '<?php echo h(addcslashes($TABLE, "\r\n'\\")); ?>_' + this.value.charAt(0).toLowerCase() + this.form['Event'].value.charAt(0).toLowerCase();"><?php echo optionlist($trigger_time, $row["Timing"]); ?></select> <tr><th><?php echo lang('Event'); ?><td><select name="Event" onchange="this.form['Timing'].onchange();"><?php echo optionlist($trigger_event, $row["Event"]); ?></select> <tr><th><?php echo lang('Name'); ?><td><input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64"> </table> Modified: trunk/adminer/user.inc.php =================================================================== --- trunk/adminer/user.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/user.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,4 +1,5 @@ <?php +$USER = $_GET["user"]; $privileges = array("" => array("All privileges" => "")); $result = $dbh->query("SHOW PRIVILEGES"); while ($row = $result->fetch_assoc()) { @@ -40,7 +41,7 @@ } $grants = array(); $old_pass = ""; -if (isset($_GET["host"]) && ($result = $dbh->query("SHOW GRANTS FOR " . $dbh->quote($_GET["user"]) . "@" . $dbh->quote($_GET["host"])))) { //! use information_schema for MySQL 5 - column names in column privileges are not escaped +if (isset($_GET["host"]) && ($result = $dbh->query("SHOW GRANTS FOR " . $dbh->quote($USER) . "@" . $dbh->quote($_GET["host"])))) { //! use information_schema for MySQL 5 - column names in column privileges are not escaped while ($row = $result->fetch_row()) { if (preg_match('~GRANT (.*) ON (.*) TO ~', $row[0], $match) && preg_match_all('~ *([^(,]*[^ ,(])( *\\([^)]+\\))?~', $match[1], $matches, PREG_SET_ORDER)) { //! escape the part between ON and TO foreach ($matches as $val) { @@ -57,7 +58,7 @@ } if ($_POST && !$error) { - $old_user = (isset($_GET["host"]) ? $dbh->quote($_GET["user"]) . "@" . $dbh->quote($_GET["host"]) : "''"); + $old_user = (isset($_GET["host"]) ? $dbh->quote($USER) . "@" . $dbh->quote($_GET["host"]) : "''"); $new_user = $dbh->quote($_POST["user"]) . "@" . $dbh->quote($_POST["host"]); // if $_GET["host"] is not set then $new_user is always different $pass = $dbh->quote($_POST["pass"]); if ($_POST["drop"]) { @@ -112,7 +113,7 @@ } } -page_header((isset($_GET["host"]) ? lang('Username') . ": " . h("$_GET[user]@$_GET[host]") : lang('Create user')), $error, array("privileges" => array('', lang('Privileges')))); +page_header((isset($_GET["host"]) ? lang('Username') . ": " . h("$USER@$_GET[host]") : lang('Create user')), $error, array("privileges" => array('', lang('Privileges')))); if ($_POST) { $row = $_POST; Modified: trunk/adminer/view.inc.php =================================================================== --- trunk/adminer/view.inc.php 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/adminer/view.inc.php 2009-08-29 13:57:50 UTC (rev 1047) @@ -1,20 +1,21 @@ <?php +$TABLE = $_GET["view"]; $dropped = false; if ($_POST && !$error) { - if (strlen($_GET["view"])) { - $dropped = query_redirect("DROP VIEW " . idf_escape($_GET["view"]), substr(ME, 0, -1), lang('View has been dropped.'), false, !$_POST["dropped"]); + if (strlen($TABLE)) { + $dropped = query_redirect("DROP VIEW " . idf_escape($TABLE), substr(ME, 0, -1), lang('View has been dropped.'), false, !$_POST["dropped"]); } - query_redirect("CREATE VIEW " . idf_escape($_POST["name"]) . " AS\n$_POST[select]", ME . "table=" . urlencode($_POST["name"]), (strlen($_GET["view"]) ? lang('View has been altered.') : lang('View has been created.'))); + query_redirect("CREATE VIEW " . idf_escape($_POST["name"]) . " AS\n$_POST[select]", ME . "table=" . urlencode($_POST["name"]), (strlen($TABLE) ? lang('View has been altered.') : lang('View has been created.'))); } -page_header((strlen($_GET["view"]) ? lang('Alter view') : lang('Create view')), $error, array("table" => $_GET["view"]), $_GET["view"]); +page_header((strlen($TABLE) ? lang('Alter view') : lang('Create view')), $error, array("table" => $TABLE), $TABLE); $row = array(); if ($_POST) { $row = $_POST; -} elseif (strlen($_GET["view"])) { - $row = view($_GET["view"]); - $row["name"] = $_GET["view"]; +} elseif (strlen($TABLE)) { + $row = view($TABLE); + $row["name"] = $TABLE; } ?> Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2009-08-29 13:55:55 UTC (rev 1046) +++ trunk/todo.txt 2009-08-29 13:57:50 UTC (rev 1047) @@ -12,7 +12,7 @@ Offer enum and set items in search - whisperer Use event $intervals + microseconds in relative date functions ? Column and table names auto-completition in SQL textarea -? Aliasing of built-in functions can save 7 KB, function minification can save 7 KB, substitution of $_GET and friends can save 2 KB, remove of base64_decode() + using chars 127-255 in minification can save 1 KB, JS packer can save 1 KB, not enclosing attribute values can save 1.2 KB +? Aliasing of built-in functions can save 7 KB, function minification can save 7 KB, substitution of repetitive $a["a"] can save 4 KB, substitution of $_GET and friends can save 2 KB, remove of base64_decode() + using chars 127-255 in minification can save 1 KB, JS packer can save 1 KB, not enclosing HTML attribute values can save 1.2 KB ? AJAX editing - select page has all data to display edit form Editor: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-01 13:06:10
|
Revision: 1053 http://adminer.svn.sourceforge.net/adminer/?rev=1053&view=rev Author: jakubvrana Date: 2009-09-01 13:05:50 +0000 (Tue, 01 Sep 2009) Log Message: ----------- Unlock session in dump Modified Paths: -------------- trunk/adminer/include/export.inc.php trunk/editor/include/export.inc.php Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-08-31 10:11:52 UTC (rev 1052) +++ trunk/adminer/include/export.inc.php 2009-09-01 13:05:50 UTC (rev 1053) @@ -153,6 +153,7 @@ if ($_POST["output"] == "file" || $compress) { header("Content-Disposition: attachment; filename=$filename.$ext" . (ereg('[0-9a-z]', $compress) ? ".$compress" : "")); } + session_write_close(); return $ext; } Modified: trunk/editor/include/export.inc.php =================================================================== --- trunk/editor/include/export.inc.php 2009-08-31 10:11:52 UTC (rev 1052) +++ trunk/editor/include/export.inc.php 2009-09-01 13:05:50 UTC (rev 1053) @@ -18,6 +18,7 @@ $ext = "csv"; header("Content-Type: text/csv; charset=utf-8"); header("Content-Disposition: attachment; filename=$filename.$ext"); + session_write_close(); return $ext; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-09 11:03:10
|
Revision: 1075 http://adminer.svn.sourceforge.net/adminer/?rev=1075&view=rev Author: jakubvrana Date: 2009-09-09 11:03:03 +0000 (Wed, 09 Sep 2009) Log Message: ----------- Define functions unconditionally Modified Paths: -------------- trunk/adminer/dump.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/bootstrap.inc.php trunk/adminer/include/editing.inc.php trunk/adminer/include/export.inc.php trunk/adminer/user.inc.php trunk/changes.txt trunk/editor/include/adminer.inc.php Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-09-08 20:55:17 UTC (rev 1074) +++ trunk/adminer/dump.inc.php 2009-09-09 11:03:03 UTC (rev 1075) @@ -1,31 +1,6 @@ <?php $TABLE = $_GET["dump"]; -function tar_file($filename, $contents) { - $return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time())); - $checksum = 8*32; // space for checksum itself - for ($i=0; $i < strlen($return); $i++) { - $checksum += ord($return{$i}); - } - $return .= sprintf("%06o", $checksum) . "\0 "; - return $return . str_repeat("\0", 512 - strlen($return)) . $contents . str_repeat("\0", 511 - (strlen($contents) + 511) % 512); -} - -function dump_triggers($table, $style) { - global $dbh; - if ($_POST["format"] == "sql" && $style && $dbh->server_info >= 5) { - $result = $dbh->query("SHOW TRIGGERS LIKE " . $dbh->quote(addcslashes($table, "%_"))); - if ($result->num_rows) { - $s = "\nDELIMITER ;;\n"; - while ($row = $result->fetch_assoc()) { - $s .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "") - . "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . idf_escape($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n"; - } - dump("$s\nDELIMITER ;\n"); - } - } -} - if ($_POST) { $ext = dump_headers((strlen($TABLE) ? $TABLE : DB), (!strlen(DB) || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); if ($_POST["format"] == "sql") { Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-09-08 20:55:17 UTC (rev 1074) +++ trunk/adminer/include/adminer.inc.php 2009-09-09 11:03:03 UTC (rev 1075) @@ -457,3 +457,5 @@ } } + +$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer); Modified: trunk/adminer/include/bootstrap.inc.php =================================================================== --- trunk/adminer/include/bootstrap.inc.php 2009-09-08 20:55:17 UTC (rev 1074) +++ trunk/adminer/include/bootstrap.inc.php 2009-09-09 11:03:03 UTC (rev 1075) @@ -82,7 +82,6 @@ include "../adminer/include/lang.inc.php"; include "../adminer/lang/$LANG.inc.php"; include "./include/adminer.inc.php"; -$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer); include "../adminer/include/design.inc.php"; include "../adminer/include/pdo.inc.php"; include "../adminer/include/mysql.inc.php"; Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-09-08 20:55:17 UTC (rev 1074) +++ trunk/adminer/include/editing.inc.php 2009-09-09 11:03:03 UTC (rev 1075) @@ -20,7 +20,7 @@ function edit_type($key, $field, $collations, $foreign_keys = array()) { global $structured_types, $unsigned, $inout; ?> -<td><select name="<?php echo $key; ?>[type]" onchange="editing_type_change(this);"><?php echo optionlist($structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); ?></select> +<td><select name="<?php echo $key; ?>[type]" onchange="editing_type_change(this);"><?php echo optionlist($structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); // foreign keys can be wide but style="width: 15ex;" narrows expanded optionlist in IE too ?></select> <td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3"> <td><?php echo "<select name='$key" . "[collation]'" . (ereg('(char|text|enum|set)$', $field["type"]) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>'; @@ -171,3 +171,17 @@ $returns = array("type" => $match[10], "length" => $match[11], "unsigned" => $match[13], "collation" => $match[14]); return array("fields" => $fields, "returns" => $returns, "definition" => $match[15]); } + +function grant($grant, $privileges, $columns, $on) { + if (!$privileges) { + return true; + } + if ($privileges == array("ALL PRIVILEGES", "GRANT OPTION")) { + // can't be granted or revoked together + return ($grant == "GRANT" + ? queries("$grant ALL PRIVILEGES$on WITH GRANT OPTION") + : queries("$grant ALL PRIVILEGES$on") && queries("$grant GRANT OPTION$on") + ); + } + return queries("$grant " . preg_replace('~(GRANT OPTION)\\([^)]*\\)~', '\\1', implode("$columns, ", $privileges) . $columns) . $on); +} Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-09-08 20:55:17 UTC (rev 1074) +++ trunk/adminer/include/export.inc.php 2009-09-09 11:03:03 UTC (rev 1075) @@ -1,4 +1,29 @@ <?php +function tar_file($filename, $contents) { + $return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time())); + $checksum = 8*32; // space for checksum itself + for ($i=0; $i < strlen($return); $i++) { + $checksum += ord($return{$i}); + } + $return .= sprintf("%06o", $checksum) . "\0 "; + return $return . str_repeat("\0", 512 - strlen($return)) . $contents . str_repeat("\0", 511 - (strlen($contents) + 511) % 512); +} + +function dump_triggers($table, $style) { + global $dbh; + if ($_POST["format"] == "sql" && $style && $dbh->server_info >= 5) { + $result = $dbh->query("SHOW TRIGGERS LIKE " . $dbh->quote(addcslashes($table, "%_"))); + if ($result->num_rows) { + $s = "\nDELIMITER ;;\n"; + while ($row = $result->fetch_assoc()) { + $s .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "") + . "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . idf_escape($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n"; + } + dump("$s\nDELIMITER ;\n"); + } + } +} + function dump_table($table, $style, $is_view = false) { global $dbh; if ($_POST["format"] == "csv") { Modified: trunk/adminer/user.inc.php =================================================================== --- trunk/adminer/user.inc.php 2009-09-08 20:55:17 UTC (rev 1074) +++ trunk/adminer/user.inc.php 2009-09-09 11:03:03 UTC (rev 1075) @@ -19,20 +19,6 @@ unset($privileges["Databases"][$key]); } -function grant($grant, $privileges, $columns, $on) { - if (!$privileges) { - return true; - } - if ($privileges == array("ALL PRIVILEGES", "GRANT OPTION")) { - // can't be granted or revoked together - return ($grant == "GRANT" - ? queries("$grant ALL PRIVILEGES$on WITH GRANT OPTION") - : queries("$grant ALL PRIVILEGES$on") && queries("$grant GRANT OPTION$on") - ); - } - return queries("$grant " . preg_replace('~(GRANT OPTION)\\([^)]*\\)~', '\\1', implode("$columns, ", $privileges) . $columns) . $on); -} - $new_grants = array(); if ($_POST) { foreach ($_POST["objects"] as $key => $val) { Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-08 20:55:17 UTC (rev 1074) +++ trunk/changes.txt 2009-09-09 11:03:03 UTC (rev 1075) @@ -5,6 +5,7 @@ Display column comments in table overview Use ON DUPLICATE KEY UPDATE for CSV import Click on row selects it +Print ALTER export instead of executing it Fix Editor date format Fix long SQL query crash (bug #2839231) Traditional Chinese translation Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-08 20:55:17 UTC (rev 1074) +++ trunk/editor/include/adminer.inc.php 2009-09-09 11:03:03 UTC (rev 1075) @@ -355,3 +355,5 @@ } } + +$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-09 19:47:21
|
Revision: 1078 http://adminer.svn.sourceforge.net/adminer/?rev=1078&view=rev Author: jakubvrana Date: 2009-09-09 19:47:15 +0000 (Wed, 09 Sep 2009) Log Message: ----------- Speedup of simple alter table Modified Paths: -------------- trunk/adminer/create.inc.php trunk/adminer/include/editing.inc.php trunk/changes.txt Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2009-09-09 15:54:02 UTC (rev 1077) +++ trunk/adminer/create.inc.php 2009-09-09 19:47:15 UTC (rev 1078) @@ -8,8 +8,11 @@ $foreign_keys[idf_escape($table_name) . "." . idf_escape($field["field"])] = $table_name; } +$orig_fields = array(); +$orig_status = array(); if (strlen($TABLE)) { $orig_fields = fields($TABLE); + $orig_status = table_status($TABLE); } if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) { @@ -28,32 +31,37 @@ } } } - $fields = array(); + $fields = ""; ksort($_POST["fields"]); + $orig_field = reset($orig_fields); $after = "FIRST"; foreach ($_POST["fields"] as $key => $field) { $type_field = (isset($types[$field["type"]]) ? $field : $referencable_primary[$foreign_keys[$field["type"]]]); - if (strlen($field["field"]) && $type_field) { - $fields[] = "\n" . (strlen($TABLE) ? (strlen($field["orig"]) ? "CHANGE " . idf_escape($field["orig"]) . " " : "ADD ") : " ") - . idf_escape($field["field"]) . process_type($type_field) - . ($field["null"] ? " NULL" : " NOT NULL") // NULL for timestamp - . (!$field["has_default"] || $field["auto_increment"] || ereg('text|blob', $field["type"]) ? "" : " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP( on update CURRENT_TIMESTAMP)?$", $field["default"]) ? $field["default"] : $dbh->quote($field["default"]))) - . ($key == $_POST["auto_increment_col"] ? " AUTO_INCREMENT$auto_increment_index" : "") - . " COMMENT " . $dbh->quote($field["comment"]) - . (strlen($TABLE) ? " $after" : "") - ; + if (strlen($field["field"])) { + $process_field = process_field($field, $type_field); + $auto_increment = ($key == $_POST["auto_increment_col"]); + if ($type_field && ($process_field != process_field($orig_field, $orig_field) || $orig_field["auto_increment"] != $auto_increment)) { + $fields .= "\n" . (strlen($TABLE) ? (strlen($field["orig"]) ? "CHANGE " . idf_escape($field["orig"]) : "ADD") : " ") + . " $process_field" + . ($auto_increment ? " AUTO_INCREMENT$auto_increment_index" : "") + . (strlen($TABLE) ? " $after" : "") . "," + ; + if (!isset($types[$field["type"]])) { + $fields .= (strlen($TABLE) ? " ADD" : "") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . idf_escape($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . "),"; + } + } $after = "AFTER " . idf_escape($field["field"]); - if (!isset($types[$field["type"]])) { - $fields[] = (strlen($TABLE) ? " ADD" : "") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . idf_escape($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")"; - } } elseif (strlen($field["orig"])) { - $fields[] = "\nDROP " . idf_escape($field["orig"]); + $fields .= "\nDROP " . idf_escape($field["orig"]) . ","; } + if (strlen($field["orig"])) { + $orig_field = next($orig_fields); + } } - $status = ($_POST["Engine"] ? "ENGINE=" . $dbh->quote($_POST["Engine"]) : "") - . ($_POST["Collation"] ? " COLLATE " . $dbh->quote($_POST["Collation"]) : "") - . (strlen($_POST["Auto_increment"]) ? " AUTO_INCREMENT=" . intval($_POST["Auto_increment"]) : "") - . " COMMENT=" . $dbh->quote($_POST["Comment"]) + $status = "COMMENT=" . $dbh->quote($_POST["Comment"]) + . ($_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? " ENGINE=" . $dbh->quote($_POST["Engine"]) : "") + . ($_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? " COLLATE " . $dbh->quote($_POST["Collation"]) : "") + . (strlen($_POST["auto_increment"]) ? " AUTO_INCREMENT=" . intval($_POST["auto_increment"]) : "") ; if (in_array($_POST["partition_by"], $partition_by)) { $partitions = array(); @@ -72,11 +80,11 @@ } $location = ME . "table=" . urlencode($_POST["name"]); if (strlen($TABLE)) { - query_redirect("ALTER TABLE " . idf_escape($TABLE) . implode(",", $fields) . ",\nRENAME TO " . idf_escape($_POST["name"]) . ",\n$status", $location, lang('Table has been altered.')); + query_redirect("ALTER TABLE " . idf_escape($TABLE) . "$fields\nRENAME TO " . idf_escape($_POST["name"]) . ",\n$status", $location, lang('Table has been altered.')); } else { $path = preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]); setcookie("adminer_engine", $_POST["Engine"], gmmktime(0, 0, 0, gmdate("n") + 1), $path); - query_redirect("CREATE TABLE " . idf_escape($_POST["name"]) . " (" . implode(",", $fields) . "\n) $status", $location, lang('Table has been created.')); + query_redirect("CREATE TABLE " . idf_escape($_POST["name"]) . " (" . substr($fields, 0, -1) . "\n) $status", $location, lang('Table has been created.')); } } @@ -102,7 +110,7 @@ } process_fields($row["fields"]); } elseif (strlen($TABLE)) { - $row = table_status($TABLE); + $row = $orig_status; $row["name"] = $TABLE; $row["fields"] = array(); foreach ($orig_fields as $field) { @@ -144,7 +152,7 @@ <?php $column_comments = edit_fields($row["fields"], $collations, "TABLE", $suhosin, $foreign_keys); ?> </table> <p> -<?php echo lang('Auto Increment'); ?>: <input name="Auto_increment" size="6" value="<?php echo intval($row["Auto_increment"]); ?>"> +<?php echo lang('Auto Increment'); ?>: <input name="auto_increment" size="6" value="<?php echo h($row["auto_increment"]); // don't prefill by original Auto_increment for the sake of performance and not reusing deleted ids ?>"> <?php echo lang('Comment'); ?>: <input name="Comment" value="<?php echo h($row["Comment"]); ?>" maxlength="60"> <script type="text/javascript"> document.write('<label><input type="checkbox" onclick="column_show(this.checked, 5);"><?php echo lang('Default values'); ?><\/label>'); Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-09-09 15:54:02 UTC (rev 1077) +++ trunk/adminer/include/editing.inc.php 2009-09-09 19:47:15 UTC (rev 1078) @@ -43,6 +43,15 @@ ; } +function process_field($field, $type_field) { + global $dbh; + return idf_escape($field["field"]) . process_type($type_field) + . ($field["null"] ? " NULL" : " NOT NULL") // NULL for timestamp + . (!$field["has_default"] || $field["auto_increment"] || ereg('text|blob', $field["type"]) ? "" : " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP( on update CURRENT_TIMESTAMP)?$", $field["default"]) ? $field["default"] : $dbh->quote($field["default"]))) + . " COMMENT " . $dbh->quote($field["comment"]) + ; +} + function type_class($type) { if (ereg('char|text', $type)) { return " class='char'"; Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-09 15:54:02 UTC (rev 1077) +++ trunk/changes.txt 2009-09-09 19:47:15 UTC (rev 1078) @@ -8,6 +8,7 @@ Print ALTER export instead of executing it Fix Editor date format Fix long SQL query crash (bug #2839231) +Speedup of simple alter table Traditional Chinese translation Adminer 2.0.0 (released 2009-08-06): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-09 20:47:48
|
Revision: 1081 http://adminer.svn.sourceforge.net/adminer/?rev=1081&view=rev Author: jakubvrana Date: 2009-09-09 20:47:42 +0000 (Wed, 09 Sep 2009) Log Message: ----------- User interface for e-mail {$name} Modified Paths: -------------- trunk/adminer/include/adminer.inc.php trunk/adminer/select.inc.php trunk/editor/include/adminer.inc.php Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-09-09 20:25:08 UTC (rev 1080) +++ trunk/adminer/include/adminer.inc.php 2009-09-09 20:47:42 UTC (rev 1081) @@ -236,13 +236,15 @@ /** Print extra text in the end of a select form * @param array fields holding e-mails + * @param array selectable columns * @return null */ - function selectEmailPrint($emailFields) { + function selectEmailPrint($emailFields, $columns) { } /** Process columns box in select * @param array selectable columns + * @param array * @return array (array(select_expressions), array(group_expressions)) */ function selectColumnsProcess($columns, $indexes) { Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-09-09 20:25:08 UTC (rev 1080) +++ trunk/adminer/select.inc.php 2009-09-09 20:47:42 UTC (rev 1081) @@ -286,7 +286,7 @@ } echo "<fieldset><legend>" . lang('CSV Import') . "</legend><div><input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'></div></fieldset>\n"; - $adminer->selectEmailPrint(array_filter($email_fields, 'strlen')); + $adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns); echo "</form>\n"; } Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-09 20:25:08 UTC (rev 1080) +++ trunk/editor/include/adminer.inc.php 2009-09-09 20:47:42 UTC (rev 1081) @@ -21,7 +21,7 @@ function loginForm($username) { ?> <table cellspacing="0"> -<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="server" value="" /><input name="username" value="<?php echo h($username); ?>"> +<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="server" value=""><input name="username" value="<?php echo h($username); ?>"> <tr><th><?php echo lang('Password'); ?><td><input type="password" name="password"> </table> <?php @@ -181,14 +181,14 @@ echo "</div></fieldset>\n"; } - function selectEmailPrint($emailFields) { + function selectEmailPrint($emailFields, $columns) { global $confirm; if ($emailFields) { - echo '<fieldset><legend><a href="#fieldset-email" onclick="return !toggle(\'fieldset-email\');">' . lang('E-mail') . "</a></legend><div id='fieldset-email' class='hidden'>\n"; - echo "<p>" . lang('From') . ": <input name='email_from'>\n"; - echo lang('Subject') . ": <input name='email_subject'>\n"; - echo "<p><textarea name='email_message' rows='15' cols='60'></textarea>\n"; - //! add UI for {$name} fields + echo '<fieldset><legend><a href="#fieldset-email" onclick="return !toggle(\'fieldset-email\');">' . lang('E-mail') . "</a></legend><div id='fieldset-email'" . ($_POST["email_append"] ? "" : " class='hidden'") . ">\n"; + echo "<p>" . lang('From') . ": <input name='email_from' value='" . h($_POST["email_from"]) . "'>\n"; + echo lang('Subject') . ": <input name='email_subject' value='" . h($_POST["email_subject"]) . "'>\n"; + echo "<p><textarea name='email_message' rows='15' cols='60'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea><br>\n"; + echo "<select name='email_addition'>" . optionlist($columns, $_POST["email_addition"]) . "</select> <input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript echo "<p>" . (count($emailFields) == 1 ? '<input type="hidden" name="email_field" value="' . h(key($emailFields)) . '">' : '<select name="email_field">' . optionlist($emailFields) . '</select> '); echo "<input type='submit' name='email' value='" . lang('Send') . "'$confirm>\n"; echo "</div></fieldset>\n"; @@ -252,6 +252,9 @@ function selectEmailProcess($where, $foreignKeys) { global $dbh; + if ($_POST["email_append"]) { + return true; + } if ($_POST["email"]) { $sent = 0; if ($_POST["all"] || $_POST["check"]) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-10 19:05:36
|
Revision: 1086 http://adminer.svn.sourceforge.net/adminer/?rev=1086&view=rev Author: jakubvrana Date: 2009-09-10 19:05:27 +0000 (Thu, 10 Sep 2009) Log Message: ----------- Don't set cookie in compile scripts Modified Paths: -------------- trunk/compile.php trunk/lang.php Modified: trunk/compile.php =================================================================== --- trunk/compile.php 2009-09-10 15:37:11 UTC (rev 1085) +++ trunk/compile.php 2009-09-10 19:05:27 UTC (rev 1086) @@ -25,7 +25,7 @@ if (!isset($lang_id)) { $lang_id = count($lang_ids) - 1; } - return ($_COOKIE["adminer_lang"] ? $match[0] : "lang($lang_id$match[2]"); + return ($_SESSION["lang"] ? $match[0] : "lang($lang_id$match[2]"); } function put_file($match) { @@ -34,12 +34,12 @@ return $match[0]; // processed later } $return = file_get_contents(dirname(__FILE__) . "/$project/$match[2]"); - if (basename($match[2]) != "lang.inc.php" || !$_COOKIE["adminer_lang"]) { + if (basename($match[2]) != "lang.inc.php" || !$_SESSION["lang"]) { $tokens = token_get_all($return); // to find out the last token return "?>\n$return" . (in_array($tokens[count($tokens) - 1][0], array(T_CLOSE_TAG, T_INLINE_HTML), true) ? "<?php" : ""); } elseif (preg_match('~\\s*(\\$pos = .*)~', $return, $match2)) { // single language lang() is used for plural - return "function lang(\$translation, \$number) {\n\t" . str_replace('$LANG', "'$_COOKIE[adminer_lang]'", $match2[1]) . "\n\treturn sprintf(\$translation[\$pos], \$number);\n}\n"; + return "function lang(\$translation, \$number) {\n\t" . str_replace('$LANG', "'$_SESSION[lang]'", $match2[1]) . "\n\treturn sprintf(\$translation[\$pos], \$number);\n}\n"; } else { echo "lang() not found\n"; } @@ -47,7 +47,7 @@ function put_file_lang($match) { global $lang_ids, $project; - if ($_COOKIE["adminer_lang"]) { + if ($_SESSION["lang"]) { return ""; } $return = ""; @@ -164,14 +164,15 @@ $project = $_SERVER["argv"][1]; array_shift($_SERVER["argv"]); } -$_COOKIE["adminer_lang"] = $_SERVER["argv"][1]; // Adminer functions read language from cookie -if (isset($_SERVER["argv"][1])) { +unset($_COOKIE["adminer_lang"]); +$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session +if (isset($_SESSION["lang"])) { include dirname(__FILE__) . "/adminer/include/lang.inc.php"; - if (isset($_SERVER["argv"][2]) || !isset($langs[$_COOKIE["adminer_lang"]])) { + if (isset($_SERVER["argv"][2]) || !isset($langs[$_SESSION["lang"]])) { echo "Usage: php compile.php [adminer] [lang]\nPurpose: Compile adminer[-lang].php from adminer/index.php.\n"; exit(1); } - include dirname(__FILE__) . "/adminer/lang/$_COOKIE[adminer_lang].inc.php"; + include dirname(__FILE__) . "/adminer/lang/$_SESSION[lang].inc.php"; } $file = file_get_contents(dirname(__FILE__) . "/$project/index.php"); @@ -180,11 +181,11 @@ $file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); // bootstrap.inc.php $file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file); $file = preg_replace_callback('~\\b(include|require) "([^"]*\\$LANG.inc.php)";~', 'put_file_lang', $file); -if ($_COOKIE["adminer_lang"]) { +if ($_SESSION["lang"]) { // single language version $file = preg_replace_callback("~(<\\?php\\s*echo )?lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])(;\\s*\\?>)?~s", 'remove_lang', $file); $file = str_replace("<?php switch_lang(); ?>\n", "", $file); - $file = str_replace('<?php echo $LANG; ?>', $_COOKIE["adminer_lang"], $file); + $file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file); } $file = str_replace('<script type="text/javascript" src="editing.js"></script>' . "\n", "", $file); $file = preg_replace_callback("~compile_file\\('([^']+)', '([^']+)'\\);~", 'compile_file', $file); // integrate static files @@ -195,6 +196,6 @@ $file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file); $file = php_shrink($file); -$filename = $project . ($_COOKIE["adminer_lang"] ? "-$_COOKIE[adminer_lang]" : "") . ".php"; +$filename = $project . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php"; fwrite(fopen($filename, "w"), $file); // file_put_contents() since PHP 5 echo "$filename created.\n"; Modified: trunk/lang.php =================================================================== --- trunk/lang.php 2009-09-10 15:37:11 UTC (rev 1085) +++ trunk/lang.php 2009-09-10 19:05:27 UTC (rev 1086) @@ -1,9 +1,10 @@ <?php error_reporting(6135); // errors and warnings -if (isset($_SERVER["argv"][1])) { - $_COOKIE["adminer_lang"] = $_SERVER["argv"][1]; // Adminer functions read language from cookie +unset($_COOKIE["adminer_lang"]); +$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session +if (isset($_SESSION["lang"])) { include dirname(__FILE__) . "/adminer/include/lang.inc.php"; - if (isset($_SERVER["argv"][2]) || !isset($langs[$_COOKIE["adminer_lang"]])) { + if (isset($_SERVER["argv"][2]) || !isset($langs[$_SESSION["lang"]])) { echo "Usage: php lang.php [lang]\nPurpose: Update adminer/lang/*.inc.php from source code messages.\n"; exit(1); } @@ -22,7 +23,7 @@ } } -foreach (glob(dirname(__FILE__) . "/adminer/lang/" . ($_COOKIE["adminer_lang"] ? $_COOKIE["adminer_lang"] : "*") . ".inc.php") as $filename) { +foreach (glob(dirname(__FILE__) . "/adminer/lang/" . ($_SESSION["lang"] ? $_SESSION["lang"] : "*") . ".inc.php") as $filename) { $messages = $messages_all; $file = file_get_contents($filename); preg_match_all("~^(\\s*)(?:// )?(('(?:[^\\\\']+|\\\\.)*') => .*[^,\n]),?~m", $file, $matches, PREG_SET_ORDER); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |