Apache-Session-DBMS
view release on metacpan or search on metacpan
lib/Apache/Session/DBMS.pm view on Meta::CPAN
};
# override perltie part
sub FETCH {
my $self = shift;
my $key = shift;
if( $self->{isObjectPerKey} ) {
&{$self->{unserialize}}( $self, $self->{object_store}->{dbh}->FETCH( $key ) ); # yep we do unserialize it each time
} else {
$self->SUPER::FETCH( $key );
};
};
sub STORE {
my $self = shift;
my $key = shift;
my $value = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->{dbh}->STORE( $key, &{$self->{serialize}}( $self, $value ) ); # yep we do serialize it each time
} else {
$self->SUPER::STORE( $key, $value );
};
};
sub DELETE {
my $self = shift;
my $key = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->{dbh}->DELETE( $key );
} else {
$self->SUPER::DELETE( $key );
};
};
sub CLEAR {
my $self = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->{dbh}->CLEAR();
} else {
$self->SUPER::CLEAR();
};
};
sub EXISTS {
my $self = shift;
my $key = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->{dbh}->EXISTS( $key );
} else {
$self->SUPER::EXISTS( $key );
};
};
sub FIRSTKEY {
my $self = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->{dbh}->FIRSTKEY();
} else {
$self->SUPER::FIRSTKEY();
};
};
sub NEXTKEY {
my $self = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->{dbh}->NEXTKEY( shift );
} else {
$self->SUPER::NEXTKEY( shift );
};
};
sub DESTROY {
my $self = shift;
if( $self->{isObjectPerKey} ) {
#$self->{object_store}->{dbh}->sync();
} else {
$self->SUPER::DESTROY();
};
};
# override persistence methods if object-per-key mode on
# NOTE: basically we bypass the whole Apache::Session "caching" one-key-object layer
sub restore {
my $self = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->connection($self);
} else {
$self->SUPER::restore();
};
};
sub save {
my $self = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->connection($self);
} else {
$self->SUPER::save();
};
};
sub delete {
my $self = shift;
if( $self->{isObjectPerKey} ) {
$self->{object_store}->connection($self);
$self->{object_store}->{dbh}->DROP()
or die $DBMS::ERROR."\n"; #shall we do a fire-safe check here?
} else {
$self->SUPER::delete();
};
};
1;
=pod
=head1 NAME
Apache::Session::DBMS - An implementation of Apache::Session using DBMS
( run in 1.392 second using v1.01-cache-2.11-cpan-49f99fa48dc )