+
+sub get_all_source_info {
+ my %options = @_;
+
+ my $q = 'SELECT * FROM ' . table_name()
+ . ' WHERE distribution = ? ';
+ my @args = ($distribution);
+ if ($options{state} && uc($options{state}) ne "ALL") {
+ $q .= ' AND upper(state) = ? ';
+ push @args, uc($options{state});
+ }
+
+ if ($options{user}) {
+ #this basically means "this user, or no user at all":
+ $q .= ' AND (builder = ? OR upper(state) = ?)';
+ push @args, $options{user};
+ push @args, "NEEDS-BUILD";
+ }
+
+ if ($options{category}) {
+ $q .= ' AND failed_category <> ? AND upper(state) = ? ';
+ push @args, $options{category};
+ push @args, "FAILED";
+ }
+
+ if ($options{list_min_age} > 0) {
+ $q .= ' AND age(state_change::timestamp) > ? ';
+ push @args, $options{list_min_age} . " days";
+ }
+
+ if ($options{list_min_age} < 0) {
+ $q .= ' AND age(state_change::timestamp) < ? days ';
+ push @args, -$options{list_min_age} . " days";
+ }
+
+ my $db = $dbh->selectall_hashref($q, 'package', undef, @args);
+ return $db;
+}
+
+sub update_source_info {
+ my $pkg = shift;
+
+ my $pkg2 = get_source_info($pkg->{'package'});
+ if (! defined $pkg2)
+ {
+ add_source_info($pkg);
+ }
+
+ $dbh->do('UPDATE ' . table_name() . ' SET ' .
+ 'version = ?, ' .
+ 'state = ?, ' .
+ 'section = ?, ' .
+ 'priority = ?, ' .
+ 'installed_version = ?, ' .
+ 'previous_state = ?, ' .
+ 'state_change = ?, ' .
+ 'notes = ?, ' .
+ 'builder = ?, ' .
+ 'failed = ?, ' .
+ 'old_failed = ?, ' .
+ 'binary_nmu_version = ?, ' .
+ 'binary_nmu_changelog = ?, ' .
+ 'failed_category = ?, ' .
+ 'permbuildpri = ?, ' .
+ 'buildpri = ?, ' .
+ 'depends = ?, ' .
+ 'rel = ?, ' .
+ 'bd_problem = ? ' .
+ 'WHERE package = ? AND distribution = ?',
+ undef,
+ $pkg->{'version'},
+ $pkg->{'state'},
+ $pkg->{'section'},
+ $pkg->{'priority'},
+ $pkg->{'installed_version'},
+ $pkg->{'previous_state'},
+ $pkg->{'state_change'},
+ $pkg->{'notes'},
+ $pkg->{'builder'},
+ $pkg->{'failed'},
+ $pkg->{'old_failed'},
+ $pkg->{'binary_nmu_version'},
+ $pkg->{'binary_nmu_changelog'},
+ $pkg->{'failed_category'},
+ $pkg->{'permbuildpri'},
+ $pkg->{'buildpri'},
+ $pkg->{'depends'},
+ $pkg->{'rel'},
+ $pkg->{'bd_problem'},
+ $pkg->{'package'},
+ $distribution) or die $dbh->errstr;
+}
+
+sub add_source_info {
+ my $pkg = shift;
+ $dbh->do('INSERT INTO ' . table_name() .
+ ' (package, distribution) values (?, ?)',
+ undef, $pkg->{'package'}, $distribution) or die $dbh->errstr;
+}
+
+sub del_source_info {
+ my $name = shift;
+ $dbh->do('DELETE FROM ' . table_name() .
+ ' WHERE package = ? AND distribution = ?',
+ undef, $name, $distribution) or die $dbh->errstr;
+}
+
+sub get_user_info {
+ my $name = shift;
+ my $user = $dbh->selectrow_hashref('SELECT * FROM ' .
+ user_table_name() . ' WHERE username = ? AND distribution = ?',
+ undef, $name, $distribution);
+ return $user;
+}
+
+sub update_user_info {
+ my $user = shift;
+ $dbh->do('UPDATE ' . user_table_name() .
+ ' SET last_seen = now() WHERE username = ?' .
+ ' AND distribution = ?',
+ undef, $user, $distribution)
+ or die $dbh->errstr;
+}
+
+
+sub add_user_info {
+ my $user = shift;
+ $dbh->do('INSERT INTO ' . user_table_name() .
+ ' (username, distribution, last_seen)' .
+ ' values (?, ?, now())',
+ undef, $user, $distribution)
+ or die $dbh->errstr;
+}
+