From f9a20232aef6741fdfb4c97903aed160d2c947e9 Mon Sep 17 00:00:00 2001 From: jakubvrana Date: Mon, 2 Nov 2009 22:09:23 +0000 Subject: [PATCH] Improve concurrency git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1225 7c3ca157-0c34-0410-bff1-cbf682f78f5c --- adminer/include/adminer.inc.php | 1 + adminer/include/bootstrap.inc.php | 5 +++++ adminer/include/design.inc.php | 3 ++- adminer/include/editing.inc.php | 1 + adminer/include/functions.inc.php | 16 +++++++++++++--- adminer/include/mysql.inc.php | 1 + adminer/sql.inc.php | 4 ++-- changes.txt | 1 + 8 files changed, 26 insertions(+), 6 deletions(-) diff --git a/adminer/include/adminer.inc.php b/adminer/include/adminer.inc.php index 9d1bd9f6..0306083a 100644 --- a/adminer/include/adminer.inc.php +++ b/adminer/include/adminer.inc.php @@ -358,6 +358,7 @@ class Adminer { * @return string */ function messageQuery($query) { + session_start(); $id = "sql-" . count($_SESSION["messages"]); $_SESSION["history"][$_GET["server"]][DB][] = $query; return " " . lang('SQL command') . "'; diff --git a/adminer/include/bootstrap.inc.php b/adminer/include/bootstrap.inc.php index 2b738dde..2e742f56 100644 --- a/adminer/include/bootstrap.inc.php +++ b/adminer/include/bootstrap.inc.php @@ -91,6 +91,11 @@ include "./include/connect.inc.php"; include "./include/editing.inc.php"; include "./include/export.inc.php"; +session_cache_limiter(""); // to allow restarting session +if (@ini_set("session.use_cookies", false) !== false) { // @ - may be disabled + session_write_close(); // improves concurrency, may be restarted later +} + $confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\""; $token = $_SESSION["tokens"][$_GET["server"]]; $error = ($_POST diff --git a/adminer/include/design.inc.php b/adminer/include/design.inc.php index a17bcf2a..4f8aa1ed 100644 --- a/adminer/include/design.inc.php +++ b/adminer/include/design.inc.php @@ -40,6 +40,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") { echo "$title\n"; } echo "

$title_all

\n"; + restart_session(); if ($_SESSION["messages"]) { echo "
" . implode("
\n
", $_SESSION["messages"]) . "
\n"; $_SESSION["messages"] = array(); @@ -51,7 +52,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") { if (strlen(DB) && $databases && !in_array(DB, $databases, true)) { $databases = null; } - if (isset($databases) && !isset($_GET["sql"])) { + if ((isset($databases) && !isset($_GET["sql"])) || !ini_get("session.use_cookies")) { // improves concurrency if a user opens several pages at once session_write_close(); } diff --git a/adminer/include/editing.inc.php b/adminer/include/editing.inc.php index dc12234a..47c3d685 100644 --- a/adminer/include/editing.inc.php +++ b/adminer/include/editing.inc.php @@ -351,6 +351,7 @@ function drop_create($drop, $create, $location, $message_drop, $message_alter, $ $dropped = strlen($name) && ($_POST["dropped"] || queries($drop)); $created = queries($create); if (!queries_redirect($location, (strlen($name) ? $message_alter : $message_create), $created) && $dropped) { + session_start(); $_SESSION["messages"][] = $message_drop; } return $dropped; diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index 8a6b4402..590d0f14 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -204,6 +204,15 @@ function cookie($name, $value) { return setcookie($name, $value, time() + 2592000, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"])); // 2592000 = 30 * 24 * 60 * 60 } +/** Restart stopped session +* @return null +*/ +function restart_session() { + if (!ini_get("session.use_cookies")) { + session_start(); + } +} + /** Send Location header and exit * @param string * @param string @@ -211,6 +220,7 @@ function cookie($name, $value) { */ function redirect($location, $message = null) { if (isset($message)) { + session_start(); $_SESSION["messages"][] = $message; } header("Location: " . (strlen($location) ? $location : ".")); @@ -228,13 +238,13 @@ function redirect($location, $message = null) { */ function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false) { global $connection, $error, $adminer; + if ($execute) { + $failed = !$connection->query($query); + } $sql = ""; if ($query) { $sql = $adminer->messageQuery($query); } - if ($execute) { - $failed = !$connection->query($query); - } if ($failed) { $error = h($connection->error) . $sql; return false; diff --git a/adminer/include/mysql.inc.php b/adminer/include/mysql.inc.php index 9fc827e7..5ec6c87a 100644 --- a/adminer/include/mysql.inc.php +++ b/adminer/include/mysql.inc.php @@ -168,6 +168,7 @@ function get_databases($flush = true) { // SHOW DATABASES can take a very long time so it is cached $return = &$_SESSION["databases"][$_GET["server"]]; if (!isset($return)) { + restart_session(); $return = get_vals("SHOW DATABASES"); if ($flush) { ob_flush(); diff --git a/adminer/sql.inc.php b/adminer/sql.inc.php index c58ee7f1..e047c4fc 100644 --- a/adminer/sql.inc.php +++ b/adminer/sql.inc.php @@ -27,8 +27,8 @@ if (!$error && $_POST) { $space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)"; $alter_database = "(CREATE|DROP)$space+(DATABASE|SCHEMA)\\b~isU"; $databases = &$_SESSION["databases"][$_GET["server"]]; - if (isset($databases) && !preg_match("~\\b$alter_database", $query)) { // quick check - may be inside string - //! false positive with $fp + if ((isset($databases) && !preg_match("~\\b$alter_database", $query)) || !ini_get("session.use_cookies")) { // quick check - may be inside string + //! false positive with $fp and disabled ini_set() and enabled session.use_cookies session_write_close(); } $delimiter = ";"; diff --git a/changes.txt b/changes.txt index f0669461..f4554249 100644 --- a/changes.txt +++ b/changes.txt @@ -1,4 +1,5 @@ Adminer 2.2.1-dev: +Improve concurrency Link new item in backward keys (Editor) Adminer 2.2.0 (released 2009-10-20):