1#############################################################################
2#
3# Apache::Session::Store::DBI
4# A base class for the MySQL, Postgres, and other DBI stores
5# Copyright(c) 2000, 2004 Jeffrey William Baker (jwbaker@acm.org)
6# Distribute under the Perl License
7#
8############################################################################
9
10package Apache::Session::Store::DBI;
11
12use strict;
13use DBI;
14
15use vars qw($VERSION);
16
17$VERSION = '1.02';
18
19$Apache::Session::Store::DBI::TableName = "sessions";
20
21sub new {
22    my $class = shift;
23
24    return bless { table_name => $Apache::Session::Store::DBI::TableName }, $class;
25}
26
27sub insert {
28    my $self    = shift;
29    my $session = shift;
30
31    $self->connection($session);
32
33    local $self->{dbh}->{RaiseError} = 1;
34
35    if (!defined $self->{insert_sth}) {
36        $self->{insert_sth} =
37            $self->{dbh}->prepare_cached(qq{
38                INSERT INTO $self->{'table_name'} (id, a_session) VALUES (?,?)});
39    }
40
41    $self->{insert_sth}->bind_param(1, $session->{data}->{_session_id});
42    $self->{insert_sth}->bind_param(2, $session->{serialized});
43
44    $self->{insert_sth}->execute;
45
46    $self->{insert_sth}->finish;
47}
48
49
50sub update {
51    my $self    = shift;
52    my $session = shift;
53
54    $self->connection($session);
55
56    local $self->{dbh}->{RaiseError} = 1;
57
58    if (!defined $self->{update_sth}) {
59        $self->{update_sth} =
60            $self->{dbh}->prepare_cached(qq{
61                UPDATE $self->{'table_name'} SET a_session = ? WHERE id = ?});
62    }
63
64    $self->{update_sth}->bind_param(1, $session->{serialized});
65    $self->{update_sth}->bind_param(2, $session->{data}->{_session_id});
66
67    $self->{update_sth}->execute;
68
69    $self->{update_sth}->finish;
70}
71
72sub materialize {
73    my $self    = shift;
74    my $session = shift;
75
76    $self->connection($session);
77
78    local $self->{dbh}->{RaiseError} = 1;
79
80    if (!defined $self->{materialize_sth}) {
81        $self->{materialize_sth} =
82            $self->{dbh}->prepare_cached(qq{
83                SELECT a_session FROM $self->{'table_name'} WHERE id = ?});
84    }
85
86    $self->{materialize_sth}->bind_param(1, $session->{data}->{_session_id});
87
88    $self->{materialize_sth}->execute;
89
90    my $results = $self->{materialize_sth}->fetchrow_arrayref;
91
92    if (!(defined $results)) {
93        die "Object does not exist in the data store";
94    }
95
96    $self->{materialize_sth}->finish;
97
98    $session->{serialized} = $results->[0];
99}
100
101sub remove {
102    my $self    = shift;
103    my $session = shift;
104
105    $self->connection($session);
106
107    local $self->{dbh}->{RaiseError} = 1;
108
109    if (!defined $self->{remove_sth}) {
110        $self->{remove_sth} =
111            $self->{dbh}->prepare_cached(qq{
112                DELETE FROM $self->{'table_name'} WHERE id = ?});
113    }
114
115    $self->{remove_sth}->bind_param(1, $session->{data}->{_session_id});
116
117    $self->{remove_sth}->execute;
118    $self->{remove_sth}->finish;
119}
120
1211;
122