Thread: [adminer-svn] SF.net SVN: adminer:[1411] branches/sqlite (Page 2)
Database management in a single PHP file
Brought to you by:
jakubvrana
From: <jak...@us...> - 2010-04-10 21:43:29
|
Revision: 1411 http://adminer.svn.sourceforge.net/adminer/?rev=1411&view=rev Author: jakubvrana Date: 2010-04-10 21:43:23 +0000 (Sat, 10 Apr 2010) Log Message: ----------- PDO_PgSQL Modified Paths: -------------- branches/sqlite/adminer/drivers/mysql.inc.php branches/sqlite/adminer/drivers/pgsql.inc.php branches/sqlite/adminer/include/pdo.inc.php branches/sqlite/todo.txt Modified: branches/sqlite/adminer/drivers/mysql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-10 20:34:08 UTC (rev 1410) +++ branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-10 21:43:23 UTC (rev 1411) @@ -201,6 +201,11 @@ return true; } + function select_db($database) { + // database selection is separated from the connection so dbname in DSN can't be used + return $this->query("USE " . idf_escape($database)); + } + function query($query, $unbuffered = false) { $this->setAttribute(1000, !$unbuffered); // 1000 - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY return parent::query($query, $unbuffered); Modified: branches/sqlite/adminer/drivers/pgsql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-10 20:34:08 UTC (rev 1410) +++ branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-10 21:43:23 UTC (rev 1411) @@ -122,9 +122,15 @@ var $extension = "PDO_PgSQL"; function connect($server, $username, $password) { - $this->dsn("pgsql:host=" . str_replace(":", " port=", $server), $username, $password); + $string = "pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' options='-c client_encoding=utf8'"; + $this->dsn($string . (DB != "" ? " dbname='" . addcslashes(DB, "'\\") . "'" : ""), $username, $password); + //! connect without DB in case of an error return true; } + + function select_db($database) { + return (DB == $database); + } } } Modified: branches/sqlite/adminer/include/pdo.inc.php =================================================================== --- branches/sqlite/adminer/include/pdo.inc.php 2010-04-10 20:34:08 UTC (rev 1410) +++ branches/sqlite/adminer/include/pdo.inc.php 2010-04-10 21:43:23 UTC (rev 1411) @@ -1,7 +1,7 @@ <?php // PDO can be used in several database drivers if (extension_loaded('pdo')) { - class Min_PDO extends PDO { + /*abstract */class Min_PDO extends PDO { var $_result, $server_info, $affected_rows, $error; function __construct() { @@ -15,10 +15,7 @@ $this->server_info = $this->getAttribute(4); // 4 - PDO::ATTR_SERVER_VERSION } - function select_db($database) { - // database selection is separated from the connection so dbname in DSN can't be used - return $this->query("USE " . idf_escape($database)); - } + /*abstract function select_db($database);*/ function query($query, $unbuffered = false) { $result = parent::query($query); Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-10 20:34:08 UTC (rev 1410) +++ branches/sqlite/todo.txt 2010-04-10 21:43:23 UTC (rev 1411) @@ -36,6 +36,7 @@ Export PostgreSQL: +Operators Users - SELECT * FROM pg_user Table schema Export - http://www.postgresql.org/docs/8.4/static/functions-info.html This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-10 23:01:32
|
Revision: 1412 http://adminer.svn.sourceforge.net/adminer/?rev=1412&view=rev Author: jakubvrana Date: 2010-04-10 23:01:25 +0000 (Sat, 10 Apr 2010) Log Message: ----------- Pass pgsql=localhost instead of driver=pgsql&server=localhost Modified Paths: -------------- branches/sqlite/adminer/drivers/mssql.inc.php branches/sqlite/adminer/drivers/mysql.inc.php branches/sqlite/adminer/drivers/pgsql.inc.php branches/sqlite/adminer/drivers/sqlite.inc.php branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/adminer/include/auth.inc.php branches/sqlite/adminer/include/bootstrap.inc.php branches/sqlite/adminer/include/design.inc.php branches/sqlite/adminer/include/functions.inc.php branches/sqlite/adminer/lang/cs.inc.php branches/sqlite/compile.php branches/sqlite/editor/db.inc.php branches/sqlite/editor/include/adminer.inc.php Modified: branches/sqlite/adminer/drivers/mssql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -11,7 +11,8 @@ $drivers["mssql"] = "MS SQL"; } -if ($_GET["driver"] == "mssql") { +if (isset($_GET["mssql"])) { + $_GET["driver"] = "mssql"; if (extension_loaded("sqlsrv")) { class Min_DB { var $extension = "sqlsrv", $_link, $_result, $server_info, $affected_rows, $error; Modified: branches/sqlite/adminer/drivers/mysql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -3,10 +3,11 @@ $possible_drivers[] = "MySQL"; $possible_drivers[] = "PDO_MySQL"; if (extension_loaded("mysqli") || extension_loaded("mysql") || extension_loaded("pdo_mysql")) { - $drivers[""] = "MySQL"; + $drivers = array("server" => "MySQL") + $drivers; } if (!$_GET["driver"]) { + $_GET["driver"] = "server"; // backwards compatibility // MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable if (extension_loaded("mysqli")) { class Min_DB extends MySQLi { Modified: branches/sqlite/adminer/drivers/pgsql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -5,7 +5,8 @@ $drivers["pgsql"] = "PostgreSQL"; } -if ($_GET["driver"] == "pgsql") { +if (isset($_GET["pgsql"])) { + $_GET["driver"] = "pgsql"; if (extension_loaded("pgsql")) { class Min_DB { var $extension = "PgSQL", $_link, $_result, $_string, $_database = true, $server_info, $affected_rows, $error; Modified: branches/sqlite/adminer/drivers/sqlite.inc.php =================================================================== --- branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -8,8 +8,14 @@ if (extension_loaded("sqlite") || extension_loaded("pdo_sqlite")) { $drivers["sqlite2"] = "SQLite 2"; } +if (isset($_GET["sqlite"])) { + $_GET["driver"] = "sqlite"; +} +if (isset($_GET["sqlite2"])) { + $_GET["driver"] = "sqlite2"; +} -if ($_GET["driver"] == "sqlite2" || $_GET["driver"] == "sqlite") { +if (ereg('^sqlite2?$', $_GET["driver"])) { if (extension_loaded($_GET["driver"] == "sqlite2" ? "sqlite" : "sqlite3")) { if ($_GET["driver"] == "sqlite2") { Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -42,10 +42,10 @@ * @return null */ function loginForm() { - global $drivers; + global $drivers, $possible_drivers; ?> <table cellspacing="0"> -<tr><th><?php echo lang('Driver'); ?><td><?php echo (count($drivers) > 1 ? html_select("driver", $drivers, $_GET["driver"]) : "<input type='hidden' name='driver' value='" . key($drivers) . "'>" . reset($drivers)); ?></tr> +<tr><th><?php echo lang('System'); ?><td><?php echo (count($possible_drivers) > 3 ? html_select("driver", $drivers, $_GET["driver"]) : "<input type='hidden' name='driver' value='" . key($drivers) . "'>" . reset($drivers)); ?></tr> <tr><th><?php echo lang('Server'); ?><td><input name="server" value="<?php echo h($_GET["server"]); ?>"> <tr><th><?php echo lang('Username'); ?><td><input name="username" value="<?php echo h($_GET["username"]); ?>"> <tr><th><?php echo lang('Password'); ?><td><input type="password" name="password"> Modified: branches/sqlite/adminer/include/auth.inc.php =================================================================== --- branches/sqlite/adminer/include/auth.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/include/auth.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -19,7 +19,7 @@ } $same_connection = ((string) $_GET["driver"] === $_POST["driver"] && (string) $_GET["server"] === $_POST["server"] && $_GET["username"] === $_POST["username"]); if (count($_POST) == ($_POST["permanent"] ? 5 : 4) || !$same_connection) { // 4 - driver, server, username, password - $location = ($same_connection ? remove_from_uri(session_name()) : preg_replace('~\\?.*~', '', ME) . "?" . ($_POST["driver"] ? "driver=" . urlencode($_POST["driver"]) . "&" : "") . ($_POST["server"] != "" ? "server=" . urlencode($_POST["server"]) . "&" : "") . "username=" . urlencode($_POST["username"])); + $location = ($same_connection ? remove_from_uri(session_name()) : preg_replace('~\\?.*~', '', ME) . "?" . ($_POST["driver"] != "server" || $_POST["server"] != "" ? urlencode($_POST["driver"]) . "=" . urlencode($_POST["server"]) . "&" : "") . "username=" . urlencode($_POST["username"])); if (SID_FORM) { $location = substr_replace($location, SID . "&", strpos($location, '?') + 1, 0); } Modified: branches/sqlite/adminer/include/bootstrap.inc.php =================================================================== --- branches/sqlite/adminer/include/bootstrap.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/include/bootstrap.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -75,22 +75,23 @@ } @set_time_limit(0); // @ - can be disabled -include "../adminer/include/version.inc.php"; include "../adminer/include/functions.inc.php"; +include "../adminer/include/lang.inc.php"; +include "../adminer/lang/$LANG.inc.php"; +include "../adminer/include/pdo.inc.php"; +include "../adminer/drivers/sqlite.inc.php"; +include "../adminer/drivers/pgsql.inc.php"; +include "../adminer/drivers/mssql.inc.php"; +include "../adminer/drivers/mysql.inc.php"; // must be included as last driver +$_GET["server"] = $_GET[$_GET["driver"]]; // translate pgsql=localhost to driver=pgsql&server=localhost define("DB", $_GET["db"]); // for the sake of speed and size define("SID_FORM", SID && !ini_get("session.use_only_cookies") ? '<input type="hidden" name="' . session_name() . '" value="' . h(session_id()) . '">' : ''); -define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?' . (SID_FORM ? SID . '&' : '') . ($_GET["driver"] ? "driver=" . urlencode($_GET["driver"]) . '&' : '') . ($_GET["server"] != "" ? "server=" . urlencode($_GET["server"]) . '&' : '') . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') . (DB != "" ? 'db=' . urlencode(DB) . '&' : '')); +define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?' . (SID_FORM ? SID . '&' : '') . (isset($_GET["server"]) ? urlencode($_GET["driver"]) . "=" . urlencode($_GET["server"]) . '&' : '') . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') . (DB != "" ? 'db=' . urlencode(DB) . '&' : '')); -include "../adminer/include/lang.inc.php"; -include "../adminer/lang/$LANG.inc.php"; +include "../adminer/include/version.inc.php"; include "./include/adminer.inc.php"; include "../adminer/include/design.inc.php"; -include "../adminer/include/pdo.inc.php"; -include "../adminer/drivers/mysql.inc.php"; -include "../adminer/drivers/sqlite.inc.php"; -include "../adminer/drivers/pgsql.inc.php"; -include "../adminer/drivers/mssql.inc.php"; include "../adminer/include/xxtea.inc.php"; include "../adminer/include/auth.inc.php"; include "./include/connect.inc.php"; Modified: branches/sqlite/adminer/include/design.inc.php =================================================================== --- branches/sqlite/adminer/include/design.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/include/design.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -34,7 +34,7 @@ $link = substr(preg_replace('~(username|db)=[^&]*&~', '', ME), 0, -1); echo '<p id="breadcrumb"><a href="' . ($link ? h($link) : ".") . '">' . $drivers[$_GET["driver"]] . '</a> » '; //! hide in Editor $link = substr(preg_replace('~db=[^&]*&~', '', ME), 0, -1); - $server = (isset($_GET["server"]) ? h($_GET["server"]) : lang('Server')); + $server = ($_GET["server"] != "" ? h($_GET["server"]) : lang('Server')); if ($breadcrumb === false) { echo "$server\n"; } else { Modified: branches/sqlite/adminer/include/functions.inc.php =================================================================== --- branches/sqlite/adminer/include/functions.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/include/functions.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -437,8 +437,7 @@ */ function hidden_fields_get() { echo SID_FORM; - echo ($_GET["driver"] != "" ? '<input type="hidden" name="driver" value="' . h($_GET["driver"]) . '">' : ""); - echo ($_GET["server"] != "" ? '<input type="hidden" name="server" value="' . h($_GET["server"]) . '">' : ""); + echo (isset($_GET["server"]) ? '<input type="hidden" name="' . h($_GET["driver"]) . '" value="' . h($_GET["server"]) . '">' : ""); echo '<input type="hidden" name="username" value="' . h($_GET["username"]) . '">'; } Modified: branches/sqlite/adminer/lang/cs.inc.php =================================================================== --- branches/sqlite/adminer/lang/cs.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/adminer/lang/cs.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -229,7 +229,7 @@ 'Permanent login' => 'Trvalé přihlášení', '%d in total' => '%d celkem', 'Attachments' => 'Přílohy', - 'Driver' => 'Ovladač', + 'System' => 'Systém', 'last' => 'poslední', 'Network' => 'Síť', 'Geometry' => 'Geometrie', Modified: branches/sqlite/compile.php =================================================================== --- branches/sqlite/compile.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/compile.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -157,9 +157,9 @@ return call_user_func($match[2], file_get_contents(dirname(__FILE__) . "/$project/$match[1]")); } -$_GET["driver"] = ""; +$DRIVER = ""; if (file_exists(dirname(__FILE__) . "/adminer/drivers/" . $_SERVER["argv"][1] . ".inc.php")) { - $_GET["driver"] = $_SERVER["argv"][1]; + $DRIVER = $_SERVER["argv"][1]; array_shift($_SERVER["argv"]); } @@ -179,7 +179,7 @@ preg_match_all('~\\bfunction ([^(]+)~', file_get_contents($filename), $matches); //! respect context (extension, class) $functions = array_combine($matches[1], $matches[0]); unset($functions["__destruct"], $functions["Min_DB"], $functions["Min_Result"]); -foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($_GET["driver"] ? $_GET["driver"] : "*") . ".inc.php") as $filename) { +foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($DRIVER ? $DRIVER : "*") . ".inc.php") as $filename) { if ($filename != "mysql.inc.php") { $file = file_get_contents($filename); foreach ($functions as $val) { @@ -193,8 +193,9 @@ foreach (array("adminer", "editor") as $project) { $lang_ids = array(); // global variable simplifies usage in a callback function $file = file_get_contents(dirname(__FILE__) . "/$project/index.php"); - if ($_GET["driver"] && $_GET["driver"] != "mysql") { - include_once dirname(__FILE__) . "/adminer/drivers/$_GET[driver].inc.php"; + if ($DRIVER && $DRIVER != "mysql") { + $_GET[$DRIVER] = true; // to load the driver + include_once dirname(__FILE__) . "/adminer/drivers/$DRIVER.inc.php"; foreach (array("view", "event", "privileges", "user", "processlist", "variables", "trigger") as $feature) { if (!support($feature)) { $file = str_replace("} elseif (isset(\$_GET[\"$feature\"])) {\n\tinclude \"./$feature.inc.php\";\n", "", $file); @@ -208,8 +209,8 @@ } $file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); $file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file); - if ($_GET["driver"]) { - $file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($_GET["driver"]) . ').*\\s*)', '', $file); + if ($DRIVER) { + $file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($DRIVER) . ').*\\s*)', '', $file); } $file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); // bootstrap.inc.php $file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file); @@ -229,7 +230,7 @@ $file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file); $file = php_shrink($file); - $filename = $project . ($_GET["driver"] ? "-$_GET[driver]" : "") . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php"; // . "-$VERSION" + $filename = $project . ($DRIVER ? "-$DRIVER" : "") . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php"; // . "-$VERSION" fwrite(fopen($filename, "w"), $file); // file_put_contents() since PHP 5 echo "$filename created (" . strlen($file) . " B).\n"; } Modified: branches/sqlite/editor/db.inc.php =================================================================== --- branches/sqlite/editor/db.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/editor/db.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -3,8 +3,7 @@ ?> <form action=""><p> -<?php echo SID_FORM; ?> -<input type="hidden" name="username" value="<?php echo h($_GET["username"]); ?>"> +<?php hidden_fields_get(); ?> <input name="where[0][val]" value="<?php echo h($_GET["where"][0]["val"]); ?>"> <input type="submit" value="<?php echo lang('Search'); ?>" /> </form> Modified: branches/sqlite/editor/include/adminer.inc.php =================================================================== --- branches/sqlite/editor/include/adminer.inc.php 2010-04-10 21:43:23 UTC (rev 1411) +++ branches/sqlite/editor/include/adminer.inc.php 2010-04-10 23:01:25 UTC (rev 1412) @@ -29,7 +29,7 @@ function loginForm() { ?> <table cellspacing="0"> -<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="driver" value=""><input type="hidden" name="server" value=""><input name="username" value="<?php echo h($_GET["username"]); ?>"> +<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="driver" value="server"><input type="hidden" name="server" value=""><input name="username" value="<?php echo h($_GET["username"]); ?>"> <tr><th><?php echo lang('Password'); ?><td><input type="password" name="password"> </table> <?php This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-12 11:42:40
|
Revision: 1421 http://adminer.svn.sourceforge.net/adminer/?rev=1421&view=rev Author: jakubvrana Date: 2010-04-12 11:42:31 +0000 (Mon, 12 Apr 2010) Log Message: ----------- Token initialization Modified Paths: -------------- branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/adminer/include/auth.inc.php branches/sqlite/adminer/include/bootstrap.inc.php branches/sqlite/editor/include/adminer.inc.php Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-12 11:22:40 UTC (rev 1420) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-12 11:42:31 UTC (rev 1421) @@ -488,7 +488,7 @@ * @return null */ function navigation($missing) { - global $VERSION, $connection; + global $VERSION, $connection, $token; ?> <h1> <a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a> @@ -503,7 +503,7 @@ <p class="logout"> <a href="<?php echo h(ME); ?>sql="><?php echo bold(lang('SQL command'), isset($_GET["sql"])); ?></a> <a href="<?php echo h(ME); ?>dump=<?php echo urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]); ?>"><?php echo bold(lang('Dump'), isset($_GET["dump"])); ?></a> -<input type="hidden" name="token" value="<?php echo $_SESSION["token"]; ?>"> +<input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" name="logout" value="<?php echo lang('Logout'); ?>"> </p> </form> Modified: branches/sqlite/adminer/include/auth.inc.php =================================================================== --- branches/sqlite/adminer/include/auth.inc.php 2010-04-12 11:22:40 UTC (rev 1420) +++ branches/sqlite/adminer/include/auth.inc.php 2010-04-12 11:42:31 UTC (rev 1421) @@ -8,6 +8,10 @@ } $_GET["server"] = $_GET[$_GET["driver"]]; // translate pgsql=localhost to driver=pgsql&server=localhost +$token = $_SESSION["token"]; +if (!$_SESSION["token"]) { + $_SESSION["token"] = rand(1, 1e6); // defense against cross-site request forgery +} if (isset($_POST["server"])) { session_regenerate_id(); // defense against session fixation @@ -29,7 +33,6 @@ redirect($location); } } elseif ($_POST["logout"]) { - $token = $_SESSION["token"]; if ($token && $_POST["token"] != $token) { page_header(lang('Logout'), lang('Invalid CSRF token. Send the form again.')); page_footer("db"); @@ -50,13 +53,13 @@ } function auth_error($exception = null) { - global $connection, $adminer; + global $connection, $adminer, $token; $session_name = session_name(); $error = ""; if (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_get("session.use_only_cookies")) { $error = lang('Session support must be enabled.'); } elseif (isset($_GET["username"])) { - if (($_COOKIE[$session_name] || $_GET[$session_name]) && !isset($_SESSION["token"])) { + if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$token) { $error = lang('Session expired, please login again.'); } else { $password = get_session("passwords"); @@ -64,9 +67,6 @@ $error = h($exception ? $exception->getMessage() : (is_string($connection) ? $connection : lang('Invalid credentials.'))); } } - if (!$_SESSION["token"]) { // checked for existence of session - $_SESSION["token"] = rand(1, 1e6); - } } page_header(lang('Login'), $error, null); echo "<form action='' method='post'>\n"; @@ -86,13 +86,10 @@ exit; } -if (!$_SESSION["token"]) { - $_SESSION["token"] = rand(1, 1e6); // defense against cross-site request forgery -} +$token = $_SESSION["token"]; ///< @var string CSRF protection if (isset($_POST["server"]) && $_POST["token"]) { - $_POST["token"] = $_SESSION["token"]; // reset token after explicit login + $_POST["token"] = $token; // reset token after explicit login } -$token = $_SESSION["token"]; ///< @var string CSRF protection $error = ($_POST ///< @var string ? ($_POST["token"] == $token ? "" : lang('Invalid CSRF token. Send the form again.')) : ($_SERVER["REQUEST_METHOD"] != "POST" ? "" : lang('Too big POST data. Reduce the data or increase the %s configuration directive.', '"post_max_size"')) // posted form with no data means that post_max_size exceeded because Adminer always sends token at least Modified: branches/sqlite/adminer/include/bootstrap.inc.php =================================================================== --- branches/sqlite/adminer/include/bootstrap.inc.php 2010-04-12 11:22:40 UTC (rev 1420) +++ branches/sqlite/adminer/include/bootstrap.inc.php 2010-04-12 11:42:31 UTC (rev 1421) @@ -76,7 +76,12 @@ @set_time_limit(0); // @ - can be disabled define("DB", $_GET["db"]); // for the sake of speed and size -define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?' . (SID && !ini_get("session.use_only_cookies") ? SID . '&' : '') . (isset($_GET["server"]) ? urlencode($_GET["driver"]) . "=" . urlencode($_GET["server"]) . '&' : '') . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') . (DB != "" ? 'db=' . urlencode(DB) . '&' : '')); +define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?' + . (SID && !$_COOKIE ? SID . '&' : '') // !$_COOKIE - don't pass SID with permanent login + . (isset($_GET["server"]) ? urlencode($_GET["driver"]) . "=" . urlencode($_GET["server"]) . '&' : '') + . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') + . (DB != "" ? 'db=' . urlencode(DB) . '&' : '') +); include "../adminer/include/functions.inc.php"; include "../adminer/include/lang.inc.php"; Modified: branches/sqlite/editor/include/adminer.inc.php =================================================================== --- branches/sqlite/editor/include/adminer.inc.php 2010-04-12 11:22:40 UTC (rev 1420) +++ branches/sqlite/editor/include/adminer.inc.php 2010-04-12 11:42:31 UTC (rev 1421) @@ -443,7 +443,7 @@ } function navigation($missing) { - global $VERSION; + global $VERSION, $token; ?> <h1> <a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a> @@ -455,7 +455,7 @@ ?> <form action="" method="post"> <p class="logout"> -<input type="hidden" name="token" value="<?php echo $_SESSION["token"]; ?>"> +<input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" name="logout" value="<?php echo lang('Logout'); ?>"> </p> </form> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-13 12:49:21
|
Revision: 1428 http://adminer.svn.sourceforge.net/adminer/?rev=1428&view=rev Author: jakubvrana Date: 2010-04-13 12:49:15 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Login link in Editor Modified Paths: -------------- branches/sqlite/adminer/include/design.inc.php branches/sqlite/editor/db.inc.php branches/sqlite/editor/index.php Modified: branches/sqlite/adminer/include/design.inc.php =================================================================== --- branches/sqlite/adminer/include/design.inc.php 2010-04-13 12:32:03 UTC (rev 1427) +++ branches/sqlite/adminer/include/design.inc.php 2010-04-13 12:49:15 UTC (rev 1428) @@ -32,7 +32,7 @@ <?php if (isset($breadcrumb)) { $link = substr(preg_replace('~(username|db)=[^&]*&~', '', ME), 0, -1); - echo '<p id="breadcrumb"><a href="' . ($link ? h($link) : ".") . '">' . $drivers[DRIVER] . '</a> » '; //! hide in Editor + echo '<p id="breadcrumb"><a href="' . ($link ? h($link) : ".") . '">' . $drivers[DRIVER] . '</a> » '; $link = substr(preg_replace('~db=[^&]*&~', '', ME), 0, -1); $server = (SERVER != "" ? h(SERVER) : lang('Server')); if ($breadcrumb === false) { Modified: branches/sqlite/editor/db.inc.php =================================================================== --- branches/sqlite/editor/db.inc.php 2010-04-13 12:32:03 UTC (rev 1427) +++ branches/sqlite/editor/db.inc.php 2010-04-13 12:49:15 UTC (rev 1428) @@ -1,5 +1,5 @@ <?php -page_header(lang('Server'), "", null); +page_header(lang('Server'), "", false); ?> <form action=""><p> Modified: branches/sqlite/editor/index.php =================================================================== --- branches/sqlite/editor/index.php 2010-04-13 12:32:03 UTC (rev 1427) +++ branches/sqlite/editor/index.php 2010-04-13 12:49:15 UTC (rev 1428) @@ -7,6 +7,7 @@ */ include "../adminer/include/bootstrap.inc.php"; +$drivers[DRIVER] = lang('Login'); if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) { $_GET["edit"] = $_GET["select"]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-13 14:40:57
|
Revision: 1429 http://adminer.svn.sourceforge.net/adminer/?rev=1429&view=rev Author: jakubvrana Date: 2010-04-13 14:40:50 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Driver specific operators Modified Paths: -------------- branches/sqlite/adminer/drivers/mssql.inc.php branches/sqlite/adminer/drivers/mysql.inc.php branches/sqlite/adminer/drivers/pgsql.inc.php branches/sqlite/adminer/drivers/sqlite.inc.php branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/adminer/select.inc.php branches/sqlite/todo.txt Modified: branches/sqlite/adminer/drivers/mssql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-13 12:49:15 UTC (rev 1428) +++ branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-13 14:40:50 UTC (rev 1429) @@ -393,4 +393,5 @@ $structured_types[$key] = array_keys($val); } $unsigned = array(); + $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); } Modified: branches/sqlite/adminer/drivers/mysql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-13 12:49:15 UTC (rev 1428) +++ branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-13 14:40:50 UTC (rev 1429) @@ -704,4 +704,5 @@ $structured_types[$key] = array_keys($val); } $unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants + $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL"); ///< @var array operators used in select } Modified: branches/sqlite/adminer/drivers/pgsql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-13 12:49:15 UTC (rev 1428) +++ branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-13 14:40:50 UTC (rev 1429) @@ -422,4 +422,5 @@ $structured_types[$key] = array_keys($val); } $unsigned = array(); + $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "~", "IN", "IS NULL", "NOT LIKE", "!~", "NOT IN", "IS NOT NULL"); } Modified: branches/sqlite/adminer/drivers/sqlite.inc.php =================================================================== --- branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-13 12:49:15 UTC (rev 1428) +++ branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-13 14:40:50 UTC (rev 1429) @@ -454,4 +454,5 @@ $types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0); $structured_types = array_keys($types); $unsigned = array(); + $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // REGEXP can be user defined function } Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-13 12:49:15 UTC (rev 1428) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-13 14:40:50 UTC (rev 1429) @@ -6,8 +6,8 @@ /** @var array grouping functions used in select */ var $grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); - /** @var array operators used in select */ - var $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL"); + /** @var array operators used in select, null for all operators */ + var $operators; /** Name in title and navigation * @return string Modified: branches/sqlite/adminer/select.inc.php =================================================================== --- branches/sqlite/adminer/select.inc.php 2010-04-13 12:49:15 UTC (rev 1428) +++ branches/sqlite/adminer/select.inc.php 2010-04-13 14:40:50 UTC (rev 1429) @@ -19,6 +19,10 @@ $rights += $field["privileges"]; } +if (!isset($adminer->operators)) { + $adminer->operators = $operators; +} + list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes); $where = $adminer->selectSearchProcess($fields, $indexes); $order = $adminer->selectOrderProcess($fields, $indexes); Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-13 12:49:15 UTC (rev 1428) +++ branches/sqlite/todo.txt 2010-04-13 14:40:50 UTC (rev 1429) @@ -28,15 +28,15 @@ Add whisperer to fields with foreign key to big table SQLite: +SQL_CALC_FOUND_ROWS SQL functions - user defined char_length, from_unixtime, lower, sec_to_time, time_to_sec, unix_timestamp, upper CREATE DATABASE - PRAGMA encoding = "UTF-8" Detecion of non-existing database DROP DATABASE by file operations -CSV import +CSV import - ON DUPLICATE KEY UPDATE Export PostgreSQL: -Operators Users - SELECT * FROM pg_user Table schema Export - http://www.postgresql.org/docs/8.4/static/functions-info.html This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-13 15:06:33
|
Revision: 1430 http://adminer.svn.sourceforge.net/adminer/?rev=1430&view=rev Author: jakubvrana Date: 2010-04-13 15:06:27 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Order by aggregate functions in SQLite Modified Paths: -------------- branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/todo.txt Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-13 14:40:50 UTC (rev 1429) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-13 15:06:27 UTC (rev 1430) @@ -344,8 +344,8 @@ function selectOrderProcess($fields, $indexes) { $return = array(); foreach ((array) $_GET["order"] as $key => $val) { - if (isset($fields[$val]) || preg_match('~^((COUNT\\(DISTINCT |[A-Z0-9_]+\\()`(?:[^`]|``)+`\\)|COUNT\\(\\*\\))$~', $val)) { - $return[] = idf_escape($val) . (isset($_GET["desc"][$key]) ? " DESC" : ""); + if (isset($fields[$val]) || preg_match('~^((COUNT\\(DISTINCT |[A-Z0-9_]+\\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\\)|COUNT\\(\\*\\))$~', $val)) { + $return[] = (isset($fields[$val]) ? idf_escape($val) : $val) . (isset($_GET["desc"][$key]) ? " DESC" : ""); } } return $return; Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-13 14:40:50 UTC (rev 1429) +++ branches/sqlite/todo.txt 2010-04-13 15:06:27 UTC (rev 1430) @@ -38,6 +38,7 @@ PostgreSQL: Users - SELECT * FROM pg_user +ORDER BY COUNT(*) Table schema Export - http://www.postgresql.org/docs/8.4/static/functions-info.html Table status - http://www.postgresql.org/docs/8.4/static/functions-admin.html This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-13 15:12:54
|
Revision: 1431 http://adminer.svn.sourceforge.net/adminer/?rev=1431&view=rev Author: jakubvrana Date: 2010-04-13 15:12:48 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Driver specific FOUND_ROWS Modified Paths: -------------- branches/sqlite/adminer/select.inc.php branches/sqlite/todo.txt Modified: branches/sqlite/adminer/select.inc.php =================================================================== --- branches/sqlite/adminer/select.inc.php 2010-04-13 15:06:27 UTC (rev 1430) +++ branches/sqlite/adminer/select.inc.php 2010-04-13 15:12:48 UTC (rev 1431) @@ -184,7 +184,7 @@ $adminer->selectActionPrint($text_length); echo "</form>\n"; - $query = "SELECT" . limit((intval($limit) && $group && count($group) < count($select) ? "SQL_CALC_FOUND_ROWS " : "") . $from . $group_by, ($limit != "" ? intval($limit) : null), ($_GET["page"] ? $limit * $_GET["page"] : 0)); + $query = "SELECT" . limit((intval($limit) && $group && count($group) < count($select) && $driver == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . $from . $group_by, ($limit != "" ? intval($limit) : null), ($_GET["page"] ? $limit * $_GET["page"] : 0)); echo $adminer->selectQuery($query); $result = $connection->query($query); @@ -199,7 +199,7 @@ } // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest) $found_rows = (intval($limit) && $group && count($group) < count($select) - ? $connection->result(" SELECT FOUND_ROWS()") // space to allow mysql.trace_mode + ? ($driver == "sql" ? $connection->result(" SELECT FOUND_ROWS()") : $connection->result("SELECT COUNT(*) FROM ($query) x")) // space to allow mysql.trace_mode : count($rows) ); Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-13 15:06:27 UTC (rev 1430) +++ branches/sqlite/todo.txt 2010-04-13 15:12:48 UTC (rev 1431) @@ -28,7 +28,6 @@ Add whisperer to fields with foreign key to big table SQLite: -SQL_CALC_FOUND_ROWS SQL functions - user defined char_length, from_unixtime, lower, sec_to_time, time_to_sec, unix_timestamp, upper CREATE DATABASE - PRAGMA encoding = "UTF-8" Detecion of non-existing database This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-13 15:17:21
|
Revision: 1432 http://adminer.svn.sourceforge.net/adminer/?rev=1432&view=rev Author: jakubvrana Date: 2010-04-13 15:17:15 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Driver specific grouping functions Modified Paths: -------------- branches/sqlite/adminer/drivers/mssql.inc.php branches/sqlite/adminer/drivers/mysql.inc.php branches/sqlite/adminer/drivers/pgsql.inc.php branches/sqlite/adminer/drivers/sqlite.inc.php branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/editor/include/adminer.inc.php Modified: branches/sqlite/adminer/drivers/mssql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-13 15:12:48 UTC (rev 1431) +++ branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-13 15:17:15 UTC (rev 1432) @@ -394,4 +394,5 @@ } $unsigned = array(); $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); + $grouping = array("avg", "count", "count distinct", "max", "min", "sum"); } Modified: branches/sqlite/adminer/drivers/mysql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-13 15:12:48 UTC (rev 1431) +++ branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-13 15:17:15 UTC (rev 1432) @@ -705,4 +705,5 @@ } $unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL"); ///< @var array operators used in select + $grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select } Modified: branches/sqlite/adminer/drivers/pgsql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-13 15:12:48 UTC (rev 1431) +++ branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-13 15:17:15 UTC (rev 1432) @@ -423,4 +423,5 @@ } $unsigned = array(); $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "~", "IN", "IS NULL", "NOT LIKE", "!~", "NOT IN", "IS NOT NULL"); + $grouping = array("avg", "count", "count distinct", "max", "min", "sum"); } Modified: branches/sqlite/adminer/drivers/sqlite.inc.php =================================================================== --- branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-13 15:12:48 UTC (rev 1431) +++ branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-13 15:17:15 UTC (rev 1432) @@ -455,4 +455,5 @@ $structured_types = array_keys($types); $unsigned = array(); $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // REGEXP can be user defined function + $grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); } Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-13 15:12:48 UTC (rev 1431) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-13 15:17:15 UTC (rev 1432) @@ -3,9 +3,6 @@ /** @var array functions used in select */ var $functions = array("char_length", "from_unixtime", "hex", "lower", "round", "sec_to_time", "time_to_sec", "unix_timestamp", "upper"); - /** @var array grouping functions used in select */ - var $grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); - /** @var array operators used in select, null for all operators */ var $operators; @@ -177,9 +174,10 @@ * @return null */ function selectColumnsPrint($select, $columns) { + global $grouping; print_fieldset("select", lang('Select'), $select); $i = 0; - $fun_group = array(lang('Functions') => $this->functions, lang('Aggregation') => $this->grouping); + $fun_group = array(lang('Functions') => $this->functions, lang('Aggregation') => $grouping); foreach ($select as $key => $val) { $val = $_GET["columns"][$key]; echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, $val["fun"]); @@ -288,12 +286,13 @@ * @return array (array(select_expressions), array(group_expressions)) */ function selectColumnsProcess($columns, $indexes) { + global $grouping; $select = array(); // select expressions, empty for * $group = array(); // expressions without aggregation - will be used for GROUP BY if an aggregation function is used foreach ((array) $_GET["columns"] as $key => $val) { - if ($val["fun"] == "count" || (isset($columns[$val["col"]]) && (!$val["fun"] || in_array($val["fun"], $this->functions) || in_array($val["fun"], $this->grouping)))) { + if ($val["fun"] == "count" || (isset($columns[$val["col"]]) && (!$val["fun"] || in_array($val["fun"], $this->functions) || in_array($val["fun"], $grouping)))) { $select[$key] = apply_sql_function($val["fun"], (isset($columns[$val["col"]]) ? idf_escape($val["col"]) : "*")); - if (!in_array($val["fun"], $this->grouping)) { + if (!in_array($val["fun"], $grouping)) { $group[] = $select[$key]; } } Modified: branches/sqlite/editor/include/adminer.inc.php =================================================================== --- branches/sqlite/editor/include/adminer.inc.php 2010-04-13 15:12:48 UTC (rev 1431) +++ branches/sqlite/editor/include/adminer.inc.php 2010-04-13 15:17:15 UTC (rev 1432) @@ -182,7 +182,7 @@ } function selectColumnsPrint($select, $columns) { - //! allow grouping functions by indexes + // can allow grouping functions by indexes } function selectSearchPrint($where, $columns, $indexes) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-13 15:39:09
|
Revision: 1433 http://adminer.svn.sourceforge.net/adminer/?rev=1433&view=rev Author: jakubvrana Date: 2010-04-13 15:39:03 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Driver specific functions Modified Paths: -------------- branches/sqlite/adminer/drivers/mssql.inc.php branches/sqlite/adminer/drivers/mysql.inc.php branches/sqlite/adminer/drivers/pgsql.inc.php branches/sqlite/adminer/drivers/sqlite.inc.php branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/todo.txt Modified: branches/sqlite/adminer/drivers/mssql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-13 15:17:15 UTC (rev 1432) +++ branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-13 15:39:03 UTC (rev 1433) @@ -394,5 +394,6 @@ } $unsigned = array(); $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); + $functions = array("len", "lower", "round", "upper"); $grouping = array("avg", "count", "count distinct", "max", "min", "sum"); } Modified: branches/sqlite/adminer/drivers/mysql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-13 15:17:15 UTC (rev 1432) +++ branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-13 15:39:03 UTC (rev 1433) @@ -705,5 +705,6 @@ } $unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL"); ///< @var array operators used in select + $functions = array("char_length", "from_unixtime", "hex", "lower", "round", "sec_to_time", "time_to_sec", "unix_timestamp", "upper"); ///< @var array functions used in select $grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select } Modified: branches/sqlite/adminer/drivers/pgsql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-13 15:17:15 UTC (rev 1432) +++ branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-13 15:39:03 UTC (rev 1433) @@ -423,5 +423,6 @@ } $unsigned = array(); $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "~", "IN", "IS NULL", "NOT LIKE", "!~", "NOT IN", "IS NOT NULL"); + $functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper"); $grouping = array("avg", "count", "count distinct", "max", "min", "sum"); } Modified: branches/sqlite/adminer/drivers/sqlite.inc.php =================================================================== --- branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-13 15:17:15 UTC (rev 1432) +++ branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-13 15:39:03 UTC (rev 1433) @@ -455,5 +455,6 @@ $structured_types = array_keys($types); $unsigned = array(); $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // REGEXP can be user defined function + $functions = array("hex", "length", "lower", "round", "upper"); $grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); } Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-13 15:17:15 UTC (rev 1432) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-13 15:39:03 UTC (rev 1433) @@ -1,8 +1,5 @@ <?php class Adminer { - /** @var array functions used in select */ - var $functions = array("char_length", "from_unixtime", "hex", "lower", "round", "sec_to_time", "time_to_sec", "unix_timestamp", "upper"); - /** @var array operators used in select, null for all operators */ var $operators; @@ -174,10 +171,10 @@ * @return null */ function selectColumnsPrint($select, $columns) { - global $grouping; + global $functions, $grouping; print_fieldset("select", lang('Select'), $select); $i = 0; - $fun_group = array(lang('Functions') => $this->functions, lang('Aggregation') => $grouping); + $fun_group = array(lang('Functions') => $functions, lang('Aggregation') => $grouping); foreach ($select as $key => $val) { $val = $_GET["columns"][$key]; echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, $val["fun"]); @@ -286,11 +283,11 @@ * @return array (array(select_expressions), array(group_expressions)) */ function selectColumnsProcess($columns, $indexes) { - global $grouping; + global $functions, $grouping; $select = array(); // select expressions, empty for * $group = array(); // expressions without aggregation - will be used for GROUP BY if an aggregation function is used foreach ((array) $_GET["columns"] as $key => $val) { - if ($val["fun"] == "count" || (isset($columns[$val["col"]]) && (!$val["fun"] || in_array($val["fun"], $this->functions) || in_array($val["fun"], $grouping)))) { + if ($val["fun"] == "count" || (isset($columns[$val["col"]]) && (!$val["fun"] || in_array($val["fun"], $functions) || in_array($val["fun"], $grouping)))) { $select[$key] = apply_sql_function($val["fun"], (isset($columns[$val["col"]]) ? idf_escape($val["col"]) : "*")); if (!in_array($val["fun"], $grouping)) { $group[] = $select[$key]; Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-13 15:17:15 UTC (rev 1432) +++ branches/sqlite/todo.txt 2010-04-13 15:39:03 UTC (rev 1433) @@ -28,7 +28,7 @@ Add whisperer to fields with foreign key to big table SQLite: -SQL functions - user defined char_length, from_unixtime, lower, sec_to_time, time_to_sec, unix_timestamp, upper +Editing functions CREATE DATABASE - PRAGMA encoding = "UTF-8" Detecion of non-existing database DROP DATABASE by file operations This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-13 21:22:36
|
Revision: 1436 http://adminer.svn.sourceforge.net/adminer/?rev=1436&view=rev Author: jakubvrana Date: 2010-04-13 21:22:30 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Comments Modified Paths: -------------- branches/sqlite/adminer/dump.inc.php branches/sqlite/adminer/include/functions.inc.php branches/sqlite/adminer/sql.inc.php branches/sqlite/version.js Modified: branches/sqlite/adminer/dump.inc.php =================================================================== --- branches/sqlite/adminer/dump.inc.php 2010-04-13 21:20:44 UTC (rev 1435) +++ branches/sqlite/adminer/dump.inc.php 2010-04-13 21:22:30 UTC (rev 1436) @@ -4,13 +4,14 @@ if ($_POST) { $ext = dump_headers(($TABLE != "" ? $TABLE : DB), (DB == "" || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); if ($_POST["format"] == "sql") { - echo "-- Adminer $VERSION dump -SET NAMES utf8; + echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump + +" . ($driver != "sql" ? "" : "SET NAMES utf8; SET foreign_key_checks = 0; SET time_zone = " . $connection->quote($connection->result("SELECT @@time_zone")) . "; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; -"; +"); } $style = $_POST["db_style"]; Modified: branches/sqlite/adminer/include/functions.inc.php =================================================================== --- branches/sqlite/adminer/include/functions.inc.php 2010-04-13 21:20:44 UTC (rev 1435) +++ branches/sqlite/adminer/include/functions.inc.php 2010-04-13 21:22:30 UTC (rev 1436) @@ -13,7 +13,7 @@ * @return string */ function idf_unescape($idf) { - return str_replace("$idf[0]$idf[0]", $idf[0], substr($idf, 1, -1)); + return str_replace($idf[0] . $idf[0], $idf[0], substr($idf, 1, -1)); } /** Escape string to use inside '' Modified: branches/sqlite/adminer/sql.inc.php =================================================================== --- branches/sqlite/adminer/sql.inc.php 2010-04-13 21:20:44 UTC (rev 1435) +++ branches/sqlite/adminer/sql.inc.php 2010-04-13 21:22:30 UTC (rev 1436) @@ -121,6 +121,7 @@ if ($empty) { echo "<p class='message'>" . lang('No commands to execute.') . "\n"; } + //! MS SQL - SET SHOWPLAN_ALL OFF } else { echo "<p class='error'>" . upload_error($query) . "\n"; } Modified: branches/sqlite/version.js =================================================================== --- branches/sqlite/version.js 2010-04-13 21:20:44 UTC (rev 1435) +++ branches/sqlite/version.js 2010-04-13 21:22:30 UTC (rev 1436) @@ -1,4 +1,4 @@ -// downloaded from repository by verifyVersion() +// downloaded from repository by verifyVersion() before Adminer 3.0.0 (function () { // cookie function is not defined in older versions var date = new Date(); date.setDate(date.getDate() + 7); // valid for 7 days This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-14 15:13:18
|
Revision: 1438 http://adminer.svn.sourceforge.net/adminer/?rev=1438&view=rev Author: jakubvrana Date: 2010-04-14 15:13:07 +0000 (Wed, 14 Apr 2010) Log Message: ----------- Search in enum Modified Paths: -------------- branches/sqlite/adminer/include/functions.inc.php branches/sqlite/editor/include/adminer.inc.php branches/sqlite/todo.txt Modified: branches/sqlite/adminer/include/functions.inc.php =================================================================== --- branches/sqlite/adminer/include/functions.inc.php 2010-04-14 11:39:48 UTC (rev 1437) +++ branches/sqlite/adminer/include/functions.inc.php 2010-04-14 15:13:07 UTC (rev 1438) @@ -462,6 +462,22 @@ return $return; } +/** Print enum input field +* @param string "radio"|"checkbox" +* @param string +* @param array +* @param mixed int|string|array +* @return null +*/ +function enum_input($type, $name, $field, $value) { + preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches); + foreach ($matches[1] as $i => $val) { + $val = stripcslashes(str_replace("''", "'", $val)); + $checked = (is_int($value) ? $value == $i+1 : (is_array($value) ? in_array($i+1, $value) : $value === $val)); + echo " <label><input type='$type' name='$name' value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($val) . '</label>'; + } +} + /** Print edit input field * @param array one field from fields() * @param mixed @@ -476,12 +492,7 @@ if ($field["type"] == "enum") { echo nbsp($functions[""]) . "<td>" . ($functions["orig"] ? "<label><input type='radio' name='fields[$name]' value='-1' checked><em>$functions[orig]</em></label> " : ""); echo $adminer->editInput($_GET["edit"], $field, " name='fields[$name]'", $value); - preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches); - foreach ($matches[1] as $i => $val) { - $val = stripcslashes(str_replace("''", "'", $val)); - $checked = (is_int($value) ? $value == $i+1 : $value === $val); - echo " <label><input type='radio' name='fields[$name]' value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($val) . '</label>'; - } + enum_input("radio", "fields[$name]", $field, $value); } else { $first = 0; foreach ($functions as $key => $val) { @@ -598,7 +609,7 @@ * @return string */ function apply_sql_function($function, $column) { - return ($function ? ($function == "count distinct" ? "COUNT(DISTINCT " : strtoupper("$function(")) . "$column)" : $column); + return ($function ? ($function == "unixepoch" ? "DATETIME($column, '$function')" : ($function == "count distinct" ? "COUNT(DISTINCT " : strtoupper("$function(")) . "$column)") : $column); } /** Check whether the string is e-mail address Modified: branches/sqlite/editor/include/adminer.inc.php =================================================================== --- branches/sqlite/editor/include/adminer.inc.php 2010-04-14 11:39:48 UTC (rev 1437) +++ branches/sqlite/editor/include/adminer.inc.php 2010-04-14 15:13:07 UTC (rev 1438) @@ -186,27 +186,36 @@ } function selectSearchPrint($where, $columns, $indexes) { + $where = (array) $_GET["where"]; echo '<fieldset><legend>' . lang('Search') . "</legend><div>\n"; $keys = array(); - foreach ((array) $_GET["where"] as $key => $val) { + foreach ($where as $key => $val) { $keys[$val["col"]] = $key; } - $i = -1; + $i = 0; + foreach (fields($_GET["select"]) as $name => $field) { + if (ereg("enum", $field["type"])) { //! set - uses 1 << $i and FIND_IN_SET() + $desc = $columns[$name]; + $key = $keys[$name]; + $i--; + echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'>:"; + enum_input("checkbox", "where[$i][val][]", $field, (array) $where[$key]["val"]); //! impossible to search for NULL + echo "</div>\n"; + unset($columns[$name]); + } + } foreach ($columns as $name => $desc) { - $key = $keys[$name]; $options = $this->foreignKeyOptions($_GET["select"], $name); if ($options) { - echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'><input type='hidden' name='where[$i][op]' value='='>: <select name='where[$i][val]'>" . optionlist($options, $_GET["where"][$key]["val"], true) . "</select></div>\n"; + $key = $keys[$name]; $i--; + echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'><input type='hidden' name='where[$i][op]' value='='>: <select name='where[$i][val]'>" . optionlist($options, $where[$key]["val"], true) . "</select></div>\n"; unset($columns[$name]); - if (isset($key)) { - unset($_GET["where"][$key]); - } } } $i = 0; - foreach ((array) $_GET["where"] as $val) { - if ("$val[col]$val[val]" != "") { + foreach ($where as $val) { + if ($columns[$val["col"]] && "$val[col]$val[val]" != "") { echo "<div><select name='where[$i][col]'><option value=''>" . lang('(anywhere)') . optionlist($columns, $val["col"], true) . "</select>"; echo html_select("where[$i][op]", array(-1 => "") + $this->operators, $val["op"]); echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n"; @@ -273,15 +282,21 @@ function selectSearchProcess($fields, $indexes) { $return = array(); - foreach ((array) $_GET["where"] as $key => $val) { - $col = $val["col"]; - if (($key < 0 ? "" : $col) . $val["val"] != "") { + foreach ((array) $_GET["where"] as $key => $where) { + $col = $where["col"]; + $op = $where["op"]; + $val = $where["val"]; + if (($key < 0 ? "" : $col) . $val != "") { $conds = array(); foreach (($col != "" ? array($col => $fields[$col]) : $fields) as $name => $field) { - if ($col != "" || is_numeric($val["val"]) || !ereg('int|float|double|decimal', $field["type"])) { - $text_type = ereg('char|text|enum|set', $field["type"]); - $value = $this->processInput($field, ($text_type && ereg('^[^%]+$', $val["val"]) ? "%$val[val]%" : $val["val"])); - $conds[] = idf_escape($name) . ($value == "NULL" ? " IS" . ($val["op"] == ">=" ? " NOT" : "") : (in_array($val["op"], $this->operators) ? " $val[op]" : ($val["op"] != "=" && $text_type ? " LIKE" : " ="))) . " $value"; //! can issue "Illegal mix of collations" for columns in other character sets - solve by CONVERT($name using utf8) + if ($col != "" || is_numeric($val) || !ereg('int|float|double|decimal', $field["type"])) { + if ($col != "" && $field["type"] == "enum") { + $conds[] = idf_escape($name) . " IN (" . implode(", ", array_map('intval', $val)) . ")"; + } else { + $text_type = ereg('char|text|enum|set', $field["type"]); + $value = $this->processInput($field, ($text_type && ereg('^[^%]+$', $val) ? "%$val%" : $val)); + $conds[] = idf_escape($name) . ($value == "NULL" ? " IS" . ($op == ">=" ? " NOT" : "") : (in_array($op, $this->operators) ? " $op" : ($op != "=" && $text_type ? " LIKE" : " ="))) . " $value"; //! can issue "Illegal mix of collations" for columns in other character sets - solve by CONVERT($name using utf8) + } } } $return[] = ($conds ? "(" . implode(" OR ", $conds) . ")" : "0"); @@ -345,9 +360,9 @@ } $fields = fields($_GET["select"]); foreach ($this->rowDescriptions($rows, $foreignKeys) as $row) { - $replace = array(); + $replace = array('{\\' => '{'); // allow literal {$name} foreach ($matches[1] as $val) { - $replace['{$' . "$val}"] = $this->editVal($row[$val], $fields[$val]); //! allow literal {$name} + $replace['{$' . "$val}"] = $this->editVal($row[$val], $fields[$val]); } $email = $row[$_POST["email_field"]]; if (is_email($email) && send_email($email, strtr($subject, $replace), strtr($message, $replace), $_POST["email_from"], $_FILES["email_files"])) { @@ -367,6 +382,7 @@ function editFunctions($field) { $return = array("" => ($field["null"] || $field["auto_increment"] || $field["full_type"] == "tinyint(1)" ? "" : "*")); + //! respect driver if (ereg('date|time', $field["type"])) { $return[] = "now"; } @@ -405,6 +421,8 @@ $return = $connection->quote($return); if (!ereg('varchar|text', $field["type"]) && $field["full_type"] != "tinyint(1)" && $value == "") { $return = "NULL"; + } elseif (ereg('^(md5|sha1)$', $function)) { + $return = "$function($return)"; } return $return; } Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-14 11:39:48 UTC (rev 1437) +++ branches/sqlite/todo.txt 2010-04-14 15:13:07 UTC (rev 1438) @@ -2,9 +2,7 @@ Transactions in export Create view and routine options Mass editation of individual rows -Offer enum and set items in search - whisperer Variables editation, especially timezone -Use event $intervals + microseconds in relative date functions Optionally check IP address Disable spell checking in SQL textareas - spellcheck="false" Accept Tab in SQL textareas, Ctrl+Enter to send form @@ -41,6 +39,6 @@ Table schema Export - http://www.postgresql.org/docs/8.4/static/functions-info.html Table status - http://www.postgresql.org/docs/8.4/static/functions-admin.html -Comments - http://www.postgresql.org/docs/8.4/static/sql-comment.html Column rights - http://www.postgresql.org/docs/8.4/static/functions-info.html Move table - ALTER TABLE SET SCHEMA +bool in Editor This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-15 15:06:19
|
Revision: 1444 http://adminer.svn.sourceforge.net/adminer/?rev=1444&view=rev Author: jakubvrana Date: 2010-04-15 15:06:09 +0000 (Thu, 15 Apr 2010) Log Message: ----------- Merge from trunk Modified Paths: -------------- branches/sqlite/adminer/edit.inc.php branches/sqlite/adminer/include/functions.inc.php branches/sqlite/adminer/select.inc.php Property Changed: ---------------- branches/sqlite/ branches/sqlite/adminer/drivers/mysql.inc.php Property changes on: branches/sqlite ___________________________________________________________________ Modified: svn:mergeinfo - /trunk:1193-1377 + /trunk:1193-1443 Property changes on: branches/sqlite/adminer/drivers/mysql.inc.php ___________________________________________________________________ Modified: svn:mergeinfo - /trunk/adminer/drivers/mysql.inc.php:1193-1377 /trunk/adminer/include/mysql.inc.php:675-681,1193-1377 + /trunk/adminer/drivers/mysql.inc.php:1193-1443 /trunk/adminer/include/mysql.inc.php:675-681,1193-1443 Modified: branches/sqlite/adminer/edit.inc.php =================================================================== --- branches/sqlite/adminer/edit.inc.php 2010-04-15 14:59:40 UTC (rev 1443) +++ branches/sqlite/adminer/edit.inc.php 2010-04-15 15:06:09 UTC (rev 1444) @@ -11,7 +11,7 @@ if ($_POST && !$error && !isset($_GET["select"])) { $location = $_POST["referer"]; if ($_POST["insert"]) { // continue edit or insert - $location = ($update ? ME . "&edit=" . urlencode($TABLE) . unique_idf($_POST["fields"], indexes($TABLE)) : $_SERVER["REQUEST_URI"]); //! doesn't work with functions + $location = ($update ? null : $_SERVER["REQUEST_URI"]); } elseif (!ereg('^.+&select=.+$', $location)) { $location = ME . "select=" . urlencode($TABLE); } Modified: branches/sqlite/adminer/include/functions.inc.php =================================================================== --- branches/sqlite/adminer/include/functions.inc.php 2010-04-15 14:59:40 UTC (rev 1443) +++ branches/sqlite/adminer/include/functions.inc.php 2010-04-15 15:06:09 UTC (rev 1444) @@ -177,33 +177,18 @@ return $return; } -/** Get query string for unique identifier of a row -* @param array -* @param array result of indexes() -* @return string -*/ -function unique_idf($row, $indexes) { - $return = ""; - foreach (unique_array($row, $indexes) as $key => $val) { - $return .= "&" . (isset($val) ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key)); - } - return $return; -} - /** Create SQL condition from parsed query string * @param array parsed query string * @return string */ function where($where) { $return = array(); - foreach ((array) $where["where"] as $key => $val) { - $key = bracket_escape($key, "back"); - $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . (ereg('\\.', $val) ? " LIKE " . exact_value(addcslashes($val, "%_")) : " = " . exact_value($val)); // LIKE because of floats, but slow with ints //! enum and set, columns looking like functions + foreach (array("where", "null") as $type) { + foreach ((array) $where[$type] as $key => $val) { + $key = bracket_escape($key, "back"); + $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . ($type == "null" ? " IS NULL" : (ereg('\\.', $val) ? " LIKE " . exact_value(addcslashes($val, "%_")) : " = " . exact_value($val))); // LIKE because of floats, but slow with ints //! enum and set, columns looking like functions + } } - foreach ((array) $where["null"] as $key) { - $key = bracket_escape($key, "back"); - $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " IS NULL"; - } return implode(" AND ", $return); } @@ -221,9 +206,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 @@ -273,8 +259,8 @@ } /** Send Location header and exit +* @param string null to only set a message * @param string -* @param string * @return null */ function redirect($location, $message = null) { @@ -282,8 +268,10 @@ restart_session(); $_SESSION["messages"][] = $message; } - header("Location: " . ($location != "" ? $location : ".")); - exit; + if (isset($location)) { + header("Location: " . ($location != "" ? $location : ".")); + exit; + } } /** Execute query and redirect if successful Modified: branches/sqlite/adminer/select.inc.php =================================================================== --- branches/sqlite/adminer/select.inc.php 2010-04-15 14:59:40 UTC (rev 1443) +++ branches/sqlite/adminer/select.inc.php 2010-04-15 15:06:09 UTC (rev 1444) @@ -226,7 +226,11 @@ } echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n"; foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) { - $unique_idf = unique_idf($row, $indexes); + $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])) { @@ -264,10 +268,14 @@ if ($key == "COUNT(*)") { //! columns looking like functions $link = h(ME . "select=" . urlencode($TABLE)); $i = 0; - foreach (unique_array($row, $indexes) as $k => $v) { - $link .= h("&where[$i][col]=" . urlencode($k) . "&where[$i][op]=" . (isset($v) ? "%3D&where[$i][val]=" . urlencode($v) : "IS+NULL")); - $i++; + foreach ((array) $_GET["where"] as $v) { + if (!array_key_exists($v["col"], $unique_array)) { + $link .= h(where_link($i++, $v["col"], $v["val"], urlencode($v["op"]))); + } } + foreach ($unique_array as $k => $v) { + $link .= h(where_link($i++, $k, $v, (isset($v) ? "=" : "IS NULL"))); + } } } if (!$link && is_email($val)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-16 12:51:17
|
Revision: 1446 http://adminer.svn.sourceforge.net/adminer/?rev=1446&view=rev Author: jakubvrana Date: 2010-04-16 12:51:11 +0000 (Fri, 16 Apr 2010) Log Message: ----------- Big tables optimizations Modified Paths: -------------- branches/sqlite/adminer/select.inc.php branches/sqlite/editor/include/adminer.inc.php Modified: branches/sqlite/adminer/select.inc.php =================================================================== --- branches/sqlite/adminer/select.inc.php 2010-04-16 12:49:45 UTC (rev 1445) +++ branches/sqlite/adminer/select.inc.php 2010-04-16 12:51:11 UTC (rev 1446) @@ -226,7 +226,7 @@ } echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n"; foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) { - $unique_array = unique_array($row, $indexes); + $unique_array = unique_array($rows[$n], $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)); @@ -298,8 +298,10 @@ $exact_count = true; if (intval($limit) && count($group) >= count($select) && ($found_rows >= $limit || $_GET["page"])) { $found_rows = $table_status["Rows"]; - if (!isset($found_rows) || $where || $_GET["page"] || ($table_status["Engine"] == "InnoDB" && $found_rows < 1e5)) { + if (!isset($found_rows) || $where || $_GET["page"] * $limit * 2 > $found_rows || ($table_status["Engine"] == "InnoDB" && $found_rows < 1e5)) { // slow with big tables + ob_flush(); + flush(); $found_rows = $connection->result("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "")); } else { $exact_count = false; Modified: branches/sqlite/editor/include/adminer.inc.php =================================================================== --- branches/sqlite/editor/include/adminer.inc.php 2010-04-16 12:49:45 UTC (rev 1445) +++ branches/sqlite/editor/include/adminer.inc.php 2010-04-16 12:51:11 UTC (rev 1446) @@ -476,6 +476,7 @@ /*protected */function foreignKeyOptions($table, $column) { global $connection; + $table_status = table_status($table); $foreignKeys = column_foreign_keys($table); foreach ((array) $foreignKeys[$column] as $foreignKey) { if (count($foreignKey["source"]) == 1) { @@ -484,7 +485,7 @@ if ($name != "") { $return = &$this->values[$foreignKey["table"]]; if (!isset($return)) { - $return = ($connection->result("SELECT COUNT(*) FROM " . idf_escape($foreignKey["table"])) > 1000 ? array() : array("" => "") + get_key_vals("SELECT $id, $name FROM " . idf_escape($foreignKey["table"]) . " ORDER BY 2")); + $return = ($table_status["Rows"] > 1000 ? array() : array("" => "") + get_key_vals("SELECT $id, $name FROM " . idf_escape($foreignKey["table"]) . " ORDER BY 2")); } return $return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-16 12:52:17
|
Revision: 1448 http://adminer.svn.sourceforge.net/adminer/?rev=1448&view=rev Author: jakubvrana Date: 2010-04-16 12:52:11 +0000 (Fri, 16 Apr 2010) Log Message: ----------- Comments Modified Paths: -------------- branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/adminer/include/auth.inc.php branches/sqlite/todo.txt Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-16 12:51:37 UTC (rev 1447) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-16 12:52:11 UTC (rev 1448) @@ -340,7 +340,7 @@ function selectOrderProcess($fields, $indexes) { $return = array(); foreach ((array) $_GET["order"] as $key => $val) { - if (isset($fields[$val]) || preg_match('~^((COUNT\\(DISTINCT |[A-Z0-9_]+\\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\\)|COUNT\\(\\*\\))$~', $val)) { + if (isset($fields[$val]) || preg_match('~^((COUNT\\(DISTINCT |[A-Z0-9_]+\\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\\)|COUNT\\(\\*\\))$~', $val)) { //! MS SQL uses [] $return[] = (isset($fields[$val]) ? idf_escape($val) : $val) . (isset($_GET["desc"][$key]) ? " DESC" : ""); } } Modified: branches/sqlite/adminer/include/auth.inc.php =================================================================== --- branches/sqlite/adminer/include/auth.inc.php 2010-04-16 12:51:37 UTC (rev 1447) +++ branches/sqlite/adminer/include/auth.inc.php 2010-04-16 12:52:11 UTC (rev 1448) @@ -54,6 +54,7 @@ session_regenerate_id(); // defense against session fixation set_session("passwords", decrypt_string($cipher, $adminer->permanentLogin())); } + //! redirect ?select=tab } function auth_error($exception = null) { Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-16 12:51:37 UTC (rev 1447) +++ branches/sqlite/todo.txt 2010-04-16 12:52:11 UTC (rev 1448) @@ -11,6 +11,7 @@ Add title to Logout, edit (in select) and select (in menu) in style "hever" Shift-click in checkboxes to select range Export by GET parameters +Only first part of big BZ2 export is readable ? LIKE %% operator ? Column and table names auto-completition in SQL textarea ? Aliasing of built-in functions can save 7 KB, function minification can save 7 KB, substitution of repetitive $a["a"] can save 4 KB, substitution of $_GET and friends can save 2 KB, aliasing of $connection->query, $connection->result and $connection->quote can save ~ 3 KB, JS packer can save 1 KB, not enclosing HTML attribute values can save 1.2 KB, replacing \\n by \n can save .3 KB @@ -26,12 +27,12 @@ Add whisperer to fields with foreign key to big table SQLite: -Editing functions CREATE DATABASE - PRAGMA encoding = "UTF-8" Detecion of non-existing database DROP DATABASE by file operations CSV import - ON DUPLICATE KEY UPDATE -Export +Export - views, triggers +Delimiter in export and SQL command PostgreSQL: Users - SELECT * FROM pg_user @@ -42,3 +43,8 @@ Column rights - http://www.postgresql.org/docs/8.4/static/functions-info.html Move table - ALTER TABLE SET SCHEMA bool in Editor + +MS SQL: +Rename by sp_rename +Detection of table collation +PDO driver This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-16 14:34:56
|
Revision: 1451 http://adminer.svn.sourceforge.net/adminer/?rev=1451&view=rev Author: jakubvrana Date: 2010-04-16 14:34:47 +0000 (Fri, 16 Apr 2010) Log Message: ----------- Remove parentheses from translation Modified Paths: -------------- branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/adminer/lang/cs.inc.php branches/sqlite/adminer/lang/de.inc.php branches/sqlite/adminer/lang/es.inc.php branches/sqlite/adminer/lang/et.inc.php branches/sqlite/adminer/lang/fr.inc.php branches/sqlite/adminer/lang/it.inc.php branches/sqlite/adminer/lang/nl.inc.php branches/sqlite/adminer/lang/ru.inc.php branches/sqlite/adminer/lang/sk.inc.php branches/sqlite/adminer/lang/zh-tw.inc.php branches/sqlite/adminer/lang/zh.inc.php branches/sqlite/editor/include/adminer.inc.php Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -205,13 +205,13 @@ $i = 0; foreach ((array) $_GET["where"] as $val) { if ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators)) { - echo "<div><select name='where[$i][col]'><option value=''>" . lang('(anywhere)') . optionlist($columns, $val["col"], true) . "</select>"; + echo "<div><select name='where[$i][col]'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, $val["col"], true) . "</select>"; echo html_select("where[$i][op]", $this->operators, $val["op"]); echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n"; $i++; } } - echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>" . lang('(anywhere)') . optionlist($columns, null, true) . "</select>"; + echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>"; echo html_select("where[$i][op]", $this->operators); echo "<input name='where[$i][val]'></div>\n"; echo "</div></fieldset>\n"; Modified: branches/sqlite/adminer/lang/cs.inc.php =================================================================== --- branches/sqlite/adminer/lang/cs.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/cs.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -202,7 +202,7 @@ 'Select data' => 'Vypsat data', 'Stop on error' => 'Zastavit při chybě', 'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Byl překročen maximální povolený počet polí. Zvyšte prosím %s a %s.', - '(anywhere)' => '(kdekoliv)', + 'anywhere' => 'kdekoliv', '%.3f s' => '%.3f s', '$1-$3-$5' => '$6.$4.$1', '[yyyy]-mm-dd' => 'd.m.[rrrr]', Modified: branches/sqlite/adminer/lang/de.inc.php =================================================================== --- branches/sqlite/adminer/lang/de.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/de.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -197,7 +197,7 @@ 'Partition name' => 'Name der Partition', 'Values' => 'Werte', '%d row(s) have been imported.' => array('%d Datensatz importiert.', '%d Datensätze wurden importiert.'), - '(anywhere)' => '(beliebig)', + 'anywhere' => 'beliebig', 'CSV Import' => 'Importiere CSV', 'Import' => 'Importieren', 'Stop on error' => 'Bei Fehler anhaltan', Modified: branches/sqlite/adminer/lang/es.inc.php =================================================================== --- branches/sqlite/adminer/lang/es.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/es.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -197,7 +197,7 @@ 'Partition name' => 'Nombre de Partición', 'Values' => 'Valores', '%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'), - '(anywhere)' => '(donde sea)', + 'anywhere' => 'donde sea', 'CSV Import' => 'Importar CSV', 'Import' => 'Importar', 'Stop on error' => 'Parar en caso de error', Modified: branches/sqlite/adminer/lang/et.inc.php =================================================================== --- branches/sqlite/adminer/lang/et.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/et.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -197,7 +197,7 @@ 'Partition name' => 'Partitsiooni nimi', 'Values' => 'Väärtused', '%d row(s) have been imported.' => array('Imporditi %d rida.', 'Imporditi %d rida.'), - '(anywhere)' => '(vahet pole)', + 'anywhere' => 'vahet pole', 'CSV Import' => 'Impordi CSV', 'Import' => 'Impordi', 'Stop on error' => 'Peatuda vea esinemisel', Modified: branches/sqlite/adminer/lang/fr.inc.php =================================================================== --- branches/sqlite/adminer/lang/fr.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/fr.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -197,7 +197,7 @@ 'Partition name' => 'Nom de la partition', 'Values' => 'Valeurs', '%d row(s) have been imported.' => array('%d ligne a été importé.','%d lignes ont été importé.'), - '(anywhere)' => '(n\'importe où)', + 'anywhere' => 'n\'importe où', 'CSV Import' => 'Importation CVS', 'Import' => 'Importer', 'Stop on error' => 'Arrêt sur erreur', Modified: branches/sqlite/adminer/lang/it.inc.php =================================================================== --- branches/sqlite/adminer/lang/it.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/it.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -197,7 +197,7 @@ 'Partition name' => 'Nome partizione', 'Values' => 'Valori', '%d row(s) have been imported.' => array('%d riga importata.','%d righe importate.'), - '(anywhere)' => '(ovunque)', + 'anywhere' => 'ovunque', 'CSV Import' => 'Importa da CSV', 'Import' => 'Importa', 'Stop on error' => 'Stop su errore', Modified: branches/sqlite/adminer/lang/nl.inc.php =================================================================== --- branches/sqlite/adminer/lang/nl.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/nl.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -197,7 +197,7 @@ 'Partition name' => 'Partitie naam', 'Values' => 'Waarden', '%d row(s) have been imported.' => array('%d rij werd geïmporteerd.', '%d rijen werden geïmporteerd.'), - '(anywhere)' => '(overal)', + 'anywhere' => 'overal', 'CSV Import' => 'CSV Import', 'Import' => 'Importeren', 'Stop on error' => 'Stoppen bij fout', Modified: branches/sqlite/adminer/lang/ru.inc.php =================================================================== --- branches/sqlite/adminer/lang/ru.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/ru.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -200,7 +200,7 @@ 'Import' => 'Импорт', 'Stop on error' => 'Остановить при ошибке', 'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Достигнуто максимальное значение количества доступных полей. Увеличьте %s и %s.', - '(anywhere)' => '(в любом месте)', + 'anywhere' => 'в любом месте', '%.3f s' => '%.3f s', '$1-$3-$5' => '$5.$3.$1', '[yyyy]-mm-dd' => 'дд.мм.[гггг]', Modified: branches/sqlite/adminer/lang/sk.inc.php =================================================================== --- branches/sqlite/adminer/lang/sk.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/sk.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -200,7 +200,7 @@ 'Import' => 'Import', 'Stop on error' => 'Zastaviť pri chybe', 'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Bol prekročený maximálny počet povolených polí. Zvýšte prosím %s a %s.', - '(anywhere)' => '(kdekoľvek)', + 'anywhere' => 'kdekoľvek', '%.3f s' => '%.3f s', '$1-$3-$5' => '$6.$4.$1', '[yyyy]-mm-dd' => 'd.m.[rrrr]', Modified: branches/sqlite/adminer/lang/zh-tw.inc.php =================================================================== --- branches/sqlite/adminer/lang/zh-tw.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/zh-tw.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -195,7 +195,7 @@ 'Partition name' => '分區名', 'Values' => '值', '%d row(s) have been imported.' => '%d行已導入。', - '(anywhere)' => '(任意位置)', + 'anywhere' => '任意位置', 'CSV Import' => '匯入 CSV', 'Import' => '匯入', 'Stop on error' => '出錯時停止', Modified: branches/sqlite/adminer/lang/zh.inc.php =================================================================== --- branches/sqlite/adminer/lang/zh.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/adminer/lang/zh.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -197,7 +197,7 @@ 'Partition name' => '分区名', 'Values' => '值', '%d row(s) have been imported.' => '%d 行已导入。', - '(anywhere)' => '(任意位置)', + 'anywhere' => '任意位置', 'CSV Import' => 'CSV 导入', 'Import' => '导入', 'Stop on error' => '出错时停止', Modified: branches/sqlite/editor/include/adminer.inc.php =================================================================== --- branches/sqlite/editor/include/adminer.inc.php 2010-04-16 14:22:03 UTC (rev 1450) +++ branches/sqlite/editor/include/adminer.inc.php 2010-04-16 14:34:47 UTC (rev 1451) @@ -216,13 +216,13 @@ $i = 0; foreach ($where as $val) { if ($columns[$val["col"]] && "$val[col]$val[val]" != "") { - echo "<div><select name='where[$i][col]'><option value=''>" . lang('(anywhere)') . optionlist($columns, $val["col"], true) . "</select>"; + echo "<div><select name='where[$i][col]'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, $val["col"], true) . "</select>"; echo html_select("where[$i][op]", array(-1 => "") + $this->operators, $val["op"]); echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n"; $i++; } } - echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>" . lang('(anywhere)') . optionlist($columns, null, true) . "</select>"; + echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>"; echo html_select("where[$i][op]", array(-1 => "") + $this->operators); echo "<input name='where[$i][val]'></div>\n"; echo "</div></fieldset>\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-16 15:10:34
|
Revision: 1453 http://adminer.svn.sourceforge.net/adminer/?rev=1453&view=rev Author: jakubvrana Date: 2010-04-16 15:10:28 +0000 (Fri, 16 Apr 2010) Log Message: ----------- Operator LIKE %% Modified Paths: -------------- branches/sqlite/adminer/db.inc.php branches/sqlite/adminer/drivers/mssql.inc.php branches/sqlite/adminer/drivers/mysql.inc.php branches/sqlite/adminer/drivers/pgsql.inc.php branches/sqlite/adminer/drivers/sqlite.inc.php branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/adminer/select.inc.php branches/sqlite/changes.txt branches/sqlite/todo.txt Modified: branches/sqlite/adminer/db.inc.php =================================================================== --- branches/sqlite/adminer/db.inc.php 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/adminer/db.inc.php 2010-04-16 15:10:28 UTC (rev 1453) @@ -49,8 +49,8 @@ echo "<form action='' method='post'>\n"; echo "<p><input name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n"; if ($_POST["search"] && $_POST["query"] != "") { - $_GET["where"][0]["op"] = "LIKE"; - $_GET["where"][0]["val"] = "%$_POST[query]%"; + $_GET["where"][0]["op"] = "LIKE %%"; + $_GET["where"][0]["val"] = $_POST["query"]; search_tables(); } echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n"; Modified: branches/sqlite/adminer/drivers/mssql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/adminer/drivers/mssql.inc.php 2010-04-16 15:10:28 UTC (rev 1453) @@ -392,7 +392,7 @@ $structured_types[$key] = array_keys($val); } $unsigned = array(); - $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); + $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); $functions = array("len", "lower", "round", "upper"); $grouping = array("avg", "count", "count distinct", "max", "min", "sum"); $edit_functions = array( Modified: branches/sqlite/adminer/drivers/mysql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/adminer/drivers/mysql.inc.php 2010-04-16 15:10:28 UTC (rev 1453) @@ -696,7 +696,7 @@ $structured_types[$key] = array_keys($val); } $unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants - $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL"); ///< @var array operators used in select + $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL"); ///< @var array operators used in select $functions = array("char_length", "from_unixtime", "hex", "lower", "round", "sec_to_time", "time_to_sec", "upper"); ///< @var array functions used in select $grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select $edit_functions = array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only Modified: branches/sqlite/adminer/drivers/pgsql.inc.php =================================================================== --- branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/adminer/drivers/pgsql.inc.php 2010-04-16 15:10:28 UTC (rev 1453) @@ -425,7 +425,7 @@ $structured_types[$key] = array_keys($val); } $unsigned = array(); - $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "~", "IN", "IS NULL", "NOT LIKE", "!~", "NOT IN", "IS NOT NULL"); + $operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); $functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper"); $grouping = array("avg", "count", "count distinct", "max", "min", "sum"); $edit_functions = array( Modified: branches/sqlite/adminer/drivers/sqlite.inc.php =================================================================== --- branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/adminer/drivers/sqlite.inc.php 2010-04-16 15:10:28 UTC (rev 1453) @@ -464,7 +464,7 @@ $types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0); $structured_types = array_keys($types); $unsigned = array(); - $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // REGEXP can be user defined function + $operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // REGEXP can be user defined function $functions = array("hex", "length", "lower", "round", "unixepoch", "upper"); $grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); $edit_functions = array( Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-16 15:10:28 UTC (rev 1453) @@ -312,8 +312,15 @@ } foreach ((array) $_GET["where"] as $val) { if ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators)) { - $in = process_length($val["val"]); - $cond = " $val[op]" . (ereg('NULL$', $val["op"]) ? "" : (ereg('IN$', $val["op"]) ? " (" . ($in != "" ? $in : "NULL") . ")" : " " . $this->processInput($fields[$val["col"]], $val["val"]))); + $cond = " $val[op]"; + if (ereg('IN$', $val["op"])) { + $in = process_length($val["val"]); + $cond .= " (" . ($in != "" ? $in : "NULL") . ")"; + } elseif ($val["op"] == "LIKE %%") { + $cond = " LIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%"); + } elseif (!ereg('NULL$', $val["op"])) { + $cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]); + } if ($val["col"] != "") { $return[] = idf_escape($val["col"]) . $cond; } else { @@ -528,3 +535,6 @@ } $adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer); +if (!isset($adminer->operators)) { + $adminer->operators = $operators; +} Modified: branches/sqlite/adminer/select.inc.php =================================================================== --- branches/sqlite/adminer/select.inc.php 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/adminer/select.inc.php 2010-04-16 15:10:28 UTC (rev 1453) @@ -19,10 +19,6 @@ $rights += $field["privileges"]; } -if (!isset($adminer->operators)) { - $adminer->operators = $operators; -} - list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes); $where = $adminer->selectSearchProcess($fields, $indexes); $order = $adminer->selectOrderProcess($fields, $indexes); Modified: branches/sqlite/changes.txt =================================================================== --- branches/sqlite/changes.txt 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/changes.txt 2010-04-16 15:10:28 UTC (rev 1453) @@ -2,7 +2,9 @@ Drivers for MS SQL, SQLite, PostgreSQL Show number of tables in server overview Allow concurrent logins on the same server +Operator LIKE %% Defer table information in database overview to JavaScript (performance) +Big tables optimizations (performance) Adminer 2.3.1 (released 2010-04-06): Add Drop button to Alter pages (regression from 2.0.0) Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-16 14:42:09 UTC (rev 1452) +++ branches/sqlite/todo.txt 2010-04-16 15:10:28 UTC (rev 1453) @@ -12,7 +12,7 @@ Shift-click in checkboxes to select range Export by GET parameters Only first part of big BZ2 export is readable -? LIKE %% operator +Remember export parameters in cookie ? Column and table names auto-completition in SQL textarea ? Aliasing of built-in functions can save 7 KB, function minification can save 7 KB, substitution of repetitive $a["a"] can save 4 KB, substitution of $_GET and friends can save 2 KB, aliasing of $connection->query, $connection->result and $connection->quote can save ~ 3 KB, JS packer can save 1 KB, not enclosing HTML attribute values can save 1.2 KB, replacing \\n by \n can save .3 KB ? Branch binary_compile: LZW compression of translations can save 30 KB, LZW compression of all texts can save 11 KB, remove of base64_decode() + using chars 127-255 in minification can save 1 KB This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-16 15:38:47
|
Revision: 1454 http://adminer.svn.sourceforge.net/adminer/?rev=1454&view=rev Author: jakubvrana Date: 2010-04-16 15:38:41 +0000 (Fri, 16 Apr 2010) Log Message: ----------- Remember export parameters in cookie Modified Paths: -------------- branches/sqlite/adminer/dump.inc.php branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/changes.txt branches/sqlite/todo.txt Modified: branches/sqlite/adminer/dump.inc.php =================================================================== --- branches/sqlite/adminer/dump.inc.php 2010-04-16 15:10:28 UTC (rev 1453) +++ branches/sqlite/adminer/dump.inc.php 2010-04-16 15:38:41 UTC (rev 1454) @@ -2,6 +2,11 @@ $TABLE = $_GET["dump"]; if ($_POST) { + $cookie = ""; + foreach (array("output", "format", "db_style", "table_style", "data_style") as $key) { + $cookie .= "&$key=" . urlencode($_POST[$key]); + } + cookie("adminer_export", substr($cookie, 1)); $ext = dump_headers(($TABLE != "" ? $TABLE : DB), (DB == "" || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); if ($_POST["format"] == "sql") { echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump @@ -155,9 +160,13 @@ $db_style[] = 'CREATE+ALTER'; $table_style[] = 'CREATE+ALTER'; } -echo "<tr><th>" . lang('Output') . "<td><input type='hidden' name='token' value='$token'>" . $adminer->dumpOutput(0) . "\n"; // token is not needed but checked in bootstrap for all POST data //! read from cookie -echo "<tr><th>" . lang('Format') . "<td>" . $adminer->dumpFormat(0) . "\n"; -echo "<tr><th>" . lang('Database') . "<td>" . html_select('db_style', $db_style, (DB != "" ? '' : 'CREATE')); +parse_str($_COOKIE["adminer_export"], $row); +if (!$row) { + $row = array("output" => "text", "format" => "sql", "db_style" => (DB != "" ? "" : "CREATE"), "table_style" => "DROP+CREATE", "data_style" => "INSERT"); +} +echo "<tr><th>" . lang('Output') . "<td>" . $adminer->dumpOutput(0, $row["output"]) . "\n"; +echo "<tr><th>" . lang('Format') . "<td>" . $adminer->dumpFormat(0, $row["format"]) . "\n"; +echo "<tr><th>" . lang('Database') . "<td>" . html_select('db_style', $db_style, $row["db_style"]); $checked = ($_GET["dump"] == ""); if (support("routine")) { echo checkbox("routines", 1, $checked, lang('Routines')); @@ -165,8 +174,8 @@ if (support("event")) { echo checkbox("events", 1, $checked, lang('Events')); } -echo "<tr><th>" . lang('Tables') . "<td>" . html_select('table_style', $table_style, 'DROP+CREATE'); -echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, 'INSERT'); +echo "<tr><th>" . lang('Tables') . "<td>" . html_select('table_style', $table_style, $row["table_style"]); +echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, $row["data_style"]); ?> </table> <p><input type="submit" value="<?php echo lang('Export'); ?>"> @@ -186,7 +195,7 @@ $prefix = ereg_replace("_.*", "", $name); $checked = ($TABLE == "" || $TABLE == (substr($TABLE, -1) == "%" ? "$prefix%" : $name)); //! % may be part of table name $print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "formUncheck('check-tables');"); - if (!$row["Engine"]) { + if (eregi("view", $row["Engine"])) { $views .= "$print\n"; } else { echo "$print<td align='right'><label>" . ($row["Engine"] == "InnoDB" && $row["Rows"] ? "~ " : "") . $row["Rows"] . checkbox("data[]", $name, $checked, "", "formUncheck('check-data');") . "</label>\n"; Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-16 15:10:28 UTC (rev 1453) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-16 15:38:41 UTC (rev 1454) @@ -451,9 +451,10 @@ /** Returns export output options * @param bool generate select (otherwise radio) + * @param string * @return string */ - function dumpOutput($select) { + function dumpOutput($select, $value = "") { $return = array('text' => lang('open'), 'file' => lang('save')); if (function_exists('gzencode')) { $return['gz'] = 'gzip'; @@ -462,15 +463,16 @@ $return['bz2'] = 'bzip2'; } // ZipArchive requires temporary file, ZIP can be created by gzcompress - see PEAR File_Archive - return html_select("output", $return, "text", $select); + return html_select("output", $return, $value, $select); } /** Returns export format options * @param bool generate select (otherwise radio) + * @param string * @return string */ - function dumpFormat($select) { - return html_select("format", array('sql' => 'SQL', 'csv' => 'CSV'), "sql", $select); + function dumpFormat($select, $value = "") { + return html_select("format", array('sql' => 'SQL', 'csv' => 'CSV'), $value, $select); } /** Prints navigation after Adminer title Modified: branches/sqlite/changes.txt =================================================================== --- branches/sqlite/changes.txt 2010-04-16 15:10:28 UTC (rev 1453) +++ branches/sqlite/changes.txt 2010-04-16 15:38:41 UTC (rev 1454) @@ -3,6 +3,7 @@ Show number of tables in server overview Allow concurrent logins on the same server Operator LIKE %% +Remember export parameters in cookie Defer table information in database overview to JavaScript (performance) Big tables optimizations (performance) Modified: branches/sqlite/todo.txt =================================================================== --- branches/sqlite/todo.txt 2010-04-16 15:10:28 UTC (rev 1453) +++ branches/sqlite/todo.txt 2010-04-16 15:38:41 UTC (rev 1454) @@ -12,7 +12,6 @@ Shift-click in checkboxes to select range Export by GET parameters Only first part of big BZ2 export is readable -Remember export parameters in cookie ? Column and table names auto-completition in SQL textarea ? Aliasing of built-in functions can save 7 KB, function minification can save 7 KB, substitution of repetitive $a["a"] can save 4 KB, substitution of $_GET and friends can save 2 KB, aliasing of $connection->query, $connection->result and $connection->quote can save ~ 3 KB, JS packer can save 1 KB, not enclosing HTML attribute values can save 1.2 KB, replacing \\n by \n can save .3 KB ? Branch binary_compile: LZW compression of translations can save 30 KB, LZW compression of all texts can save 11 KB, remove of base64_decode() + using chars 127-255 in minification can save 1 KB This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-16 15:59:20
|
Revision: 1455 http://adminer.svn.sourceforge.net/adminer/?rev=1455&view=rev Author: jakubvrana Date: 2010-04-16 15:59:14 +0000 (Fri, 16 Apr 2010) Log Message: ----------- Supports several drivers Modified Paths: -------------- branches/sqlite/adminer/index.php branches/sqlite/editor/index.php Modified: branches/sqlite/adminer/index.php =================================================================== --- branches/sqlite/adminer/index.php 2010-04-16 15:38:41 UTC (rev 1454) +++ branches/sqlite/adminer/index.php 2010-04-16 15:59:14 UTC (rev 1455) @@ -1,5 +1,5 @@ <?php -/** Adminer - Compact MySQL management +/** Adminer - Compact database management * @link http://www.adminer.org/ * @author Jakub Vrana, http://php.vrana.cz/ * @copyright 2007 Jakub Vrana Modified: branches/sqlite/editor/index.php =================================================================== --- branches/sqlite/editor/index.php 2010-04-16 15:38:41 UTC (rev 1454) +++ branches/sqlite/editor/index.php 2010-04-16 15:59:14 UTC (rev 1455) @@ -1,5 +1,5 @@ <?php -/** Adminer Editor - Compact MySQL editor +/** Adminer Editor - Compact database editor * @link http://www.adminer.org/ * @author Jakub Vrana, http://php.vrana.cz/ * @copyright 2009 Jakub Vrana This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-21 11:08:50
|
Revision: 1462 http://adminer.svn.sourceforge.net/adminer/?rev=1462&view=rev Author: jakubvrana Date: 2010-04-21 11:08:44 +0000 (Wed, 21 Apr 2010) Log Message: ----------- Allow semicolon as CSV separator Modified Paths: -------------- branches/sqlite/adminer/include/adminer.inc.php branches/sqlite/adminer/include/export.inc.php branches/sqlite/adminer/include/functions.inc.php branches/sqlite/adminer/select.inc.php branches/sqlite/changes.txt branches/sqlite/editor/include/adminer.inc.php Modified: branches/sqlite/adminer/include/adminer.inc.php =================================================================== --- branches/sqlite/adminer/include/adminer.inc.php 2010-04-21 09:00:16 UTC (rev 1461) +++ branches/sqlite/adminer/include/adminer.inc.php 2010-04-21 11:08:44 UTC (rev 1462) @@ -472,7 +472,7 @@ * @return string */ function dumpFormat($select, $value = "") { - return html_select("format", array('sql' => 'SQL', 'csv' => 'CSV'), $value, $select); + return html_select("format", array('sql' => 'SQL', 'csv' => 'CSV,', 'csv;' => 'CSV;'), $value, $select); } /** Prints navigation after Adminer title Modified: branches/sqlite/adminer/include/export.inc.php =================================================================== --- branches/sqlite/adminer/include/export.inc.php 2010-04-21 09:00:16 UTC (rev 1461) +++ branches/sqlite/adminer/include/export.inc.php 2010-04-21 11:08:44 UTC (rev 1462) @@ -26,7 +26,7 @@ function dump_table($table, $style, $is_view = false) { global $connection; - if ($_POST["format"] == "csv") { + if ($_POST["format"] != "sql") { echo "\xef\xbb\xbf"; // UTF-8 byte order mark if ($style) { dump_csv(array_keys(fields($table))); @@ -118,7 +118,7 @@ global $connection, $driver; $max_packet = ($driver == "sqlite" ? 0 : 1048576); // default, minimum is 1024 if ($style) { - if ($_POST["format"] != "csv" && $style == "TRUNCATE+INSERT") { + if ($_POST["format"] == "sql" && $style == "TRUNCATE+INSERT") { echo "TRUNCATE " . idf_escape($table) . ";\n"; } $fields = fields($table); @@ -127,7 +127,7 @@ $insert = ""; $buffer = ""; while ($row = $result->fetch_assoc()) { - if ($_POST["format"] == "csv") { + if ($_POST["format"] != "sql") { dump_csv($row); } else { if (!$insert) { @@ -157,7 +157,7 @@ } } } - if ($_POST["format"] != "csv" && $style != "INSERT+UPDATE" && $buffer) { + if ($_POST["format"] == "sql" && $style != "INSERT+UPDATE" && $buffer) { $buffer .= ";\n"; echo $buffer; } Modified: branches/sqlite/adminer/include/functions.inc.php =================================================================== --- branches/sqlite/adminer/include/functions.inc.php 2010-04-21 09:00:16 UTC (rev 1461) +++ branches/sqlite/adminer/include/functions.inc.php 2010-04-21 11:08:44 UTC (rev 1462) @@ -593,11 +593,11 @@ */ function dump_csv($row) { foreach ($row as $key => $val) { - if (preg_match("~[\"\n,]~", $val) || $val === "") { + if (preg_match("~[\"\n,;]~", $val) || $val === "") { $row[$key] = '"' . str_replace('"', '""', $val) . '"'; } } - echo implode(",", $row) . "\n"; + echo implode(($_POST["format"] == "csv;" ? ";" : ","), $row) . "\n"; } /** Apply SQL function Modified: branches/sqlite/adminer/select.inc.php =================================================================== --- branches/sqlite/adminer/select.inc.php 2010-04-21 09:00:16 UTC (rev 1461) +++ branches/sqlite/adminer/select.inc.php 2010-04-21 11:08:44 UTC (rev 1462) @@ -118,8 +118,9 @@ preg_match_all('~(?>"[^"]*"|[^"\\r\\n]+)+~', $file, $matches); $affected = count($matches[0]); queries("START TRANSACTION"); + $separator = ($_POST["separator"] == ";" ? ";" : ","); foreach ($matches[0] as $key => $val) { - preg_match_all('~(("[^"]*")+|[^,]*),~', "$val,", $matches2); + preg_match_all("~((\"[^\"]*\")+|[^$separator]*)$separator~", $val . $separator, $matches2); if (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing ",\n // first row corresponds to column names - use it for table structure $cols = $matches2[1]; @@ -290,6 +291,8 @@ echo "</table>\n"; } + parse_str($_COOKIE["adminer_export"], $adminer_export); + if ($rows || $_GET["page"]) { $exact_count = true; if (intval($limit) && count($group) >= count($select) && ($found_rows >= $limit || $_GET["page"])) { @@ -317,12 +320,14 @@ echo (information_schema(DB) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + (this.form['all'].checked ? $found_rows : formChecked(this, /check/)) + ')');\"></div></fieldset>\n"); print_fieldset("export", lang('Export')); - echo $adminer->dumpOutput(1) . " " . $adminer->dumpFormat(1); // 1 - select + echo $adminer->dumpOutput(1, $adminer_export["output"]) . " " . $adminer->dumpFormat(1, $adminer_export["format"]); // 1 - select echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n"; echo "</div></fieldset>\n"; } print_fieldset("import", lang('CSV Import'), !$result->num_rows); - echo "<input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'>\n"; + echo "<input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> "; + echo html_select("separator", array(",", ";"), ($adminer_export["format"] == "csv;" ? ";" : ","), 1); // 1 - select + echo " <input type='submit' name='import' value='" . lang('Import') . "'>\n"; echo "</div></fieldset>\n"; $adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns); Modified: branches/sqlite/changes.txt =================================================================== --- branches/sqlite/changes.txt 2010-04-21 09:00:16 UTC (rev 1461) +++ branches/sqlite/changes.txt 2010-04-21 11:08:44 UTC (rev 1462) @@ -4,6 +4,7 @@ Allow concurrent logins on the same server Operator LIKE %% Remember export parameters in cookie +Allow semicolon as CSV separator Defer table information in database overview to JavaScript (performance) Big tables optimizations (performance) Modified: branches/sqlite/editor/include/adminer.inc.php =================================================================== --- branches/sqlite/editor/include/adminer.inc.php 2010-04-21 09:00:16 UTC (rev 1461) +++ branches/sqlite/editor/include/adminer.inc.php 2010-04-21 11:08:44 UTC (rev 1462) @@ -427,12 +427,12 @@ return $return; } - function dumpOutput($select) { + function dumpOutput($select, $value = "") { return ""; } - function dumpFormat($select) { - return "CSV"; + function dumpFormat($select, $value = "") { + return html_select("format", array('csv' => 'CSV,', 'csv;' => 'CSV;'), $value, $select); } function navigation($missing) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-21 11:46:11
|
Revision: 1465 http://adminer.svn.sourceforge.net/adminer/?rev=1465&view=rev Author: jakubvrana Date: 2010-04-21 11:46:05 +0000 (Wed, 21 Apr 2010) Log Message: ----------- Merge from trunk to reintegrate (branch moved to trunk) Modified Paths: -------------- branches/sqlite/changes.txt branches/sqlite/version.js Property Changed: ---------------- branches/sqlite/ branches/sqlite/adminer/drivers/mysql.inc.php Property changes on: branches/sqlite ___________________________________________________________________ Modified: svn:mergeinfo - /trunk:1193-1443 + /trunk:1193-1464 Property changes on: branches/sqlite/adminer/drivers/mysql.inc.php ___________________________________________________________________ Modified: svn:mergeinfo - /trunk/adminer/drivers/mysql.inc.php:1193-1443 /trunk/adminer/include/mysql.inc.php:675-681,1193-1443 + /trunk/adminer/drivers/mysql.inc.php:1193-1464 /trunk/adminer/include/mysql.inc.php:675-681,1193-1443 Modified: branches/sqlite/changes.txt =================================================================== --- branches/sqlite/changes.txt 2010-04-21 11:27:16 UTC (rev 1464) +++ branches/sqlite/changes.txt 2010-04-21 11:46:05 UTC (rev 1465) @@ -8,6 +8,10 @@ Defer table information in database overview to JavaScript (performance) Big tables optimizations (performance) +Adminer 2.3.2 (released 2010-04-21): +Fix COUNT(*) link +Fix Save and continue edit + Adminer 2.3.1 (released 2010-04-06): Add Drop button to Alter pages (regression from 2.0.0) Link COUNT(*) result to listing Modified: branches/sqlite/version.js =================================================================== --- branches/sqlite/version.js 2010-04-21 11:27:16 UTC (rev 1464) +++ branches/sqlite/version.js 2010-04-21 11:46:05 UTC (rev 1465) @@ -2,5 +2,5 @@ (function () { // cookie function is not defined in older versions var date = new Date(); date.setDate(date.getDate() + 7); // valid for 7 days - document.cookie = 'adminer_version=2.3.1; expires=' + date; // last released version + document.cookie = 'adminer_version=2.3.2; expires=' + date; // last released version })(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |