allow coderef in place of SQL for complex commands
Matt S Trout [Sun, 29 Aug 2010 01:26:08 +0000 (02:26 +0100)]
lib/DBIx/Data/Store/Raw.pm
t/crud.t

index 82885a9..9a5b269 100644 (file)
@@ -33,10 +33,15 @@ sub run_rowstream {
 }
 
 sub _exec_calling {
-  my ($self, $call, @sth_args) = @_;
-  $self->_exec(sub {
-    $self->_sth_for($_[0], @sth_args)->$call
-  });
+  my ($self, $sth_method, $to_call, $sth_args) = @_;
+  
+  $self->_exec(
+    ref($to_call) eq 'CODE'
+      ? sub { $self->$to_call($sth_method, $_[0], $sth_args) }
+      : sub {
+          $self->_sth_for($_[0], $to_call, $sth_args)->$sth_method
+        }
+  );
 }
 
 sub _exec {
index bf762b5..71214c1 100644 (file)
--- a/t/crud.t
+++ b/t/crud.t
@@ -46,7 +46,11 @@ sub make_store {
       select_all => 'SELECT id, name FROM names',
       delete_all => 'DELETE FROM names',
       select_one => 'SELECT id, name FROM names WHERE id = ?',
-      insert_one => 'INSERT INTO names (name) VALUES (?)',# RETURNING (id)',
+      insert_one => sub {
+        my ($store, undef, $dbh, $args) = @_;
+        $store->_sth_for($dbh, 'INSERT INTO names (name) VALUES (?)', $args);
+        [ $dbh->last_insert_id(undef,undef,undef,undef) ];
+      },
       update_one => 'UPDATE names SET name = ? WHERE id = ?',
       delete_one => 'DELETE FROM names WHERE id = ?',
     },