ClearPress
view release on metacpan or search on metacpan
lib/ClearPress/model.pm view on Meta::CPAN
return;
}
my $table = $self->table();
if(!$table) {
croak q(No table defined);
}
if(!$self->{_loaded}) {
if(!$query) {
$query = <<"EOT";
/* model::read */
SELECT @{[join q(, ), $self->fields()]}
FROM $table
WHERE $pk=?
EOT
@args = ($self->{$pk});
}
eval {
my $sth = $util->dbh->prepare($query);
$sth->execute(@args);
my $ref = $sth->fetchrow_hashref();
if(!$sth->rows()) {
#########
# entity not in database
#
$sth->finish();
croak q[missing entity];
}
$sth->finish();
my $warnings = $util->driver->sth_has_warnings($sth);
if(!$warnings) {
for my $f ($self->fields()) {
$self->{$f} = $ref->{$f};
}
} else {
for my $w (@{$warnings}) {
carp qq[ClearPress::model::read: mysql warning: $w->[2]];
}
}
1;
} or do {
if($EVAL_ERROR =~ /missing\sentity/smx) {
return;
}
carp qq[SELECT ERROR\nEVAL_ERROR: $EVAL_ERROR\nQuery:\n$query\n\nParams: @{[map { (defined $_)?$_:'NULL' } @args]}\n];
};
}
$self->{_loaded} = 1;
return 1;
}
sub update {
my $self = shift;
my $pk = $self->primary_key();
if(!$pk || !$self->$pk()) {
croak q(No primary key);
}
my $table = $self->table();
if(!$table) {
croak q(No table defined);
}
my $util = $self->util();
my $tr_state = $util->transactions();
my $dbh = $util->dbh();
my @fields = grep { exists $self->{$_} }
grep { $_ ne $pk }
$self->fields();
my $query = <<"EOT";
UPDATE @{[$self->table()]}
SET @{[join q(, ),
map { qq[$_ = ?] }
@fields]}
WHERE $pk=?
EOT
eval {
$dbh->do($query, {}, (map { $self->$_() } @fields), $self->$pk);
} or do {
$tr_state and $dbh->rollback();
croak $EVAL_ERROR.q[ ].$query;
};
eval {
$tr_state and $dbh->commit();
1;
} or do {
croak $EVAL_ERROR;
};
return 1;
}
sub delete { ## no critic (homonym)
my $self = shift;
my $util = $self->util();
my $tr_state = $util->transactions();
my $dbh = $util->dbh();
my $pk = $self->primary_key();
if(!$pk || !$self->$pk()) {
croak q(No primary key);
}
my $query = <<"EOT";
DELETE FROM @{[$self->table()]}
WHERE $pk=?
EOT
( run in 1.790 second using v1.01-cache-2.11-cpan-2398b32b56e )