Index: lib/Daizu/Util.pm
===================================================================
--- lib/Daizu/Util.pm	(revision 295)
+++ lib/Daizu/Util.pm	(revision 296)
@@ -6,8 +6,9 @@
 our @EXPORT_OK = qw(
     trim trim_with_empty_null like_escape
     validate_number validate_uri validate_mime_type
-    validate_date svn_datetime db_datetime parse_db_datetime
-    db_row_exists db_row_id db_select db_insert db_update db_replace db_delete
+    validate_date svn_datetime db_datetime rfc2822_datetime parse_db_datetime
+    db_row_exists db_row_id db_select db_select_col
+    db_insert db_update db_replace db_delete
     wc_file_data guess_mime_type wc_set_file_data mint_guid
     file_generator load_class file_base_url current_file_urls update_file_urls
     xml_attr xml_croak
@@ -135,7 +136,6 @@
 sub svn_datetime
 {
     my ($dt, $include_micro) = @_;
-    return undef unless defined $dt;
     $dt = validate_date($dt) unless ref $dt;
     return undef unless defined $dt;
     return $dt->strftime('%FT%T' . ($include_micro ? '.%6NZ' : 'Z'));
@@ -144,12 +144,20 @@
 sub db_datetime
 {
     my ($dt) = @_;
-    return undef unless defined $dt;
     $dt = validate_date($dt) unless ref $dt;
     return undef unless defined $dt;
     return DateTime::Format::Pg->format_datetime($dt);
 }
 
+sub rfc2822_datetime
+{
+    my ($dt) = @_;
+    $dt = validate_date($dt) unless ref $dt;
+    return undef unless defined $dt;
+    # TODO check this against RFC 2822
+    return $dt->strftime('%a, %d %b %Y %H:%M:%S %z');
+}
+
 sub parse_db_datetime
 {
     my ($dt) = @_;
@@ -220,6 +228,29 @@
     });
 }
 
+sub db_select_col
+{
+    my ($db, $table, $where, $column) = @_;
+    croak 'usage: db_select_all($db, $table, $where, $column)'
+        unless @_ == 4 && defined $column;
+
+    $where = _where($db, (ref $where ? (%$where) : ($where)));
+
+    my $sth = $db->prepare(qq{
+        select $column
+        from $table
+        $where
+    });
+    $sth->execute;
+
+    my @records;
+    while (my ($val) = $sth->fetchrow_array) {
+        push @records, $val;
+    }
+
+    return @records;
+}
+
 sub db_insert
 {
     my ($db, $table, %value) = @_;