home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-12-26 | 5.0 KB | 249 lines | [TEXT/McPL] |
- # DB_File.pm -- Perl 5 interface to Berkeley DB
- #
- # written by Paul Marquess (pmarquess@bfsec.bt.co.uk)
- # last modified 23rd June 1994
- # version 0.1
-
- package DB_File::HASHINFO ;
- use Carp;
-
- sub TIEHASH
- {
- bless {} ;
- }
-
- %elements = ( 'bsize' => 0,
- 'ffactor' => 0,
- 'nelem' => 0,
- 'cachesize' => 0,
- 'hash' => 0,
- 'lorder' => 0
- ) ;
-
- sub FETCH
- {
- return $_[0]{$_[1]} if defined $elements{$_[1]} ;
-
- croak "DB_File::HASHINFO::FETCH - Unknown element '$_[1]'" ;
- }
-
-
- sub STORE
- {
- if ( defined $elements{$_[1]} )
- {
- $_[0]{$_[1]} = $_[2] ;
- return ;
- }
-
- croak "DB_File::HASHINFO::STORE - Unknown element '$_[1]'" ;
- }
-
- sub DELETE
- {
- if ( defined $elements{$_[1]} )
- {
- delete ${$_[0]}{$_[1]} ;
- return ;
- }
-
- croak "DB_File::HASHINFO::DELETE - Unknown element '$_[1]'" ;
- }
-
-
- sub DESTROY {undef %{$_[0]} }
- sub FIRSTKEY { croak "DB_File::HASHINFO::FIRSTKEY is not implemented" }
- sub NEXTKEY { croak "DB_File::HASHINFO::NEXTKEY is not implemented" }
- sub EXISTS { croak "DB_File::HASHINFO::EXISTS is not implemented" }
- sub CLEAR { croak "DB_File::HASHINFO::CLEAR is not implemented" }
-
- package DB_File::BTREEINFO ;
- use Carp;
-
- sub TIEHASH
- {
- bless {} ;
- }
-
- %elements = ( 'flags' => 0,
- 'cachesize' => 0,
- 'maxkeypage' => 0,
- 'minkeypage' => 0,
- 'psize' => 0,
- 'compare' => 0,
- 'prefix' => 0,
- 'lorder' => 0
- ) ;
-
- sub FETCH
- {
- return $_[0]{$_[1]} if defined $elements{$_[1]} ;
-
- croak "DB_File::BTREEINFO::FETCH - Unknown element '$_[1]'" ;
- }
-
-
- sub STORE
- {
- if ( defined $elements{$_[1]} )
- {
- $_[0]{$_[1]} = $_[2] ;
- return ;
- }
-
- croak "DB_File::BTREEINFO::STORE - Unknown element '$_[1]'" ;
- }
-
- sub DELETE
- {
- if ( defined $elements{$_[1]} )
- {
- delete ${$_[0]}{$_[1]} ;
- return ;
- }
-
- croak "DB_File::BTREEINFO::DELETE - Unknown element '$_[1]'" ;
- }
-
-
- sub DESTROY {undef %{$_[0]} }
- sub FIRSTKEY { croak "DB_File::BTREEINFO::FIRSTKEY is not implemented" }
- sub NEXTKEY { croak "DB_File::BTREEINFO::NEXTKEY is not implemented" }
- sub EXISTS { croak "DB_File::BTREEINFO::EXISTS is not implemented" }
- sub CLEAR { croak "DB_File::BTREEINFO::CLEAR is not implemented" }
-
- package DB_File::RECNOINFO ;
- use Carp;
-
- sub TIEHASH
- {
- bless {} ;
- }
-
- %elements = ( 'bval' => 0,
- 'cachesize' => 0,
- 'psize' => 0,
- 'flags' => 0,
- 'lorder' => 0,
- 'reclen' => 0,
- 'bfname' => 0
- ) ;
- sub FETCH
- {
- return $_[0]{$_[1]} if defined $elements{$_[1]} ;
-
- croak "DB_File::RECNOINFO::FETCH - Unknown element '$_[1]'" ;
- }
-
-
- sub STORE
- {
- if ( defined $elements{$_[1]} )
- {
- $_[0]{$_[1]} = $_[2] ;
- return ;
- }
-
- croak "DB_File::RECNOINFO::STORE - Unknown element '$_[1]'" ;
- }
-
- sub DELETE
- {
- if ( defined $elements{$_[1]} )
- {
- delete ${$_[0]}{$_[1]} ;
- return ;
- }
-
- croak "DB_File::RECNOINFO::DELETE - Unknown element '$_[1]'" ;
- }
-
-
- sub DESTROY {undef %{$_[0]} }
- sub FIRSTKEY { croak "DB_File::RECNOINFO::FIRSTKEY is not implemented" }
- sub NEXTKEY { croak "DB_File::RECNOINFO::NEXTKEY is not implemented" }
- sub EXISTS { croak "DB_File::BTREEINFO::EXISTS is not implemented" }
- sub CLEAR { croak "DB_File::BTREEINFO::CLEAR is not implemented" }
-
-
-
- package DB_File ;
- use Carp;
-
- #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
- $DB_BTREE = TIEHASH DB_File::BTREEINFO ;
- $DB_HASH = TIEHASH DB_File::HASHINFO ;
- $DB_RECNO = TIEHASH DB_File::RECNOINFO ;
-
- require TieHash;
- require Exporter;
- require AutoLoader;
- require DynaLoader;
- @ISA = (TieHash, Exporter, AutoLoader, DynaLoader);
- @EXPORT = qw(
- $DB_BTREE $DB_HASH $DB_RECNO
- BTREEMAGIC
- BTREEVERSION
- DB_LOCK
- DB_SHMEM
- DB_TXN
- HASHMAGIC
- HASHVERSION
- MAX_PAGE_NUMBER
- MAX_PAGE_OFFSET
- MAX_REC_NUMBER
- RET_ERROR
- RET_SPECIAL
- RET_SUCCESS
- R_CURSOR
- R_DUP
- R_FIRST
- R_FIXEDLEN
- R_IAFTER
- R_IBEFORE
- R_LAST
- R_NEXT
- R_NOKEY
- R_NOOVERWRITE
- R_PREV
- R_RECNOSYNC
- R_SETCURSOR
- R_SNAPSHOT
- __R_UNUSED
- );
-
- sub AUTOLOAD {
- if (@_ > 1) {
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- local($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- $val = constant($constname, @_ ? $_[0] : 0);
- if ($! != 0) {
- if ($! =~ /Invalid/) {
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- ($pack,$file,$line) = caller;
- croak "Your vendor has not defined DB macro $constname, used at $file line $line.
- ";
- }
- }
- eval "sub $AUTOLOAD { $val }";
- goto &$AUTOLOAD;
- }
-
- @liblist = ();
- @liblist = split ' ', $Config::Config{"DB_File_loadlibs"}
- if defined $Config::Config{"DB_File_loadlibs"};
-
- bootstrap DB_File @liblist;
-
- # Preloaded methods go here. Autoload methods go after __END__, and are
- # processed by the autosplit program.
-
- 1;
- __END__
-