package CGI::Session::Driver::sweet; use warnings; use strict; use Carp; use MultiDesk::DB; use CGI::Session::Driver; @CGI::Session::Driver::sweet::ISA = ( "CGI::Session::Driver" ); $CGI::Session::Driver::sweet::VERSION = '1.0'; sub init { my $self = shift; return 1; } # A setter/accessor method for the table name, defaulting to 'sessions' sub table_name { my $self = shift; my $class = ref( $self ) || $self; if ( (@_ == 0) && ref($self) && ($self->{TableName}) ) { return $self->{TableName}; } no strict 'refs'; if ( @_ ) { my $new_name = shift; $self->{TableName} = $new_name; ${ $class . "::TABLE_NAME" } = $new_name; } unless (defined $self->{TableName}) { $self->{TableName} = "sessions"; } return $self->{TableName}; } sub retrieve { my $self = shift; my ($sid) = @_; croak "retrieve(): usage error" unless $sid; my $id_col=$self->{IdColName}; my $row=$self->{Handle}->retrieve($id_col => $sid); return 0 unless $row; return $row->a_session(); } sub store { my $self = shift; my ($sid, $datastr) = @_; croak "store(): usage error" unless $sid && $datastr; my $id_col=$self->{IdColName}; my $data_col=$self->{DataColName}; my $rc=$self->{Handle}->retrieve($id_col => $sid); $self->{Handle}->autoupdate(1); if ( $rc ) { $rc->$data_col($datastr); } else { $self->{Handle}->insert({id => $sid, a_session => $datastr, }); } return 1; } sub remove { my $self = shift; my ($sid) = @_; croak "remove(): usage error" unless $sid; my $id_col=$self->{IdColName}; my $sess=$self->{Handle}->retrieve($id_col => $sid); $sess->delete() if($sess); return 1; } sub traverse { my $self = shift; my ($coderef) = @_; unless ( $coderef && ref( $coderef ) && (ref $coderef eq 'CODE') ) { croak "traverse(): usage error"; } my $id_col=$self->{IdColName}; my $iterator=$self->{Handle}->retrieve_all(); while ( my ($i) = $iterator->next ) { $coderef->($i->$id_col()); } return 1; }