improving setRow

This commit is contained in:
Graham Knop 2010-05-11 20:27:24 -05:00
parent d75fa54231
commit 7b9e230409

View file

@ -133,7 +133,7 @@ sub connect {
} }
$params = { @params }; $params = { @params };
} }
$params->{RaiseError} = 1; $params->{RaiseError} = 0;
$params->{PrintError} = 0; $params->{PrintError} = 0;
$params->{AutoCommit} = 1; $params->{AutoCommit} = 1;
$params->{ShowErrorStatement} = 1; $params->{ShowErrorStatement} = 1;
@ -157,6 +157,7 @@ sub connect {
package WebGUI::SQL::db; package WebGUI::SQL::db;
use Try::Tiny;
our @ISA = qw(DBI::db); our @ISA = qw(DBI::db);
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -879,21 +880,24 @@ sub setRow {
if ($data->{$keyColumn} eq 'new' || $id) { if ($data->{$keyColumn} eq 'new' || $id) {
$id ||= $self->session->id->generate; $id ||= $self->session->id->generate;
$data->{$keyColumn} = $id; $data->{$keyColumn} = $id;
$self->do("REPLACE INTO $table ($key) VALUES (?)", {}, $id); }
else {
$id = $data->{$keyColumn};
} }
my @fields = map { $self->quote_identifier($_) . '=?' } keys %$data; try {
my @data = values %$data; my $fields = join ', ', map { $self->quote_identifier($_) } keys %$data;
my $values = join ', ', ('?') x values %$data;
if (@fields) { $self->do("INSERT INTO $table ($fields) VALUES ($values)", {}, values %$data);
$self->do(
"UPDATE $table SET " . join(", ", @fields)
. " WHERE $key = ?",
{},
@data,
$id,
);
} }
catch {
my %data = %$data;
delete $data{$keyColumn};
my $fields = join ', ', map { $self->quote_identifier($_). '=?' } keys %data;
$self->do("UPDATE $table SET $fields WHERE $key = ?", {}, values %data, $id);
};
return $id; return $id;
} }