Revert back to the old setRow that handles sparse updates, like the one used by Group.

This commit is contained in:
Colin Kuskie 2010-05-06 20:48:39 -07:00
parent e830e922c8
commit ad88c37581

View file

@ -961,24 +961,28 @@ Use this ID to create a new row. Same as setting the key value to "new" except t
=cut =cut
sub setRow { sub setRow {
my ($self, $table, $keyColumn, $data, $id) = @_; my ($self, $table, $keyColumn, $data, $id) = @_;
if ($data->{$keyColumn} eq "new" || $id) { if ($data->{$keyColumn} eq "new" || $id) {
$data->{$keyColumn} = $id || $self->session->id->generate(); $data->{$keyColumn} = $id || $self->session->id->generate();
} $self->write("replace into ".$self->dbh->quote_identifier($table)
my $dbh = $self->dbh; ." (" . $self->dbh->quote_identifier($keyColumn) . ") values (?)",[$data->{$keyColumn}]);
my @fields = (); }
my @data = (); my @fields = ();
my @placeholders = (); my @data = ();
foreach my $key (keys %{$data}) { foreach my $key (keys %{$data}) {
push(@fields, $dbh->quote_identifier($key)); unless ($key eq $keyColumn) {
push(@placeholders, '?'); push(@fields, $self->dbh->quote_identifier($key).'=?');
push(@data,$data->{$key}); push(@data,$data->{$key});
} }
$self->write("replace into $table (" . join(",",@fields) . ") values (".join(",",@placeholders).")",\@data); }
return $data->{$keyColumn}; if ($fields[0] ne "") {
push(@data,$data->{$keyColumn});
$self->write("update ".$self->dbh->quote_identifier($table)." set " . join(", ", @fields)
. " where " . $self->dbh->quote_identifier($keyColumn) . "=?", \@data);
}
return $data->{$keyColumn};
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
=head2 unconditionalRead ( sql [, placeholders ] ) =head2 unconditionalRead ( sql [, placeholders ] )