summaryrefslogtreecommitdiff
path: root/session
diff options
context:
space:
mode:
authorDamien Regad <dregad@mantisbt.org>2023-03-25 13:58:15 +0100
committerDamien Regad <dregad@mantisbt.org>2023-03-25 13:58:15 +0100
commit09748995a96586348715049be1706f09a57d7478 (patch)
tree958bbd6106423bf8f9690e3cf9e04c9b5bbab9fc /session
parent46f1c61177bbd12ef681a50b1c3a7961e8ec3995 (diff)
downloadadodb-09748995a96586348715049be1706f09a57d7478.tar.gz
adodb-09748995a96586348715049be1706f09a57d7478.tar.bz2
adodb-09748995a96586348715049be1706f09a57d7478.zip
Move MySQL BINARY to expression right-hand side
Having it on the left-hand side prevented usage of the index, so a full table scan was performed with significant performance impact when a large number of sessions are stored in the table. Fixes #941
Diffstat (limited to 'session')
-rw-r--r--session/adodb-session2.php11
1 files changed, 6 insertions, 5 deletions
diff --git a/session/adodb-session2.php b/session/adodb-session2.php
index 588220ba..11d61fd3 100644
--- a/session/adodb-session2.php
+++ b/session/adodb-session2.php
@@ -720,8 +720,9 @@ class ADODB_Session {
}
}
-
- $sql = "UPDATE $table SET expiry = $expiry ,expireref=".$conn->Param('0').", modified = $sysTimeStamp WHERE $binary sesskey = ".$conn->Param('1')." AND expiry >= $sysTimeStamp";
+ $sql = "UPDATE $table SET expiry = $expiry, expireref=" . $conn->Param('0')
+ . ", modified = $sysTimeStamp WHERE sesskey = $binary " . $conn->Param('1')
+ . " AND expiry >= $sysTimeStamp";
$rs = $conn->Execute($sql,array($expirevar,$key));
return true;
}
@@ -825,7 +826,7 @@ class ADODB_Session {
reset($expire_notify);
$fn = next($expire_notify);
$savem = $conn->SetFetchMode(ADODB_FETCH_NUM);
- $sql = "SELECT expireref, sesskey FROM $table WHERE $binary sesskey = $qkey";
+ $sql = "SELECT expireref, sesskey FROM $table WHERE sesskey = $binary $qkey";
$rs = $conn->Execute($sql);
ADODB_Session::_dumprs($rs);
$conn->SetFetchMode($savem);
@@ -842,7 +843,7 @@ class ADODB_Session {
$rs->Close();
}
- $sql = "DELETE FROM $table WHERE $binary sesskey = $qkey";
+ $sql = "DELETE FROM $table WHERE sesskey = $binary $qkey";
$rs = $conn->Execute($sql);
if ($rs) {
$rs->Close();
@@ -900,7 +901,7 @@ class ADODB_Session {
$ref = $rs->fields[0];
$key = $rs->fields[1];
if ($fn) $fn($ref, $key);
- $del = $conn->Execute("DELETE FROM $table WHERE sesskey=".$conn->Param('0'),array($key));
+ $del = $conn->Execute("DELETE FROM $table WHERE sesskey = $binary " . $conn->Param('0'), array($key));
$rs->MoveNext();
$ccnt += 1;
if ($tr && $ccnt % $COMMITNUM == 0) {