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;