File Coverage

blib/lib/BDB/Wrapper.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package BDB::Wrapper;
2 1     1   17665 use 5.006;
  1         4  
  1         42  
3 1     1   6 use strict;
  1         2  
  1         34  
4 1     1   7 use warnings;
  1         6  
  1         32  
5 1     1   2665 use BerkeleyDB;
  0            
  0            
6             use Carp;
7             use File::Spec;
8             use FileHandle;
9             use Exporter;
10             use AutoLoader qw(AUTOLOAD);
11              
12             our $VERSION = '0.49';
13             our @ISA = qw(Exporter AutoLoader);
14             our %EXPORT_TAGS = ( 'all' => [ qw() ] );
15             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
16             # From BerkeleyDB.pm 0.43
17             our @EXPORT = qw(
18             DB_AFTER
19             DB_AGGRESSIVE
20             DB_ALREADY_ABORTED
21             DB_APPEND
22             DB_APPLY_LOGREG
23             DB_APP_INIT
24             DB_ARCH_ABS
25             DB_ARCH_DATA
26             DB_ARCH_LOG
27             DB_ARCH_REMOVE
28             DB_ASSOC_CREATE
29             DB_ASSOC_IMMUTABLE_KEY
30             DB_AUTO_COMMIT
31             DB_BEFORE
32             DB_BTREE
33             DB_BTREEMAGIC
34             DB_BTREEOLDVER
35             DB_BTREEVERSION
36             DB_BUFFER_SMALL
37             DB_CACHED_COUNTS
38             DB_CDB_ALLDB
39             DB_CHECKPOINT
40             DB_CHKSUM
41             DB_CHKSUM_SHA1
42             DB_CKP_INTERNAL
43             DB_CLIENT
44             DB_CL_WRITER
45             DB_COMMIT
46             DB_COMPACT_FLAGS
47             DB_CONSUME
48             DB_CONSUME_WAIT
49             DB_CREATE
50             DB_CURLSN
51             DB_CURRENT
52             DB_CURSOR_BULK
53             DB_CURSOR_TRANSIENT
54             DB_CXX_NO_EXCEPTIONS
55             DB_DATABASE_LOCK
56             DB_DATABASE_LOCKING
57             DB_DEGREE_2
58             DB_DELETED
59             DB_DELIMITER
60             DB_DIRECT
61             DB_DIRECT_DB
62             DB_DIRECT_LOG
63             DB_DIRTY_READ
64             DB_DONOTINDEX
65             DB_DSYNC_DB
66             DB_DSYNC_LOG
67             DB_DUP
68             DB_DUPCURSOR
69             DB_DUPSORT
70             DB_DURABLE_UNKNOWN
71             DB_EID_BROADCAST
72             DB_EID_INVALID
73             DB_ENCRYPT
74             DB_ENCRYPT_AES
75             DB_ENV_APPINIT
76             DB_ENV_AUTO_COMMIT
77             DB_ENV_CDB
78             DB_ENV_CDB_ALLDB
79             DB_ENV_CREATE
80             DB_ENV_DATABASE_LOCKING
81             DB_ENV_DBLOCAL
82             DB_ENV_DIRECT_DB
83             DB_ENV_DIRECT_LOG
84             DB_ENV_DSYNC_DB
85             DB_ENV_DSYNC_LOG
86             DB_ENV_FAILCHK
87             DB_ENV_FATAL
88             DB_ENV_HOTBACKUP
89             DB_ENV_LOCKDOWN
90             DB_ENV_LOCKING
91             DB_ENV_LOGGING
92             DB_ENV_LOG_AUTOREMOVE
93             DB_ENV_LOG_INMEMORY
94             DB_ENV_MULTIVERSION
95             DB_ENV_NOLOCKING
96             DB_ENV_NOMMAP
97             DB_ENV_NOPANIC
98             DB_ENV_NO_OUTPUT_SET
99             DB_ENV_OPEN_CALLED
100             DB_ENV_OVERWRITE
101             DB_ENV_PRIVATE
102             DB_ENV_RECOVER_FATAL
103             DB_ENV_REF_COUNTED
104             DB_ENV_REGION_INIT
105             DB_ENV_REP_CLIENT
106             DB_ENV_REP_LOGSONLY
107             DB_ENV_REP_MASTER
108             DB_ENV_RPCCLIENT
109             DB_ENV_RPCCLIENT_GIVEN
110             DB_ENV_STANDALONE
111             DB_ENV_SYSTEM_MEM
112             DB_ENV_THREAD
113             DB_ENV_TIME_NOTGRANTED
114             DB_ENV_TXN
115             DB_ENV_TXN_NOSYNC
116             DB_ENV_TXN_NOT_DURABLE
117             DB_ENV_TXN_NOWAIT
118             DB_ENV_TXN_SNAPSHOT
119             DB_ENV_TXN_WRITE_NOSYNC
120             DB_ENV_USER_ALLOC
121             DB_ENV_YIELDCPU
122             DB_EVENT_NOT_HANDLED
123             DB_EVENT_NO_SUCH_EVENT
124             DB_EVENT_PANIC
125             DB_EVENT_REG_ALIVE
126             DB_EVENT_REG_PANIC
127             DB_EVENT_REP_CLIENT
128             DB_EVENT_REP_DUPMASTER
129             DB_EVENT_REP_ELECTED
130             DB_EVENT_REP_ELECTION_FAILED
131             DB_EVENT_REP_JOIN_FAILURE
132             DB_EVENT_REP_MASTER
133             DB_EVENT_REP_MASTER_FAILURE
134             DB_EVENT_REP_NEWMASTER
135             DB_EVENT_REP_PERM_FAILED
136             DB_EVENT_REP_STARTUPDONE
137             DB_EVENT_WRITE_FAILED
138             DB_EXCL
139             DB_EXTENT
140             DB_FAILCHK
141             DB_FAST_STAT
142             DB_FCNTL_LOCKING
143             DB_FILEOPEN
144             DB_FILE_ID_LEN
145             DB_FIRST
146             DB_FIXEDLEN
147             DB_FLUSH
148             DB_FORCE
149             DB_FORCESYNC
150             DB_FOREIGN_ABORT
151             DB_FOREIGN_CASCADE
152             DB_FOREIGN_CONFLICT
153             DB_FOREIGN_NULLIFY
154             DB_FREELIST_ONLY
155             DB_FREE_SPACE
156             DB_GETREC
157             DB_GET_BOTH
158             DB_GET_BOTHC
159             DB_GET_BOTH_LTE
160             DB_GET_BOTH_RANGE
161             DB_GET_RECNO
162             DB_GID_SIZE
163             DB_HANDLE_LOCK
164             DB_HASH
165             DB_HASHMAGIC
166             DB_HASHOLDVER
167             DB_HASHVERSION
168             DB_HOTBACKUP_IN_PROGRESS
169             DB_IGNORE_LEASE
170             DB_IMMUTABLE_KEY
171             DB_INCOMPLETE
172             DB_INIT_CDB
173             DB_INIT_LOCK
174             DB_INIT_LOG
175             DB_INIT_MPOOL
176             DB_INIT_REP
177             DB_INIT_TXN
178             DB_INORDER
179             DB_JAVA_CALLBACK
180             DB_JOINENV
181             DB_JOIN_ITEM
182             DB_JOIN_NOSORT
183             DB_KEYEMPTY
184             DB_KEYEXIST
185             DB_KEYFIRST
186             DB_KEYLAST
187             DB_LAST
188             DB_LOCKDOWN
189             DB_LOCKMAGIC
190             DB_LOCKVERSION
191             DB_LOCK_ABORT
192             DB_LOCK_CHECK
193             DB_LOCK_CONFLICT
194             DB_LOCK_DEADLOCK
195             DB_LOCK_DEFAULT
196             DB_LOCK_DUMP
197             DB_LOCK_EXPIRE
198             DB_LOCK_FREE_LOCKER
199             DB_LOCK_GET
200             DB_LOCK_GET_TIMEOUT
201             DB_LOCK_INHERIT
202             DB_LOCK_MAXLOCKS
203             DB_LOCK_MAXWRITE
204             DB_LOCK_MINLOCKS
205             DB_LOCK_MINWRITE
206             DB_LOCK_NORUN
207             DB_LOCK_NOTEXIST
208             DB_LOCK_NOTGRANTED
209             DB_LOCK_NOTHELD
210             DB_LOCK_NOWAIT
211             DB_LOCK_OLDEST
212             DB_LOCK_PUT
213             DB_LOCK_PUT_ALL
214             DB_LOCK_PUT_OBJ
215             DB_LOCK_PUT_READ
216             DB_LOCK_RANDOM
217             DB_LOCK_RECORD
218             DB_LOCK_REMOVE
219             DB_LOCK_RIW_N
220             DB_LOCK_RW_N
221             DB_LOCK_SET_TIMEOUT
222             DB_LOCK_SWITCH
223             DB_LOCK_TIMEOUT
224             DB_LOCK_TRADE
225             DB_LOCK_UPGRADE
226             DB_LOCK_UPGRADE_WRITE
227             DB_LOCK_YOUNGEST
228             DB_LOGCHKSUM
229             DB_LOGC_BUF_SIZE
230             DB_LOGFILEID_INVALID
231             DB_LOGMAGIC
232             DB_LOGOLDVER
233             DB_LOGVERSION
234             DB_LOGVERSION_LATCHING
235             DB_LOG_AUTOREMOVE
236             DB_LOG_AUTO_REMOVE
237             DB_LOG_BUFFER_FULL
238             DB_LOG_CHKPNT
239             DB_LOG_COMMIT
240             DB_LOG_DIRECT
241             DB_LOG_DISK
242             DB_LOG_DSYNC
243             DB_LOG_INMEMORY
244             DB_LOG_IN_MEMORY
245             DB_LOG_LOCKED
246             DB_LOG_NOCOPY
247             DB_LOG_NOT_DURABLE
248             DB_LOG_NO_DATA
249             DB_LOG_PERM
250             DB_LOG_RESEND
251             DB_LOG_SILENT_ERR
252             DB_LOG_VERIFY_BAD
253             DB_LOG_VERIFY_CAF
254             DB_LOG_VERIFY_DBFILE
255             DB_LOG_VERIFY_ERR
256             DB_LOG_VERIFY_FORWARD
257             DB_LOG_VERIFY_INTERR
258             DB_LOG_VERIFY_PARTIAL
259             DB_LOG_VERIFY_VERBOSE
260             DB_LOG_VERIFY_WARNING
261             DB_LOG_WRNOSYNC
262             DB_LOG_ZERO
263             DB_MAX_PAGES
264             DB_MAX_RECORDS
265             DB_MPOOL_CLEAN
266             DB_MPOOL_CREATE
267             DB_MPOOL_DIRTY
268             DB_MPOOL_DISCARD
269             DB_MPOOL_EDIT
270             DB_MPOOL_EXTENT
271             DB_MPOOL_FREE
272             DB_MPOOL_LAST
273             DB_MPOOL_NEW
274             DB_MPOOL_NEW_GROUP
275             DB_MPOOL_NOFILE
276             DB_MPOOL_NOLOCK
277             DB_MPOOL_PRIVATE
278             DB_MPOOL_TRY
279             DB_MPOOL_UNLINK
280             DB_MULTIPLE
281             DB_MULTIPLE_KEY
282             DB_MULTIVERSION
283             DB_MUTEXDEBUG
284             DB_MUTEXLOCKS
285             DB_MUTEX_ALLOCATED
286             DB_MUTEX_LOCKED
287             DB_MUTEX_LOGICAL_LOCK
288             DB_MUTEX_PROCESS_ONLY
289             DB_MUTEX_SELF_BLOCK
290             DB_MUTEX_SHARED
291             DB_MUTEX_THREAD
292             DB_NEEDSPLIT
293             DB_NEXT
294             DB_NEXT_DUP
295             DB_NEXT_NODUP
296             DB_NOCOPY
297             DB_NODUPDATA
298             DB_NOERROR
299             DB_NOLOCKING
300             DB_NOMMAP
301             DB_NOORDERCHK
302             DB_NOOVERWRITE
303             DB_NOPANIC
304             DB_NORECURSE
305             DB_NOSERVER
306             DB_NOSERVER_HOME
307             DB_NOSERVER_ID
308             DB_NOSYNC
309             DB_NOTFOUND
310             DB_NO_AUTO_COMMIT
311             DB_ODDFILESIZE
312             DB_OK_BTREE
313             DB_OK_HASH
314             DB_OK_QUEUE
315             DB_OK_RECNO
316             DB_OLD_VERSION
317             DB_OPEN_CALLED
318             DB_OPFLAGS_MASK
319             DB_ORDERCHKONLY
320             DB_OVERWRITE
321             DB_OVERWRITE_DUP
322             DB_PAD
323             DB_PAGEYIELD
324             DB_PAGE_LOCK
325             DB_PAGE_NOTFOUND
326             DB_PANIC_ENVIRONMENT
327             DB_PERMANENT
328             DB_POSITION
329             DB_POSITIONI
330             DB_PREV
331             DB_PREV_DUP
332             DB_PREV_NODUP
333             DB_PRINTABLE
334             DB_PRIORITY_DEFAULT
335             DB_PRIORITY_HIGH
336             DB_PRIORITY_LOW
337             DB_PRIORITY_UNCHANGED
338             DB_PRIORITY_VERY_HIGH
339             DB_PRIORITY_VERY_LOW
340             DB_PRIVATE
341             DB_PR_HEADERS
342             DB_PR_PAGE
343             DB_PR_RECOVERYTEST
344             DB_QAMMAGIC
345             DB_QAMOLDVER
346             DB_QAMVERSION
347             DB_QUEUE
348             DB_RDONLY
349             DB_RDWRMASTER
350             DB_READ_COMMITTED
351             DB_READ_UNCOMMITTED
352             DB_RECNO
353             DB_RECNUM
354             DB_RECORDCOUNT
355             DB_RECORD_LOCK
356             DB_RECOVER
357             DB_RECOVER_FATAL
358             DB_REGION_ANON
359             DB_REGION_INIT
360             DB_REGION_MAGIC
361             DB_REGION_NAME
362             DB_REGISTER
363             DB_REGISTERED
364             DB_RENAMEMAGIC
365             DB_RENUMBER
366             DB_REPFLAGS_MASK
367             DB_REPMGR_ACKS_ALL
368             DB_REPMGR_ACKS_ALL_AVAILABLE
369             DB_REPMGR_ACKS_ALL_PEERS
370             DB_REPMGR_ACKS_NONE
371             DB_REPMGR_ACKS_ONE
372             DB_REPMGR_ACKS_ONE_PEER
373             DB_REPMGR_ACKS_QUORUM
374             DB_REPMGR_CONF_2SITE_STRICT
375             DB_REPMGR_CONF_ELECTIONS
376             DB_REPMGR_CONNECTED
377             DB_REPMGR_DISCONNECTED
378             DB_REPMGR_ISPEER
379             DB_REPMGR_PEER
380             DB_REP_ACK_TIMEOUT
381             DB_REP_ANYWHERE
382             DB_REP_BULKOVF
383             DB_REP_CHECKPOINT_DELAY
384             DB_REP_CLIENT
385             DB_REP_CONF_AUTOINIT
386             DB_REP_CONF_BULK
387             DB_REP_CONF_DELAYCLIENT
388             DB_REP_CONF_INMEM
389             DB_REP_CONF_LEASE
390             DB_REP_CONF_NOAUTOINIT
391             DB_REP_CONF_NOWAIT
392             DB_REP_CONNECTION_RETRY
393             DB_REP_CREATE
394             DB_REP_DEFAULT_PRIORITY
395             DB_REP_DUPMASTER
396             DB_REP_EGENCHG
397             DB_REP_ELECTION
398             DB_REP_ELECTION_RETRY
399             DB_REP_ELECTION_TIMEOUT
400             DB_REP_FULL_ELECTION
401             DB_REP_FULL_ELECTION_TIMEOUT
402             DB_REP_HANDLE_DEAD
403             DB_REP_HEARTBEAT_MONITOR
404             DB_REP_HEARTBEAT_SEND
405             DB_REP_HOLDELECTION
406             DB_REP_IGNORE
407             DB_REP_ISPERM
408             DB_REP_JOIN_FAILURE
409             DB_REP_LEASE_EXPIRED
410             DB_REP_LEASE_TIMEOUT
411             DB_REP_LOCKOUT
412             DB_REP_LOGREADY
413             DB_REP_LOGSONLY
414             DB_REP_MASTER
415             DB_REP_NEWMASTER
416             DB_REP_NEWSITE
417             DB_REP_NOBUFFER
418             DB_REP_NOTPERM
419             DB_REP_OUTDATED
420             DB_REP_PAGEDONE
421             DB_REP_PAGELOCKED
422             DB_REP_PERMANENT
423             DB_REP_REREQUEST
424             DB_REP_STARTUPDONE
425             DB_REP_UNAVAIL
426             DB_REVSPLITOFF
427             DB_RMW
428             DB_RPCCLIENT
429             DB_RPC_SERVERPROG
430             DB_RPC_SERVERVERS
431             DB_RUNRECOVERY
432             DB_SALVAGE
433             DB_SA_SKIPFIRSTKEY
434             DB_SA_UNKNOWNKEY
435             DB_SECONDARY_BAD
436             DB_SEQUENCE_OLDVER
437             DB_SEQUENCE_VERSION
438             DB_SEQUENTIAL
439             DB_SEQ_DEC
440             DB_SEQ_INC
441             DB_SEQ_RANGE_SET
442             DB_SEQ_WRAP
443             DB_SEQ_WRAPPED
444             DB_SET
445             DB_SET_LOCK_TIMEOUT
446             DB_SET_LTE
447             DB_SET_RANGE
448             DB_SET_RECNO
449             DB_SET_REG_TIMEOUT
450             DB_SET_TXN_NOW
451             DB_SET_TXN_TIMEOUT
452             DB_SHALLOW_DUP
453             DB_SNAPSHOT
454             DB_SPARE_FLAG
455             DB_STAT_ALL
456             DB_STAT_CLEAR
457             DB_STAT_LOCK_CONF
458             DB_STAT_LOCK_LOCKERS
459             DB_STAT_LOCK_OBJECTS
460             DB_STAT_LOCK_PARAMS
461             DB_STAT_MEMP_HASH
462             DB_STAT_MEMP_NOERROR
463             DB_STAT_NOERROR
464             DB_STAT_SUBSYSTEM
465             DB_ST_DUPOK
466             DB_ST_DUPSET
467             DB_ST_DUPSORT
468             DB_ST_IS_RECNO
469             DB_ST_OVFL_LEAF
470             DB_ST_RECNUM
471             DB_ST_RELEN
472             DB_ST_TOPLEVEL
473             DB_SURPRISE_KID
474             DB_SWAPBYTES
475             DB_SYSTEM_MEM
476             DB_TEMPORARY
477             DB_TEST_ELECTINIT
478             DB_TEST_ELECTSEND
479             DB_TEST_ELECTVOTE1
480             DB_TEST_ELECTVOTE2
481             DB_TEST_ELECTWAIT1
482             DB_TEST_ELECTWAIT2
483             DB_TEST_POSTDESTROY
484             DB_TEST_POSTLOG
485             DB_TEST_POSTLOGMETA
486             DB_TEST_POSTOPEN
487             DB_TEST_POSTRENAME
488             DB_TEST_POSTSYNC
489             DB_TEST_PREDESTROY
490             DB_TEST_PREOPEN
491             DB_TEST_PRERENAME
492             DB_TEST_RECYCLE
493             DB_TEST_SUBDB_LOCKS
494             DB_THREAD
495             DB_THREADID_STRLEN
496             DB_TIMEOUT
497             DB_TIME_NOTGRANTED
498             DB_TRUNCATE
499             DB_TXNMAGIC
500             DB_TXNVERSION
501             DB_TXN_ABORT
502             DB_TXN_APPLY
503             DB_TXN_BACKWARD_ROLL
504             DB_TXN_BULK
505             DB_TXN_CKP
506             DB_TXN_FAMILY
507             DB_TXN_FORWARD_ROLL
508             DB_TXN_LOCK
509             DB_TXN_LOCK_2PL
510             DB_TXN_LOCK_MASK
511             DB_TXN_LOCK_OPTIMIST
512             DB_TXN_LOCK_OPTIMISTIC
513             DB_TXN_LOG_MASK
514             DB_TXN_LOG_REDO
515             DB_TXN_LOG_UNDO
516             DB_TXN_LOG_UNDOREDO
517             DB_TXN_LOG_VERIFY
518             DB_TXN_NOSYNC
519             DB_TXN_NOT_DURABLE
520             DB_TXN_NOWAIT
521             DB_TXN_OPENFILES
522             DB_TXN_POPENFILES
523             DB_TXN_PRINT
524             DB_TXN_REDO
525             DB_TXN_SNAPSHOT
526             DB_TXN_SYNC
527             DB_TXN_TOKEN_SIZE
528             DB_TXN_UNDO
529             DB_TXN_WAIT
530             DB_TXN_WRITE_NOSYNC
531             DB_UNKNOWN
532             DB_UNREF
533             DB_UPDATE_SECONDARY
534             DB_UPGRADE
535             DB_USERCOPY_GETDATA
536             DB_USERCOPY_SETDATA
537             DB_USE_ENVIRON
538             DB_USE_ENVIRON_ROOT
539             DB_VERB_CHKPOINT
540             DB_VERB_DEADLOCK
541             DB_VERB_FILEOPS
542             DB_VERB_FILEOPS_ALL
543             DB_VERB_RECOVERY
544             DB_VERB_REGISTER
545             DB_VERB_REPLICATION
546             DB_VERB_REPMGR_CONNFAIL
547             DB_VERB_REPMGR_MISC
548             DB_VERB_REP_ELECT
549             DB_VERB_REP_LEASE
550             DB_VERB_REP_MISC
551             DB_VERB_REP_MSGS
552             DB_VERB_REP_SYNC
553             DB_VERB_REP_SYSTEM
554             DB_VERB_REP_TEST
555             DB_VERB_WAITSFOR
556             DB_VERIFY
557             DB_VERIFY_BAD
558             DB_VERIFY_FATAL
559             DB_VERIFY_PARTITION
560             DB_VERSION_FAMILY
561             DB_VERSION_FULL_STRING
562             DB_VERSION_MAJOR
563             DB_VERSION_MINOR
564             DB_VERSION_MISMATCH
565             DB_VERSION_PATCH
566             DB_VERSION_RELEASE
567             DB_VERSION_STRING
568             DB_VRFY_FLAGMASK
569             DB_WRITECURSOR
570             DB_WRITELOCK
571             DB_WRITEOPEN
572             DB_WRNOSYNC
573             DB_XA_CREATE
574             DB_XIDDATASIZE
575             DB_YIELDCPU
576             DB_debug_FLAG
577             DB_user_BEGIN
578             LOGREC_ARG
579             LOGREC_DATA
580             LOGREC_DB
581             LOGREC_DBOP
582             LOGREC_DBT
583             LOGREC_Done
584             LOGREC_HDR
585             LOGREC_LOCKS
586             LOGREC_OP
587             LOGREC_PGDBT
588             LOGREC_PGDDBT
589             LOGREC_PGLIST
590             LOGREC_POINTER
591             LOGREC_TIME
592             );
593              
594              
595             =head1 NAME
596              
597             BDB::Wrapper
598             Wrapper module for BerkeleyDB.pm for easy usage of it.
599             This will make it easy to use BerkeleyDB.pm.
600             You can protect bdb file from the concurrent access and you can use BerkeleyDB.pm with less difficulty.
601             This module is used on http://sakuhindb.com/ and is developed based on the requirement.
602              
603             Attention: If you use this module for the specified Berkeley DB file,
604             please use this module for all access to the bdb.
605             By it, you can control lock and strasaction of bdb files.
606             BDB_HOMEs are created under /tmp/bdb_home in default option.
607              
608             Japanese: http://sakuhindb.com/pj/6_B4C9CDFDBFCDA4B5A4F3/13/list.html
609             English: http://en.sakuhindb.com/pe/Administrator/19/list.html
610              
611             =cut
612              
613             =head1 Example of basic usage
614              
615             =cut
616              
617             =pod
618              
619             #!/usr/bin/perl -w
620             package test_bdb;
621             use strict;
622             use BDB::Wrapper;
623             my $pro=new test_bdb;
624             $pro->run();
625             sub new(){
626             my $self={};
627             return bless $self;
628             }
629              
630             sub run(){
631             my $self=shift;
632             $self->init_vars();
633             $self->demo();
634             }
635              
636             sub init_vars(){
637             my $self=shift;
638             $self->{'bdb'}='/tmp/test.bdb';
639             $self->{'bdbw'}=new BDB::Wrapper;
640             }
641              
642             sub demo(){
643             my $self=shift;
644             if(my $dbh=$self->{'bdbw'}->create_write_dbh($self->{'bdb'})){
645             ###############
646             # This is not must job but it will help to avoid unexpected result caused by unexpected process killing
647             my $lock=$dbh->cds_lock();
648             local $SIG{'INT'};
649             local $SIG{'TERM'};
650             local $SIG{'QUIT'};
651             $SIG{'INT'}=$SIG{'TERM'}=$SIG{'QUIT'}=sub {$lock->cds_unlock();$dbh->db_close();};
652             ###########
653             if($dbh && $dbh->db_put('name', 'value')==0){
654             }
655             else{
656             $lock->cds_unlock();
657             $dbh->db_close() if $dbh;
658             die 'Failed to put to '.$self->{'bdb'};
659             }
660             $lock->cds_unlock();
661             $dbh->db_close() if $dbh;
662             }
663              
664             if(my $dbh=$self->{'bdbw'}->create_read_dbh($self->{'bdb'})){
665             my $value;
666             if($dbh->db_get('name', $value)==0){
667             print 'Name='.$name.' value='.$value."\n";
668             }
669             $dbh->db_close();
670             }
671             }
672              
673             =cut
674              
675             =head1 Example of using transaction
676              
677             =cut
678              
679             =pod
680              
681             # Transaction Usage
682             #!/usr/bin/perl -w
683             package bdb_write;
684             use strict;
685             use BDB::Wrapper;
686              
687             my $pro = new bdb_write;
688             $pro->run();
689             sub new(){
690             my $self={};
691             return bless $self;
692             }
693              
694             sub run(){
695             my $self=shift;
696             $self->{'bdbw'}=new BDB::Wrapper;
697             # If you want to create bdb_home with transaction log under /home/txn_data/bdb_home/$BDBFILENAME/
698             my ($dbh, $env)=$self->{'bdbw'}->create_write_dbh({'bdb'=>'/tmp/bdb_write.bdb', 'txn'=>1});
699             my $txn = $env->txn_begin(undef, DB_TXN_NOWAIT);
700            
701             my $cnt=0;
702             for($i=0;$i<1000;$i++){
703             $dbh->db_put($i, $i*rand());
704             $cnt=$i;
705             if($cnt && $cnt%100==0){
706             $txn->txn_commit();
707             $txn = $env->txn_begin(undef, DB_TXN_NOWAIT);
708             }
709             }
710              
711             $txn->txn_commit();
712             $env->txn_checkpoint(1,1,0);
713             $dbh->db_close();
714             chmod 0666, '/tmp/bdb_write.bdb';
715             print "Content-type:text/html\n\n";
716             print $cnt."\n";
717             }
718              
719             =cut
720              
721             =head1 methods
722              
723             =head2 new
724              
725             Creates an object of BDB::Wrapper
726            
727             If you set {'ram'=>1}, you can use /dev/shm/bdb_home for storing locking file for BDB instead of /tmp/bdb_home/.
728             1 is default value.
729            
730             If you set {'no_lock'=>1}, the control of concurrent access will not be used. So the lock files are also not created.
731             0 is default value.
732            
733             If you set {'cache'=>$CACHE_SIZE}, you can allocate cache memory of the specified bytes for using bdb files.
734             The value can be overwritten by the cache value of create_write_dbh
735             undef is default value.
736            
737             If you set {'wait'=>wait_seconds}, you can specify the seconds in which dead lock will be removed.
738             22 is default value.
739            
740             If you set {'transaction'=>transaction_root_dir}, all dbh object will be created in transaction mode unless you don\'t specify transaction root dir in each method.
741             0 is default value.
742              
743             =cut
744              
745             sub new(){
746             my $self={};
747             my $class=shift;
748             my $op_ref=shift;
749             $self->{'lock_root'}='/tmp';
750             $self->{'no_lock'}=0;
751             $self->{'Flags'}='';
752             $self->{'wait'}= 22;
753             $self->{'default_txn_dir'}='/tmp/txn_data';
754             while(my ($key, $value)=each %{$op_ref}){
755             if($key eq 'ram'){
756             if($value){
757             $self->{'lock_root'}='/dev/shm';
758             }
759             }
760             elsif($key eq 'cache'){
761             $self->{'Cachesize'}=$value if(defined($value));
762             }
763             elsif($key eq 'Cachesize'){
764             $self->{'Cachesize'}=$value if(defined($value));
765             }
766             elsif($key eq 'no_lock'){
767             if($value){
768             $self->{'no_lock'}++;
769             }
770             }
771             elsif($key eq 'wait'){
772             $self->{'wait'}=$value;
773             }
774             elsif($key eq 'transaction'){
775             $self->{'transaction'}=$value;
776             if($self->{'transaction'} && $self->{'transaction'}!~ m!^/.!){
777             $self->{'transaction'} = $self->{'default_txn_dir'};
778             }
779             if($self->{'transaction'}){
780             $self->{'lock_root'}=$self->{'transaction'};
781             }
782             }
783             elsif($key eq 'txn'){
784             $self->{'transaction'}=$value;
785             if($self->{'transaction'} && $self->{'transaction'}!~ m!^/.!){
786             $self->{'transaction'} = $self->{'default_txn_dir'};
787             }
788             if($self->{'transaction'}){
789             $self->{'lock_root'}=$self->{'transaction'};
790             }
791             }
792             else{
793             my $error='Invalid option: key='.$key;
794             if($value){
795             $error.=', value='.$value;
796             }
797             Carp::croak($error);
798             }
799             }
800             return bless $self;
801             }
802              
803             1;
804             __END__