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 )