Apache-DBI-Cache

 view release on metacpan or  search on metacpan

lib/Apache/DBI/Cache.pm  view on Meta::CPAN

	     "</td><td>$v</td></tr>\n") );
    }
    push @s, "</table>\n";

    $lock->cds_unlock if( defined $lock );
    return \@s;
  }
}

{
  package Apache::DBI::Cache::st;
  use base qw(DBI::st);
}

# overload disconnect
{
  package Apache::DBI::Cache::db;
  use base qw(DBI::db);
  use strict;

  sub disconnect {
    my $dbh=shift;

    my $priv=$dbh->{$PRIVATE};
    my $Idx=$priv->{idx};

    $LOG->(2, "disconnect $Idx");

    if( $priv->{'disconnected'} ) {
      $LOG->(2, "already disconnect");
      return 1;
    }

    if( $dbh->{Active} and !$dbh->{AutoCommit} and eval {$dbh->rollback} ) {
      $LOG->(2, "ROLLBACK");
    }

    foreach my $k (keys %{$priv->{attr}}) {
      $dbh->{$k}=$priv->{attr}->{$k};
    }

    $priv->{'disconnected'}=1;

    Apache::DBI::Cache::_statop( $priv->{statIdx}, 1, 1 ); # incr. free count
    if( exists $Connected{$Idx} ) {
      push @{$Connected{$Idx}}, $dbh;
    } else {
      $Connected{$Idx}=[$dbh];
    }

    1;
  }

  sub DESTROY {
    my $dbh=shift;

    if( $GLOBAL_DESTROY ) {
      if( $GLOBAL_DESTROY>1 ) {
	$LOG->(2, "GLOBAL DESTROY $dbh->{$PRIVATE}->{idx}");
      }
      $dbh->SUPER::disconnect;
      $dbh->SUPER::DESTROY;
    } else {
      $LOG->(2, "DESTROY $dbh->{$PRIVATE}->{idx}");
      $dbh->disconnect;
    }
    1;
  }
}

1;
__END__



( run in 0.743 second using v1.01-cache-2.11-cpan-97f6503c9c8 )