Parent Directory
|
Revision Log
changed GDBM's interface a little -- you now specify the access mode when connecting rather than when constructing. -sam
1 package WeBWorK::DB::GDBM; 2 3 use GDBM_File; 4 5 # these should probably be in a constants file somewhere... 6 use constant MAX_TIE_ATTEMPTS => 30; 7 use constant TIE_RETRY_DELAY => 2; 8 use constant CREATE_MODE => 0660; 9 10 sub new($$) { 11 my $proto = shift; 12 my $class = ref($proto) || $proto; 13 my $self = { 14 hashRef => {}, 15 gdbm_file => shift, 16 }; 17 bless $self, $class; 18 return $self; 19 } 20 21 sub connect($$) { 22 my $self = shift; 23 my $accessMode = shift; 24 return if tied %$self->{hashRef}; # already tied! 25 my $mode = lc $accessMode eq "rw" ? GDBM_WRCREAT() : GDBM_READER(); 26 foreach (1 .. MAX_TIE_ATTEMPTS) { 27 return if tie %{$self->{hashRef}}, "GDBM_File", 28 $self->{gdbm_file}, 29 $mode, 30 $accessMode; 31 sleep TIE_RETRY_DELAY; 32 } 33 die "unable to tie ", $self->{gdbm_file}, ": $!"; 34 } 35 36 sub hashRef($) { 37 my $self = shift; 38 return unless tied %{$self->{hashRef}}; # not tied! 39 return $self->{hashRef}; 40 } 41 42 sub disconnect($) { 43 my $self = shift; 44 return unless tied %{$self->{hashRef}}; # not tied! 45 return 1 if untie %{$self->{hashRef}}; 46 } 47 48 1;
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |