[adminer-svn] SF.net SVN: adminer:[1362] branches/sqlite/adminer
Database management in a single PHP file
Brought to you by:
jakubvrana
From: <jak...@us...> - 2010-04-02 15:09:21
|
Revision: 1362 http://adminer.svn.sourceforge.net/adminer/?rev=1362&view=rev Author: jakubvrana Date: 2010-04-02 15:09:15 +0000 (Fri, 02 Apr 2010) Log Message: ----------- Defer table_status to JavaScript (performance) Modified Paths: -------------- branches/sqlite/adminer/db.inc.php branches/sqlite/adminer/index.php branches/sqlite/adminer/static/editing.js Added Paths: ----------- branches/sqlite/adminer/js.inc.php Modified: branches/sqlite/adminer/db.inc.php =================================================================== --- branches/sqlite/adminer/db.inc.php 2010-04-02 13:44:23 UTC (rev 1361) +++ branches/sqlite/adminer/db.inc.php 2010-04-02 15:09:15 UTC (rev 1362) @@ -1,14 +1,13 @@ <?php -$tables_views = array_merge((array) $_POST["tables"], (array) $_POST["views"]); - -if ($tables_views && !$error && !$_POST["search"]) { +if ($_POST["tables"] && !$error && !$_POST["search"]) { $result = true; $message = ""; + $tables = implode(", ", array_map('idf_escape', $_POST["tables"])); if (count($_POST["tables"]) > 1 && ($_POST["drop"] || $_POST["truncate"])) { queries("SET foreign_key_checks = 0"); // allows to truncate or drop several tables at once } if (isset($_POST["truncate"])) { - foreach ((array) $_POST["tables"] as $table) { + foreach ($_POST["tables"] as $table) { if (!queries("TRUNCATE TABLE " . idf_escape($table))) { $result = false; break; @@ -17,21 +16,18 @@ $message = lang('Tables have been truncated.'); } elseif (isset($_POST["move"])) { $rename = array(); - foreach ($tables_views as $table) { + foreach ($_POST["tables"] as $table) { $rename[] = idf_escape($table) . " TO " . idf_escape($_POST["target"]) . "." . idf_escape($table); } $result = queries("RENAME TABLE " . implode(", ", $rename)); //! move triggers $message = lang('Tables have been moved.'); - } elseif ((!isset($_POST["drop"]) || !$_POST["views"] || queries("DROP VIEW " . implode(", ", array_map('idf_escape', $_POST["views"])))) - && (!$_POST["tables"] || ($result = queries((isset($_POST["optimize"]) ? "OPTIMIZE" : (isset($_POST["check"]) ? "CHECK" : (isset($_POST["repair"]) ? "REPAIR" : (isset($_POST["drop"]) ? "DROP" : "ANALYZE")))) . " TABLE " . implode(", ", array_map('idf_escape', $_POST["tables"]))))) - ) { - if (isset($_POST["drop"])) { - $message = lang('Tables have been dropped.'); - } else { - while ($row = $result->fetch_assoc()) { - $message .= h("$row[Table]: $row[Msg_text]") . "<br>"; - } + } elseif (isset($_POST["drop"])) { + $result = queries("DROP VIEW IF EXISTS $tables") && queries("DROP TABLE IF EXISTS $tables"); + $message = lang('Tables have been dropped.'); + } elseif ($result = queries((isset($_POST["optimize"]) ? "OPTIMIZE" : (isset($_POST["check"]) ? "CHECK" : (isset($_POST["repair"]) ? "REPAIR" : "ANALYZE"))) . " TABLE $tables")) { + while ($row = $result->fetch_assoc()) { + $message .= h("$row[Table]: $row[Msg_text]") . "<br>"; } } queries_redirect(substr(ME, 0, -1), $message, $result); @@ -42,8 +38,8 @@ echo '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n"; echo "<h3>" . lang('Tables and views') . "</h3>\n"; -$table_status = table_status(); -if (!$table_status) { +$tables_list = tables_list(); +if (!$tables_list) { echo "<p class='message'>" . lang('No tables.') . "\n"; } else { echo "<form action='' method='post'>\n"; @@ -54,36 +50,28 @@ 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"; + echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^tables\[/);"><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"; $sums = array(); - foreach ($table_status as $row) { - $name = $row["Name"]; - echo '<tr' . odd() . '><td>' . checkbox((isset($row["Rows"]) ? "tables[]" : "views[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');"); + foreach ($tables_list as $name) { + echo '<tr' . odd() . '><td>' . checkbox("tables[]", $name, in_array($name, (array) $_POST["tables"], true), "", "formUncheck('check-all');"); echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '">' . h($name) . '</a>'; - //! driver specific columns and operations - if (isset($row["Rows"])) { - echo "<td>$row[Engine]<td>$row[Collation]"; - foreach (array("Data_length" => "create", "Index_length" => "indexes", "Data_free" => "edit", "Auto_increment" => "auto_increment=1&create", "Rows" => "select") as $key => $link) { - $val = number_format($row[$key], 0, '.', lang(',')); - echo '<td align="right">' . ($row[$key] != "" ? '<a href="' . h(ME . "$link=") . urlencode($name) . '">' . str_replace(" ", " ", ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? lang('~ %s', $val) : $val)) . '</a>' : ' '); - $sums[$link] += ($row["Engine"] != "InnoDB" || $link != "edit" ? $row[$key] : 0); - } - echo (support("comment") ? "<td>" . nbsp($row["Comment"]) : ""); - } else { - 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>'; - echo (support("comment") ? '<td> ' : ''); + 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 "<tr><td> <th>" . lang('%d in total', count($table_status)); + 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 (array("create", "indexes", "edit") as $val) { - echo "<td align='right'>" . number_format($sums[$val], 0, '.', lang(',')); + foreach (array("Data_length", "Index_length", "Data_free") as $key) { + echo "<td align='right' id='sum-$key'> "; } echo "</table>\n"; if (!information_schema(DB)) { - 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') . "' 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"; + //! driver specific operations + $onclick = " onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables/) + ')');\""; + 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') . "'$onclick> <input type='submit' name='drop' value='" . lang('Drop') . "'$onclick>\n"; $dbs = get_databases(); if (count($dbs) != 1) { $db = (isset($_POST["target"]) ? $_POST["target"] : DB); @@ -129,3 +117,5 @@ } echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n"; } + +echo "<script type='text/javascript'>loadScript('" . ME . "js=status');</script>\n"; // not h(ME) Modified: branches/sqlite/adminer/index.php =================================================================== --- branches/sqlite/adminer/index.php 2010-04-02 13:44:23 UTC (rev 1361) +++ branches/sqlite/adminer/index.php 2010-04-02 15:09:15 UTC (rev 1362) @@ -22,6 +22,8 @@ } if (isset($_GET["download"])) { include "./download.inc.php"; +} elseif (isset($_GET["js"])) { + include "./js.inc.php"; } elseif (isset($_GET["table"])) { include "./table.inc.php"; } elseif (isset($_GET["schema"])) { Added: branches/sqlite/adminer/js.inc.php =================================================================== --- branches/sqlite/adminer/js.inc.php (rev 0) +++ branches/sqlite/adminer/js.inc.php 2010-04-02 15:09:15 UTC (rev 1362) @@ -0,0 +1,24 @@ +<?php +header("Content-Type: text/javascript"); +$table_status = table_status(); +foreach ($table_status as $row) { + $id = addcslashes($row["Name"], "\\'"); + if (isset($row["Rows"])) { + foreach (array("Engine", "Collation", "Comment") as $key) { + echo "document.getElementById('$key-$id').innerHTML = '" . nbsp($row[$key]) . "';\n"; + } + } + foreach (array("Data_length", "Index_length", "Data_free", "Auto_increment", "Rows") as $key) { + if ($row[$key] != "") { + $val = number_format($row[$key], 0, '.', lang(',')); + echo "document.getElementById('$key-$id').innerHTML = '" . ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? lang('~ %s', $val) : $val) . "';\n"; + $sums[$key] += ($row["Engine"] != "InnoDB" || $key != "Data_free" ? $row[$key] : 0); + } elseif (isset($row["Rows"]) || $key != "Rows") { + echo "document.getElementById('$key-$id').parentNode.innerHTML = '" . (isset($row["Rows"]) || $key != "Data_length" ? " " : '<a href="' . h(ME) . "view=" . urlencode($row["Name"]) . '">' . lang('View') . '</a>') . "';\n"; + } + } +} +foreach (array("Data_length", "Index_length", "Data_free") as $key) { + echo "document.getElementById('sum-$key').innerHTML = '" . number_format($sums[$key], 0, '.', lang(',')) . "';\n"; +} +exit; // don't call page_footer Modified: branches/sqlite/adminer/static/editing.js =================================================================== --- branches/sqlite/adminer/static/editing.js 2010-04-02 13:44:23 UTC (rev 1361) +++ branches/sqlite/adminer/static/editing.js 2010-04-02 15:09:15 UTC (rev 1362) @@ -26,8 +26,17 @@ document.body.appendChild(script); } +/** Load external JavaScript +* @param string +*/ +function loadScript(src) { + var script = document.createElement('script'); + script.src = src; + document.body.appendChild(script); +} + /** Get value of select * @param HTMLSelectElement * @return string This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |