Thread: [adminer-svn] SF.net SVN: adminer:[1266] trunk/adminer (Page 3)
Database management in a single PHP file
Brought to you by:
jakubvrana
From: <jak...@us...> - 2009-12-14 13:18:03
|
Revision: 1266 http://adminer.svn.sourceforge.net/adminer/?rev=1266&view=rev Author: jakubvrana Date: 2009-12-14 13:17:54 +0000 (Mon, 14 Dec 2009) Log Message: ----------- EXPLAIN for UNIONs Modified Paths: -------------- trunk/adminer/lang/zh-tw.inc.php trunk/adminer/sql.inc.php Modified: trunk/adminer/lang/zh-tw.inc.php =================================================================== --- trunk/adminer/lang/zh-tw.inc.php 2009-12-14 11:37:59 UTC (rev 1265) +++ trunk/adminer/lang/zh-tw.inc.php 2009-12-14 13:17:54 UTC (rev 1266) @@ -225,4 +225,5 @@ '%d e-mail(s) have been sent.' => '已發送 %d 封郵件。', 'Webserver file %s' => '網頁伺服器檔案 %s', 'File does not exist.' => '檔案不存在', + 'Item has been deleted.' => '該項目已被刪除', ); Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-12-14 11:37:59 UTC (rev 1265) +++ trunk/adminer/sql.inc.php 2009-12-14 13:17:54 UTC (rev 1266) @@ -74,12 +74,12 @@ $result = $connection->store_result(); if (is_object($result)) { select($result, $connection2); - if ($connection2 && preg_match("~^$space*SELECT$space+~isU", $q)) { + if ($connection2 && preg_match("~^($space|\\()*SELECT\\b~isU", $q)) { $id = "explain-$explain"; echo "<p>" . ($result->num_rows ? lang('%d row(s)', $result->num_rows) . ", " : ""); echo "<a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>\n"; echo "<div id='$id' class='hidden'>\n"; - select($connection2->query("EXPLAIN $q"), $connection2); + select($connection2->query("EXPLAIN $q")); echo "</div>\n"; $explain++; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-12-17 14:53:33
|
Revision: 1275 http://adminer.svn.sourceforge.net/adminer/?rev=1275&view=rev Author: jakubvrana Date: 2009-12-17 14:53:26 +0000 (Thu, 17 Dec 2009) Log Message: ----------- JavaScript comments Modified Paths: -------------- trunk/adminer/schema.inc.php trunk/adminer/static/editing.js trunk/adminer/static/functions.js Modified: trunk/adminer/schema.inc.php =================================================================== --- trunk/adminer/schema.inc.php 2009-12-17 13:30:23 UTC (rev 1274) +++ trunk/adminer/schema.inc.php 2009-12-17 14:53:26 UTC (rev 1275) @@ -52,7 +52,7 @@ ?> <div id="schema" style="height: <?php echo $top; ?>em;"> <script type="text/javascript"> -table_pos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>}; +tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>}; em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>; document.onmousemove = schemaMousemove; document.onmouseup = schemaMouseup; Modified: trunk/adminer/static/editing.js =================================================================== --- trunk/adminer/static/editing.js 2009-12-17 13:30:23 UTC (rev 1274) +++ trunk/adminer/static/editing.js 2009-12-17 14:53:26 UTC (rev 1275) @@ -1,5 +1,8 @@ // Adminer specific functions +/** Load syntax highlighting +* @param string first three characters of MySQL version +*/ function bodyLoad(version) { var jushRoot = '../externals/jush/'; var script = document.createElement('script'); @@ -24,10 +27,19 @@ +/** Get value of select +* @param HTMLSelectElement +* @return string +*/ function selectValue(select) { return select.value || select.options[select.selectedIndex].text; } +/** Get value of dynamically created form field +* @param HTMLFormElement +* @param string +* @return HTMLElement +*/ function formField(form, name) { for (var i=0; i < form.length; i++) { if (form[i].name == name) { @@ -36,6 +48,10 @@ } } +/** Try to change input type to password or to text +* @param HTMLInputElement +* @param boolean +*/ function typePassword(el, disable) { try { el.type = (disable ? 'text' : 'password'); @@ -47,14 +63,25 @@ var added = '.', rowCount; +/** Escape string to use in regular expression +* @param string +* @return string +*/ function reEscape(s) { return s.replace(/[\[\]\\^$*+?.(){|}]/, '\\$&'); } +/** Escape string to use as identifier +* @param string +* @return string +*/ function idfEscape(s) { return '`' + s.replace(/`/, '``') + '`'; } +/** Detect foreign key +* @param HTMLInputElement +*/ function editingNameChange(field) { var name = field.name.substr(0, field.name.length - 7); var type = formField(field.form, name + '[type]'); @@ -94,6 +121,12 @@ } } +/** Add table row for next field +* @param HTMLInputElement +* @param boolean +* @param boolean +* @return boolean +*/ function editingAddRow(button, allowed, focus) { if (allowed && rowCount >= allowed) { return false; @@ -139,6 +172,10 @@ return true; } +/** Remove table row for field +* @param HTMLInputElement +* @return boolean +*/ function editingRemoveRow(button) { var field = formField(button.form, button.name.replace(/drop_col(.+)/, 'fields$1[field]')); field.parentNode.removeChild(field); @@ -147,6 +184,10 @@ } var lastType = ''; + +/** Clear length and hide collation or unsigned +* @param HTMLSelectElement +*/ function editingTypeChange(type) { var name = type.name.substr(0, type.name.length - 6); var text = selectValue(type); @@ -167,6 +208,9 @@ } } +/** Edit enum or set +* @param HTMLInputElement +*/ function editingLengthFocus(field) { var td = field.parentNode; if (/(enum|set)$/.test(selectValue(td.previousSibling.firstChild))) { @@ -180,6 +224,9 @@ } } +/** Finish editing of enum or set +* @param HTMLTextAreaElement +*/ function editingLengthBlur(edit) { var field = edit.parentNode.firstChild; var val = edit.value; @@ -188,6 +235,10 @@ edit.style.display = 'none'; } +/** Show or hide selected table column +* @param boolean +* @param number +*/ function columnShow(checked, column) { var trs = document.getElementById('edit-fields').getElementsByTagName('tr'); for (var i=0; i < trs.length; i++) { @@ -195,12 +246,18 @@ } } +/** Display partition options +* @param HTMLSelectElement +*/ function partitionByChange(el) { var partitionTable = /RANGE|LIST/.test(selectValue(el)); el.form['partitions'].className = (partitionTable || !el.selectedIndex ? 'hidden' : ''); document.getElementById('partition-table').className = (partitionTable ? '' : 'hidden'); } +/** Add next partition row +* @param HTMLInputElement +*/ function partitionNameChange(el) { var row = el.parentNode.parentNode.cloneNode(true); row.firstChild.firstChild.value = ''; @@ -210,6 +267,9 @@ +/** Add row for foreign key +* @param HTMLSelectElement +*/ function foreignAddRow(field) { var row = field.parentNode.parentNode.cloneNode(true); var selects = row.getElementsByTagName('select'); @@ -223,6 +283,9 @@ +/** Add row for indexes +* @param HTMLSelectElement +*/ function indexesAddRow(field) { var row = field.parentNode.parentNode.cloneNode(true); var spans = row.getElementsByTagName('span'); @@ -241,6 +304,9 @@ field.onchange = function () { }; } +/** Add column for index +* @param HTMLSelectElement +*/ function indexesAddColumn(field) { var column = field.parentNode.cloneNode(true); var select = column.getElementsByTagName('select')[0]; @@ -257,12 +323,19 @@ var that, x, y, em, tablePos; +/** Get mouse position +* @param HTMLElement +* @param MouseEvent +*/ function schemaMousedown(el, event) { that = el; x = event.clientX - el.offsetLeft; y = event.clientY - el.offsetTop; } +/** Move object +* @param MouseEvent +*/ function schemaMousemove(ev) { if (that !== undefined) { ev = ev || event; @@ -306,6 +379,9 @@ } } +/** Finish move +* @param MouseEvent +*/ function schemaMouseup(ev) { if (that !== undefined) { ev = ev || event; Modified: trunk/adminer/static/functions.js =================================================================== --- trunk/adminer/static/functions.js 2009-12-17 13:30:23 UTC (rev 1274) +++ trunk/adminer/static/functions.js 2009-12-17 14:53:26 UTC (rev 1275) @@ -1,11 +1,18 @@ +// to hide elements displayed by JavaScript document.body.className = 'js'; +/** Toggle visibility +* @param string +* @return boolean +*/ function toggle(id) { var el = document.getElementById(id); el.className = (el.className == 'hidden' ? '' : 'hidden'); return true; } +/** Verify current Adminer version +*/ function verifyVersion() { document.cookie = 'adminer_version=0'; var script = document.createElement('script'); @@ -13,6 +20,10 @@ document.body.appendChild(script); } +/** Check all elements matching given name +* @param HTMLInputElement +* @param RegExp +*/ function formCheck(el, name) { var elems = el.form.elements; for (var i=0; i < elems.length; i++) { @@ -22,10 +33,18 @@ } } +/** Uncheck single element +* @param string +*/ function formUncheck(id) { document.getElementById(id).checked = false; } +/** Get number of checked elements matching given name +* @param HTMLInputElement +* @param RegExp +* @return number +*/ function formChecked(el, name) { var checked = 0; var elems = el.form.elements; @@ -37,6 +56,9 @@ return checked; } +/** Select clicked row +* @param MouseEvent +*/ function tableClick(event) { var el = event.target || event.srcElement; while (!/^tr$/i.test(el.tagName)) { @@ -52,6 +74,9 @@ +/** Add row in select fieldset +* @param HTMLSelectElement +*/ function selectAddRow(field) { var row = field.parentNode.cloneNode(true); var selects = row.getElementsByTagName('select'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-01-08 10:07:20
|
Revision: 1285 http://adminer.svn.sourceforge.net/adminer/?rev=1285&view=rev Author: jakubvrana Date: 2010-01-08 10:07:08 +0000 (Fri, 08 Jan 2010) Log Message: ----------- Show status Modified Paths: -------------- trunk/adminer/include/connect.inc.php trunk/adminer/static/editing.js trunk/adminer/variables.inc.php Modified: trunk/adminer/include/connect.inc.php =================================================================== --- trunk/adminer/include/connect.inc.php 2009-12-29 11:27:33 UTC (rev 1284) +++ trunk/adminer/include/connect.inc.php 2010-01-08 10:07:08 UTC (rev 1285) @@ -21,6 +21,7 @@ 'privileges' => lang('Privileges'), 'processlist' => lang('Process list'), 'variables' => lang('Variables'), + 'status' => lang('Status'), ) as $key => $val) { echo "<a href='" . h(ME) . "$key='>$val</a>\n"; } @@ -47,6 +48,9 @@ page_footer("db"); } +if (isset($_GET["status"])) { + $_GET["variables"] = $_GET["status"]; +} if (!(strlen(DB) ? $connection->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"]]); Modified: trunk/adminer/static/editing.js =================================================================== --- trunk/adminer/static/editing.js 2009-12-29 11:27:33 UTC (rev 1284) +++ trunk/adminer/static/editing.js 2010-01-08 10:07:08 UTC (rev 1285) @@ -11,7 +11,8 @@ if (window.jush) { // IE runs in case of an error too jush.create_links = ' target="_blank"'; jush.urls.sql[0] = 'http://dev.mysql.com/doc/refman/' + version + '/en/$key'; - jush.urls.sql[0] = jush.urls.sql[0]; + jush.urls.sqlset[0] = jush.urls.sql[0]; + jush.urls.sqlstatus[0] = jush.urls.sql[0]; jush.style(jushRoot + 'jush.css'); jush.highlight_tag('pre', 0); jush.highlight_tag('code'); Modified: trunk/adminer/variables.inc.php =================================================================== --- trunk/adminer/variables.inc.php 2009-12-29 11:27:33 UTC (rev 1284) +++ trunk/adminer/variables.inc.php 2010-01-08 10:07:08 UTC (rev 1285) @@ -1,11 +1,12 @@ <?php -page_header(lang('Variables')); +$status = isset($_GET["status"]); +page_header($status ? lang('Status') : lang('Variables')); +$result = $connection->query($status ? "SHOW STATUS" : "SHOW VARIABLES"); echo "<table cellspacing='0'>\n"; -$result = $connection->query("SHOW VARIABLES"); while ($row = $result->fetch_assoc()) { echo "<tr>"; - echo "<th><code class='jush-sqlset'>" . h($row["Variable_name"]) . "</code>"; + echo "<th><code class='jush-" . ($status ? "sqlstatus" : "sqlset") . "'>" . h($row["Variable_name"]) . "</code>"; echo "<td>" . nbsp($row["Value"]); } echo "</table>\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-01-28 15:17:26
|
Revision: 1300 http://adminer.svn.sourceforge.net/adminer/?rev=1300&view=rev Author: jakubvrana Date: 2010-01-28 15:17:20 +0000 (Thu, 28 Jan 2010) Log Message: ----------- Centralize nowrap Modified Paths: -------------- trunk/adminer/create.inc.php trunk/adminer/include/editing.inc.php trunk/adminer/procedure.inc.php trunk/adminer/static/editing.js Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2010-01-28 14:29:10 UTC (rev 1299) +++ trunk/adminer/create.inc.php 2010-01-28 15:17:20 UTC (rev 1300) @@ -158,7 +158,7 @@ <?php echo html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]); ?> <input type="submit" value="<?php echo lang('Save'); ?>"> </p> -<table cellspacing="0" id="edit-fields"> +<table cellspacing="0" id="edit-fields" class="nowrap"> <?php $column_comments = edit_fields($row["fields"], $collations, "TABLE", $suhosin, $foreign_keys); ?> </table> <p> Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2010-01-28 14:29:10 UTC (rev 1299) +++ trunk/adminer/include/editing.inc.php 2010-01-28 15:17:20 UTC (rev 1300) @@ -188,7 +188,7 @@ } } ?> -<thead><tr> +<thead><tr class="wrap"> <?php if ($type == "PROCEDURE") { ?><td> <?php } ?> <th><?php echo ($type == "TABLE" ? lang('Column name') : lang('Parameter name')); ?> <td><?php echo lang('Type'); ?><textarea id="enum-edit" rows="4" cols="10" style="display: none;" onblur="editingLengthBlur(this);"></textarea> @@ -218,11 +218,11 @@ <?php if ($type == "TABLE") { ?> <td><?php echo checkbox("fields[$i][null]", 1, $field["null"]); ?> <td><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?>> -<td class="nowrap hidden"><?php echo checkbox("fields[$i][has_default]", 1, $field["has_default"]); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" onchange="this.previousSibling.checked = true;"> +<td class="hidden"><?php echo checkbox("fields[$i][has_default]", 1, $field["has_default"]); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" onchange="this.previousSibling.checked = true;"> <td<?php echo ($column_comments ? "" : " class='hidden'"); ?>><input name="fields[<?php echo $i; ?>][comment]" value="<?php echo h($field["comment"]); ?>" maxlength="255"> <?php } ?> <?php - echo "<td class='nowrap'><input type='image' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, $allowed, 1);'>"; + 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') . "'>"; Modified: trunk/adminer/procedure.inc.php =================================================================== --- trunk/adminer/procedure.inc.php 2010-01-28 14:29:10 UTC (rev 1299) +++ trunk/adminer/procedure.inc.php 2010-01-28 15:17:20 UTC (rev 1300) @@ -39,9 +39,14 @@ ?> <form action="" method="post" id="form"> -<table cellspacing="0"> -<?php edit_fields($row["fields"], $collations, $routine); ?> -<?php if (isset($_GET["function"])) { ?><tr><td><?php echo lang('Return type'); edit_type("returns", $row["returns"], $collations); ?><?php } ?> +<table cellspacing="0" class="nowrap"> +<?php +edit_fields($row["fields"], $collations, $routine); +if (isset($_GET["function"])) { + echo "<tr><td>" . lang('Return type'); + edit_type("returns", $row["returns"], $collations); +} +?> </table> <p><textarea name="definition" rows="10" cols="80" style="width: 98%;"><?php echo h($row["definition"]); ?></textarea> <p> Modified: trunk/adminer/static/editing.js =================================================================== --- trunk/adminer/static/editing.js 2010-01-28 14:29:10 UTC (rev 1299) +++ trunk/adminer/static/editing.js 2010-01-28 15:17:20 UTC (rev 1300) @@ -243,7 +243,7 @@ function columnShow(checked, column) { var trs = document.getElementById('edit-fields').getElementsByTagName('tr'); for (var i=0; i < trs.length; i++) { - trs[i].getElementsByTagName('td')[column].className = (checked ? 'nowrap' : 'hidden'); + trs[i].getElementsByTagName('td')[column].className = (checked ? '' : 'hidden'); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-02-09 12:11:41
|
Revision: 1304 http://adminer.svn.sourceforge.net/adminer/?rev=1304&view=rev Author: jakubvrana Date: 2010-02-09 12:11:35 +0000 (Tue, 09 Feb 2010) Log Message: ----------- Schema in Chrome (bug #2947938) Modified Paths: -------------- trunk/adminer/schema.inc.php trunk/adminer/static/editing.js Modified: trunk/adminer/schema.inc.php =================================================================== --- trunk/adminer/schema.inc.php 2010-02-09 09:16:15 UTC (rev 1303) +++ trunk/adminer/schema.inc.php 2010-02-09 12:11:35 UTC (rev 1304) @@ -31,8 +31,8 @@ foreach (foreign_keys($row["Name"]) as $val) { if (!$val["db"]) { $left = $base_left; - if ($table_pos[$row["Name"]][1] || $table_pos[$row["Name"]][1]) { - $left = min($table_pos[$row["Name"]][1], $table_pos[$val["table"]][1]) - 1; + if ($table_pos[$row["Name"]][1] || $table_pos[$val["table"]][1]) { + $left = min(floatval($table_pos[$row["Name"]][1]), floatval($table_pos[$val["table"]][1])) - 1; } else { $base_left -= .1; } Modified: trunk/adminer/static/editing.js =================================================================== --- trunk/adminer/static/editing.js 2010-02-09 09:16:15 UTC (rev 1303) +++ trunk/adminer/static/editing.js 2010-02-09 12:11:35 UTC (rev 1304) @@ -394,6 +394,6 @@ for (var key in tablePos) { s += '_' + key + ':' + Math.round(tablePos[key][0] * 10000) / 10000 + 'x' + Math.round(tablePos[key][1] * 10000) / 10000; } - document.cookie = 'adminer_schema=' + encodeURIComponent(s.substr(1)) + '; expires=' + date + '; path=' + location.pathname + location.search; + document.cookie = 'adminer_schema=' + encodeURIComponent(s.substr(1)) + '; expires=' + date + '; path="' + location.pathname + location.search + '"'; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-02-26 14:59:19
|
Revision: 1333 http://adminer.svn.sourceforge.net/adminer/?rev=1333&view=rev Author: jakubvrana Date: 2010-02-26 14:58:58 +0000 (Fri, 26 Feb 2010) Log Message: ----------- Update translations Modified Paths: -------------- trunk/adminer/database.inc.php trunk/adminer/lang/fr.inc.php trunk/adminer/lang/it.inc.php trunk/adminer/lang/zh.inc.php Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2010-02-26 14:01:17 UTC (rev 1332) +++ trunk/adminer/database.inc.php 2010-02-26 14:58:58 UTC (rev 1333) @@ -68,7 +68,7 @@ ) . "\n"; ?> <?php echo html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $collate); ?> <input type="hidden" name="token" value="<?php echo $token; ?>"> - <input type="submit" value="<?php echo lang('Save'); ?>"> +<input type="submit" value="<?php echo lang('Save'); ?>"> <?php if (!$_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/lang/fr.inc.php =================================================================== --- trunk/adminer/lang/fr.inc.php 2010-02-26 14:01:17 UTC (rev 1332) +++ trunk/adminer/lang/fr.inc.php 2010-02-26 14:58:58 UTC (rev 1333) @@ -226,4 +226,6 @@ '%d e-mail(s) have been sent.' => array('%d message a été envoyé.', '%d messages ont été envoyés.'), 'Webserver file %s' => '%s fichier du serveur Web', 'File does not exist.' => 'Le fichier est introuvable.', + '%d in total' => '%d au total', + 'Permanent login' => 'Authentification permanente', ); Modified: trunk/adminer/lang/it.inc.php =================================================================== --- trunk/adminer/lang/it.inc.php 2010-02-26 14:01:17 UTC (rev 1332) +++ trunk/adminer/lang/it.inc.php 2010-02-26 14:58:58 UTC (rev 1333) @@ -226,4 +226,6 @@ '%d e-mail(s) have been sent.' => array('%d e-mail inviata.','%d e-mail inviate.'), 'Webserver file %s' => 'Webserver file %s', 'File does not exist.' => 'Il file non esiste.', + '%d in total' => '%d in totale', + 'Permanent login' => 'Login permanente', ); Modified: trunk/adminer/lang/zh.inc.php =================================================================== --- trunk/adminer/lang/zh.inc.php 2010-02-26 14:01:17 UTC (rev 1332) +++ trunk/adminer/lang/zh.inc.php 2010-02-26 14:58:58 UTC (rev 1333) @@ -30,7 +30,7 @@ 'Alter database' => '更改数据库', 'Create database' => '创建数据库', 'SQL command' => 'SQL命令', - 'Dump' => '导入/导出', + 'Dump' => '导出', 'Logout' => '注销', 'database' => '数据库', 'Use' => '使用', @@ -226,4 +226,6 @@ '%d e-mail(s) have been sent.' => '%d 封邮件已发送。', 'Webserver file %s' => 'Web服务器文件 %s', 'File does not exist.' => '文件不存在', + '%d in total' => '共计 %d', + 'Permanent login' => '保持登录', ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-03-02 16:34:18
|
Revision: 1337 http://adminer.svn.sourceforge.net/adminer/?rev=1337&view=rev Author: jakubvrana Date: 2010-03-02 16:33:28 +0000 (Tue, 02 Mar 2010) Log Message: ----------- IE8 spaces Modified Paths: -------------- trunk/adminer/create.inc.php trunk/adminer/dump.inc.php trunk/adminer/foreign.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/editing.inc.php trunk/adminer/static/default.css Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2010-03-01 22:59:08 UTC (rev 1336) +++ trunk/adminer/create.inc.php 2010-03-02 16:33:28 UTC (rev 1337) @@ -164,7 +164,6 @@ <?php echo ($engines ? html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) : ""); ?> <?php echo html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]); ?> <input type="submit" value="<?php echo lang('Save'); ?>"> -</p> <table cellspacing="0" id="edit-fields" class="nowrap"> <?php $column_comments = edit_fields($row["fields"], $collations, "TABLE", $suhosin, $foreign_keys); ?> </table> Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2010-03-01 22:59:08 UTC (rev 1336) +++ trunk/adminer/dump.inc.php 2010-03-02 16:33:28 UTC (rev 1337) @@ -161,7 +161,7 @@ echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, 'INSERT'); ?> </table> -<p><input type="submit" value="<?php echo lang('Export'); ?>"></p> +<p><input type="submit" value="<?php echo lang('Export'); ?>"> <table cellspacing="0"> <?php Modified: trunk/adminer/foreign.inc.php =================================================================== --- trunk/adminer/foreign.inc.php 2010-03-01 22:59:08 UTC (rev 1336) +++ trunk/adminer/foreign.inc.php 2010-03-02 16:33:28 UTC (rev 1337) @@ -47,7 +47,6 @@ <?php echo lang('Target table'); ?>: <?php echo html_select("table", array_keys(table_status_referencable()), $row["table"], "this.form['change-js'].value = '1'; this.form.submit();"); ?> <input type="hidden" name="change-js" value=""> -</p> <noscript><p><input type="submit" name="change" value="<?php echo lang('Change'); ?>"></noscript> <table cellspacing="0"> <thead><tr><th><?php echo lang('Source'); ?><th><?php echo lang('Target'); ?></thead> Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2010-03-01 22:59:08 UTC (rev 1336) +++ trunk/adminer/include/adminer.inc.php 2010-03-02 16:33:28 UTC (rev 1337) @@ -126,7 +126,7 @@ * @return string */ function selectQuery($query) { - return "<p><code class='jush-sql'>" . h($query) . "</code> <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a></p>\n"; + return "<p><code class='jush-sql'>" . h($query) . "</code> <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>\n"; } /** Description of a row in a table Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2010-03-01 22:59:08 UTC (rev 1336) +++ trunk/adminer/include/editing.inc.php 2010-03-02 16:33:28 UTC (rev 1337) @@ -111,7 +111,7 @@ <td><select name="<?php echo $key; ?>[type]" class="type" onfocus="lastType = selectValue(this);" onchange="editingTypeChange(this);"><?php echo optionlist($structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); ?></select> <td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3" onfocus="editingLengthFocus(this);"><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>'; - echo ($unsigned ? "<select name='$key" . "[unsigned]'" . (!$field["type"] || ereg('(int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : ''); + echo ($unsigned ? "<select name='$key" . "[unsigned]'" . (!$field["type"] || ereg('(int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select> ' : ' '); // space for IE } /** Filter length value including enums Modified: trunk/adminer/static/default.css =================================================================== --- trunk/adminer/static/default.css 2010-03-01 22:59:08 UTC (rev 1336) +++ trunk/adminer/static/default.css 2010-03-02 16:33:28 UTC (rev 1337) @@ -6,7 +6,7 @@ h2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom: 1px solid #000; color: #000; font-weight: normal; background: #ddf; } h3 { font-weight: normal; font-size: 130%; margin: .8em 0; } form { margin: 0; } -table { margin: 0 20px .8em 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; } +table { margin: 1em 20px .8em 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; } td, th { margin-bottom: 1em; border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; } th { background: #eee; text-align: left; } thead th { text-align: center; } 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:14:02
|
Revision: 1358 http://adminer.svn.sourceforge.net/adminer/?rev=1358&view=rev Author: jakubvrana Date: 2010-04-02 12:13:56 +0000 (Fri, 02 Apr 2010) Log Message: ----------- Link COUNT(*) result to listing Modified Paths: -------------- trunk/adminer/include/functions.inc.php trunk/adminer/select.inc.php Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2010-04-01 19:45:43 UTC (rev 1357) +++ trunk/adminer/include/functions.inc.php 2010-04-02 12:13:56 UTC (rev 1358) @@ -135,9 +135,9 @@ /** Find unique identifier of a row * @param array * @param array result of indexes() -* @return string query string +* @return array */ -function unique_idf($row, $indexes) { +function unique_array($row, $indexes) { foreach ($indexes as $index) { if (ereg("PRIMARY|UNIQUE", $index["type"])) { $return = array(); @@ -145,7 +145,7 @@ if (!isset($row[$key])) { // NULL is ambiguous continue 2; } - $return[] = urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($row[$key]); + $return[$key] = $row[$key]; } return $return; } @@ -153,7 +153,7 @@ $return = array(); foreach ($row as $key => $val) { if (!preg_match('~^(COUNT\\((\\*|(DISTINCT )?`(?:[^`]|``)+`)\\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\\(`(?:[^`]|``)+`\\))$~', $key)) { //! columns looking like functions - $return[] = (isset($val) ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key)); + $return[$key] = $val; } } return $return; Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2010-04-01 19:45:43 UTC (rev 1357) +++ trunk/adminer/select.inc.php 2010-04-02 12:13:56 UTC (rev 1358) @@ -205,8 +205,12 @@ } echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n"; foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) { - $unique_idf = implode('&', unique_idf($rows[$n], $indexes)); - echo "<tr" . odd() . "><td>" . checkbox("check[]", $unique_idf, in_array($unique_idf, (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>"); + $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)); + } + 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])) { $field = $fields[$key]; @@ -219,7 +223,7 @@ $val = "<i>NULL</i>"; } else { if (ereg('blob|binary', $field["type"]) && $val != "") { - $link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . "&$unique_idf"); + $link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf); } if ($val == "") { $val = " "; @@ -240,6 +244,14 @@ } } } + if ($key == "COUNT(*)") { //! columns looking like functions + $link = h(ME . "select=" . urlencode($TABLE)); + $i = 0; + foreach ($unique_array as $k => $v) { + $link .= h("&where[$i][col]=" . urlencode($k) . "&where[$i][op]=" . (isset($v) ? "%3D&where[$i][val]=" . urlencode($v) : "IS+NULL")); + $i++; + } + } } if (!$link && is_email($val)) { $link = "mailto:$val"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-15 14:43:50
|
Revision: 1442 http://adminer.svn.sourceforge.net/adminer/?rev=1442&view=rev Author: jakubvrana Date: 2010-04-15 14:43:44 +0000 (Thu, 15 Apr 2010) Log Message: ----------- Utilize where_link function Modified Paths: -------------- trunk/adminer/include/functions.inc.php trunk/adminer/select.inc.php Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2010-04-15 12:42:31 UTC (rev 1441) +++ trunk/adminer/include/functions.inc.php 2010-04-15 14:43:44 UTC (rev 1442) @@ -188,9 +188,10 @@ * @param string column identifier * @param string * @return string +* @return string */ -function where_link($i, $column, $value) { - return "&where%5B$i%5D%5Bcol%5D=" . urlencode($column) . "&where%5B$i%5D%5Bop%5D=%3D&where%5B$i%5D%5Bval%5D=" . urlencode($value); +function where_link($i, $column, $value, $operator = "=") { + return "&where%5B$i%5D%5Bcol%5D=" . urlencode($column) . "&where%5B$i%5D%5Bop%5D=" . urlencode($operator) . "&where%5B$i%5D%5Bval%5D=" . urlencode($value); } /** Set cookie valid for 1 month Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2010-04-15 12:42:31 UTC (rev 1441) +++ trunk/adminer/select.inc.php 2010-04-15 14:43:44 UTC (rev 1442) @@ -249,13 +249,11 @@ $i = 0; foreach ((array) $_GET["where"] as $v) { if (!array_key_exists($v["col"], $unique_array)) { - $link .= h("&where[$i][col]=" . urlencode($v["col"]) . "&where[$i][op]=" . urlencode($v["op"]) . "&where[$i][val]=" . urlencode($v["val"])); - $i++; + $link .= h(where_link($i++, $v["col"], $v["val"], urlencode($v["op"]))); } } foreach ($unique_array as $k => $v) { - $link .= h("&where[$i][col]=" . urlencode($k) . "&where[$i][op]=" . (isset($v) ? "%3D&where[$i][val]=" . urlencode($v) : "IS+NULL")); - $i++; + $link .= h(where_link($i++, $k, $v, (isset($v) ? "=" : "IS NULL"))); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-21 22:37:22
|
Revision: 1471 http://adminer.svn.sourceforge.net/adminer/?rev=1471&view=rev Author: jakubvrana Date: 2010-04-21 22:37:16 +0000 (Wed, 21 Apr 2010) Log Message: ----------- Driver specific USE Modified Paths: -------------- trunk/adminer/drivers/mysql.inc.php trunk/adminer/drivers/pgsql.inc.php trunk/adminer/drivers/sqlite.inc.php trunk/adminer/dump.inc.php Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-04-21 22:22:23 UTC (rev 1470) +++ trunk/adminer/drivers/mysql.inc.php 2010-04-21 22:37:16 UTC (rev 1471) @@ -666,10 +666,24 @@ return $connection->result("SHOW CREATE TABLE " . idf_escape($table), 1); } + /** Get SQL command to change database + * @param string + * @return string + */ + function use_sql($database) { + return "USE " . idf_escape($database); + } + + /** Get server variables + * @return array ($name => $value) + */ function show_variables() { return get_key_vals("SHOW VARIABLES"); } + /** Get status variables + * @return array ($name => $value) + */ function show_status() { return get_key_vals("SHOW STATUS"); } Modified: trunk/adminer/drivers/pgsql.inc.php =================================================================== --- trunk/adminer/drivers/pgsql.inc.php 2010-04-21 22:22:23 UTC (rev 1470) +++ trunk/adminer/drivers/pgsql.inc.php 2010-04-21 22:37:16 UTC (rev 1471) @@ -415,6 +415,10 @@ return $connection->query("EXPLAIN $query"); } + function use_sql($database) { + return "\connect " . idf_escape($database); + } + function support($feature) { return ereg('^(comment|view|routine|trigger)$', $feature); } Modified: trunk/adminer/drivers/sqlite.inc.php =================================================================== --- trunk/adminer/drivers/sqlite.inc.php 2010-04-21 22:22:23 UTC (rev 1470) +++ trunk/adminer/drivers/sqlite.inc.php 2010-04-21 22:37:16 UTC (rev 1471) @@ -462,6 +462,11 @@ return $connection->result("SELECT sql FROM sqlite_master WHERE name = " . $connection->quote($table)); } + function use_sql($database) { + global $connection; + return "ATTACH " . $connection->quote($database) . " AS " . idf_escape($database); + } + function show_variables() { global $connection; $return = array(); Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2010-04-21 22:22:23 UTC (rev 1470) +++ trunk/adminer/dump.inc.php 2010-04-21 22:37:16 UTC (rev 1471) @@ -37,7 +37,7 @@ } if ($_POST["format"] == "sql") { if ($style) { - echo "USE " . idf_escape($db) . ";\n\n"; + echo use_sql($db) . ";\n\n"; } if (in_array("CREATE+ALTER", array($style, $_POST["table_style"]))) { echo "SET @adminer_alter = '';\n\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-21 23:06:38
|
Revision: 1472 http://adminer.svn.sourceforge.net/adminer/?rev=1472&view=rev Author: jakubvrana Date: 2010-04-21 23:06:32 +0000 (Wed, 21 Apr 2010) Log Message: ----------- Display SQLite compile options Modified Paths: -------------- trunk/adminer/drivers/sqlite.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/variables.inc.php Modified: trunk/adminer/drivers/sqlite.inc.php =================================================================== --- trunk/adminer/drivers/sqlite.inc.php 2010-04-21 22:37:16 UTC (rev 1471) +++ trunk/adminer/drivers/sqlite.inc.php 2010-04-21 23:06:32 UTC (rev 1472) @@ -470,18 +470,23 @@ function show_variables() { global $connection; $return = array(); - foreach (array("auto_vacuum", "cache_size", "count_changes", "default_cache_size", "empty_result_callbacks", "encoding", "foreign_keys", "full_column_names", "fullfsync", "journal_mode", "journal_size_limit", "legacy_file_format", "locking_mode", "page_size", "max_page_count", "read_uncommitted", "recursive_triggers", "reverse_unordered_selects", "secure_delete", "short_column_names", "synchronous", "temp_store", "temp_store_directory", "schema_version", "compile_options", "integrity_check", "quick_check") as $key) { + foreach (array("auto_vacuum", "cache_size", "count_changes", "default_cache_size", "empty_result_callbacks", "encoding", "foreign_keys", "full_column_names", "fullfsync", "journal_mode", "journal_size_limit", "legacy_file_format", "locking_mode", "page_size", "max_page_count", "read_uncommitted", "recursive_triggers", "reverse_unordered_selects", "secure_delete", "short_column_names", "synchronous", "temp_store", "temp_store_directory", "schema_version", "integrity_check", "quick_check") as $key) { $return[$key] = $connection->result("PRAGMA $key"); } return $return; } function show_status() { - // not supported + $return = array(); + foreach (get_vals("PRAGMA compile_options") as $option) { + list($key, $val) = explode("=", $option, 2); + $return[$key] = $val; + } + return $return; } function support($feature) { - return ereg('^(view|trigger|variables)$', $feature); + return ereg('^(view|trigger|variables|status)$', $feature); } $driver = "sqlite"; Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2010-04-21 22:37:16 UTC (rev 1471) +++ trunk/adminer/include/functions.inc.php 2010-04-21 23:06:32 UTC (rev 1472) @@ -134,7 +134,7 @@ global $connection; $return = array(); $result = $connection->query($query); - if ($result) { + if (is_object($result)) { while ($row = $result->fetch_row()) { $return[] = $row[$column]; } Modified: trunk/adminer/variables.inc.php =================================================================== --- trunk/adminer/variables.inc.php 2010-04-21 22:37:16 UTC (rev 1471) +++ trunk/adminer/variables.inc.php 2010-04-21 23:06:32 UTC (rev 1472) @@ -2,10 +2,15 @@ $status = isset($_GET["status"]); page_header($status ? lang('Status') : lang('Variables')); -echo "<table cellspacing='0'>\n"; -foreach (($status ? show_status() : show_variables()) as $key => $val) { - echo "<tr>"; - echo "<th><code class='jush-" . $driver . ($status ? "status" : "set") . "'>" . h($key) . "</code>"; - echo "<td>" . nbsp($val); +$variables = ($status ? show_status() : show_variables()); +if (!$variables) { + echo "<p class='message'>" . lang('No rows.') . "\n"; +} else { + echo "<table cellspacing='0'>\n"; + foreach ($variables as $key => $val) { + echo "<tr>"; + echo "<th><code class='jush-" . $driver . ($status ? "status" : "set") . "'>" . h($key) . "</code>"; + echo "<td>" . nbsp($val); + } + echo "</table>\n"; } -echo "</table>\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-22 15:53:48
|
Revision: 1478 http://adminer.svn.sourceforge.net/adminer/?rev=1478&view=rev Author: jakubvrana Date: 2010-04-22 15:53:42 +0000 (Thu, 22 Apr 2010) Log Message: ----------- Driver specific trigger options 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/trigger.inc.php Modified: trunk/adminer/drivers/mssql.inc.php =================================================================== --- trunk/adminer/drivers/mssql.inc.php 2010-04-22 14:38:05 UTC (rev 1477) +++ trunk/adminer/drivers/mssql.inc.php 2010-04-22 15:53:42 UTC (rev 1478) @@ -412,12 +412,14 @@ $result = $connection->query("SELECT s.name [Trigger], CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event], CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing], -c.text [Statement] +c.text FROM sysobjects s JOIN syscomments c ON s.id = c.id WHERE s.xtype = 'TR' AND s.name = " . $connection->quote($name) ); - return $result->fetch_assoc(); + $row = $result->fetch_assoc(); + $row["Statement"] = preg_replace('~^.+\\s+AS\\s+~isU', '', $row["text"]); //! identifiers, comments + return $row; } function triggers($table) { @@ -436,6 +438,13 @@ return $return; } + function trigger_options() { + return array( + "Timing" => array("AFTER", "INSTEAD OF"), + "Type" => array("AS"), + ); + } + function support($feature) { return ereg('^(view|routine|trigger)$', $feature); } Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-04-22 14:38:05 UTC (rev 1477) +++ trunk/adminer/drivers/mysql.inc.php 2010-04-22 15:53:42 UTC (rev 1478) @@ -454,7 +454,7 @@ */ function view($name) { global $connection; - return array("select" => preg_replace('~^(?:[^`]|`[^`]*`)* AS ~U', '', $connection->result("SHOW CREATE VIEW " . idf_escape($name), 1))); + return array("select" => preg_replace('~^(?:[^`]|`[^`]*`)*\\s+AS\\s+~isU', '', $connection->result("SHOW CREATE VIEW " . idf_escape($name), 1))); } /** Get sorted grouped list of collations @@ -648,6 +648,14 @@ return $return; } + function trigger_options() { + return array( + "Timing" => array("BEFORE", "AFTER"), + // Event is always INSERT, UPDATE, DELETE + "Type" => array("FOR EACH ROW"), + ); + } + /** Explain select * @param Min_DB * @param string Modified: trunk/adminer/drivers/pgsql.inc.php =================================================================== --- trunk/adminer/drivers/pgsql.inc.php 2010-04-22 14:38:05 UTC (rev 1477) +++ trunk/adminer/drivers/pgsql.inc.php 2010-04-22 15:53:42 UTC (rev 1478) @@ -397,7 +397,7 @@ function trigger($name) { global $connection; - $result = $connection->query('SELECT trigger_name AS "Trigger", condition_timing AS "Timing", event_manipulation AS "Event", action_statement AS "Statement" FROM information_schema.triggers WHERE event_object_table = ' . $connection->quote($_GET["trigger"]) . ' AND trigger_name = ' . $connection->quote($name)); + $result = $connection->query('SELECT trigger_name AS "Trigger", condition_timing AS "Timing", event_manipulation AS "Event", action_statement AS "Statement" FROM information_schema.triggers WHERE event_object_table = ' . $connection->quote($_GET["trigger"]) . ' AND trigger_name = ' . $connection->quote($name)); //! detect Type return $result->fetch_assoc(); } @@ -411,6 +411,13 @@ return $return; } + function trigger_options() { + return array( + "Timing" => array("BEFORE", "AFTER"), + "Type" => array("FOR EACH STATEMENT", "FOR EACH ROW"), + ); + } + function explain($connection, $query) { return $connection->query("EXPLAIN $query"); } Modified: trunk/adminer/drivers/sqlite.inc.php =================================================================== --- trunk/adminer/drivers/sqlite.inc.php 2010-04-22 14:38:05 UTC (rev 1477) +++ trunk/adminer/drivers/sqlite.inc.php 2010-04-22 15:53:42 UTC (rev 1478) @@ -453,6 +453,13 @@ return $return; } + function trigger_options() { + return array( + "Timing" => array("BEFORE", "AFTER", "INSTEAD OF"), + "Type" => array("FOR EACH ROW"), + ); + } + function explain($connection, $query) { return $connection->query("EXPLAIN $query"); } Modified: trunk/adminer/trigger.inc.php =================================================================== --- trunk/adminer/trigger.inc.php 2010-04-22 14:38:05 UTC (rev 1477) +++ trunk/adminer/trigger.inc.php 2010-04-22 15:53:42 UTC (rev 1478) @@ -1,13 +1,15 @@ <?php $TABLE = $_GET["trigger"]; -$trigger_time = array("BEFORE", "AFTER"); +$trigger_options = trigger_options(); $trigger_event = array("INSERT", "UPDATE", "DELETE"); $dropped = false; -if ($_POST && !$error && in_array($_POST["Timing"], $trigger_time) && in_array($_POST["Event"], $trigger_event)) { +if ($_POST && !$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_event) && in_array($_POST["Type"], $trigger_options["Type"])) { + $timing_event = " $_POST[Timing] $_POST[Event]"; + $on = " ON " . idf_escape($TABLE); $dropped = drop_create( "DROP TRIGGER " . idf_escape($_GET["name"]) . ($driver == "pgsql" ? " ON " . idf_escape($TABLE) : ""), - "CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . " $_POST[Timing] $_POST[Event] ON " . idf_escape($TABLE) . " FOR EACH ROW\n$_POST[Statement]", //! FOR EACH STATEMENT + "CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . ($driver == "mssql" ? $on . $timing_event : $timing_event . $on) . " $_POST[Type]\n$_POST[Statement]", ME . "table=" . urlencode($TABLE), lang('Trigger has been dropped.'), lang('Trigger has been altered.'), @@ -28,14 +30,15 @@ <form action="" method="post" id="form"> <table cellspacing="0"> -<tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_time, $row["Timing"], "if (/^" . h(preg_quote($TABLE, "/")) . "_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '" . h(addcslashes($TABLE, "\r\n'\\")) . "_' + selectValue(this).charAt(0).toLowerCase() + selectValue(this.form['Event']).charAt(0).toLowerCase();"); ?> +<tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_options["Timing"], $row["Timing"], "if (/^" . h(preg_quote($TABLE, "/")) . "_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '" . h(addcslashes($TABLE, "\r\n'\\")) . "_' + selectValue(this).charAt(0).toLowerCase() + selectValue(this.form['Event']).charAt(0).toLowerCase();"); ?> <tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_event, $row["Event"], "this.form['Timing'].onchange();"); ?> -<tr><th><?php echo lang('Name'); ?><td><input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64"> +<tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?> </table> <p><textarea name="Statement" rows="10" cols="80" style="width: 98%;"><?php echo h($row["Statement"]); ?></textarea> <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?> +<?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64"> <input type="submit" value="<?php echo lang('Save'); ?>"> <?php if ($_GET["name"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?> </form> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-22 23:02:34
|
Revision: 1480 http://adminer.svn.sourceforge.net/adminer/?rev=1480&view=rev Author: jakubvrana Date: 2010-04-22 23:02:28 +0000 (Thu, 22 Apr 2010) Log Message: ----------- Driver specific create and drop database Modified Paths: -------------- trunk/adminer/database.inc.php trunk/adminer/drivers/mssql.inc.php trunk/adminer/drivers/mysql.inc.php trunk/adminer/drivers/pgsql.inc.php trunk/adminer/include/connect.inc.php Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2010-04-22 19:43:36 UTC (rev 1479) +++ trunk/adminer/database.inc.php 2010-04-22 23:02:28 UTC (rev 1480) @@ -3,7 +3,7 @@ restart_session(); if ($_POST["drop"]) { set_session("databases", null); - query_redirect("DROP DATABASE " . idf_escape(DB), remove_from_uri("db|database"), lang('Database has been dropped.')); + queries_redirect(remove_from_uri("db|database"), lang('Database has been dropped.'), drop_databases(array(DB))); } elseif (DB !== $_POST["name"]) { // create or rename database set_session("databases", null); // clear cache @@ -15,7 +15,7 @@ $last = ""; foreach ($dbs as $db) { if (count($dbs) == 1 || $db != "") { // ignore empty lines but always try to create single database - if (!queries("CREATE DATABASE " . idf_escape($db) . ($_POST["collation"] ? " COLLATE " . $connection->quote($_POST["collation"]) : ""))) { + if (!create_database($db, $_POST["collation"])) { $success = false; } $last = $db; @@ -55,11 +55,15 @@ <form action="" method="post"> <p> -<?php echo ($_POST["add_x"] || strpos($name, "\n") +<?php +echo ($_POST["add_x"] || strpos($name, "\n") ? '<textarea name="name" rows="10" cols="40">' . h($name) . '</textarea><br>' : '<input name="name" value="' . h($name) . '" maxlength="64">' -) . "\n"; ?> -<?php echo html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $collate); ?> +) . "\n"; +if ($collations) { + html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $collate); +} +?> <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> <?php Modified: trunk/adminer/drivers/mssql.inc.php =================================================================== --- trunk/adminer/drivers/mssql.inc.php 2010-04-22 19:43:36 UTC (rev 1479) +++ trunk/adminer/drivers/mssql.inc.php 2010-04-22 23:02:28 UTC (rev 1480) @@ -359,6 +359,14 @@ return $connection->quote($val); } + function create_database($db, $collation) { + return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . idf_escape($collation) : "")); + } + + function drop_databases($databases) { + return queries("DROP DATABASE " . implode(", ", array_map('idf_escape', $databases))); + } + function rename_database($name, $collation) { if ($collation) { queries("ALTER DATABASE " . idf_escape(DB) . " COLLATE " . idf_escape($collation)); Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-04-22 19:43:36 UTC (rev 1479) +++ trunk/adminer/drivers/mysql.inc.php 2010-04-22 23:02:28 UTC (rev 1480) @@ -500,6 +500,27 @@ return "BINARY " . $connection->quote($val); } + /** Create database + * @param string + * @return string + */ + function create_database($db, $collation) { + return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . $connection->quote($collation) : "")); + } + + /** Drop databases + * @param array + * @return bool + */ + function drop_databases($databases) { + foreach ($databases as $db) { + if (!queries("DROP DATABASE " . idf_escape($db))) { + return false; + } + } + return true; + } + /** Rename database from DB * @param string new name * @return string @@ -508,7 +529,7 @@ function rename_database($name, $collation) { global $connection; $return = false; - if (queries("CREATE DATABASE " . idf_escape($name) . ($collation ? " COLLATE " . $connection->quote($collation) : ""))) { + if (create_database($name, $collation)) { //! move triggers $return = true; // table list may by empty foreach (tables_list() as $table) { @@ -648,6 +669,9 @@ return $return; } + /** Get trigger options + * @return array ("Timing" => array(), "Type" => array()) + */ function trigger_options() { return array( "Timing" => array("BEFORE", "AFTER"), Modified: trunk/adminer/drivers/pgsql.inc.php =================================================================== --- trunk/adminer/drivers/pgsql.inc.php 2010-04-22 19:43:36 UTC (rev 1479) +++ trunk/adminer/drivers/pgsql.inc.php 2010-04-22 23:02:28 UTC (rev 1480) @@ -52,6 +52,10 @@ return $link; } + function close() { + $this->_link = @pg_connect($this->_string); + } + function query($query, $unbuffered = false) { $result = @pg_query($this->_link, $query); if (!$result) { @@ -134,6 +138,9 @@ function select_db($database) { return (DB == $database); } + + function close() { + } } } @@ -301,6 +308,21 @@ return $connection->quote($val); } + function create_database($db, $collation) { + return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " ENCODING " . idf_escape($collation) : "")); + } + + function drop_databases($databases) { + global $connection; + $connection->close(); + foreach ($databases as $db) { + if (!queries("DROP DATABASE " . idf_escape($db))) { + return false; + } + } + return true; + } + function rename_database($name, $collation) { //! current database cannot be renamed return queries("ALTER DATABASE " . idf_escape(DB) . " RENAME TO " . idf_escape($name)); Modified: trunk/adminer/include/connect.inc.php =================================================================== --- trunk/adminer/include/connect.inc.php 2010-04-22 19:43:36 UTC (rev 1479) +++ trunk/adminer/include/connect.inc.php 2010-04-22 23:02:28 UTC (rev 1480) @@ -7,12 +7,7 @@ } else { if ($_POST["db"] && !$error) { set_session("databases", null); - foreach ($_POST["db"] as $db) { - if (!queries("DROP DATABASE " . idf_escape($db))) { - break; - } - } - queries_redirect(substr(ME, 0, -1), lang('Database has been dropped.'), !$connection->error); + queries_redirect(substr(ME, 0, -1), lang('Database has been dropped.'), drop_databases($_POST["db"])); } page_header(lang('Select database'), $error, false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-23 09:04:11
|
Revision: 1485 http://adminer.svn.sourceforge.net/adminer/?rev=1485&view=rev Author: jakubvrana Date: 2010-04-23 09:04:05 +0000 (Fri, 23 Apr 2010) Log Message: ----------- MS SQL pagination Modified Paths: -------------- trunk/adminer/drivers/mssql.inc.php trunk/adminer/select.inc.php Modified: trunk/adminer/drivers/mssql.inc.php =================================================================== --- trunk/adminer/drivers/mssql.inc.php 2010-04-23 09:03:27 UTC (rev 1484) +++ trunk/adminer/drivers/mssql.inc.php 2010-04-23 09:04:05 UTC (rev 1485) @@ -125,6 +125,12 @@ $return->type = ($field["Type"] == 1 ? 254 : 0); return $return; } + + function seek($offset) { + for ($i=0; $i < $offset; $i++) { + sqlsrv_fetch($this->_result); // SQLSRV_SCROLL_ABSOLUTE added in sqlsrv 1.1 + } + } function __destruct() { sqlsrv_free_stmt($this->_result); @@ -216,6 +222,10 @@ return $return; } + function seek($offset) { + mssql_data_seek($this->_result, $offset); + } + function __destruct() { mssql_free_result($this->_result); } @@ -242,10 +252,10 @@ } function limit($query, $limit, $offset = 0) { - return (isset($limit) ? " TOP ($limit)" : "") . " $query"; //! offset + return (isset($limit) ? " TOP (" . ($limit + $offset) . ")" : "") . " $query"; // seek later } - function limit1($query, $limit, $offset = 0) { + function limit1($query) { return limit($query, 1); } @@ -297,7 +307,11 @@ function fields($table) { global $connection; $return = array(); - $result = $connection->query("SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = " . $connection->quote($table)); + $result = $connection->query("SELECT i.*, c.is_identity +FROM information_schema.COLUMNS i +JOIN sys.columns c ON OBJECT_NAME(c.object_id) = i.TABLE_NAME AND c.name = i.COLUMN_NAME +WHERE i.TABLE_NAME = " . $connection->quote($table) + ); while ($row = $result->fetch_assoc()) { $return[$row["COLUMN_NAME"]] = array( "field" => $row["COLUMN_NAME"], @@ -306,9 +320,10 @@ "length" => $row["CHARACTER_MAXIMUM_LENGTH"], //! NUMERIC_, DATETIME_? "default" => $row["COLUMN_DEFAULT"], "null" => ($row["IS_NULLABLE"] == "YES"), + "auto_increment" => $row["is_identity"], "collation" => $row["COLLATION_NAME"], "privileges" => array("insert" => 1, "select" => 1, "update" => 1), - //! primary - is_identity in sys.columns + "primary" => $row["is_identity"], //! or indexes.is_primary_key ); } return $return; @@ -371,13 +386,18 @@ if ($collation) { queries("ALTER DATABASE " . idf_escape(DB) . " COLLATE " . idf_escape($collation)); } - return queries("ALTER DATABASE " . idf_escape(DB) . " MODIFY NAME = " . idf_escape($name)); //! false negative "The database name 'test2' has been set." + queries("ALTER DATABASE " . idf_escape(DB) . " MODIFY NAME = " . idf_escape($name)); + return true; //! false negative "The database name 'test2' has been set." } function auto_increment() { return " IDENTITY"; } + function insert_into($table, $set) { + return queries("INSERT INTO " . idf_escape($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES")); + } + function explain($connection, $query) { $connection->query("SET SHOWPLAN_ALL ON"); $return = $connection->query($query); Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2010-04-23 09:03:27 UTC (rev 1484) +++ trunk/adminer/select.inc.php 2010-04-23 09:04:05 UTC (rev 1485) @@ -189,6 +189,9 @@ if (!$result) { echo "<p class='error'>" . error() . "\n"; } else { + if ($driver == "mssql") { + $result->seek($limit * $page); + } $email_fields = array(); echo "<form action='' method='post' enctype='multipart/form-data'>\n"; $rows = array(); @@ -196,10 +199,12 @@ $rows[] = $row; } // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest) - $found_rows = (intval($limit) && $group && count($group) < count($select) - ? ($driver == "sql" ? $connection->result(" SELECT FOUND_ROWS()") : $connection->result("SELECT COUNT(*) FROM ($query) x")) // space to allow mysql.trace_mode - : count($rows) - ); + if ($_GET["page"] != "last") { + $found_rows = (intval($limit) && $group && count($group) < count($select) + ? ($driver == "sql" ? $connection->result(" SELECT FOUND_ROWS()") : $connection->result("SELECT COUNT(*) FROM ($query) x")) // space to allow mysql.trace_mode + : count($rows) + ); + } if (!$rows) { echo "<p class='message'>" . lang('No rows.') . "\n"; @@ -296,7 +301,7 @@ if ($rows || $page) { $exact_count = true; - if (intval($limit) && count($group) >= count($select) && ($found_rows >= $limit || $page)) { + if ($_GET["page"] != "last" && intval($limit) && count($group) >= count($select) && ($found_rows >= $limit || $page)) { $found_rows = $table_status["Rows"]; if (!isset($found_rows) || $where || 2 * $page * $limit > $found_rows || ($table_status["Engine"] == "InnoDB" && $found_rows < 1e4)) { // slow with big tables This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-23 20:18:07
|
Revision: 1489 http://adminer.svn.sourceforge.net/adminer/?rev=1489&view=rev Author: jakubvrana Date: 2010-04-23 20:18:00 +0000 (Fri, 23 Apr 2010) Log Message: ----------- Separate static file handling Modified Paths: -------------- trunk/adminer/include/bootstrap.inc.php Added Paths: ----------- trunk/adminer/file.inc.php Added: trunk/adminer/file.inc.php =================================================================== --- trunk/adminer/file.inc.php (rev 0) +++ trunk/adminer/file.inc.php 2010-04-23 20:18:00 UTC (rev 1489) @@ -0,0 +1,22 @@ +<?php +header("Expires: " . gmdate("D, d M Y H:i:s", time() + 365*24*60*60) . " GMT"); +if ($_GET["file"] == "favicon.ico") { + header("Content-Type: image/x-icon"); + echo base64_decode("compile_file('../adminer/static/favicon.ico', 'base64_encode');"); +} elseif ($_GET["file"] == "default.css") { + header("Content-Type: text/css"); + ?>compile_file('../adminer/static/default.css', 'minify_css');<?php +} elseif ($_GET["file"] == "functions.js") { + header("Content-Type: text/javascript"); + ?>compile_file('../adminer/static/functions.js', 'JSMin::minify');compile_file('static/editing.js', 'JSMin::minify');<?php +} else { + header("Content-Type: image/gif"); + switch ($_GET["file"]) { + case "plus.gif": echo base64_decode("compile_file('../adminer/static/plus.gif', 'base64_encode');"); break; + case "cross.gif": echo base64_decode("compile_file('../adminer/static/cross.gif', 'base64_encode');"); break; + case "up.gif": echo base64_decode("compile_file('../adminer/static/up.gif', 'base64_encode');"); break; + case "down.gif": echo base64_decode("compile_file('../adminer/static/down.gif', 'base64_encode');"); break; + case "arrow.gif": echo base64_decode("compile_file('../adminer/static/arrow.gif', 'base64_encode');"); break; + } +} +exit; Modified: trunk/adminer/include/bootstrap.inc.php =================================================================== --- trunk/adminer/include/bootstrap.inc.php 2010-04-23 15:27:27 UTC (rev 1488) +++ trunk/adminer/include/bootstrap.inc.php 2010-04-23 20:18:00 UTC (rev 1489) @@ -16,27 +16,7 @@ // used only in compiled file if (isset($_GET["file"])) { - header("Expires: " . gmdate("D, d M Y H:i:s", time() + 365*24*60*60) . " GMT"); - if ($_GET["file"] == "favicon.ico") { - header("Content-Type: image/x-icon"); - echo base64_decode("compile_file('../adminer/static/favicon.ico', 'base64_encode');"); - } elseif ($_GET["file"] == "default.css") { - header("Content-Type: text/css"); - ?>compile_file('../adminer/static/default.css', 'minify_css');<?php - } elseif ($_GET["file"] == "functions.js") { - header("Content-Type: text/javascript"); - ?>compile_file('../adminer/static/functions.js', 'JSMin::minify');compile_file('static/editing.js', 'JSMin::minify');<?php - } else { - header("Content-Type: image/gif"); - switch ($_GET["file"]) { - case "plus.gif": echo base64_decode("compile_file('../adminer/static/plus.gif', 'base64_encode');"); break; - case "cross.gif": echo base64_decode("compile_file('../adminer/static/cross.gif', 'base64_encode');"); break; - case "up.gif": echo base64_decode("compile_file('../adminer/static/up.gif', 'base64_encode');"); break; - case "down.gif": echo base64_decode("compile_file('../adminer/static/down.gif', 'base64_encode');"); break; - case "arrow.gif": echo base64_decode("compile_file('../adminer/static/arrow.gif', 'base64_encode');"); break; - } - } - exit; + include "../adminer/file.inc.php"; } include "../adminer/include/functions.inc.php"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-26 16:35:10
|
Revision: 1499 http://adminer.svn.sourceforge.net/adminer/?rev=1499&view=rev Author: jakubvrana Date: 2010-04-26 16:22:58 +0000 (Mon, 26 Apr 2010) Log Message: ----------- Use bracket_escape function Modified Paths: -------------- trunk/adminer/include/functions.inc.php trunk/adminer/select.inc.php Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2010-04-26 16:22:24 UTC (rev 1498) +++ trunk/adminer/include/functions.inc.php 2010-04-26 16:22:58 UTC (rev 1499) @@ -209,7 +209,9 @@ function where($where) { $return = array(); foreach ((array) $where["where"] as $key => $val) { - $return[] = idf_escape($key) . (ereg('\\.', $val) ? " LIKE " . exact_value(addcslashes($val, "%_")) : " = " . exact_value($val)); // LIKE because of floats, but slow with ints //! enum and set + $return[] = idf_escape(bracket_escape($key, 1)) // 1 - back + . (ereg('\\.', $val) ? " LIKE " . exact_value(addcslashes($val, "%_")) : " = " . exact_value($val)) // LIKE because of floats, but slow with ints + ; //! enum and set } foreach ((array) $where["null"] as $key) { $return[] = idf_escape($key) . " IS NULL"; Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2010-04-26 16:22:24 UTC (rev 1498) +++ trunk/adminer/select.inc.php 2010-04-26 16:22:58 UTC (rev 1499) @@ -111,8 +111,8 @@ foreach ($_POST["val"] as $unique_idf => $row) { $set = array(); foreach ($row as $key => $val) { - $key = bracket_escape($key, 1); - $set[] = idf_escape($key) . " = " . $connection->quote($adminer->editVal($val, $fields[$key])); // 1 - back + $key = bracket_escape($key, 1); // 1 - back + $set[] = idf_escape($key) . " = " . $connection->quote($adminer->editVal($val, $fields[$key])); } $result = queries("UPDATE" . limit1(idf_escape($TABLE) . " SET " . implode(", ", $set) . " WHERE " . where_check($unique_idf) . ($where ? " AND " . implode(" AND ", $where) : ""))); // can change row on a different page without unique key if (!$result) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-26 16:35:14
|
Revision: 1496 http://adminer.svn.sourceforge.net/adminer/?rev=1496&view=rev Author: jakubvrana Date: 2010-04-26 16:20:39 +0000 (Mon, 26 Apr 2010) Log Message: ----------- Always handle double click Modified Paths: -------------- trunk/adminer/lang/cs.inc.php trunk/adminer/select.inc.php Modified: trunk/adminer/lang/cs.inc.php =================================================================== --- trunk/adminer/lang/cs.inc.php 2010-04-26 16:19:59 UTC (rev 1495) +++ trunk/adminer/lang/cs.inc.php 2010-04-26 16:20:39 UTC (rev 1496) @@ -232,7 +232,9 @@ 'last' => 'poslední', 'Network' => 'Síť', 'Geometry' => 'Geometrie', - 'Double click on a field to edit it.' => 'Dvojklikněte na políčko, které chcete editovat.', 'Databases have been dropped.' => 'Databáze byly odstraněny.', 'File exists.' => 'Soubor existuje.', + '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.', ); Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2010-04-26 16:19:59 UTC (rev 1495) +++ trunk/adminer/select.inc.php 2010-04-26 16:20:39 UTC (rev 1496) @@ -111,9 +111,10 @@ foreach ($_POST["val"] as $unique_idf => $row) { $set = array(); foreach ($row as $key => $val) { - $set[] = idf_escape(bracket_escape($key, 1)) . " = " . $connection->quote($val); // 1 - back //! $adminer->editVal($val) + $key = bracket_escape($key, 1); + $set[] = idf_escape($key) . " = " . $connection->quote($adminer->editVal($val, $fields[$key])); // 1 - back } - $result = queries("UPDATE " . idf_escape($TABLE) . " SET " . implode(", ", $set) . " WHERE " . where_check($unique_idf)); + $result = queries("UPDATE" . limit1(idf_escape($TABLE) . " SET " . implode(", ", $set) . " WHERE " . where_check($unique_idf) . ($where ? " AND " . implode(" AND ", $where) : ""))); // can change row on a different page without unique key if (!$result) { break; } @@ -229,6 +230,7 @@ echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n"; echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'> <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('edit') . "</a>"; $names = array(); + $functions = array(); reset($select); $order = 1; foreach ($rows[0] as $key => $val) { @@ -240,6 +242,7 @@ $names[$key] = $name; echo '<th><a href="' . h(remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key) . ($_GET["order"][0] == $key && !$_GET["desc"][0] ? '&desc%5B0%5D=1' : '')) . '">' . apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions } + $functions[$key] = $val["fun"]; next($select); } $lengths = array(); @@ -313,11 +316,12 @@ $id = h("val[$unique_idf][" . bracket_escape($key) . "]"); $value = $_POST["val"][$unique_idf][bracket_escape($key)]; $h_value = h(isset($value) ? $value : $row[$key]); - $editable = is_utf8($val) && !strpos($val, "<em>...</em>"); //! function results, not unique key + $long = strpos($val, "<em>...</em>"); + $editable = is_utf8($val) && !$long && $rows[$n][$key] == $row[$key] && !$functions[$key]; $text = ereg('text|blob', $field["type"]); echo (($_GET["modify"] && $editable) || isset($value) ? "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>") - : "<td id='$id'" . ($editable ? " ondblclick='selectDblClick(this, event" . ($text ? ", 1" : "") . ");'" : "") . ">" . $adminer->selectVal($val, $link, $field) + : "<td id='$id' ondblclick=\"" . ($editable ? "selectDblClick(this, event" . ($text ? ", 1" : "") . ")" : "alert('" . ($long ? lang('Increase text length to modify this value.') : lang('Use edit link to modify this value.')) . "')") . ";\">" . $adminer->selectVal($val, $link, $field) ); } } @@ -357,7 +361,7 @@ if (!information_schema(DB)) { ?> <fieldset><legend><?php echo lang('Edit'); ?></legend><div> -<input type="submit" value="<?php echo lang('Save'); ?>"<?php if (!$_GET["modify"] && !$_POST["val"]) { ?> onclick="if (!selectDblClicked) { alert('<?php echo lang('Double click on a field to edit it.'); ?>'); return false; };"<?php } ?>> +<input type="submit" value="<?php echo lang('Save'); ?>"<?php if (!$_GET["modify"] && !$_POST["val"]) { ?> onclick="if (!selectDblClicked) { alert('<?php echo lang('Double click on a value to modify it.'); ?>'); return false; };"<?php } ?>> <input type="submit" name="edit" value="<?php echo lang('Edit'); ?>"> <input type="submit" name="clone" value="<?php echo lang('Clone'); ?>"> <input type="submit" name="delete" value="<?php echo lang('Delete'); ?>" onclick="return confirm('<?php echo lang('Are you sure?'); ?> (' + (this.form['all'].checked ? <?php echo $found_rows; ?> : formChecked(this, /check/)) + ')');"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-28 00:11:45
|
Revision: 1508 http://adminer.svn.sourceforge.net/adminer/?rev=1508&view=rev Author: jakubvrana Date: 2010-04-28 00:11:39 +0000 (Wed, 28 Apr 2010) Log Message: ----------- Driver specific routines Modified Paths: -------------- trunk/adminer/db.inc.php trunk/adminer/drivers/mysql.inc.php trunk/adminer/drivers/sqlite.inc.php trunk/adminer/include/editing.inc.php Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2010-04-28 00:10:30 UTC (rev 1507) +++ trunk/adminer/db.inc.php 2010-04-28 00:11:39 UTC (rev 1508) @@ -94,12 +94,12 @@ } if (support("routine")) { echo "<h3>" . lang('Routines') . "</h3>\n"; - $result = $connection->query("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . $connection->quote(DB)); - if ($result->num_rows) { - odd(''); + $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"; - while ($row = $result->fetch_assoc()) { + 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"]); Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-04-28 00:10:30 UTC (rev 1507) +++ trunk/adminer/drivers/mysql.inc.php 2010-04-28 00:11:39 UTC (rev 1508) @@ -681,6 +681,53 @@ ); } + /** Get information about stored routine + * @param string + * @param string FUNCTION or PROCEDURE + * @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => ) + */ + function routine($name, $type) { + global $connection, $enum_length, $inout, $types; + $aliases = array("bit" => "tinyint", "bool" => "tinyint", "boolean" => "tinyint", "integer" => "int", "double precision" => "float", "real" => "float", "dec" => "decimal", "numeric" => "decimal", "fixed" => "decimal", "national char" => "char", "national varchar" => "varchar"); + $type_pattern = "((" . implode("|", array_keys($types + $aliases)) . ")(?:\\s*\\(((?:[^'\")]*|$enum_length)+)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?"; + $pattern = "\\s*(" . ($type == "FUNCTION" ? "" : implode("|", $inout)) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern"; + $create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2); + preg_match("~\\(((?:$pattern\\s*,?)*)\\)" . ($type == "FUNCTION" ? "\\s*RETURNS\\s+$type_pattern" : "") . "\\s*(.*)~is", $create, $match); + $fields = array(); + preg_match_all("~$pattern\\s*,?~is", $match[1], $matches, PREG_SET_ORDER); + foreach ($matches as $param) { + $name = str_replace("``", "`", $param[2]) . $param[3]; + $data_type = strtolower($param[5]); + $fields[] = array( + "field" => $name, + "type" => (isset($aliases[$data_type]) ? $aliases[$data_type] : $data_type), + "length" => preg_replace_callback("~$enum_length~s", 'normalize_enum', $param[6]), + "unsigned" => strtolower(preg_replace('~\\s+~', ' ', trim("$param[8] $param[7]"))), + "full_type" => $param[4], + "inout" => strtoupper($param[1]), + "collation" => strtolower($param[9]), + ); + } + if ($type != "FUNCTION") { + return array("fields" => $fields, "definition" => $match[11]); + } + return array( + "fields" => $fields, + "returns" => array("type" => $match[12], "length" => $match[13], "unsigned" => $match[15], "collation" => $match[16]), + "definition" => $match[17], + ); + } + + function routines() { + global $connection; + $return = array(); + $result = $connection->query("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . $connection->quote(DB)); + while ($row = $result->fetch_assoc()) { + $return[] = $row; + } + return $return; + } + /** Begin transaction * @return bool */ Modified: trunk/adminer/drivers/sqlite.inc.php =================================================================== --- trunk/adminer/drivers/sqlite.inc.php 2010-04-28 00:10:30 UTC (rev 1507) +++ trunk/adminer/drivers/sqlite.inc.php 2010-04-28 00:11:39 UTC (rev 1508) @@ -474,6 +474,14 @@ ); } + function routine($name, $type) { + // not supported by SQLite + } + + function routines() { + // not supported by SQLite + } + function begin() { return queries("BEGIN"); } Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2010-04-28 00:10:30 UTC (rev 1507) +++ trunk/adminer/include/editing.inc.php 2010-04-28 00:11:39 UTC (rev 1508) @@ -280,43 +280,6 @@ return "'" . str_replace("'", "''", addcslashes(stripcslashes(str_replace($match[0][0] . $match[0][0], $match[0][0], substr($match[0], 1, -1))), '\\')) . "'"; } -/** Get information about stored routine -* @param string -* @param string FUNCTION or PROCEDURE -* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => ) -*/ -function routine($name, $type) { - global $connection, $enum_length, $inout, $types; - $aliases = array("bit" => "tinyint", "bool" => "tinyint", "boolean" => "tinyint", "integer" => "int", "double precision" => "float", "real" => "float", "dec" => "decimal", "numeric" => "decimal", "fixed" => "decimal", "national char" => "char", "national varchar" => "varchar"); - $type_pattern = "((" . implode("|", array_keys($types + $aliases)) . ")(?:\\s*\\(((?:[^'\")]*|$enum_length)+)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?"; - $pattern = "\\s*(" . ($type == "FUNCTION" ? "" : implode("|", $inout)) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern"; - $create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2); - preg_match("~\\(((?:$pattern\\s*,?)*)\\)" . ($type == "FUNCTION" ? "\\s*RETURNS\\s+$type_pattern" : "") . "\\s*(.*)~is", $create, $match); - $fields = array(); - preg_match_all("~$pattern\\s*,?~is", $match[1], $matches, PREG_SET_ORDER); - foreach ($matches as $param) { - $name = str_replace("``", "`", $param[2]) . $param[3]; - $data_type = strtolower($param[5]); - $fields[] = array( - "field" => $name, - "type" => (isset($aliases[$data_type]) ? $aliases[$data_type] : $data_type), - "length" => preg_replace_callback("~$enum_length~s", 'normalize_enum', $param[6]), - "unsigned" => strtolower(preg_replace('~\\s+~', ' ', trim("$param[8] $param[7]"))), - "full_type" => $param[4], - "inout" => strtoupper($param[1]), - "collation" => strtolower($param[9]), - ); - } - if ($type != "FUNCTION") { - return array("fields" => $fields, "definition" => $match[11]); - } - return array( - "fields" => $fields, - "returns" => array("type" => $match[12], "length" => $match[13], "unsigned" => $match[15], "collation" => $match[16]), - "definition" => $match[17], - ); -} - /** Issue grant or revoke commands * @param string GRANT or REVOKE * @param array 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:29:23
|
Revision: 1520 http://adminer.svn.sourceforge.net/adminer/?rev=1520&view=rev Author: jakubvrana Date: 2010-05-05 16:29:17 +0000 (Wed, 05 May 2010) Log Message: ----------- Clear cache only for MySQL Modified Paths: -------------- trunk/adminer/database.inc.php trunk/adminer/drivers/mysql.inc.php Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2010-05-05 16:28:37 UTC (rev 1519) +++ trunk/adminer/database.inc.php 2010-05-05 16:29:17 UTC (rev 1520) @@ -2,11 +2,9 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x restart_session(); if ($_POST["drop"]) { - set_session("databases", null); queries_redirect(remove_from_uri("db|database"), lang('Database has been dropped.'), drop_databases(array(DB))); } elseif (DB !== $_POST["name"]) { // create or rename database - set_session("databases", null); // clear cache if (DB != "") { queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($_POST["name"]), lang('Database has been renamed.'), rename_database($_POST["name"], $_POST["collation"])); } else { Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-05-05 16:28:37 UTC (rev 1519) +++ trunk/adminer/drivers/mysql.inc.php 2010-05-05 16:29:17 UTC (rev 1520) @@ -506,6 +506,7 @@ * @return string */ function create_database($db, $collation) { + set_session("databases", null); return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . $connection->quote($collation) : "")); } @@ -514,6 +515,7 @@ * @return bool */ function drop_databases($databases) { + set_session("databases", null); foreach ($databases as $db) { if (!queries("DROP DATABASE " . idf_escape($db))) { return false; 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:45
|
Revision: 1522 http://adminer.svn.sourceforge.net/adminer/?rev=1522&view=rev Author: jakubvrana Date: 2010-05-05 16:31:39 +0000 (Wed, 05 May 2010) Log Message: ----------- PostgreSQL variables Modified Paths: -------------- trunk/adminer/drivers/pgsql.inc.php trunk/adminer/static/editing.js Modified: trunk/adminer/drivers/pgsql.inc.php =================================================================== --- trunk/adminer/drivers/pgsql.inc.php 2010-05-05 16:30:55 UTC (rev 1521) +++ trunk/adminer/drivers/pgsql.inc.php 2010-05-05 16:31:39 UTC (rev 1522) @@ -470,8 +470,12 @@ return "\connect " . idf_escape($database); } + function show_variables() { + return get_key_vals("SHOW ALL"); + } + function support($feature) { - return ereg('^(comment|view|scheme|trigger|drop_col)$', $feature); //! routine|sequence| + return ereg('^(comment|view|scheme|trigger|variables|drop_col)$', $feature); //! routine|sequence| } $driver = "pgsql"; Modified: trunk/adminer/static/editing.js =================================================================== --- trunk/adminer/static/editing.js 2010-05-05 16:30:55 UTC (rev 1521) +++ trunk/adminer/static/editing.js 2010-05-05 16:31:39 UTC (rev 1522) @@ -10,10 +10,13 @@ script.onload = function () { if (window.jush) { // IE runs in case of an error too jush.create_links = ' target="_blank"'; - jush.urls.pgsql[0] = 'http://www.postgresql.org/docs/' + version + '/static/$key'; jush.urls.sql[0] = 'http://dev.mysql.com/doc/refman/' + version + '/en/$key'; + jush.urls.sql_sqlset = jush.urls.sql[0]; jush.urls.sqlset[0] = jush.urls.sql[0]; jush.urls.sqlstatus[0] = jush.urls.sql[0]; + jush.urls.pgsql[0] = 'http://www.postgresql.org/docs/' + version + '/static/$key'; + jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0]; + jush.urls.pgsqlset[0] = 'http://www.postgresql.org/docs/' + version + '/static/runtime-config-$key.html#GUC-$1'; jush.style(jushRoot + 'jush.css'); if (window.jushLinks) { jush.custom_links = jushLinks; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |