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 )