Author: spadkins
Date: Wed Feb 25 21:04:36 2009
New Revision: 12544

Modified:
   p5ee/trunk/App-Repository/lib/App/Repository.pm
   p5ee/trunk/App-Repository/t/DBI-update.t

Log:
allow update() to take a HASH as a row

Modified: p5ee/trunk/App-Repository/lib/App/Repository.pm
==============================================================================
--- p5ee/trunk/App-Repository/lib/App/Repository.pm     (original)
+++ p5ee/trunk/App-Repository/lib/App/Repository.pm     Wed Feb 25 21:04:36 2009
@@ -2301,6 +2301,27 @@
     }
     else {
         $self->_load_table_metadata($table) if (! defined 
$self->{table}{$table}{loaded});
+        my ($hash);
+        if ($cols && !$row) {
+            if (ref($cols) eq "HASH") {
+                $hash = $cols;
+                $cols = [ keys %$hash ];
+                $row  = [ @{$has...@$cols} ];
+            }
+        }
+        elsif (!$cols && $row) {
+            if (ref($row) eq "HASH") {
+                $hash = $row;
+                $cols = [ keys %$hash ];
+                $row  = [ @{$has...@$cols} ];
+            }
+        }
+        elsif ($cols && $row) {
+            if (ref($row) eq "HASH") {
+                $hash = $row;
+                $row  = [ @{$has...@$cols} ];
+            }
+        }
         $retval = $self->_update($table,$params,$cols,$row,$options);
     }
     &App::sub_exit($retval) if ($App::trace);

Modified: p5ee/trunk/App-Repository/t/DBI-update.t
==============================================================================
--- p5ee/trunk/App-Repository/t/DBI-update.t    (original)
+++ p5ee/trunk/App-Repository/t/DBI-update.t    Wed Feb 25 21:04:36 2009
@@ -151,7 +151,7 @@
 is($sql, $expect_sql, "_mk_update_sql(): by_expression");
 &check_exec($sql,1);
 
-# This doesn't work yet
+# Doesn't work yet
 #$expect_sql = <<EOF;
 #update test_person set
 #   age = 6
@@ -161,5 +161,31 @@
 #is($sql, $expect_sql, "_mk_update_sql(): 1 col, by key, cols/row is single 
hashref");
 #&check_exec($sql,1);
 
+######################################################################################3
+# True updates
+######################################################################################3
+
+my ($nrows);
+
+$expect_sql = <<EOF;
+update test_person set
+   state = ?,
+   age = ?
+where gender = 'F'
+EOF
+$nrows = $rep->update("test_person", { gender => "F" }, ["state","age"], 
["CA", 21]);
+is($nrows, 3, "update(table, HASH, ARRAY, ARRAY) : nrows");
+is($rep->{sql}, $expect_sql, "update(table, HASH, ARRAY, ARRAY) : sql");
+
+$expect_sql = <<EOF;
+update test_person set
+   state = ?,
+   age = ?
+where gender = 'F'
+EOF
+$nrows = $rep->update("test_person", { gender => "F" }, ["state","age"], { 
state => "CA", age => 21 });
+is($nrows, 3, "update(table, HASH, ARRAY, HASH) : nrows");
+is($rep->{sql}, $expect_sql, "update(table, HASH, ARRAY, HASH) : sql");
+
 exit 0;
 

Reply via email to