IMDB-Local
view release on metacpan or search on metacpan
lib/IMDB/Local/DB/BaseObject.pm view on Meta::CPAN
$D->Indent(1);
my $d=$D->Dump();
$d=~s/\n\s*\'__FIELDS__\' => \[[^\]]+\]//ogs;
#$d=~s/\'([^\']+)\' => \'([^\']+)\'/$1:$2/ogs;
#while ($d=~s/\n /\n /) {};
$text.="$d\n";
}
return($text);
}
sub _updateInDB
{
my $self=shift;
my $args={@_};
my $stmt="UPDATE ".$self->db_table." SET ";
for my $key (keys %{$args}) {
my $value=$args->{$key};
if ( !defined($value) ) {
$stmt.="$key=NULL, ";
}
else {
$stmt.="$key='$value', ";
}
}
$stmt=~s/, $//;
if ( defined($self->db_key2) ) {
if ( defined($self->db_key3) ) {
$stmt.=sprintf("WHERE %s='%s' AND %s='%s' AND %s='%s'", $self->db_key, $self->get($self->db_key),
$self->db_key2, $self->get($self->db_key2),
$self->db_key3, $self->get($self->db_key3));
}
else {
$stmt.=sprintf("WHERE %s='%s' AND %s='%s'", $self->db_key, $self->get($self->db_key),
$self->db_key2, $self->get($self->db_key2));
}
}
else {
$stmt.=sprintf("WHERE %s='%s'", $self->db_key, $self->get($self->db_key));
}
my $dbh=$self->imdbdb->dbh();
#print STDERR "invoking: args=".$args."\n";
#print STDERR "invoking: args=".%{$args}."\n";
#print STDERR "invoking: ".$stmt."\n";
$dbh->do($stmt);
if ( $dbh->err() ) {
return(0);
}
# update our fields so they match
for my $key (keys %{$args}) {
my $value=$args->{$key};
$self->$key($value);
}
return(1);
}
sub update($@)
{
my $self=shift;
my $args={@_};
my %updates;
for my $key (keys %{$args}) {
my $value=$args->{$key};
my $cur=$self->get($key);
if ( defined($cur) != defined($value) ) {
$updates{$key}=$value;
}
# either both undefined or both defined
elsif ( defined($value) && $cur ne $value ) {
$updates{$key}=$value;
}
}
if ( %updates ) {
return $self->_updateInDB(%updates);
}
return(0);
}
sub newFromDB($)
{
my ($self)=@_;
my $class=$self->_className();
if ( defined($self->db_key2) ) {
if ( defined($self->db_key3) ) {
return new $class(imdbdb=>$self->imdbdb(),
$self->db_key()=>$self->get($self->db_key()),
$self->db_key2()=>$self->get($self->db_key2()),
$self->db_key3()=>$self->get($self->db_key3()));
}
else {
return new $class(imdbdb=>$self->imdbdb(),
$self->db_key()=>$self->get($self->db_key()),
$self->db_key2()=>$self->get($self->db_key2()));
}
}
else {
return new $class(imdbdb=>$self->imdbdb(),
$self->db_key()=>$self->get($self->db_key()));
}
}
sub delete($)
{
my ($self)=@_;
if ( defined($self->db_key2) ) {
if ( defined($self->db_key3) ) {
$self->imdbdb->execute("DELETE from ".$self->db_table()." WHERE ".
$self->db_key()."='".$self->get($self->db_key())."' AND ".
$self->db_key2()."='".$self->get($self->db_key2())."' AND ".
$self->db_key3()."='".$self->get($self->db_key3())."'");
}
else {
( run in 0.400 second using v1.01-cache-2.11-cpan-d7f47b0818f )