[system] / trunk / webwork-modperl / lib / WeBWorK / DB / GDBM.pm Repository:
ViewVC logotype

View of /trunk/webwork-modperl/lib/WeBWorK/DB/GDBM.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 316 - (download) (as text) (annotate)
Thu May 30 19:13:47 2002 UTC (10 years, 11 months ago) by sh002i
File size: 1038 byte(s)
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