⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 berkeleydb.pm

📁 File system using stacked.
💻 PM
📖 第 1 页 / 共 2 页
字号:
package BerkeleyDB;#     Copyright (c) 1997-2002 Paul Marquess. All rights reserved.#     This program is free software; you can redistribute it and/or#     modify it under the same terms as Perl itself.## The documentation for this module is at the bottom of this file,# after the line __END__.BEGIN { require 5.004_04 }use strict;use Carp;use vars qw($VERSION @ISA @EXPORT $AUTOLOAD		$use_XSLoader);$VERSION = '0.20';require Exporter;#require DynaLoader;require AutoLoader;BEGIN {    $use_XSLoader = 1 ;    { local $SIG{__DIE__} ; eval { require XSLoader } ; }     if ($@) {        $use_XSLoader = 0 ;        require DynaLoader;        @ISA = qw(DynaLoader);    }}@ISA = qw(Exporter DynaLoader);# Items to export into callers namespace by default. Note: do not export# names by default without a very good reason. Use EXPORT_OK instead.# Do not simply export all your public functions/methods/constants.# NOTE -- Do not add to @EXPORT directly. It is written by mkconsts@EXPORT = qw(	DB_AFTER	DB_AGGRESSIVE	DB_ALREADY_ABORTED	DB_APPEND	DB_APPLY_LOGREG	DB_APP_INIT	DB_ARCH_ABS	DB_ARCH_DATA	DB_ARCH_LOG	DB_AUTO_COMMIT	DB_BEFORE	DB_BROADCAST_EID	DB_BTREE	DB_BTREEMAGIC	DB_BTREEOLDVER	DB_BTREEVERSION	DB_CACHED_COUNTS	DB_CDB_ALLDB	DB_CHECKPOINT	DB_CHKSUM_SHA1	DB_CLIENT	DB_CL_WRITER	DB_COMMIT	DB_CONSUME	DB_CONSUME_WAIT	DB_CREATE	DB_CURLSN	DB_CURRENT	DB_CXX_NO_EXCEPTIONS	DB_DELETED	DB_DELIMITER	DB_DIRECT	DB_DIRECT_DB	DB_DIRECT_LOG	DB_DIRTY_READ	DB_DONOTINDEX	DB_DUP	DB_DUPCURSOR	DB_DUPSORT	DB_EID_BROADCAST	DB_EID_INVALID	DB_ENCRYPT	DB_ENCRYPT_AES	DB_ENV_APPINIT	DB_ENV_AUTO_COMMIT	DB_ENV_CDB	DB_ENV_CDB_ALLDB	DB_ENV_CREATE	DB_ENV_DBLOCAL	DB_ENV_DIRECT_DB	DB_ENV_DIRECT_LOG	DB_ENV_FATAL	DB_ENV_LOCKDOWN	DB_ENV_LOCKING	DB_ENV_LOGGING	DB_ENV_NOLOCKING	DB_ENV_NOMMAP	DB_ENV_NOPANIC	DB_ENV_OPEN_CALLED	DB_ENV_OVERWRITE	DB_ENV_PANIC_OK	DB_ENV_PRIVATE	DB_ENV_REGION_INIT	DB_ENV_REP_CLIENT	DB_ENV_REP_LOGSONLY	DB_ENV_REP_MASTER	DB_ENV_RPCCLIENT	DB_ENV_RPCCLIENT_GIVEN	DB_ENV_STANDALONE	DB_ENV_SYSTEM_MEM	DB_ENV_THREAD	DB_ENV_TXN	DB_ENV_TXN_NOSYNC	DB_ENV_TXN_WRITE_NOSYNC	DB_ENV_USER_ALLOC	DB_ENV_YIELDCPU	DB_EXCL	DB_EXTENT	DB_FAST_STAT	DB_FCNTL_LOCKING	DB_FILE_ID_LEN	DB_FIRST	DB_FIXEDLEN	DB_FLUSH	DB_FORCE	DB_GETREC	DB_GET_BOTH	DB_GET_BOTHC	DB_GET_BOTH_RANGE	DB_GET_RECNO	DB_HANDLE_LOCK	DB_HASH	DB_HASHMAGIC	DB_HASHOLDVER	DB_HASHVERSION	DB_INCOMPLETE	DB_INIT_CDB	DB_INIT_LOCK	DB_INIT_LOG	DB_INIT_MPOOL	DB_INIT_TXN	DB_INVALID_EID	DB_JAVA_CALLBACK	DB_JOINENV	DB_JOIN_ITEM	DB_JOIN_NOSORT	DB_KEYEMPTY	DB_KEYEXIST	DB_KEYFIRST	DB_KEYLAST	DB_LAST	DB_LOCKDOWN	DB_LOCKMAGIC	DB_LOCKVERSION	DB_LOCK_CONFLICT	DB_LOCK_DEADLOCK	DB_LOCK_DEFAULT	DB_LOCK_DUMP	DB_LOCK_EXPIRE	DB_LOCK_FREE_LOCKER	DB_LOCK_GET	DB_LOCK_GET_TIMEOUT	DB_LOCK_INHERIT	DB_LOCK_MAXLOCKS	DB_LOCK_MINLOCKS	DB_LOCK_MINWRITE	DB_LOCK_NORUN	DB_LOCK_NOTEXIST	DB_LOCK_NOTGRANTED	DB_LOCK_NOTHELD	DB_LOCK_NOWAIT	DB_LOCK_OLDEST	DB_LOCK_PUT	DB_LOCK_PUT_ALL	DB_LOCK_PUT_OBJ	DB_LOCK_PUT_READ	DB_LOCK_RANDOM	DB_LOCK_RECORD	DB_LOCK_REMOVE	DB_LOCK_RIW_N	DB_LOCK_RW_N	DB_LOCK_SET_TIMEOUT	DB_LOCK_SWITCH	DB_LOCK_TIMEOUT	DB_LOCK_TRADE	DB_LOCK_UPGRADE	DB_LOCK_UPGRADE_WRITE	DB_LOCK_YOUNGEST	DB_LOGC_BUF_SIZE	DB_LOGFILEID_INVALID	DB_LOGMAGIC	DB_LOGOLDVER	DB_LOGVERSION	DB_LOG_DISK	DB_LOG_LOCKED	DB_LOG_SILENT_ERR	DB_MAX_PAGES	DB_MAX_RECORDS	DB_MPOOL_CLEAN	DB_MPOOL_CREATE	DB_MPOOL_DIRTY	DB_MPOOL_DISCARD	DB_MPOOL_EXTENT	DB_MPOOL_LAST	DB_MPOOL_NEW	DB_MPOOL_NEW_GROUP	DB_MPOOL_PRIVATE	DB_MULTIPLE	DB_MULTIPLE_KEY	DB_MUTEXDEBUG	DB_MUTEXLOCKS	DB_NEEDSPLIT	DB_NEXT	DB_NEXT_DUP	DB_NEXT_NODUP	DB_NOCOPY	DB_NODUPDATA	DB_NOLOCKING	DB_NOMMAP	DB_NOORDERCHK	DB_NOOVERWRITE	DB_NOPANIC	DB_NORECURSE	DB_NOSERVER	DB_NOSERVER_HOME	DB_NOSERVER_ID	DB_NOSYNC	DB_NOTFOUND	DB_ODDFILESIZE	DB_OK_BTREE	DB_OK_HASH	DB_OK_QUEUE	DB_OK_RECNO	DB_OLD_VERSION	DB_OPEN_CALLED	DB_OPFLAGS_MASK	DB_ORDERCHKONLY	DB_OVERWRITE	DB_PAD	DB_PAGEYIELD	DB_PAGE_LOCK	DB_PAGE_NOTFOUND	DB_PANIC_ENVIRONMENT	DB_PERMANENT	DB_POSITION	DB_POSITIONI	DB_PREV	DB_PREV_NODUP	DB_PRINTABLE	DB_PRIORITY_DEFAULT	DB_PRIORITY_HIGH	DB_PRIORITY_LOW	DB_PRIORITY_VERY_HIGH	DB_PRIORITY_VERY_LOW	DB_PRIVATE	DB_PR_HEADERS	DB_PR_PAGE	DB_PR_RECOVERYTEST	DB_QAMMAGIC	DB_QAMOLDVER	DB_QAMVERSION	DB_QUEUE	DB_RDONLY	DB_RDWRMASTER	DB_RECNO	DB_RECNUM	DB_RECORDCOUNT	DB_RECORD_LOCK	DB_RECOVER	DB_RECOVER_FATAL	DB_REGION_ANON	DB_REGION_INIT	DB_REGION_MAGIC	DB_REGION_NAME	DB_REGISTERED	DB_RENAMEMAGIC	DB_RENUMBER	DB_REP_CLIENT	DB_REP_DUPMASTER	DB_REP_HOLDELECTION	DB_REP_LOGSONLY	DB_REP_MASTER	DB_REP_NEWMASTER	DB_REP_NEWSITE	DB_REP_OUTDATED	DB_REP_PERMANENT	DB_REP_UNAVAIL	DB_REVSPLITOFF	DB_RMW	DB_RPC_SERVERPROG	DB_RPC_SERVERVERS	DB_RUNRECOVERY	DB_SALVAGE	DB_SECONDARY_BAD	DB_SEQUENTIAL	DB_SET	DB_SET_LOCK_TIMEOUT	DB_SET_RANGE	DB_SET_RECNO	DB_SET_TXN_NOW	DB_SET_TXN_TIMEOUT	DB_SNAPSHOT	DB_STAT_CLEAR	DB_SURPRISE_KID	DB_SWAPBYTES	DB_SYSTEM_MEM	DB_TEMPORARY	DB_TEST_ELECTINIT	DB_TEST_ELECTSEND	DB_TEST_ELECTVOTE1	DB_TEST_ELECTVOTE2	DB_TEST_ELECTWAIT1	DB_TEST_ELECTWAIT2	DB_TEST_POSTDESTROY	DB_TEST_POSTEXTDELETE	DB_TEST_POSTEXTOPEN	DB_TEST_POSTEXTUNLINK	DB_TEST_POSTLOG	DB_TEST_POSTLOGMETA	DB_TEST_POSTOPEN	DB_TEST_POSTRENAME	DB_TEST_POSTSYNC	DB_TEST_PREDESTROY	DB_TEST_PREEXTDELETE	DB_TEST_PREEXTOPEN	DB_TEST_PREEXTUNLINK	DB_TEST_PREOPEN	DB_TEST_PRERENAME	DB_TEST_SUBDB_LOCKS	DB_THREAD	DB_TIMEOUT	DB_TRUNCATE	DB_TXNMAGIC	DB_TXNVERSION	DB_TXN_ABORT	DB_TXN_APPLY	DB_TXN_BACKWARD_ALLOC	DB_TXN_BACKWARD_ROLL	DB_TXN_CKP	DB_TXN_FORWARD_ROLL	DB_TXN_GETPGNOS	DB_TXN_LOCK	DB_TXN_LOCK_2PL	DB_TXN_LOCK_MASK	DB_TXN_LOCK_OPTIMIST	DB_TXN_LOCK_OPTIMISTIC	DB_TXN_LOG_MASK	DB_TXN_LOG_REDO	DB_TXN_LOG_UNDO	DB_TXN_LOG_UNDOREDO	DB_TXN_NOSYNC	DB_TXN_NOWAIT	DB_TXN_OPENFILES	DB_TXN_POPENFILES	DB_TXN_PRINT	DB_TXN_REDO	DB_TXN_SYNC	DB_TXN_UNDO	DB_TXN_WRITE_NOSYNC	DB_UNKNOWN	DB_UNRESOLVED_CHILD	DB_UPDATE_SECONDARY	DB_UPGRADE	DB_USE_ENVIRON	DB_USE_ENVIRON_ROOT	DB_VERB_CHKPOINT	DB_VERB_DEADLOCK	DB_VERB_RECOVERY	DB_VERB_REPLICATION	DB_VERB_WAITSFOR	DB_VERIFY	DB_VERIFY_BAD	DB_VERIFY_FATAL	DB_VERSION_MAJOR	DB_VERSION_MINOR	DB_VERSION_PATCH	DB_VERSION_STRING	DB_VRFY_FLAGMASK	DB_WRITECURSOR	DB_WRITELOCK	DB_WRITEOPEN	DB_WRNOSYNC	DB_XA_CREATE	DB_XIDDATASIZE	DB_YIELDCPU	);sub AUTOLOAD {    my($constname);    ($constname = $AUTOLOAD) =~ s/.*:://;    my ($error, $val) = constant($constname);    Carp::croak $error if $error;    no strict 'refs';    *{$AUTOLOAD} = sub { $val };    goto &{$AUTOLOAD};}         #bootstrap BerkeleyDB $VERSION;if ($use_XSLoader)  { XSLoader::load("BerkeleyDB", $VERSION)}else  { bootstrap BerkeleyDB $VERSION }  # Preloaded methods go here.sub ParseParameters($@){    my ($default, @rest) = @_ ;    my (%got) = %$default ;    my (@Bad) ;    my ($key, $value) ;    my $sub = (caller(1))[3] ;    my %options = () ;    local ($Carp::CarpLevel) = 1 ;    # allow the options to be passed as a hash reference or    # as the complete hash.    if (@rest == 1) {        croak "$sub: parameter is not a reference to a hash"            if ref $rest[0] ne "HASH" ;        %options = %{ $rest[0] } ;    }    elsif (@rest >= 2) {        %options = @rest ;    }    while (($key, $value) = each %options)    {	$key =~ s/^-// ;        if (exists $default->{$key})          { $got{$key} = $value }        else	  { push (@Bad, $key) }    }        if (@Bad) {        my ($bad) = join(", ", @Bad) ;        croak "unknown key value(s) @Bad" ;    }    return \%got ;}use UNIVERSAL qw( isa ) ;sub env_remove{    # Usage:    #    #	$env = new BerkeleyDB::Env    #			[ -Home		=> $path, ]    #			[ -Config	=> { name => value, name => value }    #			[ -Flags	=> DB_INIT_LOCK| ]    #			;    my $got = BerkeleyDB::ParseParameters({					Home		=> undef,					Flags     	=> 0,					Config		=> undef,					}, @_) ;    if (defined $got->{Config}) {    	croak("Config parameter must be a hash reference")            if ! ref $got->{Config} eq 'HASH' ;        @BerkeleyDB::a = () ;	my $k = "" ; my $v = "" ;	while (($k, $v) = each %{$got->{Config}}) {	    push @BerkeleyDB::a, "$k\t$v" ;	}        $got->{"Config"} = pack("p*", @BerkeleyDB::a, undef) 	    if @BerkeleyDB::a ;    }    return _env_remove($got) ;}sub db_remove{    my $got = BerkeleyDB::ParseParameters(		      {			Filename 	=> undef,			Subname		=> undef,			Flags		=> 0,			Env		=> undef,		      }, @_) ;    croak("Must specify a filename")	if ! defined $got->{Filename} ;    croak("Env not of type BerkeleyDB::Env")	if defined $got->{Env} and ! isa($got->{Env},'BerkeleyDB::Env');    return _db_remove($got);}sub db_rename{    my $got = BerkeleyDB::ParseParameters(		      {			Filename 	=> undef,			Subname		=> undef,			Newname		=> undef,			Flags		=> 0,			Env		=> undef,		      }, @_) ;    croak("Env not of type BerkeleyDB::Env")	if defined $got->{Env} and ! isa($got->{Env},'BerkeleyDB::Env');    croak("Must specify a filename")	if ! defined $got->{Filename} ;    croak("Must specify a Subname")	if ! defined $got->{Subname} ;    croak("Must specify a Newname")	if ! defined $got->{Newname} ;    return _db_rename($got);}sub db_verify{    my $got = BerkeleyDB::ParseParameters(		      {			Filename 	=> undef,			Subname		=> undef,			Outfile		=> undef,			Flags		=> 0,			Env		=> undef,		      }, @_) ;    croak("Env not of type BerkeleyDB::Env")	if defined $got->{Env} and ! isa($got->{Env},'BerkeleyDB::Env');    croak("Must specify a filename")	if ! defined $got->{Filename} ;    return _db_verify($got);}package BerkeleyDB::Env ;use UNIVERSAL qw( isa ) ;use Carp ;use vars qw( %valid_config_keys ) ;sub isaFilehandle{    my $fh = shift ;    return ((isa($fh,'GLOB') or isa(\$fh,'GLOB')) and defined fileno($fh) )}%valid_config_keys = map { $_, 1 } qw( DB_DATA_DIR DB_LOG_DIR DB_TEMP_DIRDB_TMP_DIR ) ;sub new{    # Usage:    #    #	$env = new BerkeleyDB::Env    #			[ -Home		=> $path, ]    #			[ -Mode		=> mode, ]    #			[ -Config	=> { name => value, name => value }    #			[ -ErrFile   	=> filename, ]    #			[ -ErrPrefix 	=> "string", ]    #			[ -Flags	=> DB_INIT_LOCK| ]    #			[ -Set_Flags	=> $flags,]    #			[ -Cachesize	=> number ]    #			[ -LockDetect	=>  ]    #			[ -Verbose	=> boolean ]    #			;    my $pkg = shift ;    my $got = BerkeleyDB::ParseParameters({					Home		=> undef,					Server		=> undef,					Mode		=> 0666,					ErrFile  	=> undef,					ErrPrefix 	=> undef,					Flags     	=> 0,					SetFlags     	=> 0,					Cachesize     	=> 0,					LockDetect     	=> 0,					Verbose		=> 0,					Config		=> undef,					}, @_) ;    if (defined $got->{ErrFile}) {    	croak("ErrFile parameter must be a file name")            if ref $got->{ErrFile} ;	#if (!isaFilehandle($got->{ErrFile})) {	#    my $handle = new IO::File ">$got->{ErrFile}"#		or croak "Cannot open file $got->{ErrFile}: $!\n" ;#	    $got->{ErrFile} = $handle ;#	}    }        my %config ;    if (defined $got->{Config}) {    	croak("Config parameter must be a hash reference")            if ! ref $got->{Config} eq 'HASH' ;	%config = %{ $got->{Config} } ;        @BerkeleyDB::a = () ;	my $k = "" ; my $v = "" ;	while (($k, $v) = each %config) {	    if ($BerkeleyDB::db_version >= 3.1 && ! $valid_config_keys{$k} ) {	        $BerkeleyDB::Error = "illegal name-value pair: $k $v\n" ;                 croak $BerkeleyDB::Error ;	    }	    push @BerkeleyDB::a, "$k\t$v" ;	}        $got->{"Config"} = pack("p*", @BerkeleyDB::a, undef) 	    if @BerkeleyDB::a ;    }    my ($addr) = _db_appinit($pkg, $got) ;    my $obj ;    $obj = bless [$addr] , $pkg if $addr ;    if ($obj && $BerkeleyDB::db_version >= 3.1 && keys %config) {	my ($k, $v);	while (($k, $v) = each %config) {	    if ($k eq 'DB_DATA_DIR')	      { $obj->set_data_dir($v) }	    elsif ($k eq 'DB_LOG_DIR')	      { $obj->set_lg_dir($v) }	    elsif ($k eq 'DB_TEMP_DIR' || $k eq 'DB_TMP_DIR')	      { $obj->set_tmp_dir($v) }	    else {	      $BerkeleyDB::Error = "illegal name-value pair: $k $v\n" ;               croak $BerkeleyDB::Error             }	}    }    return $obj ;}sub TxnMgr{    my $env = shift ;    my ($addr) = $env->_TxnMgr() ;    my $obj ;    $obj = bless [$addr, $env] , "BerkeleyDB::TxnMgr" if $addr ;    return $obj ;}sub txn_begin{    my $env = shift ;    my ($addr) = $env->_txn_begin(@_) ;    my $obj ;    $obj = bless [$addr, $env] , "BerkeleyDB::Txn" if $addr ;    return $obj ;}sub DESTROY{    my $self = shift ;    $self->_DESTROY() ;}package BerkeleyDB::Hash ;use vars qw(@ISA) ;@ISA = qw( BerkeleyDB::Common BerkeleyDB::_tiedHash ) ;use UNIVERSAL qw( isa ) ;use Carp ;sub new{    my $self = shift ;    my $got = BerkeleyDB::ParseParameters(		      {			# Generic Stuff			Filename 	=> undef,			Subname		=> undef,			#Flags		=> BerkeleyDB::DB_CREATE(),			Flags		=> 0,			Property	=> 0,			Mode		=> 0666,			Cachesize 	=> 0,			Lorder 		=> 0,			Pagesize 	=> 0,			Env		=> undef,			#Tie 		=> undef,			Txn		=> undef,			# Hash specific			Ffactor		=> 0,			Nelem 		=> 0,			Hash 		=> undef,			DupCompare	=> undef,			# BerkeleyDB specific			ReadKey		=> undef,			WriteKey	=> undef,			ReadValue	=> undef,			WriteValue	=> undef,		      }, @_) ;    croak("Env not of type BerkeleyDB::Env")	if defined $got->{Env} and ! isa($got->{Env},'BerkeleyDB::Env');    croak("Txn not of type BerkeleyDB::Txn")	if defined $got->{Txn} and ! isa($got->{Txn},'BerkeleyDB::Txn');    croak("-Tie needs a reference to a hash")	if defined $got->{Tie} and $got->{Tie} !~ /HASH/ ;    my ($addr) = _db_open_hash($self, $got);    my $obj ;    if ($addr) {        $obj = bless [$addr] , $self ;	push @{ $obj }, $got->{Env} if $got->{Env} ;        $obj->Txn($got->{Txn})             if $got->{Txn} ;    }    return $obj ;}*TIEHASH = \&new ; package BerkeleyDB::Btree ;use vars qw(@ISA) ;@ISA = qw( BerkeleyDB::Common BerkeleyDB::_tiedHash ) ;use UNIVERSAL qw( isa ) ;use Carp ;sub new{    my $self = shift ;    my $got = BerkeleyDB::ParseParameters(		      {			# Generic Stuff			Filename 	=> undef,			Subname		=> undef,			#Flags		=> BerkeleyDB::DB_CREATE(),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -