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) = @_;