improving setRow
This commit is contained in:
parent
d75fa54231
commit
7b9e230409
1 changed files with 17 additions and 13 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue