Parent Directory
|
Revision Log
roar! -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 accessMode => shift, 17 }; 18 bless $self, $class; 19 return $self; 20 } 21 22 sub connect($) { 23 my $self = shift; 24 return if tied %$self->{hashRef}; # already tied! 25 my $mode = lc $self->{accessMode} eq "w" ? 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 $self->{accessMode}; 31 sleep TIE_RETRY_DELAY; 32 } 33 die "WeBWorK::Tie::GDBM::connect: 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 |