update command
Matt S Trout [Sun, 10 Jan 2010 05:36:42 +0000 (05:36 +0000)]
lib/DBIx/Data/Collection/Set.pm
t/01basic_collection.t

index 4d90294..7e71b8e 100644 (file)
@@ -155,7 +155,7 @@ method remove ($old) {
 }
 
 method _remove_from_store ($old) {
-  $self->_store->new_delete_command($self->_deflate($old))->execute;
+  $self->_store->new_delete_command($self->_deflate($old))->execute
 }
 
 method _remove_from_caches ($old) {
@@ -164,4 +164,13 @@ method _remove_from_caches ($old) {
   $old
 }
 
+## update
+
+method _update_in_store ($obj) {
+  # this is currently a call command but we should think about it
+  # being a row command so that we can have RETURNING or other
+  # mechanisms handle things like set-on-update datetime values
+  $self->_store->new_update_command($self->_deflate($obj))->execute
+}
+
 1;
index 65e55ce..94ccb0f 100644 (file)
@@ -103,4 +103,21 @@ $set = make_set;
 
 is_deeply([ sort_set $set->flatten ], \@expect, 'new row still gone on reload');
 
+$set = make_set {}, {
+  update_sql => q{UPDATE person SET name = ? WHERE id = ?},
+  update_argument_order => [ qw(name id) ]
+};
+
+my ($pterry) = grep $_->{name} eq 'Pterry', $set->flatten;
+
+$pterry->{name} = 'Sir Pterry'; # http://xrl.us/bgse8s
+
+$set->_update_in_store($pterry);
+
+$set = make_set;
+
+my ($fresh_pterry) = grep $_->{name} =~ /Pterry/, $set->flatten;
+
+is($fresh_pterry->{name}, 'Sir Pterry', 'Update persisted correctly');
+
 done_testing;