CGI-AppToolkit
view release on metacpan or search on metacpan
lib/CGI/AppToolkit/Data/SQLObject.pm view on Meta::CPAN
if ($self->can('prestore')) {
$self->prestore($args, $error_object);
}
return $error_object if $error_object->has_errors;
# save a new one and return the id
if ((($index && !$args->{$index}) || $args->{'-insert'}) && !$args->{'-update'}) {
if ($self->can('preinsert')) {
$self->preinsert($args, $error_object);
return $error_object if $error_object->has_errors;
}
my $statement = $self->get_db_statement('insert');
my ($sth, $order) = @$statement;
return $error_object if $error_object->has_errors;
$sth->execute(@{$args}{@$order});
if ($self->can('postinsert')) {
$self->postinsert($args, $sth);
}
return $error_object if $error_object->has_errors;
return $args;
# update and return the old info
} else {
my $old = undef;
if (defined wantarray || $self->can('preupdate')) {
$old = $self->fetch({'id' => $args->{'id'}, '-one' => 1});
}
if ($self->can('preupdate')) {
$self->preupdate($args, $old, $error_object);
return $error_object if $error_object->has_errors;
}
my $statement = $self->get_db_statement('update');
my ($sth, $order) = @$statement;
$sth->execute(@{$args}{@$order});
if ($self->can('postupdate')) {
$self->postupdate($args, $old, $sth);
}
return $old if defined wantarray;
}
}
#-------------------------------------#
# get a prepared db statement
sub update {
my $self = shift;
my $name = shift;
#if we're passed several values, recurse then quit
if (ref $_[0] eq 'ARRAY') {
my $ret = [];
my $stores = shift;
foreach my $args (@$stores) {
push @$ret, $self->update($args);
}
return $ret;
}
my $args = ref $_[0] eq 'HASH' ? shift : {@_};
$args->{'-update'} = 1;
return $self->store($args);
}
#-------------------------------------#
# delete some objects
sub delete {
my $self = shift;
my $args = ref $_[0] eq 'HASH' ? shift : {@_};
$self->_remap_keys($args);
my $statement = undef;
my $values = {};
if ($self->can('predelete')) {
($statement, $values) = $self->predelete($args);
}
unless ($statement) {
my $table = $self->get_table();
my $name = undef;
$name = "delete:" . $self->_make_statement_name($args, $values);
unless ($statement = $self->get_db_statement($name)) {
my $sql = "delete from $table";
my @order = ();
$sql .= $self->_make_where($args, $name, \@order);
# carp "delete SQL: $sql\n";
# carp(join(', ', map{ref $_ eq 'ARRAY' ? @$_ : @_} @{$values}{@order}));
my $sth = $self->get_kit->get_dbi()->prepare($sql);
$statement = [$sth, \@order];
$self->set_db_statement($name, $statement);
}
}
if (!$statement) {
if ($self->get_kit->get_errors_fatal()) {
( run in 0.902 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )