]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/DB/ResultSet/BugStatusCache.pm
Merge branch 'database'
[debbugs.git] / Debbugs / DB / ResultSet / BugStatusCache.pm
diff --git a/Debbugs/DB/ResultSet/BugStatusCache.pm b/Debbugs/DB/ResultSet/BugStatusCache.pm
new file mode 100644 (file)
index 0000000..d47f467
--- /dev/null
@@ -0,0 +1,74 @@
+# This module is part of debbugs, and is released
+# under the terms of the GPL version 2, or any later version. See the
+# file README and COPYING for more information.
+# Copyright 2017 by Don Armstrong <don@donarmstrong.com>.
+use utf8;
+package Debbugs::DB::ResultSet::BugStatusCache;
+
+=head1 NAME
+
+Debbugs::DB::ResultSet::BugStatusCache - Bug result set operations
+
+=head1 SYNOPSIS
+
+
+
+=head1 DESCRIPTION
+
+
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::ResultSet';
+
+use Debbugs::DB::Util qw(select_one);
+
+use List::MoreUtils qw(natatime);
+
+
+=over
+
+=item update_bug_status
+
+       $s->resultset('BugStatusCache')->
+           update_bug_status($bug->id,
+                             $suite->{id},
+                             undef,
+                             $presence,
+                             );
+
+Update the status information for a particular bug at a particular suite
+
+=cut
+
+sub update_bug_status {
+    my ($self,@args) = @_;
+    return $self->result_source->schema->storage->
+       dbh_do(sub {
+                  my ($s,$dbh,$bug,$suite,$arch,$status,$modified,$asof) = @_;
+                  select_one($dbh,<<'SQL',$bug,$suite,$arch,$status,$status);
+INSERT INTO bug_status_cache AS bsc
+(bug,suite,arch,status,modified,asof)
+VALUES (?,?,?,?,NOW(),NOW())
+ON CONFLICT (bug,COALESCE(suite,0),COALESCE(arch,0)) DO
+UPDATE
+ SET asof=NOW(),modified=CASE WHEN bsc.status=? THEN bsc.modified ELSE NOW() END
+RETURNING status;
+SQL
+              },
+           @args
+             );
+}
+
+
+=back
+
+=cut
+
+
+1;
+
+__END__