summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Search
diff options
context:
space:
mode:
authorFrédéric Buclin <LpSolit@gmail.com>2011-12-28 12:09:29 +0100
committerFrédéric Buclin <LpSolit@gmail.com>2011-12-28 12:09:29 +0100
commit5deff30099c7ae0c9cce9c32e52f4bd1dc380926 (patch)
treed2939fd4d72437699f8e4231b6bdc9cc47578917 /Bugzilla/Search
parent3c0d1a4c8be3893f358ab932b0c8bb5d5bce8973 (diff)
downloadbugzilla-5deff30099c7ae0c9cce9c32e52f4bd1dc380926.tar.gz
bugzilla-5deff30099c7ae0c9cce9c32e52f4bd1dc380926.tar.xz
Bug 713144: The SQL query to remove older searches from the profile_search table should be more robust
r=dkl a=LpSolit
Diffstat (limited to 'Bugzilla/Search')
-rw-r--r--Bugzilla/Search/Recent.pm14
1 files changed, 8 insertions, 6 deletions
diff --git a/Bugzilla/Search/Recent.pm b/Bugzilla/Search/Recent.pm
index 89d9cf6ff..ccd4a0f09 100644
--- a/Bugzilla/Search/Recent.pm
+++ b/Bugzilla/Search/Recent.pm
@@ -57,14 +57,16 @@ sub create {
my $class = shift;
my $dbh = Bugzilla->dbh;
$dbh->bz_start_transaction();
- my $search = $class->SUPER::create(@_);
+ my $search = $class->SUPER::create(@_);
+ my $user_id = $search->user_id;
# Enforce there only being SAVE_NUM_SEARCHES per user.
- my ($num_searches, $min_id) = $dbh->selectrow_array(
- 'SELECT COUNT(*), MIN(id) FROM profile_search WHERE user_id = ?',
- undef, $search->user_id);
- if ($num_searches > SAVE_NUM_SEARCHES) {
- $dbh->do('DELETE FROM profile_search WHERE id = ?', undef, $min_id);
+ my $min_id = $dbh->selectrow_array(
+ 'SELECT id FROM profile_search WHERE user_id = ? ORDER BY id DESC '
+ . $dbh->sql_limit(1, SAVE_NUM_SEARCHES), undef, $user_id);
+ if ($min_id) {
+ $dbh->do('DELETE FROM profile_search WHERE user_id = ? AND id <= ?',
+ undef, ($user_id, $min_id));
}
$dbh->bz_commit_transaction();
return $search;