зеркало из https://github.com/mozilla/gecko-dev.git
Bug 301062: [PostgreSQL] whine.pl fails when using PostgreSQL 8.0.x - Patch by Fr�d�ric Buclin <LpSolit@gmail.com> r=mkanat r=manu a=justdave
This commit is contained in:
Родитель
c146012abd
Коммит
0f7661d9ca
|
@ -1146,8 +1146,8 @@ formatted SQL command have prefix C<sql_>. All other methods have prefix C<bz_>.
|
||||||
|
|
||||||
Description: Outputs proper SQL syntax for a time interval function.
|
Description: Outputs proper SQL syntax for a time interval function.
|
||||||
Abstract method, should be overriden by database specific code.
|
Abstract method, should be overriden by database specific code.
|
||||||
Params: $interval = the time interval requested (e.g. '30 minutes')
|
Params: $interval - the time interval requested (e.g. '30') (integer)
|
||||||
(scalar)
|
$units - the units the interval is in (e.g. 'MINUTE') (string)
|
||||||
Returns: formatted SQL for interval function (scalar)
|
Returns: formatted SQL for interval function (scalar)
|
||||||
|
|
||||||
=item C<sql_position>
|
=item C<sql_position>
|
||||||
|
|
|
@ -148,9 +148,9 @@ sub sql_date_format {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub sql_interval {
|
sub sql_interval {
|
||||||
my ($self, $interval) = @_;
|
my ($self, $interval, $units) = @_;
|
||||||
|
|
||||||
return "INTERVAL $interval";
|
return "INTERVAL $interval $units";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub sql_position {
|
sub sql_position {
|
||||||
|
|
|
@ -135,9 +135,9 @@ sub sql_date_format {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub sql_interval {
|
sub sql_interval {
|
||||||
my ($self, $interval) = @_;
|
my ($self, $interval, $units) = @_;
|
||||||
|
|
||||||
return "INTERVAL '$interval'";
|
return "$interval * INTERVAL '1 $units'";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub sql_string_concat {
|
sub sql_string_concat {
|
||||||
|
|
|
@ -996,7 +996,7 @@ sub init {
|
||||||
$unitinterval = 'YEAR';
|
$unitinterval = 'YEAR';
|
||||||
}
|
}
|
||||||
my $cutoff = "NOW() - " .
|
my $cutoff = "NOW() - " .
|
||||||
$dbh->sql_interval("$quantity $unitinterval");
|
$dbh->sql_interval($quantity, $unitinterval);
|
||||||
my $assigned_fieldid = get_field_id('assigned_to');
|
my $assigned_fieldid = get_field_id('assigned_to');
|
||||||
push(@supptables, "LEFT JOIN longdescs AS comment_$table " .
|
push(@supptables, "LEFT JOIN longdescs AS comment_$table " .
|
||||||
"ON comment_$table.who = bugs.assigned_to " .
|
"ON comment_$table.who = bugs.assigned_to " .
|
||||||
|
|
|
@ -103,7 +103,7 @@ sub IssuePasswordToken {
|
||||||
ON tokens.userid = profiles.userid
|
ON tokens.userid = profiles.userid
|
||||||
AND tokens.tokentype = 'password'
|
AND tokens.tokentype = 'password'
|
||||||
AND tokens.issuedate > NOW() - " .
|
AND tokens.issuedate > NOW() - " .
|
||||||
$dbh->sql_interval('10 MINUTE') . "
|
$dbh->sql_interval(10, 'MINUTE') . "
|
||||||
WHERE " . $dbh->sql_istrcmp('login_name', $quotedloginname));
|
WHERE " . $dbh->sql_istrcmp('login_name', $quotedloginname));
|
||||||
my ($userid, $toosoon) = &::FetchSQLData();
|
my ($userid, $toosoon) = &::FetchSQLData();
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ my $dbh = Bugzilla->dbh;
|
||||||
SendSQL("SELECT bug_id FROM bugs
|
SendSQL("SELECT bug_id FROM bugs
|
||||||
WHERE lastdiffed IS NULL
|
WHERE lastdiffed IS NULL
|
||||||
OR lastdiffed < delta_ts AND delta_ts < NOW() - "
|
OR lastdiffed < delta_ts AND delta_ts < NOW() - "
|
||||||
. $dbh->sql_interval('30 minute') .
|
. $dbh->sql_interval(30, 'MINUTE') .
|
||||||
" ORDER BY bug_id");
|
" ORDER BY bug_id");
|
||||||
my @list;
|
my @list;
|
||||||
while (MoreSQLData()) {
|
while (MoreSQLData()) {
|
||||||
|
|
|
@ -196,7 +196,7 @@ if (defined $cgi->param('rescanallBugMail')) {
|
||||||
Status("OK, now attempting to send unsent mail");
|
Status("OK, now attempting to send unsent mail");
|
||||||
SendSQL("SELECT bug_id FROM bugs
|
SendSQL("SELECT bug_id FROM bugs
|
||||||
WHERE (lastdiffed IS NULL OR lastdiffed < delta_ts) AND
|
WHERE (lastdiffed IS NULL OR lastdiffed < delta_ts) AND
|
||||||
delta_ts < now() - " . $dbh->sql_interval('30 minute') .
|
delta_ts < now() - " . $dbh->sql_interval(30, 'MINUTE') .
|
||||||
" ORDER BY bug_id");
|
" ORDER BY bug_id");
|
||||||
my @list;
|
my @list;
|
||||||
while (MoreSQLData()) {
|
while (MoreSQLData()) {
|
||||||
|
@ -808,7 +808,7 @@ Status("Checking for unsent mail");
|
||||||
|
|
||||||
SendSQL("SELECT bug_id " .
|
SendSQL("SELECT bug_id " .
|
||||||
"FROM bugs WHERE (lastdiffed IS NULL OR lastdiffed < delta_ts) AND " .
|
"FROM bugs WHERE (lastdiffed IS NULL OR lastdiffed < delta_ts) AND " .
|
||||||
"delta_ts < now() - " . $dbh->sql_interval('30 minute') .
|
"delta_ts < now() - " . $dbh->sql_interval(30, 'MINUTE') .
|
||||||
" ORDER BY bug_id");
|
" ORDER BY bug_id");
|
||||||
|
|
||||||
while (@row = FetchSQLData()) {
|
while (@row = FetchSQLData()) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ sub DoAccount {
|
||||||
if(Param('allowemailchange')) {
|
if(Param('allowemailchange')) {
|
||||||
my @token = $dbh->selectrow_array(
|
my @token = $dbh->selectrow_array(
|
||||||
"SELECT tokentype, issuedate + " .
|
"SELECT tokentype, issuedate + " .
|
||||||
$dbh->sql_interval('3 DAY') . ", eventdata
|
$dbh->sql_interval(3, 'DAY') . ", eventdata
|
||||||
FROM tokens
|
FROM tokens
|
||||||
WHERE userid = ?
|
WHERE userid = ?
|
||||||
AND tokentype LIKE 'email%'
|
AND tokentype LIKE 'email%'
|
||||||
|
|
|
@ -34,6 +34,7 @@ use Bugzilla::Constants;
|
||||||
use Bugzilla::Search;
|
use Bugzilla::Search;
|
||||||
use Bugzilla::User;
|
use Bugzilla::User;
|
||||||
use Bugzilla::BugMail;
|
use Bugzilla::BugMail;
|
||||||
|
use Bugzilla::Util;
|
||||||
|
|
||||||
# create some handles that we'll need
|
# create some handles that we'll need
|
||||||
my $template = Bugzilla->template;
|
my $template = Bugzilla->template;
|
||||||
|
@ -164,20 +165,21 @@ while (my ($schedule_id, $day, $time) = $sched_h->fetchrow_array) {
|
||||||
# A time greater than now means it still has to run today
|
# A time greater than now means it still has to run today
|
||||||
elsif ($time >= $now_hour) {
|
elsif ($time >= $now_hour) {
|
||||||
# set it to today + number of hours
|
# set it to today + number of hours
|
||||||
$sth = $dbh->prepare( "UPDATE whine_schedules " .
|
$sth = $dbh->prepare("UPDATE whine_schedules " .
|
||||||
"SET run_next = CURRENT_DATE() + " .
|
"SET run_next = CURRENT_DATE + " .
|
||||||
$dbh->sql_interval('? HOUR') .
|
$dbh->sql_interval('?', 'HOUR') .
|
||||||
" WHERE id = ?");
|
" WHERE id = ?");
|
||||||
$sth->execute($time, $schedule_id);
|
$sth->execute($time, $schedule_id);
|
||||||
}
|
}
|
||||||
# the target time is less than the current time
|
# the target time is less than the current time
|
||||||
else { # set it for the next applicable day
|
else { # set it for the next applicable day
|
||||||
my $nextdate = &get_next_date($day);
|
$day = &get_next_date($day);
|
||||||
$sth = $dbh->prepare( "UPDATE whine_schedules " .
|
$sth = $dbh->prepare("UPDATE whine_schedules " .
|
||||||
"SET run_next = ? + " .
|
"SET run_next = CURRENT_DATE + " .
|
||||||
$dbh->sql_interval('? HOUR') .
|
$dbh->sql_interval('?', 'DAY') . " + " .
|
||||||
" WHERE id = ?");
|
$dbh->sql_interval('?', 'HOUR') .
|
||||||
$sth->execute($nextdate, $time, $schedule_id);
|
" WHERE id = ?");
|
||||||
|
$sth->execute($day, $time, $schedule_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -189,10 +191,11 @@ while (my ($schedule_id, $day, $time) = $sched_h->fetchrow_array) {
|
||||||
# midnight
|
# midnight
|
||||||
my $target_time = ($time =~ /^\d+$/) ? $time : 0;
|
my $target_time = ($time =~ /^\d+$/) ? $time : 0;
|
||||||
|
|
||||||
$sth = $dbh->prepare( "UPDATE whine_schedules " .
|
$sth = $dbh->prepare("UPDATE whine_schedules " .
|
||||||
"SET run_next = ? + " .
|
"SET run_next = CURRENT_DATE + " .
|
||||||
$dbh->sql_interval('? HOUR') .
|
$dbh->sql_interval('?', 'DAY') . " + " .
|
||||||
" WHERE id = ?");
|
$dbh->sql_interval('?', 'HOUR') .
|
||||||
|
" WHERE id = ?");
|
||||||
$sth->execute($target_date, $target_time, $schedule_id);
|
$sth->execute($target_date, $target_time, $schedule_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -592,23 +595,25 @@ sub reset_timer {
|
||||||
|
|
||||||
my $nextdate = &get_next_date($run_day);
|
my $nextdate = &get_next_date($run_day);
|
||||||
|
|
||||||
$sth = $dbh->prepare( "UPDATE whine_schedules " .
|
$sth = $dbh->prepare("UPDATE whine_schedules " .
|
||||||
"SET run_next = ? + " .
|
"SET run_next = CURRENT_DATE + " .
|
||||||
$dbh->sql_interval('? HOUR') .
|
$dbh->sql_interval('?', 'DAY') . " + " .
|
||||||
" WHERE id = ?");
|
$dbh->sql_interval('?', 'HOUR') .
|
||||||
|
" WHERE id = ?");
|
||||||
$sth->execute($nextdate, $target_time, $schedule_id);
|
$sth->execute($nextdate, $target_time, $schedule_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Scheduling is done in terms of whole minutes, so we use subtraction to
|
|
||||||
# drop the seconds from the time.
|
|
||||||
if ($minute_offset > 0) {
|
if ($minute_offset > 0) {
|
||||||
|
# Scheduling is done in terms of whole minutes.
|
||||||
|
my $next_run = $dbh->selectrow_array('SELECT NOW() + ' .
|
||||||
|
$dbh->sql_interval('?', 'MINUTE'),
|
||||||
|
undef, $minute_offset);
|
||||||
|
$next_run = format_time($next_run, "%Y-%m-%d %R");
|
||||||
|
|
||||||
$sth = $dbh->prepare("UPDATE whine_schedules " .
|
$sth = $dbh->prepare("UPDATE whine_schedules " .
|
||||||
"SET run_next = NOW() + " .
|
"SET run_next = ? WHERE id = ?");
|
||||||
$dbh->sql_interval('? MINUTE') . " - " .
|
$sth->execute($next_run, $schedule_id);
|
||||||
$dbh->sql_interval('SECOND(NOW()) SECOND') .
|
|
||||||
" WHERE id = ?");
|
|
||||||
$sth->execute($minute_offset, $schedule_id);
|
|
||||||
} else {
|
} else {
|
||||||
# The minute offset is zero or less, which is not supposed to happen.
|
# The minute offset is zero or less, which is not supposed to happen.
|
||||||
# complain to STDERR
|
# complain to STDERR
|
||||||
|
@ -632,7 +637,7 @@ sub null_schedule {
|
||||||
# time a schedule should run, excluding today
|
# time a schedule should run, excluding today
|
||||||
#
|
#
|
||||||
# It takes a run_day argument (see check_today, above, for an explanation),
|
# It takes a run_day argument (see check_today, above, for an explanation),
|
||||||
# and returns an SQL date
|
# and returns an integer, representing a number of days.
|
||||||
sub get_next_date {
|
sub get_next_date {
|
||||||
my $day = shift;
|
my $day = shift;
|
||||||
|
|
||||||
|
@ -685,11 +690,5 @@ sub get_next_date {
|
||||||
$add_days += $daysinmonth[$now_month];
|
$add_days += $daysinmonth[$now_month];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $add_days;
|
||||||
# Get a date in whatever format the database will accept
|
|
||||||
$sth = $dbh->prepare("SELECT CURRENT_DATE() + " .
|
|
||||||
$dbh->sql_interval('? DAY'));
|
|
||||||
$sth->execute($add_days);
|
|
||||||
return $sth->fetch->[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче