Codebase list libberkeleydb-perl / 06f2c8c
New upstream release. Debian Janitor 1 year, 4 months ago
52 changed file(s) with 841 addition(s) and 878 deletion(s). Raw diff Collapse all Expand all
11 package BerkeleyDB;
22
33
4 # Copyright (c) 1997-2020 Paul Marquess. All rights reserved.
4 # Copyright (c) 1997-2022 Paul Marquess. All rights reserved.
55 # This program is free software; you can redistribute it and/or
66 # modify it under the same terms as Perl itself.
77 #
1616 use vars qw($VERSION @ISA @EXPORT $AUTOLOAD
1717 $use_XSLoader);
1818
19 $VERSION = '0.64';
19 $VERSION = '0.65';
2020
2121 require Exporter;
2222
27232723
27242724 =head1 COPYRIGHT
27252725
2726 Copyright (c) 1997-2020 Paul Marquess. All rights reserved. This program
2726 Copyright (c) 1997-2022 Paul Marquess. All rights reserved. This program
27272727 is free software; you can redistribute it and/or modify it under the
27282728 same terms as Perl itself.
27292729
27302730 Although B<BerkeleyDB> is covered by the Perl license, the library it
27312731 makes use of, namely Berkeley DB, is not. Berkeley DB has its own
2732 copyright and its own license. Please take the time to read it.
2733
2734 Here are few words taken from the Berkeley DB FAQ (at
2735 F<http://www.oracle.com/technology/products/berkeley-db/db/index.html>) regarding the license:
2736
2737 Do I have to license DB to use it in Perl scripts?
2738
2739 No. The Berkeley DB license requires that software that uses
2740 Berkeley DB be freely redistributable. In the case of Perl, that
2741 software is Perl, and not your scripts. Any Perl scripts that you
2742 write are your property, including scripts that make use of Berkeley
2743 DB. Neither the Perl license nor the Berkeley DB license
2744 place any restriction on what you may do with them.
2745
2746 If you are in any doubt about the license situation, contact either the
2747 Berkeley DB authors or the author of BerkeleyDB.
2748 See L<"AUTHOR"> for details.
2732 copyright and its own license.
2733 See L<AGPL|https://www.oracle.com/downloads/licenses/berkeleydb-oslicense.html> for more details.
2734 Please take the time to read the Berkeley DB license and decide how it impacts your use of this Perl module.
27492735
27502736
27512737 =head1 AUTHOR
24902490
24912491 =head1 COPYRIGHT
24922492
2493 Copyright (c) 1997-2020 Paul Marquess. All rights reserved. This program
2493 Copyright (c) 1997-2022 Paul Marquess. All rights reserved. This program
24942494 is free software; you can redistribute it and/or modify it under the
24952495 same terms as Perl itself.
24962496
24972497 Although B<BerkeleyDB> is covered by the Perl license, the library it
24982498 makes use of, namely Berkeley DB, is not. Berkeley DB has its own
2499 copyright and its own license. Please take the time to read it.
2500
2501 Here are few words taken from the Berkeley DB FAQ (at
2502 F<http://www.oracle.com/technology/products/berkeley-db/db/index.html>) regarding the license:
2503
2504 Do I have to license DB to use it in Perl scripts?
2505
2506 No. The Berkeley DB license requires that software that uses
2507 Berkeley DB be freely redistributable. In the case of Perl, that
2508 software is Perl, and not your scripts. Any Perl scripts that you
2509 write are your property, including scripts that make use of Berkeley
2510 DB. Neither the Perl license nor the Berkeley DB license
2511 place any restriction on what you may do with them.
2512
2513 If you are in any doubt about the license situation, contact either the
2514 Berkeley DB authors or the author of BerkeleyDB.
2515 See L<"AUTHOR"> for details.
2499 copyright and its own license.
2500 See L<AGPL|https://www.oracle.com/downloads/licenses/berkeleydb-oslicense.html> for more details.
2501 Please take the time to read the Berkeley DB license and decide how it impacts your use of this Perl module.
25162502
25172503
25182504 =head1 AUTHOR
168168 # define AT_LEAST_DB_5_3
169169 #endif
170170
171 #if DB_VERSION_MAJOR >= 6
171 #if DB_VERSION_MAJOR >= 6
172172 # define AT_LEAST_DB_6_0
173173 #endif
174174
193193 # define DB_QUEUE 4
194194 #endif /* DB_VERSION_MAJOR == 2 */
195195
196 #if DB_VERSION_MAJOR == 2
196 #if DB_VERSION_MAJOR == 2
197197 # define BackRef internal
198198 #else
199199 # if DB_VERSION_MAJOR == 3 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 0)
503503 # define flagSetBoth() (flagSet(DB_GET_BOTH) || flagSet(DB_GET_BOTH_RANGE))
504504 #else
505505 # define flagSetBoth() (flagSet(DB_GET_BOTH))
506 #endif
506 #endif
507507
508508 #ifndef AT_LEAST_DB_4
509509 typedef int db_timeout_t ;
649649 }
650650 #else
651651 #define InputKey_seq(arg, var)
652 #define OutputKey_seq(arg, name)
652 #define OutputKey_seq(arg, name)
653653 #endif
654654
655655 #define OutputKey_B(arg, name) \
717717 #ifdef AT_LEAST_DB_4_3
718718 #define ckActive_Sequence(a) ckActive(a, "Sequence")
719719 #else
720 #define ckActive_Sequence(a)
721 #endif
722
723 #define dieIfEnvOpened(e, m) if (e->opened) softCrash("Cannot call method BerkeleyDB::Env::%s after environment has been opened", m);
720 #define ckActive_Sequence(a)
721 #endif
722
723 #define dieIfEnvOpened(e, m) if (e->opened) softCrash("Cannot call method BerkeleyDB::Env::%s after environment has been opened", m);
724724
725725 #define isSTDOUT_ERR(f) ((f) == stdout || (f) == stderr)
726726
729729 #define MY_CXT_KEY "BerkeleyDB::_guts" XS_VERSION
730730
731731 typedef struct {
732 db_recno_t x_Value;
732 db_recno_t x_Value;
733733 db_recno_t x_zero;
734734 DBTKEY x_empty;
735735 #ifndef AT_LEAST_DB_3_2
741741
742742 #define Value (MY_CXT.x_Value)
743743 #define zero (MY_CXT.x_zero)
744 #define empty (MY_CXT.x_empty)
744 #define empty (MY_CXT.x_empty)
745745
746746 #ifdef AT_LEAST_DB_3_2
747 # define CurrentDB ((BerkeleyDB)db->BackRef)
747 # define CurrentDB ((BerkeleyDB)db->BackRef)
748748 #else
749749 # define CurrentDB (MY_CXT.x_CurrentDB)
750750 #endif
751751
752752 #ifdef AT_LEAST_DB_3_2
753 # define getCurrentDB ((BerkeleyDB)db->BackRef)
754 # define saveCurrentDB(db)
753 # define getCurrentDB ((BerkeleyDB)db->BackRef)
754 # define saveCurrentDB(db)
755755 #else
756756 # define getCurrentDB (MY_CXT.x_CurrentDB)
757757 # define saveCurrentDB(db) (MY_CXT.x_CurrentDB) = db
768768 void *
769769 MyRealloc(void * ptr, size_t size)
770770 {
771 if (ptr == NULL )
772 return safemalloc(size) ;
771 if (ptr == NULL )
772 return safemalloc(size) ;
773773 else
774774 return saferealloc(ptr, size) ;
775775 }
854854 {
855855 #ifdef dTHX
856856 dTHX;
857 #endif
857 #endif
858858 Trace(("close_everything\n")) ;
859859 /* Abort All Transactions */
860860 {
990990 {
991991 #ifdef dTHX
992992 dTHX;
993 #endif
993 #endif
994994 if (! PL_dirty && db->active) {
995995 if (db->parent_env && db->parent_env->open_dbs)
996996 -- db->parent_env->open_dbs ;
10881088 DB_BTREE_STAT * stat ;
10891089 #ifdef AT_LEAST_DB_4_3
10901090 db->Status = ((db->dbp)->stat)(db->dbp, db->txn, &stat, 0) ;
1091 #else
1091 #else
10921092 #ifdef AT_LEAST_DB_3_3
10931093 db->Status = ((db->dbp)->stat)(db->dbp, &stat, 0) ;
10941094 #else
11161116 DB_QUEUE_STAT * stat ;
11171117 #ifdef AT_LEAST_DB_4_3
11181118 db->Status = ((db->dbp)->stat)(db->dbp, db->txn, &stat, 0) ;
1119 #else
1119 #else
11201120 #ifdef AT_LEAST_DB_3_3
11211121 db->Status = ((db->dbp)->stat)(db->dbp, &stat, 0) ;
11221122 #else
12251225 {
12261226 #ifdef dTHX
12271227 dTHX;
1228 #endif
1228 #endif
12291229 dSP ;
1230 dMY_CXT ;
1230 dMY_CXT ;
12311231 char * data1, * data2 ;
12321232 int retval ;
12331233 int count ;
12851285 {
12861286 #ifdef dTHX
12871287 dTHX;
1288 #endif
1288 #endif
12891289 dSP ;
1290 dMY_CXT ;
1290 dMY_CXT ;
12911291 char * data1, * data2 ;
12921292 int retval ;
12931293 int count ;
13461346 {
13471347 #ifdef dTHX
13481348 dTHX;
1349 #endif
1349 #endif
13501350 dSP ;
1351 dMY_CXT ;
1351 dMY_CXT ;
13521352 char * data1, * data2 ;
13531353 int retval ;
13541354 int count ;
14001400 {
14011401 #ifdef dTHX
14021402 dTHX;
1403 #endif
1403 #endif
14041404 dSP ;
1405 dMY_CXT ;
1405 dMY_CXT ;
14061406 int retval ;
14071407 int count ;
14081408 /* BerkeleyDB keepDB = CurrentDB ; */
14451445 {
14461446 #ifdef dTHX
14471447 dTHX;
1448 #endif
1448 #endif
14491449 dSP ;
1450 dMY_CXT ;
1450 dMY_CXT ;
14511451 char * pk_dat, * pd_dat ;
14521452 int retval ;
14531453 int count ;
15001500 retval = POPi ;
15011501
15021502 PUTBACK ;
1503
1503
15041504 if (retval != DB_DONOTINDEX)
15051505 {
15061506 /* retrieve the secondary key */
15501550 } else {
15511551 croak("Not an array reference");
15521552 }
1553 } else
1553 } else
15541554 #endif
15551555 {
15561556 skey_ptr = SvPV(skey_SV, skey_len);
15741574 {
15751575 #ifdef dTHX
15761576 dTHX;
1577 #endif
1577 #endif
15781578 dSP ;
1579 dMY_CXT ;
1579 dMY_CXT ;
15801580 char * pk_dat, * pd_dat ;
15811581 int retval ;
15821582 int count ;
16271627 retval = POPi ;
16281628
16291629 PUTBACK ;
1630
1630
16311631 /* retrieve the secondary key */
16321632 DBT_clear(*skey);
16331633
16341634 if (retval != DB_DONOTINDEX)
16351635 {
1636 Value = GetRecnoKey(getCurrentDB, SvIV(skey_SV)) ;
1636 Value = GetRecnoKey(getCurrentDB, SvIV(skey_SV)) ;
16371637 skey->flags = DB_DBT_APPMALLOC;
16381638 skey->size = (int)sizeof(db_recno_t);
16391639 skey->data = (char*)safemalloc(skey->size);
16501650
16511651 #ifdef AT_LEAST_DB_4_8
16521652
1653 typedef int (*bt_compress_fcn_type)(DB *db, const DBT *prevKey,
1653 typedef int (*bt_compress_fcn_type)(DB *db, const DBT *prevKey,
16541654 const DBT *prevData, const DBT *key, const DBT *data, DBT *dest);
16551655
1656 typedef int (*bt_decompress_fcn_type)(DB *db, const DBT *prevKey,
1656 typedef int (*bt_decompress_fcn_type)(DB *db, const DBT *prevKey,
16571657 const DBT *prevData, DBT *compressed, DBT *destKey, DBT *destData);
16581658
16591659 #endif /* AT_LEAST_DB_4_8 */
16671667 {
16681668 #ifdef dTHX
16691669 dTHX;
1670 #endif
1670 #endif
16711671 dSP ;
1672 dMY_CXT ;
1672 dMY_CXT ;
16731673 char * k_dat, * d_dat, * f_dat;
16741674 int retval ;
16751675 int count ;
17541754 {
17551755 #ifdef dTHX
17561756 dTHX;
1757 #endif
1757 #endif
17581758 dSP ;
1759 dMY_CXT ;
1759 dMY_CXT ;
17601760 char * k_dat, * d_dat, * f_dat;
17611761 int retval ;
17621762 int count ;
18201820 if (*changed)
18211821 {
18221822 DBT_clear(*data);
1823 Value = GetRecnoKey(getCurrentDB, SvIV(data_sv)) ;
1823 Value = GetRecnoKey(getCurrentDB, SvIV(data_sv)) ;
18241824 data->flags = DB_DBT_APPMALLOC;
18251825 data->size = (int)sizeof(db_recno_t);
18261826 data->data = (char*)safemalloc(data->size);
18451845 {
18461846 #ifdef dTHX
18471847 dTHX;
1848 #endif
1848 #endif
18491849 SV * sv;
18501850
18511851 Trace(("In errcall_cb \n")) ;
18921892 {
18931893 #ifdef dTHX
18941894 dTHX;
1895 #endif
1895 #endif
18961896 SV ** svp;
18971897 svp = hv_fetch(hash, key, strlen(key), FALSE);
18981898
19111911 {
19121912 #ifdef dTHX
19131913 dTHX;
1914 #endif
1914 #endif
19151915 HV * hv = perl_get_hv(hash, TRUE);
19161916 (void) hv_delete(hv, (char*)&key, sizeof(key), G_DISCARD);
19171917 }
19211921 {
19221922 #ifdef dTHX
19231923 dTHX;
1924 #endif
1924 #endif
19251925 HV * hv = perl_get_hv(hash, TRUE);
19261926 (void)hv_store(hv, (char*)&key, sizeof(key), newSViv(value), 0);
19271927 /* printf("hv_store returned %d\n", ret) ; */
19321932 {
19331933 #ifdef dTHX
19341934 dTHX;
1935 #endif
1935 #endif
19361936 hv_store(hash, key, strlen(key), newSViv(value), 0);
19371937 }
19381938
19491949 {
19501950 #ifdef dTHX
19511951 dTHX;
1952 #endif
1953 dMY_CXT ;
1952 #endif
1953 dMY_CXT ;
19541954 if (db->recno_or_queue) {
1955 Value = GetRecnoKey(db, SvIV(sv)) ;
1956 key->data = & Value;
1955 Value = GetRecnoKey(db, SvIV(sv)) ;
1956 key->data = & Value;
19571957 key->size = (int)sizeof(db_recno_t);
19581958 }
19591959 else {
19681968 SV * ref,
19691969 SV * ref_dbenv ,
19701970 BerkeleyDB__Env dbenv ,
1971 BerkeleyDB__Txn txn,
1971 BerkeleyDB__Txn txn,
19721972 const char * file,
19731973 const char * subname,
19741974 DBTYPE type,
19821982 {
19831983 #ifdef dTHX
19841984 dTHX;
1985 #endif
1985 #endif
19861986 DB_ENV * env = NULL ;
19871987 BerkeleyDB RETVAL = NULL ;
19881988 DB * dbp ;
19931993 Trace(("_db_open(dbenv[%p] ref_dbenv [%p] file[%s] subname [%s] type[%d] flags[%d] mode[%d]\n",
19941994 dbenv, ref_dbenv, file, subname, type, flags, mode)) ;
19951995
1996
1996
19971997 if (dbenv)
19981998 env = dbenv->Env ;
19991999
20752075 if (password)
20762076 {
20772077 Status = dbp->set_encrypt(dbp, password, enc_flags);
2078 Trace(("DB->set_encrypt passwd = %s, flags %d returned %s\n",
2078 Trace(("DB->set_encrypt passwd = %s, flags %d returned %s\n",
20792079 password, enc_flags,
20802080 my_db_strerror(Status))) ;
20812081 if (Status)
20822082 return RETVAL ;
20832083 }
2084 #endif
2084 #endif
20852085
20862086 if (info->re_source) {
20872087 Status = dbp->set_re_source(dbp, info->re_source) ;
22352235 #else
22362236 {
22372237 Status = dbp->set_blob_threshold(dbp, info->blob_threshold, 0);
2238 Trace(("ENV->set_blob_threshold value = %d returned %s\n",
2238 Trace(("ENV->set_blob_threshold value = %d returned %s\n",
22392239 info->blob_threshold,
22402240 my_db_strerror(Status))) ;
22412241 if (Status)
23872387 RETVAL = env->Status = env->Env->dbremove(env->Env, txn->txn, db, subdb, flags);
23882388 #else
23892389 softCrash("transactional db_remove requires Berkeley DB 4.1 or better");
2390 #endif
2390 #endif
23912391 } else {
23922392 if (env)
23932393 dbenv = env->Env ;
24402440 RETVAL = db_create(&dbp, dbenv, 0) ;
24412441 if (RETVAL == 0) {
24422442 RETVAL = dbp->verify(dbp, db, subdb, ofh, flags) ;
2443 #ifndef AT_LEAST_DB_4_2
2444 dbp->close(dbp, 0) ;
2443 #ifndef AT_LEAST_DB_4_2
2444 dbp->close(dbp, 0) ;
24452445 #endif
24462446 }
2447 if (outfile)
2447 if (outfile)
24482448 fclose(ofh);
24492449 }
24502450 #endif
25272527 env->set_alloc(env, safemalloc, MyRealloc, safefree) ;
25282528 env->set_errcall(env, db_errcall_cb) ;
25292529 }
2530 #endif
2530 #endif
25312531 }
25322532 OUTPUT:
25332533 RETVAL
26022602 _db_appinit(self, ref, errfile=NULL)
26032603 char * self
26042604 SV * ref
2605 SV * errfile
2605 SV * errfile
26062606 PREINIT:
26072607 dMY_CXT;
26082608 CODE:
27362736 Trace(("copying errprefix\n" )) ;
27372737 RETVAL->ErrPrefix = newSVsv(errprefix) ;
27382738 SvPOK_only(RETVAL->ErrPrefix) ;
2739 }
2739 }
27402740 if (RETVAL->ErrPrefix)
27412741 RETVAL->Env->db_errpfx = SvPVX(RETVAL->ErrPrefix) ;
27422742
28122812 Trace(("set_lg_dir [%s] returned %s\n", log_dir,
28132813 my_db_strerror(status)));
28142814 }
2815 #endif
2815 #endif
28162816 #ifdef AT_LEAST_DB_4_4
28172817 if (status == 0 && log_filemode) {
28182818 status = env->set_lg_filemode(env, log_filemode) ;
28252825 Trace(("set_cachesize [%d] returned %s\n",
28262826 cachesize, my_db_strerror(status)));
28272827 }
2828
2828
28292829 if (status == 0 && lk_detect) {
28302830 status = env->set_lk_detect(env, lk_detect) ;
28312831 Trace(("set_lk_detect [%d] returned %s\n",
28682868 if (enc_passwd && status == 0)
28692869 {
28702870 status = env->set_encrypt(env, enc_passwd, enc_flags);
2871 Trace(("ENV->set_encrypt passwd = %s, flags %d returned %s\n",
2871 Trace(("ENV->set_encrypt passwd = %s, flags %d returned %s\n",
28722872 enc_passwd, enc_flags,
28732873 my_db_strerror(status))) ;
28742874 }
2875 #endif
2875 #endif
28762876 #if ! defined(AT_LEAST_DB_5_1)
28772877 #ifdef AT_LEAST_DB_4
28782878 /* set the server */
29622962 SetValue_iv(mode, "Mode") ;
29632963 env->set_errcall(env, db_errcall_cb) ;
29642964 RETVAL->active = TRUE ;
2965 RETVAL->cds_enabled = ((flags & DB_INIT_CDB) != 0 ? TRUE : FALSE) ;
2965 RETVAL->cds_enabled = ((flags & DB_INIT_CDB) != 0 ? TRUE : FALSE) ;
29662966 #ifdef IS_DB_3_0_x
29672967 status = (env->open)(env, home, config, flags, mode) ;
29682968 #else /* > 3.0 */
30073007 else
30083008 RETVAL = NULL;
30093009 OUTPUT:
3010 RETVAL
3010 RETVAL
30113011
30123012
30133013 void
31333133 #if DB_VERSION_MAJOR == 2
31343134 # define env_txn_checkpoint(e,k,m,f) txn_checkpoint(e->Env->tx_info, k, m)
31353135 #else /* DB 3.0 or better */
3136 # ifdef AT_LEAST_DB_4
3136 # ifdef AT_LEAST_DB_4
31373137 # define env_txn_checkpoint(e,k,m,f) e->Env->txn_checkpoint(e->Env, k, m, f)
31383138 # else
31393139 # ifdef AT_LEAST_DB_3_1
33483348 softCrash("$env->get_shm_key needs Berkeley DB 4.2 or better") ;
33493349 #else
33503350 RETVAL = env->Env->get_shm_key(env->Env, &id);
3351 #endif
3351 #endif
33523352 OUTPUT:
33533353 RETVAL
33543354 id
33913391 int
33923392 set_lg_filemode(env, filemode)
33933393 BerkeleyDB::Env env
3394 u_int32_t filemode
3394 u_int32_t filemode
33953395 PREINIT:
33963396 dMY_CXT;
33973397 INIT:
37283728 DualType
37293729 set_region_dir(env, dir)
37303730 BerkeleyDB::Env env
3731 const char* dir
3731 const char* dir
37323732 PREINIT:
37333733 dMY_CXT;
37343734 CODE:
38743874 DB_HASH_STAT * stat ;
38753875 #ifdef AT_LEAST_DB_4_3
38763876 db->Status = ((db->dbp)->stat)(db->dbp, db->txn, &stat, flags) ;
3877 #else
3877 #else
38783878 #ifdef AT_LEAST_DB_3_3
38793879 db->Status = ((db->dbp)->stat)(db->dbp, &stat, flags) ;
38803880 #else
40474047 db->prefix = newSVsv(sv) ;
40484048 }
40494049
4050 RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname,
4050 RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname,
40514051 DB_BTREE, flags, mode, &info, enc_passwd, enc_flags, hash) ;
40524052 }
40534053 OUTPUT:
40684068 DB_BTREE_STAT * stat ;
40694069 #ifdef AT_LEAST_DB_4_3
40704070 db->Status = ((db->dbp)->stat)(db->dbp, db->txn, &stat, flags) ;
4071 #else
4071 #else
40724072 #ifdef AT_LEAST_DB_3_3
40734073 db->Status = ((db->dbp)->stat)(db->dbp, &stat, flags) ;
40744074 #else
41794179 SetValue_pv(info.blob_dir, "BlobDir", char*) ;
41804180 #endif
41814181 ZMALLOC(db, BerkeleyDB_type) ;
4182 RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname,
4182 RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname,
41834183 DB_HEAP, flags, mode, &info, enc_passwd, enc_flags, hash) ;
41844184 #endif
41854185 }
42494249 db->array_base = (db->array_base == 0 ? 1 : 0) ;
42504250 #endif /* ALLOW_RECNO_OFFSET */
42514251
4252 RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname,
4252 RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname,
42534253 DB_RECNO, flags, mode, &info, enc_passwd, enc_flags, hash) ;
42544254 }
42554255 OUTPUT:
43174317 db->array_base = (db->array_base == 0 ? 1 : 0) ;
43184318 #endif /* ALLOW_RECNO_OFFSET */
43194319
4320 RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname,
4320 RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname,
43214321 DB_QUEUE, flags, mode, &info, enc_passwd, enc_flags, hash) ;
43224322 #endif
43234323 }
43414341 DB_QUEUE_STAT * stat ;
43424342 #ifdef AT_LEAST_DB_4_3
43434343 db->Status = ((db->dbp)->stat)(db->dbp, db->txn, &stat, flags) ;
4344 #else
4344 #else
43454345 #ifdef AT_LEAST_DB_3_3
43464346 db->Status = ((db->dbp)->stat)(db->dbp, &stat, flags) ;
43474347 #else
44504450 if (ix == 1 && db->cds_enabled) {
44514451 #ifdef AT_LEAST_DB_3
44524452 flags |= DB_WRITECURSOR;
4453 #else
4453 #else
44544454 flags |= DB_RMW;
4455 #endif
4455 #endif
44564456 }
44574457 if ((db->Status = db_cursor(db, db->txn, &cursor, flags)) == 0){
44584458 ZMALLOC(RETVAL, BerkeleyDB__Cursor_type) ;
48064806 RETVAL
48074807 key if (writeToKey()) OutputKey(ST(1), key) ;
48084808 data
4809
4809
48104810 #define db_exists(db, key, flags) \
48114811 (db->Status = ((db->dbp)->exists)(db->dbp, db->txn, &key, flags))
48124812 DualType
48374837 u_int flags
48384838 BerkeleyDB::Common db
48394839 DBTKEY_B key
4840 DBTKEY_Bpr pkey
4840 DBTKEY_Bpr pkey
48414841 DBT_OPT data
48424842 PREINIT:
48434843 dMY_CXT;
50405040 {
50415041 //softCrash("associate_foreign does not support callbacks yet") ;
50425042 secondary->associated_foreign = newSVsv(callback) ;
5043 callback_ptr = ( secondary->recno_or_queue
5044 ? associate_foreign_cb_recno
5043 callback_ptr = ( secondary->recno_or_queue
5044 ? associate_foreign_cb_recno
50455045 : associate_foreign_cb);
50465046 }
50475047 secondary->primary_recno_or_queue = db->recno_or_queue ;
50635063 SVnull* stop
50645064 SVnull* c_data
50655065 u_int32_t flags
5066 SVnull* end
5066 SVnull* end
50675067 CODE:
50685068 {
50695069 #ifndef AT_LEAST_DB_4_4
51025102 hash = (HV*) SvRV(c_data) ;
51035103 cmpt_p = & cmpt;
51045104 cmpt.compact_fillpercent = GetValue_iv(hash,"compact_fillpercent") ;
5105 cmpt.compact_timeout = (db_timeout_t) GetValue_iv(hash, "compact_timeout");
5105 cmpt.compact_timeout = (db_timeout_t) GetValue_iv(hash, "compact_timeout");
51065106 }
51075107 RETVAL = (db->dbp)->compact(db->dbp, db->txn, start_p, stop_p, cmpt_p, flags, end_p);
51085108 if (RETVAL == 0 && hash) {
52095209 /* RETVAL->info ; */
52105210 hash_store_iv("BerkeleyDB::Term::Cursor", (char *)RETVAL, 1) ;
52115211 }
5212 #endif
5212 #endif
52135213 }
52145214 OUTPUT:
52155215 RETVAL
52795279 cu_c_get(db, key, data, flags=0)
52805280 int flags
52815281 BerkeleyDB::Cursor db
5282 DBTKEY_B key
5283 DBT_B data
5282 DBTKEY_B key
5283 DBT_B data
52845284 PREINIT:
52855285 dMY_CXT;
52865286 INIT:
53025302 int flags
53035303 BerkeleyDB::Cursor db
53045304 DBTKEY_B key
5305 DBTKEY_Bpr pkey
5305 DBTKEY_Bpr pkey
53065306 DBT_B data
53075307 PREINIT:
53085308 dMY_CXT;
53215321 RETVAL
53225322 key if (writeToKey()) OutputKey(ST(1), key) ;
53235323 pkey
5324 data
5324 data
53255325
53265326
53275327
54275427 {
54285428 Trace(("db_stream [%s]\n", my_db_strerror(db->Status)));
54295429 }
5430 #endif
5430 #endif
54315431 }
54325432 OUTPUT:
54335433 RETVAL
54355435 BerkeleyDB::DbStream::Raw
54365436 _c_get_db_stream(db, key, cflags, sflags)
54375437 BerkeleyDB::Cursor db
5438 DBTKEY_B4Blob key
5438 DBTKEY_B4Blob key
54395439 u_int32_t cflags
54405440 u_int32_t sflags
54415441 BerkeleyDB::DbStream RETVAL = NULL ;
54515451 #else
54525452 DBT data;
54535453 DB_STREAM * stream = NULL ;
5454 DBT_clear(data);
5454 DBT_clear(data);
54555455 data.flags = DB_DBT_PARTIAL;
54565456 db->Status = (db->cursor->c_get)(db->cursor, &key, &data, cflags);
54575457 if (db->Status == 0)
54695469 {
54705470 Trace(("db_stream [%s]\n", my_db_strerror(db->Status)));
54715471 }
5472 #endif
5472 #endif
54735473 }
54745474 OUTPUT:
54755475 RETVAL
55155515 DualType
55165516 read(db, data, offset, size, flags=0)
55175517 BerkeleyDB::DbStream db
5518 DBT_Blob data
5518 DBT_Blob data
55195519 db_off_t offset
55205520 u_int32_t size
55215521 u_int32_t flags
56475647 #if DB_VERSION_MAJOR == 2
56485648 # define xx_txn_checkpoint(t,k,m,f) txn_checkpoint(t->env->Env->tx_info, k, m)
56495649 #else
5650 # ifdef AT_LEAST_DB_4
5650 # ifdef AT_LEAST_DB_4
56515651 # define xx_txn_checkpoint(e,k,m,f) e->env->Env->txn_checkpoint(e->env->Env, k, m, f)
56525652 # else
56535653 # ifdef AT_LEAST_DB_3_1
59885988 OUTPUT:
59895989 RETVAL
59905990
5991
5991
59925992 MODULE = BerkeleyDB::Common PACKAGE = BerkeleyDB::Common
59935993
59945994 BerkeleyDB::Sequence
60186018 OUTPUT:
60196019 RETVAL
60206020
6021
6021
60226022 MODULE = BerkeleyDB::Sequence PACKAGE = BerkeleyDB::Sequence PREFIX = seq_
6023
6023
60246024 DualType
60256025 open(seq, key, flags=0)
60266026 BerkeleyDB::Sequence seq
60516051 #ifndef AT_LEAST_DB_4_3
60526052 softCrash("$seq->close needs Berkeley DB 4.3.x or better") ;
60536053 #else
6054 RETVAL = 0;
6054 RETVAL = 0;
60556055 if (seq->active) {
60566056 -- seq->db->open_sequences;
60576057 RETVAL = (seq->seq->close)(seq->seq, flags);
60606060 #endif
60616061 OUTPUT:
60626062 RETVAL
6063
6063
60646064 DualType
60656065 remove(seq,flags=0)
60666066 BerkeleyDB::Sequence seq;
60736073 #ifndef AT_LEAST_DB_4_3
60746074 softCrash("$seq->remove needs Berkeley DB 4.3.x or better") ;
60756075 #else
6076 RETVAL = 0;
6076 RETVAL = 0;
60776077 if (seq->active)
60786078 RETVAL = seq->seq->remove(seq->seq, seq->db->txn, flags);
60796079 seq->active = FALSE;
60806080 #endif
60816081 OUTPUT:
60826082 RETVAL
6083
6083
60846084 void
60856085 DESTROY(seq)
60866086 BerkeleyDB::Sequence seq
61116111 #endif
61126112 OUTPUT:
61136113 RETVAL
6114 element
6115
6114 element
6115
61166116 DualType
61176117 get_key(seq, key)
61186118 BerkeleyDB::Sequence seq;
61306130 #endif
61316131 OUTPUT:
61326132 RETVAL
6133 key
6134
6133 key
6134
61356135 DualType
61366136 initial_value(seq, low, high=0)
61376137 BerkeleyDB::Sequence seq;
61496149 #endif
61506150 OUTPUT:
61516151 RETVAL
6152
6152
61536153 DualType
61546154 set_cachesize(seq, size)
61556155 BerkeleyDB::Sequence seq;
61666166 #endif
61676167 OUTPUT:
61686168 RETVAL
6169
6169
61706170 DualType
61716171 get_cachesize(seq, size)
61726172 BerkeleyDB::Sequence seq;
61836183 #endif
61846184 OUTPUT:
61856185 RETVAL
6186 size
6186 size
61876187
61886188 DualType
61896189 set_flags(seq, flags)
62016201 #endif
62026202 OUTPUT:
62036203 RETVAL
6204
6204
62056205 DualType
62066206 get_flags(seq, flags)
62076207 BerkeleyDB::Sequence seq;
62186218 #endif
62196219 OUTPUT:
62206220 RETVAL
6221 flags
6222
6221 flags
6222
62236223 DualType
62246224 set_range(seq)
62256225 BerkeleyDB::Sequence seq;
62376237 {
62386238 #ifdef dTHX
62396239 dTHX;
6240 #endif
6240 #endif
62416241 SV * sv_err = perl_get_sv(ERR_BUFF, GV_ADD|GV_ADDMULTI) ;
62426242 SV * version_sv = perl_get_sv("BerkeleyDB::db_version", GV_ADD|GV_ADDMULTI) ;
62436243 SV * ver_sv = perl_get_sv("BerkeleyDB::db_ver", GV_ADD|GV_ADDMULTI) ;
62666266 empty.flags = 0 ;
62676267
62686268 }
6269
00 Revision history for Perl extension BerkeleyDB.
1
2 0.65 13 May 2022
3
4 * Update to license wording
5 Fri May 13 07:50:38 2022 +0100
6 0fb21f12d1938f0cd5c3cfe2f674f0c41863fb55
17
28 0.64 17 September 2020
39
4242 "web" : "https://github.com/pmqs/BerkeleyDB"
4343 }
4444 },
45 "version" : "0.64",
45 "version" : "0.65",
4646 "x_serialization_backend" : "JSON::PP version 4.02"
4747 }
2020 bugtracker: https://github.com/pmqs/BerkeleyDB/issues
2121 homepage: https://github.com/pmqs/BerkeleyDB
2222 repository: git://github.com/pmqs/BerkeleyDB.git
23 version: '0.64'
23 version: '0.65'
2424 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
5353 WriteMakefile(
5454 NAME => 'BerkeleyDB',
5555 LIBS => ["-L${LIB_DIR} $LIBS"],
56 #MAN3PODS => {}, # Pods will be built by installman.
56 #MAN3PODS => {}, # Pods will be built by installman.
5757 INC => "-I$INC_DIR",
5858 VERSION_FROM => 'BerkeleyDB.pm',
5959 XSPROTOARG => '-noprototypes',
6060 DEFINE => "$OS2 $WALL $TRACE",
6161 #'macro' => { INSTALLDIRS => 'perl' },
62 'dist' => {COMPRESS=>'gzip', SUFFIX=>'gz'},
62 'dist' => {COMPRESS=>'gzip', SUFFIX=>'gz'},
6363 ($] >= 5.005
6464 ? (ABSTRACT_FROM => 'BerkeleyDB.pod',
6565 AUTHOR => 'Paul Marquess <pmqs@cpan.org>')
6666 : ()
6767 ),
68 ((ExtUtils::MakeMaker->VERSION() gt '6.30')
69 ? ('LICENSE' => 'perl')
68 ((ExtUtils::MakeMaker->VERSION() gt '6.30')
69 ? ('LICENSE' => 'perl')
7070 : ()
7171 ),
7272
73 ( eval { ExtUtils::MakeMaker->VERSION(6.46) }
73 ( eval { ExtUtils::MakeMaker->VERSION(6.46) }
7474 ? ( META_MERGE => {
75
75
7676 "meta-spec" => { version => 2 },
77
77
7878 resources => {
79
79
8080 bugtracker => {
8181 web => 'https://github.com/pmqs/BerkeleyDB/issues'
8282 },
8787 type => 'git',
8888 url => 'git://github.com/pmqs/BerkeleyDB.git',
8989 web => 'https://github.com/pmqs/BerkeleyDB',
90 },
90 },
9191 },
92 }
93 )
92 }
93 )
9494 : ()
9595 ),
9696
103103 my $path = shift ;
104104
105105 return undef
106 if $path =~ /(~|\.bak)$/ ||
106 if $path =~ /(~|\.bak)$/ ||
107107 $path =~ /^\..*\.swp$/ ;
108108
109 return $path;
109 return $path;
110110 }
111111
112
112
113113 sub MY::postamble {
114114 '
115115 $(NAME).pod: $(NAME).pod.P t/examples.t.T t/examples3.t.T mkpod
118118 $(NAME).xs: typemap
119119 $(TOUCH) $(NAME).xs
120120
121 Makefile: config.in
121 Makefile: config.in
122122
123123
124124 ' ;
162162
163163 # check parsed values
164164 my @missing = () ;
165 die "The following keys are missing from $CONFIG file: [@missing]\n"
165 die "The following keys are missing from $CONFIG file: [@missing]\n"
166166 if @missing = keys %Parsed ;
167167
168168 $INC_DIR = $ENV{'BERKELEYDB_INCLUDE'} || $Info{'INCLUDE'} ;
00 BerkeleyDB
11
2 Version 0.64
3
4 17th August 2020
5
6
7 Copyright (c) 1997-2020 Paul Marquess. All rights reserved. This
2 Version 0.65
3
4 13th May 2022
5
6
7 Copyright (c) 1997-2022 Paul Marquess. All rights reserved. This
88 program is free software; you can redistribute it and/or modify
99 it under the same terms as Perl itself.
1010
2727
2828 * allow recno to allow base offset for arrays to be either 0 or 1.
2929
30 * when duplicate keys are enabled, allow db_put($key, [$val1, $val2,...])
30 * when duplicate keys are enabled, allow db_put($key, [$val1, $val2,...])
3131
3232
3333 2.x -> 3.x Upgrade
3030 # Berkeley DB library from libdb.a to libdb-2.6.4.a and change the
3131 # DBNAME line below to look like this:
3232 #
33 # DBNAME = -ldb-2.6.4
33 # DBNAME = -ldb-2.6.4
3434 #
3535 # Note: If you are building this module with Win32, -llibdb will be
3636 # used by default.
66 # Version: 1.07
77 # Date 2nd April 2011
88 #
9 # Copyright (c) 1998-2020 Paul Marquess. All rights reserved.
9 # Copyright (c) 1998-2022 Paul Marquess. All rights reserved.
1010 # This program is free software; you can redistribute it and/or
1111 # modify it under the same terms as Perl itself.
1212
0 libberkeleydb-perl (0.65-1) UNRELEASED; urgency=low
1
2 * New upstream release.
3
4 -- Debian Janitor <janitor@jelmer.uk> Wed, 14 Dec 2022 22:43:47 -0000
5
06 libberkeleydb-perl (0.64-2) unstable; urgency=medium
17
28 * Enable the autopkgtest-pkg-perl test suite.
00 #!/usr/bin/perl
11
2 use ExtUtils::Constant qw(WriteConstants);
2 use ExtUtils::Constant qw(WriteConstants);
33
44 use constant DEFINE => 'define' ;
55 use constant STRING => 'string' ;
11761176 my $str = shift ;
11771177 my ($major, $minor, $patch) = split /\./, $str ;
11781178
1179 my $macro =
1179 my $macro =
11801180 "#if (DB_VERSION_MAJOR > $major) || \\\n" .
11811181 " (DB_VERSION_MAJOR == $major && DB_VERSION_MINOR > $minor) || \\\n" .
11821182 " (DB_VERSION_MAJOR == $major && DB_VERSION_MINOR == $minor && \\\n" .
12311231 if ( /^\s*$START_re/ )
12321232 {
12331233 # skip to the end marker.
1234 while (<IN>)
1234 while (<IN>)
12351235 { last OUTER if /^\s*$END_re/ }
12361236 }
12371237 print OUT ;
12381238 }
1239
1239
12401240 print OUT "$START\n";
12411241 foreach my $key (sort keys %constants)
12421242 {
12441244 print OUT "\t$key\n";
12451245 }
12461246 print OUT "\t$END\n";
1247
1247
12481248 while (<IN>)
12491249 {
12501250 print OUT ;
99 # Tagged source files end with .T
1010 # Output from the code ends with .O
1111 # Pre-Pod file ends with .P
12 #
12 #
1313 # Tags
1414 #
1515 # ## BEGIN tagname
3434 {
3535 # Skip blank & comment lines
3636 next if /^\s*$/ || /^\s*#/ ;
37
38 #
37
38 #
3939 ($name, $expand) = split (/\t+/, $_, 2) ;
4040
4141 $expand =~ s/^\s*// ;
129129 {
130130 warn "No code insert '$1' available\n"
131131 unless $Section{$1} ;
132
132
133133 print "Expanding section $1\n" if $Verbose ;
134134 print POD $Section{$1} ;
135135 }
139139 print POD $line ;
140140 }
141141 }
142
142
143143 close PPOD ;
144144 close POD ;
145145 }
00 #!/usr/local/bin/perl
11
2 my $ignore_re = '^(' . join("|",
2 my $ignore_re = '^(' . join("|",
33 qw(
44 _
55 [a-z]
4444 my $file = readFile($inc) ;
4545 StripCommentsAndStrings($file) ;
4646 my $result = scan($name, $file) ;
47 print "\n\t#########\n\t# $name\n\t#########\n\n$result"
47 print "\n\t#########\n\t# $name\n\t#########\n\n$result"
4848 if $result;
4949 }
5050 exit ;
5959 my $result = "" ;
6060
6161 if (1) {
62 # Preprocess all tri-graphs
62 # Preprocess all tri-graphs
6363 # including things stuck in quoted string constants.
6464 $file =~ s/\?\?=/#/g; # | ??=| #|
6565 $file =~ s/\?\?\!/|/g; # | ??!| ||
7171 $file =~ s/\?\?</{/g; # | ??<| {|
7272 $file =~ s/\?\?>/}/g; # | ??>| }|
7373 }
74
75 while ( $file =~ /^\s*#\s*define\s+([\$\w]+)\b(?!\()\s*(.*)/gm )
74
75 while ( $file =~ /^\s*#\s*define\s+([\$\w]+)\b(?!\()\s*(.*)/gm )
7676 {
7777 my $def = $1;
7878 my $rest = $2;
7979 my $ignore = 0 ;
80
80
8181 $ignore = 1 if $ignore_def{$def} || $def =~ /$ignore_re/o ;
82
82
8383 # Cannot do: (-1) and ((LHANDLE)3) are OK:
8484 #print("Skip non-wordy $def => $rest\n"),
85
85
8686 $rest =~ s/\s*$//;
8787 #next if $rest =~ /[^\w\$]/;
88
88
8989 #print "Matched $_ ($def)\n" ;
9090
9191 next if $before{$def} ++ ;
92
92
9393 if ($ignore)
9494 { $seen_define{$def} = 'IGNORE' }
95 elsif ($rest =~ /"/)
95 elsif ($rest =~ /"/)
9696 { $seen_define{$def} = 'STRING' }
9797 else
9898 { $seen_define{$def} = 'DEFINE' }
9999 }
100
100
101101 foreach $define (sort keys %seen_define)
102 {
102 {
103103 my $out = $filler ;
104104 substr($out,0, length $define) = $define;
105105 $result .= "\t$out => $seen_define{$define},\n" ;
106106 }
107
107
108108 while ($file =~ /\btypedef\s+enum\s*{(.*?)}\s*(\w+)/gs )
109109 {
110110 my $enum = $1 ;
111111 my $name = $2 ;
112112 my $ignore = 0 ;
113
113
114114 $ignore = 1 if $ignore_enums{$name} ;
115
115
116116 #$enum =~ s/\s*=\s*\S+\s*(,?)\s*\n/$1/g;
117117 $enum =~ s/^\s*//;
118118 $enum =~ s/\s*$//;
119
119
120120 my @tokens = map { s/\s*=.*// ; $_} split /\s*,\s*/, $enum ;
121121 my @new = grep { ! $Enums{$_}++ } @tokens ;
122122
159159 )* ## 0-or-more things which don't start with /
160160 ## but do end with '*'
161161 / ## End of /* ... */ comment
162
162
163163 | ## OR C++ Comment
164 // ## Start of C++ comment //
164 // ## Start of C++ comment //
165165 [^\n]* ## followed by 0-or-more non end of line characters
166166
167167 | ## OR various things which aren't comments:
168
168
169169 (
170170 " ## Start of " ... " string
171171 (
174174 [^"\\] ## Non "\
175175 )*
176176 " ## End of " ... " string
177
177
178178 | ## OR
179
179
180180 ' ## Start of ' ... ' string
181181 (
182182 \\. ## Escaped char
184184 [^'\\] ## Non '\
185185 )*
186186 ' ## End of ' ... ' string
187
187
188188 | ## OR
189
189
190190 . ## Anything other char
191191 [^/"'\\]* ## Chars which doesn't start a comment, string or escape
192192 )
235235 $A == $B or return $A <=> $B ;
236236 }
237237 return 0;
238 }
238 }
239239
240240 __END__
241
2020
2121 plan tests => 1 + $extra ;
2222
23 use_ok('BerkeleyDB', '0.64');
23 use_ok('BerkeleyDB', '0.65');
2424 }
2525
2626 if (defined $BerkeleyDB::VERSION)
22 use strict ;
33
44 use lib 't';
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use util ;
77 use Test::More;
88
3838 my $lexd = new LexDir $home ;
3939 my $threshold = 1234 ;
4040
41 ok my $env = new BerkeleyDB::Env
41 ok my $env = new BerkeleyDB::Env
4242 Flags => DB_CREATE|DB_INIT_MPOOL,
43 #@StdErrFile,
43 #@StdErrFile,
4444 BlobDir => $home,
4545 Home => $home ;
4646
47 ok my $db = new $TYPE Filename => $Dfile,
47 ok my $db = new $TYPE Filename => $Dfile,
4848 Env => $env,
4949 BlobThreshold => $threshold,
5050 Flags => DB_CREATE ;
101101 ok $dbstream->write($newData) == 0 , "write";
102102
103103 substr($bigData, 0, length($newData)) = $newData;
104
104
105105 my $new1;
106106 ok $dbstream->read($new, 0, 5) == 0 , "read";
107107 is $new, "hello";
162162 is $d2, $smallData;
163163
164164 }
165
22 use strict ;
33
44 use lib 't';
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use util ;
77 use Test::More;
88
2424 ok $@ =~ /unknown key value\(s\) Stupid/ ;
2525
2626 eval ' $db = new BerkeleyDB::Btree -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
27 ok $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/
27 ok $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/
2828 or print "# $@" ;
2929
3030 eval ' $db = new BerkeleyDB::Btree -Env => 2 ' ;
4343 {
4444 my $lex = new LexFile $Dfile ;
4545
46 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
46 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
4747 -Flags => DB_CREATE ;
4848
4949 # Add a k/v pair
6060 ok $db->db_del("some key") == 0 ;
6161 ok $db->db_get("some key", $value) == DB_NOTFOUND ;
6262 ok $db->status() == DB_NOTFOUND ;
63 ok $db->status() =~ $DB_errors{'DB_NOTFOUND'}
63 ok $db->status() =~ $DB_errors{'DB_NOTFOUND'}
6464 or diag "Status is [" . $db->status() . "]";
6565
6666 ok $db->db_sync() == 0 ;
100100
101101 ok my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,
102102 @StdErrFile, -Home => $home ;
103 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
103 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
104104 -Env => $env,
105105 -Flags => DB_CREATE ;
106106
116116 undef $env ;
117117 }
118118
119
119
120120 {
121121 # cursors
122122
123123 my $lex = new LexFile $Dfile ;
124124 my %hash ;
125125 my ($k, $v) ;
126 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
126 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
127127 -Flags => DB_CREATE ;
128 #print "[$db] [$!] $BerkeleyDB::Error\n" ;
128 #print "[$db] [$!] $BerkeleyDB::Error\n" ;
129129
130130 # create some data
131131 my %data = (
148148 my $extras = 0 ;
149149 # sequence forwards
150150 while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
151 if ( $copy{$k} eq $v )
151 if ( $copy{$k} eq $v )
152152 { delete $copy{$k} }
153153 else
154154 { ++ $extras }
165165 for ( $status = $cursor->c_get($k, $v, DB_LAST) ;
166166 $status == 0 ;
167167 $status = $cursor->c_get($k, $v, DB_PREV)) {
168 if ( $copy{$k} eq $v )
168 if ( $copy{$k} eq $v )
169169 { delete $copy{$k} }
170170 else
171171 { ++ $extras }
187187 ok $cursor->c_get($k, $v, DB_GET_BOTH) == DB_NOTFOUND ;
188188
189189 }
190
190
191191 {
192192 # Tied Hash interface
193193
252252 my $lex = new LexFile $Dfile, $Dfile2, $Dfile3 ;
253253 my $value ;
254254 my (%h, %g, %k) ;
255 my @Keys = qw( 0123 12 -1234 9 987654321 def ) ;
256 ok tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
255 my @Keys = qw( 0123 12 -1234 9 987654321 def ) ;
256 ok tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
257257 -Compare => sub { $_[0] <=> $_[1] },
258258 -Flags => DB_CREATE ;
259259
260 ok tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
260 ok tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
261261 -Compare => sub { $_[0] cmp $_[1] },
262262 -Flags => DB_CREATE ;
263263
264 ok tie %k, 'BerkeleyDB::Btree', -Filename => $Dfile3,
264 ok tie %k, 'BerkeleyDB::Btree', -Filename => $Dfile3,
265265 -Compare => sub { length $_[0] <=> length $_[1] },
266266 -Flags => DB_CREATE ;
267267
268268 my @srt_1 ;
269269 { local $^W = 0 ;
270 @srt_1 = sort { $a <=> $b } @Keys ;
270 @srt_1 = sort { $a <=> $b } @Keys ;
271271 }
272272 my @srt_2 = sort { $a cmp $b } @Keys ;
273273 my @srt_3 = sort { length $a <=> length $b } @Keys ;
274274
275275 foreach (@Keys) {
276276 local $^W = 0 ;
277 $h{$_} = 1 ;
277 $h{$_} = 1 ;
278278 $g{$_} = 1 ;
279279 $k{$_} = 1 ;
280280 }
289289 my $lex = new LexFile $Dfile, $Dfile2, $Dfile3 ;
290290 my $value ;
291291 my (%h, %g, %k) ;
292 my @Keys = qw( 0123 9 12 -1234 9 987654321 def ) ;
293 my @Values = qw( 1 0 3 dd x abc 0 ) ;
294 ok tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
292 my @Keys = qw( 0123 9 12 -1234 9 987654321 def ) ;
293 my @Values = qw( 1 0 3 dd x abc 0 ) ;
294 ok tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
295295 -Compare => sub { $_[0] <=> $_[1] },
296296 -Property => DB_DUP,
297297 -Flags => DB_CREATE ;
298298
299 ok tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
299 ok tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
300300 -Compare => sub { $_[0] cmp $_[1] },
301301 -Property => DB_DUP,
302302 -Flags => DB_CREATE ;
303303
304 ok tie %k, 'BerkeleyDB::Btree', -Filename => $Dfile3,
304 ok tie %k, 'BerkeleyDB::Btree', -Filename => $Dfile3,
305305 -Compare => sub { length $_[0] <=> length $_[1] },
306306 -Property => DB_DUP,
307307 -Flags => DB_CREATE ;
308308
309309 my @srt_1 ;
310310 { local $^W = 0 ;
311 @srt_1 = sort { $a <=> $b } @Keys ;
311 @srt_1 = sort { $a <=> $b } @Keys ;
312312 }
313313 my @srt_2 = sort { $a cmp $b } @Keys ;
314314 my @srt_3 = sort { length $a <=> length $b } @Keys ;
316316 foreach (@Keys) {
317317 local $^W = 0 ;
318318 my $value = shift @Values ;
319 $h{$_} = $value ;
319 $h{$_} = $value ;
320320 $g{$_} = $value ;
321321 $k{$_} = $value ;
322322 }
358358 my $lex = new LexFile $Dfile, $Dfile2;
359359 my $value ;
360360 my (%h, %g) ;
361 my @Keys = qw( 0123 9 12 -1234 9 987654321 9 def ) ;
362 my @Values = qw( 1 11 3 dd x abc 2 0 ) ;
363 ok tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
361 my @Keys = qw( 0123 9 12 -1234 9 987654321 9 def ) ;
362 my @Values = qw( 1 11 3 dd x abc 2 0 ) ;
363 ok tie %h, "BerkeleyDB::Btree", -Filename => $Dfile,
364364 -Compare => sub { $_[0] <=> $_[1] },
365365 -DupCompare => sub { $_[0] cmp $_[1] },
366366 -Property => DB_DUP,
367367 -Flags => DB_CREATE ;
368368
369 ok tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
369 ok tie %g, 'BerkeleyDB::Btree', -Filename => $Dfile2,
370370 -Compare => sub { $_[0] cmp $_[1] },
371371 -DupCompare => sub { $_[0] <=> $_[1] },
372372 -Property => DB_DUP,
373
374
375
373
374
375
376376 -Flags => DB_CREATE ;
377377
378378 my @srt_1 ;
379379 { local $^W = 0 ;
380 @srt_1 = sort { $a <=> $b } @Keys ;
380 @srt_1 = sort { $a <=> $b } @Keys ;
381381 }
382382 my @srt_2 = sort { $a cmp $b } @Keys ;
383383
384384 foreach (@Keys) {
385385 local $^W = 0 ;
386386 my $value = shift @Values ;
387 $h{$_} = $value ;
387 $h{$_} = $value ;
388388 $g{$_} = $value ;
389389 }
390390
400400 my $lex = new LexFile $Dfile;
401401 my %hh ;
402402
403 ok my $YY = tie %hh, "BerkeleyDB::Btree", -Filename => $Dfile,
403 ok my $YY = tie %hh, "BerkeleyDB::Btree", -Filename => $Dfile,
404404 -DupCompare => sub { $_[0] cmp $_[1] },
405405 -Property => DB_DUP,
406406 -Flags => DB_CREATE ;
410410 $hh{'Wall'} = 'Brick' ; # Note the duplicate key
411411 $hh{'Smith'} = 'John' ;
412412 $hh{'mouse'} = 'mickey' ;
413
413
414414 # first work in scalar context
415415 ok scalar $YY->get_dup('Unknown') == 0 ;
416416 ok scalar $YY->get_dup('Smith') == 1 ;
417417 ok scalar $YY->get_dup('Wall') == 3 ;
418
418
419419 # now in list context
420420 my @unknown = $YY->get_dup('Unknown') ;
421421 ok "@unknown" eq "" ;
422
422
423423 my @smith = $YY->get_dup('Smith') ;
424424 ok "@smith" eq "John" ;
425
425
426426 {
427427 my @wall = $YY->get_dup('Wall') ;
428428 my %wall ;
429429 @wall{@wall} = @wall ;
430430 ok (@wall == 3 && $wall{'Larry'} && $wall{'Stone'} && $wall{'Brick'});
431431 }
432
432
433433 # hash
434434 my %unknown = $YY->get_dup('Unknown', 1) ;
435435 ok keys %unknown == 0 ;
436
436
437437 my %smith = $YY->get_dup('Smith', 1) ;
438438 ok keys %smith == 1 && $smith{'John'} ;
439
439
440440 my %wall = $YY->get_dup('Wall', 1) ;
441 ok keys %wall == 3 && $wall{'Larry'} == 1 && $wall{'Stone'} == 1
441 ok keys %wall == 3 && $wall{'Larry'} == 1 && $wall{'Stone'} == 1
442442 && $wall{'Brick'} == 1 ;
443
443
444444 undef $YY ;
445445 untie %hh ;
446446
460460 ok $value eq "some value" ;
461461
462462 }
463
463
464464 {
465465 # partial
466466 # check works via API
544544
545545 {
546546 # partial
547 # check works via tied hash
547 # check works via tied hash
548548
549549 my $lex = new LexFile $Dfile ;
550550 my %hash ;
633633 ok ((my $Z = $txn->txn_commit()) == 0) ;
634634 ok $txn = $env->txn_begin() ;
635635 $db1->Txn($txn);
636
636
637637 # create some data
638638 my %data = (
639639 "red" => "boat",
711711 ok $cursor->c_get($key, $value, DB_NEXT) == 0 ;
712712 ok $key eq "Wall" && $value eq "Brick" ;
713713
714 #my $ref = $db->db_stat() ;
714 #my $ref = $db->db_stat() ;
715715 #ok ($ref->{bt_flags} | DB_DUP) == DB_DUP ;
716716 #print "bt_flags " . $ref->{bt_flags} . " DB_DUP " . DB_DUP ."\n";
717717
728728 my $recs = ($BerkeleyDB::db_version >= 3.1 ? "bt_ndata" : "bt_nrecs") ;
729729 my %hash ;
730730 my ($k, $v) ;
731 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
731 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
732732 -Flags => DB_CREATE,
733733 -Minkey =>3 ,
734 -Pagesize => 2 **12
734 -Pagesize => 2 **12
735735 ;
736736
737 my $ref = $db->db_stat() ;
737 my $ref = $db->db_stat() ;
738738 ok $ref->{$recs} == 0;
739739 ok $ref->{'bt_minkey'} == 3;
740740 ok $ref->{'bt_pagesize'} == 2 ** 12;
752752 }
753753 ok $ret == 0 ;
754754
755 $ref = $db->db_stat() ;
755 $ref = $db->db_stat() ;
756756 ok $ref->{$recs} == 3;
757757 }
758758
776776 @ISA=qw(BerkeleyDB BerkeleyDB::Btree );
777777 @EXPORT = @BerkeleyDB::EXPORT ;
778778
779 sub db_put {
779 sub db_put {
780780 my $self = shift ;
781781 my $key = shift ;
782782 my $value = shift ;
783783 $self->SUPER::db_put($key, $value * 3) ;
784784 }
785785
786 sub db_get {
786 sub db_get {
787787 my $self = shift ;
788788 $self->SUPER::db_get($_[0], $_[1]) ;
789789 $_[1] -= 2 ;
803803 close FILE ;
804804
805805 use Test::More;
806 BEGIN { push @INC, '.'; }
806 BEGIN { push @INC, '.'; }
807807 eval 'use SubDB ; ';
808808 ok $@ eq "" ;
809809 my %h ;
810810 my $X ;
811811 eval '
812 $X = tie(%h, "SubDB", -Filename => "dbbtree.tmp",
812 $X = tie(%h, "SubDB", -Filename => "dbbtree.tmp",
813813 -Flags => DB_CREATE,
814814 -Mode => 0640 );
815815 ' ;
845845 my $lex = new LexFile $Dfile ;
846846 my %hash ;
847847 my ($k, $v) = ("", "");
848 ok my $db = new BerkeleyDB::Btree
849 -Filename => $Dfile,
848 ok my $db = new BerkeleyDB::Btree
849 -Filename => $Dfile,
850850 -Flags => DB_CREATE,
851851 -Property => DB_RECNUM ;
852852
919919 ok $v == 4 ;
920920
921921 }
922
44 use strict ;
55 use lib 't' ;
66
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99 use Test::More;
1010
1414 plan(skip_all => "this needs BerkeleyDB 2.x or better" )
1515 if $BerkeleyDB::db_version < 2;
1616
17 plan tests => 12;
17 plan tests => 12;
1818 }
1919
2020
3434 ok my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,
3535 -Home => $home, @StdErrFile ;
3636
37 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
37 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
3838 -Env => $env,
3939 -Flags => DB_CREATE ;
4040
5757 ok my $env = new BerkeleyDB::Env -Flags => DB_INIT_CDB|DB_CREATE|DB_INIT_MPOOL,
5858 -Home => $home, @StdErrFile ;
5959
60 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
60 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
6161 -Env => $env,
6262 -Flags => DB_CREATE ;
6363
44 use strict ;
55
66 use lib 't';
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99
1010 use Test::More ;
1313 plan(skip_all => "this needs BerkeleyDB 3.x or better" )
1414 if $BerkeleyDB::db_version < 3;
1515
16 plan tests => 14;
16 plan tests => 14;
1717 }
1818
1919 my $Dfile = "dbhash.tmp";
3939 my $lex = new LexFile $Dfile ;
4040 my %hash ;
4141 my ($k, $v) ;
42 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
42 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
4343 -Flags => DB_CREATE ;
4444
4545 # create some data
7979 ok $dup_cursor->c_get($k, $v, DB_CURRENT) == 0;
8080 ok $k eq "green" ;
8181 ok $v eq "house" ;
82
82
8383 }
84
44 use lib 't';
55 use util ;
66
7 use Test::More ;
8
9 use BerkeleyDB;
10
11 plan(skip_all => "1..0 # Skip: this needs Berkeley DB 3.1.x or better\n")
7 use Test::More ;
8
9 use BerkeleyDB;
10
11 plan(skip_all => "1..0 # Skip: this needs Berkeley DB 3.1.x or better\n")
1212 if $BerkeleyDB::db_version < 3.1 ;
1313
1414 plan(tests => 48) ;
121121 title "rename a subdb";
122122
123123 my $lex = new LexFile $Dfile ;
124
125 my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
124
125 my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
126126 -Subname => "fred" ,
127127 -Flags => DB_CREATE ;
128128 isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
129129
130 my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
130 my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
131131 -Subname => "joe" ,
132132 -Flags => DB_CREATE ;
133133 isa_ok $db2, 'BerkeleyDB::Btree', " create database ok";
147147 undef $db1 ;
148148 undef $db2 ;
149149
150 # now rename
151 cmp_ok BerkeleyDB::db_rename(-Filename => $Dfile,
150 # now rename
151 cmp_ok BerkeleyDB::db_rename(-Filename => $Dfile,
152152 -Subname => "fred",
153153 -Newname => "harry"), '==', 0, " rename ok";
154
155 my $db3 = new BerkeleyDB::Hash -Filename => $Dfile,
154
155 my $db3 = new BerkeleyDB::Hash -Filename => $Dfile,
156156 -Subname => "harry" ;
157157 isa_ok $db3, 'BerkeleyDB::Hash', " verify rename";
158158
162162 title "rename a file";
163163
164164 my $lex = new LexFile $Dfile, $Dfile2 ;
165
166 my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
165
166 my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
167167 -Subname => "fred" ,
168168 -Flags => DB_CREATE;
169169 isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
170170
171 my $db2 = new BerkeleyDB::Hash -Filename => $Dfile,
171 my $db2 = new BerkeleyDB::Hash -Filename => $Dfile,
172172 -Subname => "joe" ,
173173 -Flags => DB_CREATE ;
174174 isa_ok $db2, 'BerkeleyDB::Hash', " create database ok";
188188 undef $db1 ;
189189 undef $db2 ;
190190
191 # now rename
192 cmp_ok BerkeleyDB::db_rename(-Filename => $Dfile, -Newname => $Dfile2),
191 # now rename
192 cmp_ok BerkeleyDB::db_rename(-Filename => $Dfile, -Newname => $Dfile2),
193193 '==', 0, " rename file to $Dfile2 ok";
194
195 my $db3 = new BerkeleyDB::Hash -Filename => $Dfile2,
194
195 my $db3 = new BerkeleyDB::Hash -Filename => $Dfile2,
196196 -Subname => "fred" ;
197197 isa_ok $db3, 'BerkeleyDB::Hash', " verify rename"
198198 or diag "$! $BerkeleyDB::Error";
205205 title "verify";
206206
207207 my $lex = new LexFile $Dfile, $Dfile2 ;
208
209 my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
208
209 my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
210210 -Subname => "fred" ,
211211 -Flags => DB_CREATE ;
212212 isa_ok $db1, 'BerkeleyDB::Hash', " create database ok";
224224
225225 undef $db1 ;
226226
227 # now verify
228 cmp_ok BerkeleyDB::db_verify(-Filename => $Dfile,
227 # now verify
228 cmp_ok BerkeleyDB::db_verify(-Filename => $Dfile,
229229 -Subname => "fred",
230230 ), '==', 0, " verify ok";
231231
232232 # now verify & dump
233 cmp_ok BerkeleyDB::db_verify(-Filename => $Dfile,
233 cmp_ok BerkeleyDB::db_verify(-Filename => $Dfile,
234234 -Subname => "fred",
235235 -Outfile => $Dfile2,
236236 ), '==', 0, " verify and dump ok";
237
237
238238 }
239239
240240 # db_remove with env
241
00 #!./perl -w
11
2 # ID: %I%, %G%
2 # ID: %I%, %G%
33
44 use strict ;
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99
1010 use Test::More ;
1313 plan(skip_all => "this needs BerkeleyDB 3.2.x or better" )
1414 if $BerkeleyDB::db_version < 3.2;
1515
16 plan tests => 6;
16 plan tests => 6;
1717 }
1818
1919 my $Dfile = "dbhash.tmp";
3939 ok my $env = new BerkeleyDB::Env -Home => $home, @StdErrFile,
4040 -Flags => DB_CREATE ,
4141 -SetFlags => DB_NOMMAP ;
42
43 undef $env ;
42
43 undef $env ;
4444 }
4545
4646 {
5151 ok my $env = new BerkeleyDB::Env -Home => $home, @StdErrFile,
5252 -Flags => DB_CREATE ;
5353 ok ! $env->set_flags(DB_NOMMAP, 1);
54
55 undef $env ;
54
55 undef $env ;
5656 }
44
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99 use Test::More;
1010
1212 plan(skip_all => "this needs BerkeleyDB 3.3.x or better" )
1313 if $BerkeleyDB::db_version < 3.3;
1414
15 plan tests => 130;
15 plan tests => 130;
1616 }
1717
1818 umask(0);
2424 my $lex = new LexFile $Dfile ;
2525 my %hash ;
2626 my ($k, $v) ;
27 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
27 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
2828 -Flags => DB_CREATE ;
2929
3030 # create some data
7272 my ($k, $v, $pk) = ('','','');
7373
7474 # create primary database
75 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
75 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
7676 -Flags => DB_CREATE ;
7777
7878 # create secondary database
79 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
79 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
8080 -Flags => DB_CREATE ;
8181
8282 # associate primary with secondary
120120 ok my $p_cursor = $primary->db_cursor();
121121 ok my $s_cursor = $secondary->db_cursor();
122122
123 # c_get from primary
123 # c_get from primary
124124 $k = 'green';
125125 ok $p_cursor->c_get($k, $v, DB_SET) == 0;
126126 is $k, 'green';
136136 $k = 1;
137137 ok $p_cursor->c_pget($k, $pk, $v, DB_FIRST) != 0;
138138
139 # c_pget from secondary database
139 # c_pget from secondary database
140140 $k = 'flag';
141141 ok $s_cursor->c_pget($k, $pk, $v, DB_SET) == 0
142142 or diag "$BerkeleyDB::Error\n";
194194 my ($k, $v, $pk) = ('','','');
195195
196196 # create primary database
197 ok my $primary = new BerkeleyDB::Btree -Filename => $Dfile1,
197 ok my $primary = new BerkeleyDB::Btree -Filename => $Dfile1,
198198 -Compare => sub { return $_[0] cmp $_[1]},
199199 -Flags => DB_CREATE ;
200200
201201 # create secondary database
202 ok my $secondary = new BerkeleyDB::Btree -Filename => $Dfile2,
202 ok my $secondary = new BerkeleyDB::Btree -Filename => $Dfile2,
203203 -Compare => sub { return $_[0] <=> $_[1]},
204204 -Property => DB_DUP,
205205 -Flags => DB_CREATE ;
259259 my ($k, $v, $pk) = ('','','');
260260
261261 # create primary database
262 ok my $primary = new BerkeleyDB::Recno -Filename => $Dfile1,
262 ok my $primary = new BerkeleyDB::Recno -Filename => $Dfile1,
263263 -Flags => DB_CREATE ;
264264
265265 # create secondary database
266 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
266 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
267267 -Flags => DB_CREATE ;
268268
269269 # associate primary with secondary
307307 ok my $p_cursor = $primary->db_cursor();
308308 ok my $s_cursor = $secondary->db_cursor();
309309
310 # c_get from primary
310 # c_get from primary
311311 $k = 1;
312312 ok $p_cursor->c_get($k, $v, DB_SET) == 0;
313313 is $k, 1;
316316 # c_get from secondary
317317 $k = 'sea';
318318 ok $s_cursor->c_get($k, $v, DB_SET) == 0;
319 is $k, 'sea'
319 is $k, 'sea'
320320 or warn "# key [$k]\n";
321321 is $v, 'sea';
322322
324324 $k = 1;
325325 ok $p_cursor->c_pget($k, $pk, $v, DB_FIRST) != 0;
326326
327 # c_pget from secondary database
327 # c_pget from secondary database
328328 $k = 'sea';
329329 ok $s_cursor->c_pget($k, $pk, $v, DB_SET) == 0;
330330 is $k, 'sea' ;
374374 my ($k, $v, $pk) = ('','','');
375375
376376 # create primary database
377 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
377 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
378378 -Flags => DB_CREATE ;
379379
380380 # create secondary database
381 ok my $secondary = new BerkeleyDB::Recno -Filename => $Dfile2,
381 ok my $secondary = new BerkeleyDB::Recno -Filename => $Dfile2,
382382 #-Property => DB_DUP,
383383 -Flags => DB_CREATE ;
384384
427427 ok my $p_cursor = $primary->db_cursor();
428428 ok my $s_cursor = $secondary->db_cursor();
429429
430 # c_get from primary
430 # c_get from primary
431431 $k = 'green';
432432 ok $p_cursor->c_get($k, $v, DB_SET) == 0;
433433 is $k, 'green';
443443 $k = 1;
444444 ok $p_cursor->c_pget($k, $pk, $v, DB_SET) != 0;
445445
446 # c_pget from secondary database
446 # c_pget from secondary database
447447 $k = 5;
448448 ok $s_cursor->c_pget($k, $pk, $v, DB_SET) == 0
449449 or diag "$BerkeleyDB::Error\n";
22 use strict ;
33
44 use lib 't' ;
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use Test::More ;
77 use util ;
88
1919 my $home = "./fred" ;
2020 ok my $lexD = new LexDir($home) ;
2121 my $lex = new LexFile $msgfile ;
22 ok my $env = new BerkeleyDB::Env( -MsgFile => $msgfile,
22 ok my $env = new BerkeleyDB::Env( -MsgFile => $msgfile,
2323 -Flags => DB_CREATE,
2424 -Home => $home) ;
2525 $env->stat_print();
3737 ok my $lexD = new LexDir($home) ;
3838 my $lex = new LexFile $msgfile ;
3939 my $fh = new IO::File ">$msgfile" ;
40 ok my $env = new BerkeleyDB::Env( -MsgFile => $fh,
40 ok my $env = new BerkeleyDB::Env( -MsgFile => $fh,
4141 -Flags => DB_CREATE,
4242 -Home => $home) ;
4343 is $env->stat_print(), 0;
5757 my $Dfile = "db.db";
5858 my $lex1 = new LexFile $Dfile ;
5959 my $fh = new IO::File ">$msgfile" ;
60 ok my $env = new BerkeleyDB::Env( -MsgFile => $fh,
60 ok my $env = new BerkeleyDB::Env( -MsgFile => $fh,
6161 -Flags => DB_CREATE|DB_INIT_MPOOL,
6262 -Home => $home) ;
63 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
63 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
6464 -Env => $env,
6565 -Flags => DB_CREATE ;
6666 is $db->stat_print(), 0;
7979 ok my $lexD = new LexDir($home) ;
8080 my $lex = new LexFile $msgfile ;
8181 my $fh = new IO::File ">$msgfile" ;
82 ok my $env = new BerkeleyDB::Env( -MsgFile => $fh,
82 ok my $env = new BerkeleyDB::Env( -MsgFile => $fh,
8383 -Flags => DB_CREATE|DB_INIT_TXN,
8484 -Home => $home) ;
8585 is $env->txn_stat_print(), 0
22 use strict ;
33
44 use lib 't' ;
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use Test::More ;
77 use util ;
88
1919 my $Dfile;
2020 my $lex = new LexFile $Dfile ;
2121 my ($k, $v) ;
22 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
22 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
2323 -Flags => DB_CREATE ;
2424
2525 # create some data
7373 ok $env ;
7474
7575 # something crazy small
76 #is($env->set_lg_max(1024), 0);
76 #is($env->set_lg_max(1024), 0);
7777
7878 ok my $txn = $env->txn_begin() ;
7979
44
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99
1010 use Test::More ;
1313 plan(skip_all => "this needs BerkeleyDB 4.6.x or better" )
1414 if $BerkeleyDB::db_version < 4.6;
1515
16 plan tests => 69;
16 plan tests => 69;
1717 }
1818
1919 umask(0);
3838 my ($k, $v, $pk) = ('','','');
3939
4040 # create primary database
41 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
41 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
4242 -Flags => DB_CREATE ;
4343
4444 # create secondary database
45 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
45 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
4646 -Flags => DB_CREATE ;
4747
4848 # associate primary with secondary
8585 my ($k, $v, $pk) = ('','','');
8686
8787 # create primary database
88 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
88 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
8989 -Flags => DB_CREATE ;
9090
9191 # create secondary database
92 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
92 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
9393 -Flags => DB_CREATE ;
9494
9595 # associate primary with secondary
183183 ok $pk eq 'bar';
184184 ok $v eq 'hello,goodbye';
185185
186 # pget to DB_GET_BOTH from secondary database
186 # pget to DB_GET_BOTH from secondary database
187187 $k = 'house';
188188 $pk = 'green';
189189 ok $secondary->db_pget($k, $pk, $v, DB_GET_BOTH) == 0 ;
244244 ok $primary->db_get("red", $v) != 0;
245245 is countRecords($primary), 3 ;
246246 }
247
44
55 use lib 't' ;
66
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99
1010 use Test::More ;
44
55 use lib 't' ;
66
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99
1010 use Test::More ;
3838 my ($k, $v, $pk) = ('','','');
3939
4040 # create primary database
41 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
42 -Flags => DB_CREATE ;
43
44 # create secondary database
45 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
41 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
42 -Flags => DB_CREATE ;
43
44 # create secondary database
45 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
4646 -Flags => DB_CREATE ;
4747
4848 # associate primary with secondary
4949 ok $primary->associate($secondary, \&sec_key) == 0;
5050
5151 # create secondary database
52 ok my $foreign = new BerkeleyDB::Hash -Filename => $Dfile3,
52 ok my $foreign = new BerkeleyDB::Hash -Filename => $Dfile3,
5353 -Flags => DB_CREATE ;
5454
5555 # associate primary with secondary
124124 my ($k, $v, $pk) = ('','','');
125125
126126 # create primary database
127 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
128 -Flags => DB_CREATE ;
129
130 # create secondary database
131 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
127 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
128 -Flags => DB_CREATE ;
129
130 # create secondary database
131 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
132132 -Flags => DB_CREATE ;
133133
134134 # associate primary with secondary
135135 ok $primary->associate($secondary, \&sec_key2) == 0;
136136
137137 # create secondary database
138 ok my $foreign = new BerkeleyDB::Hash -Filename => $Dfile3,
138 ok my $foreign = new BerkeleyDB::Hash -Filename => $Dfile3,
139139 -Flags => DB_CREATE ;
140140
141141 # associate primary with secondary
225225 my ($k, $v, $pk) = ('','','');
226226
227227 # create primary database
228 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
229 -Flags => DB_CREATE ;
230
231 # create secondary database
232 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
228 ok my $primary = new BerkeleyDB::Hash -Filename => $Dfile1,
229 -Flags => DB_CREATE ;
230
231 # create secondary database
232 ok my $secondary = new BerkeleyDB::Hash -Filename => $Dfile2,
233233 -Flags => DB_CREATE ;
234234
235235 # associate primary with secondary
236236 ok $primary->associate($secondary, \&sec_key3) == 0;
237237
238238 # create secondary database
239 ok my $foreign = new BerkeleyDB::Hash -Filename => $Dfile3,
239 ok my $foreign = new BerkeleyDB::Hash -Filename => $Dfile3,
240240 -Flags => DB_CREATE ;
241241
242242 # associate primary with secondary
299299 my ($k, $v, $pk) = ('','','');
300300
301301 # create primary database
302 ok my $primary = new BerkeleyDB::Btree -Filename => $Dfile1,
302 ok my $primary = new BerkeleyDB::Btree -Filename => $Dfile1,
303303 -set_bt_compress => 1,
304304 -Flags => DB_CREATE ;
305305
11
22 use strict ;
33 use lib 't';
4 use BerkeleyDB;
4 use BerkeleyDB;
55 use Test::More;
66 use util ;
77
22 use strict ;
33
44 use lib 't' ;
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use util ;
77 use Test::More;
88
3333 ok $txn->txn_commit() == 0 ;
3434 ok $txn = $env->txn_begin() ;
3535 $db1->Txn($txn);
36
36
3737 # create some data
3838 my %data = (
3939 "red" => "boat",
8484 my %hash ;
8585 my $cursor ;
8686 my ($k, $v) = ("", "") ;
87 ok my $db1 = tie %hash, 'BerkeleyDB::Hash',
87 ok my $db1 = tie %hash, 'BerkeleyDB::Hash',
8888 -Filename => $Dfile,
8989 -Flags => DB_CREATE ;
9090 my $count = 0 ;
9595 }
9696 is $count, 0 ;
9797 }
98
99
22 use strict ;
33
44 use lib 't' ;
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use util ;
77 use Test::More ;
88
9 BEGIN
9 BEGIN
1010 {
1111 eval { require Encode; };
12
12
1313 plan skip_all => "Encode is not available"
1414 if $@;
1515
3636 my (%h, $db) ;
3737 unlink $Dfile;
3838
39 ok $db = tie %h, 'BerkeleyDB::Hash',
40 -Filename => $Dfile,
41 -Flags => DB_CREATE;
39 ok $db = tie %h, 'BerkeleyDB::Hash',
40 -Filename => $Dfile,
41 -Flags => DB_CREATE;
4242
4343 $db->filter_fetch_key (sub { $_ = Encode::decode_utf8($_) if defined $_ });
4444 $db->filter_store_key (sub { $_ = Encode::encode_utf8($_) if defined $_ });
5555 untie %h;
5656
5757 my %newH;
58 ok $db = tie %newH, 'BerkeleyDB::Hash',
59 -Filename => $Dfile,
60 -Flags => DB_CREATE;
58 ok $db = tie %newH, 'BerkeleyDB::Hash',
59 -Filename => $Dfile,
60 -Flags => DB_CREATE;
6161
6262 $newH{"fred"} = "joe" ;
6363 is $newH{"fred"}, "joe";
00 #!./perl -w
11
2 # ID: %I%, %G%
2 # ID: %I%, %G%
33
44 use strict ;
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99 use Test::More;
1010
2727
2828 umask(0);
2929
30 {
30 {
3131 eval
3232 {
3333 my $env = new BerkeleyDB::Env @StdErrFile,
9090 my $lex = new LexFile $Dfile ;
9191 my %hash ;
9292 my ($k, $v) ;
93 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
93 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
9494 -Env => $env,
95 -Flags => DB_CREATE,
95 -Flags => DB_CREATE,
9696 -Property => DB_ENCRYPT ;
9797
9898 # create some data
114114 undef $db;
115115
116116 # once the database is created, do not need to specify DB_ENCRYPT
117 ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
117 ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
118118 -Env => $env,
119119 -Flags => DB_CREATE ;
120 $v = '';
120 $v = '';
121121 ok ! $db1->db_get("red", $v) ;
122122 ok $v eq $data{"red"},
123123 undef $db1;
124124 undef $env;
125125
126126 # open a database without specifying encryption
127 ok ! new BerkeleyDB::Hash -Filename => "$home/$Dfile";
128
129 ok ! new BerkeleyDB::Env
127 ok ! new BerkeleyDB::Hash -Filename => "$home/$Dfile";
128
129 ok ! new BerkeleyDB::Env
130130 -Home => $home,
131131 -Encrypt => {Password => "def",
132132 Flags => DB_ENCRYPT_AES
134134 -Flags => DB_CREATE | DB_INIT_MPOOL ;
135135 }
136136
137 {
138 eval
139 {
140 my $env = new BerkeleyDB::Hash
137 {
138 eval
139 {
140 my $env = new BerkeleyDB::Hash
141141 -Encrypt => 1,
142142 -Flags => DB_CREATE ;
143143 };
145145
146146 eval
147147 {
148 my $env = new BerkeleyDB::Hash
148 my $env = new BerkeleyDB::Hash
149149 -Encrypt => {},
150150 -Flags => DB_CREATE ;
151151 };
153153
154154 eval
155155 {
156 my $env = new BerkeleyDB::Hash
156 my $env = new BerkeleyDB::Hash
157157 -Encrypt => {Password => "fred"},
158158 -Flags => DB_CREATE ;
159159 };
161161
162162 eval
163163 {
164 my $env = new BerkeleyDB::Hash
164 my $env = new BerkeleyDB::Hash
165165 -Encrypt => {Flags => 1},
166166 -Flags => DB_CREATE ;
167167 };
169169
170170 eval
171171 {
172 my $env = new BerkeleyDB::Hash
172 my $env = new BerkeleyDB::Hash
173173 -Encrypt => {Fred => 1},
174174 -Flags => DB_CREATE ;
175175 };
177177
178178 }
179179
180 {
181 eval
182 {
183 my $env = new BerkeleyDB::Btree
180 {
181 eval
182 {
183 my $env = new BerkeleyDB::Btree
184184 -Encrypt => 1,
185185 -Flags => DB_CREATE ;
186186 };
188188
189189 eval
190190 {
191 my $env = new BerkeleyDB::Btree
191 my $env = new BerkeleyDB::Btree
192192 -Encrypt => {},
193193 -Flags => DB_CREATE ;
194194 };
196196
197197 eval
198198 {
199 my $env = new BerkeleyDB::Btree
199 my $env = new BerkeleyDB::Btree
200200 -Encrypt => {Password => "fred"},
201201 -Flags => DB_CREATE ;
202202 };
204204
205205 eval
206206 {
207 my $env = new BerkeleyDB::Btree
207 my $env = new BerkeleyDB::Btree
208208 -Encrypt => {Flags => 1},
209209 -Flags => DB_CREATE ;
210210 };
212212
213213 eval
214214 {
215 my $env = new BerkeleyDB::Btree
215 my $env = new BerkeleyDB::Btree
216216 -Encrypt => {Fred => 1},
217217 -Flags => DB_CREATE ;
218218 };
220220
221221 }
222222
223 {
224 eval
225 {
226 my $env = new BerkeleyDB::Queue
223 {
224 eval
225 {
226 my $env = new BerkeleyDB::Queue
227227 -Encrypt => 1,
228228 -Flags => DB_CREATE ;
229229 };
231231
232232 eval
233233 {
234 my $env = new BerkeleyDB::Queue
234 my $env = new BerkeleyDB::Queue
235235 -Encrypt => {},
236236 -Flags => DB_CREATE ;
237237 };
239239
240240 eval
241241 {
242 my $env = new BerkeleyDB::Queue
242 my $env = new BerkeleyDB::Queue
243243 -Encrypt => {Password => "fred"},
244244 -Flags => DB_CREATE ;
245245 };
247247
248248 eval
249249 {
250 my $env = new BerkeleyDB::Queue
250 my $env = new BerkeleyDB::Queue
251251 -Encrypt => {Flags => 1},
252252 -Flags => DB_CREATE ;
253253 };
255255
256256 eval
257257 {
258 my $env = new BerkeleyDB::Queue
258 my $env = new BerkeleyDB::Queue
259259 -Encrypt => {Fred => 1},
260260 -Flags => DB_CREATE ;
261261 };
263263
264264 }
265265
266 {
267 eval
268 {
269 my $env = new BerkeleyDB::Recno
266 {
267 eval
268 {
269 my $env = new BerkeleyDB::Recno
270270 -Encrypt => 1,
271271 -Flags => DB_CREATE ;
272272 };
274274
275275 eval
276276 {
277 my $env = new BerkeleyDB::Recno
277 my $env = new BerkeleyDB::Recno
278278 -Encrypt => {},
279279 -Flags => DB_CREATE ;
280280 };
282282
283283 eval
284284 {
285 my $env = new BerkeleyDB::Recno
285 my $env = new BerkeleyDB::Recno
286286 -Encrypt => {Password => "fred"},
287287 -Flags => DB_CREATE ;
288288 };
290290
291291 eval
292292 {
293 my $env = new BerkeleyDB::Recno
293 my $env = new BerkeleyDB::Recno
294294 -Encrypt => {Flags => 1},
295295 -Flags => DB_CREATE ;
296296 };
298298
299299 eval
300300 {
301 my $env = new BerkeleyDB::Recno
301 my $env = new BerkeleyDB::Recno
302302 -Encrypt => {Fred => 1},
303303 -Flags => DB_CREATE ;
304304 };
314314 my $lex = new LexFile $Dfile ;
315315 my %hash ;
316316 my ($k, $v) ;
317 ok my $db = new BerkeleyDB::Hash
318 -Filename => $Dfile,
319 -Flags => DB_CREATE,
317 ok my $db = new BerkeleyDB::Hash
318 -Filename => $Dfile,
319 -Flags => DB_CREATE,
320320 -Encrypt => {Password => "beta",
321321 Flags => DB_ENCRYPT_AES
322322 },
341341 undef $db;
342342
343343 # attempt to open a database without specifying encryption
344 ok ! new BerkeleyDB::Hash -Filename => $Dfile,
344 ok ! new BerkeleyDB::Hash -Filename => $Dfile,
345345 -Flags => DB_CREATE ;
346346
347347
348 # try opening with the wrong password
349 ok ! new BerkeleyDB::Hash -Filename => $Dfile,
350 -Filename => $Dfile,
348 # try opening with the wrong password
349 ok ! new BerkeleyDB::Hash -Filename => $Dfile,
350 -Filename => $Dfile,
351351 -Encrypt => {Password => "def",
352352 Flags => DB_ENCRYPT_AES
353353 },
354354 -Property => DB_ENCRYPT ;
355355
356356
357 # read the encrypted data
358 ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
359 -Filename => $Dfile,
357 # read the encrypted data
358 ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
359 -Filename => $Dfile,
360360 -Encrypt => {Password => "beta",
361361 Flags => DB_ENCRYPT_AES
362362 },
363363 -Property => DB_ENCRYPT ;
364364
365365
366 $v = '';
366 $v = '';
367367 ok ! $db1->db_get("red", $v) ;
368368 ok $v eq $data{"red"};
369369 # check there are three records
378378 my $lex = new LexFile $Dfile ;
379379 my %hash ;
380380 my ($k, $v) ;
381 ok my $db = new BerkeleyDB::Btree
382 -Filename => $Dfile,
383 -Flags => DB_CREATE,
381 ok my $db = new BerkeleyDB::Btree
382 -Filename => $Dfile,
383 -Flags => DB_CREATE,
384384 -Encrypt => {Password => "beta",
385385 Flags => DB_ENCRYPT_AES
386386 },
405405 undef $db;
406406
407407 # attempt to open a database without specifying encryption
408 ok ! new BerkeleyDB::Btree -Filename => $Dfile,
408 ok ! new BerkeleyDB::Btree -Filename => $Dfile,
409409 -Flags => DB_CREATE ;
410410
411411
412 # try opening with the wrong password
413 ok ! new BerkeleyDB::Btree -Filename => $Dfile,
414 -Filename => $Dfile,
412 # try opening with the wrong password
413 ok ! new BerkeleyDB::Btree -Filename => $Dfile,
414 -Filename => $Dfile,
415415 -Encrypt => {Password => "def",
416416 Flags => DB_ENCRYPT_AES
417417 },
418418 -Property => DB_ENCRYPT ;
419419
420420
421 # read the encrypted data
422 ok my $db1 = new BerkeleyDB::Btree -Filename => $Dfile,
423 -Filename => $Dfile,
421 # read the encrypted data
422 ok my $db1 = new BerkeleyDB::Btree -Filename => $Dfile,
423 -Filename => $Dfile,
424424 -Encrypt => {Password => "beta",
425425 Flags => DB_ENCRYPT_AES
426426 },
427427 -Property => DB_ENCRYPT ;
428428
429429
430 $v = '';
430 $v = '';
431431 ok ! $db1->db_get("red", $v) ;
432432 ok $v eq $data{"red"};
433433 # check there are three records
442442 my $lex = new LexFile $Dfile ;
443443 my %hash ;
444444 my ($k, $v) ;
445 ok my $db = new BerkeleyDB::Queue
446 -Filename => $Dfile,
445 ok my $db = new BerkeleyDB::Queue
446 -Filename => $Dfile,
447447 -Len => 5,
448448 -Pad => "x",
449 -Flags => DB_CREATE,
449 -Flags => DB_CREATE,
450450 -Encrypt => {Password => "beta",
451451 Flags => DB_ENCRYPT_AES
452452 },
471471 undef $db;
472472
473473 # attempt to open a database without specifying encryption
474 ok ! new BerkeleyDB::Queue -Filename => $Dfile,
474 ok ! new BerkeleyDB::Queue -Filename => $Dfile,
475475 -Len => 5,
476476 -Pad => "x",
477477 -Flags => DB_CREATE ;
478478
479479
480 # try opening with the wrong password
481 ok ! new BerkeleyDB::Queue -Filename => $Dfile,
480 # try opening with the wrong password
481 ok ! new BerkeleyDB::Queue -Filename => $Dfile,
482482 -Len => 5,
483483 -Pad => "x",
484484 -Encrypt => {Password => "def",
487487 -Property => DB_ENCRYPT ;
488488
489489
490 # read the encrypted data
491 ok my $db1 = new BerkeleyDB::Queue -Filename => $Dfile,
490 # read the encrypted data
491 ok my $db1 = new BerkeleyDB::Queue -Filename => $Dfile,
492492 -Len => 5,
493493 -Pad => "x",
494494 -Encrypt => {Password => "beta",
497497 -Property => DB_ENCRYPT ;
498498
499499
500 $v = '';
500 $v = '';
501501 ok ! $db1->db_get(3, $v) ;
502502 ok $v eq fillout($data{3}, 5, 'x');
503503 # check there are three records
512512 my $lex = new LexFile $Dfile ;
513513 my %hash ;
514514 my ($k, $v) ;
515 ok my $db = new BerkeleyDB::Recno
516 -Filename => $Dfile,
517 -Flags => DB_CREATE,
515 ok my $db = new BerkeleyDB::Recno
516 -Filename => $Dfile,
517 -Flags => DB_CREATE,
518518 -Encrypt => {Password => "beta",
519519 Flags => DB_ENCRYPT_AES
520520 },
539539 undef $db;
540540
541541 # attempt to open a database without specifying encryption
542 ok ! new BerkeleyDB::Recno -Filename => $Dfile,
542 ok ! new BerkeleyDB::Recno -Filename => $Dfile,
543543 -Flags => DB_CREATE ;
544544
545545
546 # try opening with the wrong password
547 ok ! new BerkeleyDB::Recno -Filename => $Dfile,
548 -Filename => $Dfile,
546 # try opening with the wrong password
547 ok ! new BerkeleyDB::Recno -Filename => $Dfile,
548 -Filename => $Dfile,
549549 -Encrypt => {Password => "def",
550550 Flags => DB_ENCRYPT_AES
551551 },
552552 -Property => DB_ENCRYPT ;
553553
554554
555 # read the encrypted data
556 ok my $db1 = new BerkeleyDB::Recno -Filename => $Dfile,
557 -Filename => $Dfile,
555 # read the encrypted data
556 ok my $db1 = new BerkeleyDB::Recno -Filename => $Dfile,
557 -Filename => $Dfile,
558558 -Encrypt => {Password => "beta",
559559 Flags => DB_ENCRYPT_AES
560560 },
561561 -Property => DB_ENCRYPT ;
562562
563563
564 $v = '';
564 $v = '';
565565 ok ! $db1->db_get(3, $v) ;
566566 ok $v eq $data{3};
567567 # check there are three records
576576 my $lex = new LexFile $Dfile ;
577577 my %hash ;
578578 my ($k, $v) ;
579 ok my $db = new BerkeleyDB::Hash
580 -Filename => $Dfile,
581 -Flags => DB_CREATE,
579 ok my $db = new BerkeleyDB::Hash
580 -Filename => $Dfile,
581 -Flags => DB_CREATE,
582582 -Encrypt => {Password => "beta",
583583 Flags => DB_ENCRYPT_AES
584584 },
603603 undef $db;
604604
605605 # attempt to open a database without specifying encryption
606 ok ! new BerkeleyDB::Unknown -Filename => $Dfile,
606 ok ! new BerkeleyDB::Unknown -Filename => $Dfile,
607607 -Flags => DB_CREATE ;
608608
609609
610 # try opening with the wrong password
611 ok ! new BerkeleyDB::Unknown -Filename => $Dfile,
612 -Filename => $Dfile,
610 # try opening with the wrong password
611 ok ! new BerkeleyDB::Unknown -Filename => $Dfile,
612 -Filename => $Dfile,
613613 -Encrypt => {Password => "def",
614614 Flags => DB_ENCRYPT_AES
615615 },
616616 -Property => DB_ENCRYPT ;
617617
618618
619 # read the encrypted data
620 ok my $db1 = new BerkeleyDB::Unknown -Filename => $Dfile,
621 -Filename => $Dfile,
619 # read the encrypted data
620 ok my $db1 = new BerkeleyDB::Unknown -Filename => $Dfile,
621 -Filename => $Dfile,
622622 -Encrypt => {Password => "beta",
623623 Flags => DB_ENCRYPT_AES
624624 },
625625 -Property => DB_ENCRYPT ;
626626
627627
628 $v = '';
628 $v = '';
629629 ok ! $db1->db_get("red", $v) ;
630630 ok $v eq $data{"red"};
631631 # check there are three records
632632 ok countRecords($db1) == 3 ;
633633 undef $db1;
634634 }
635
88 $ENV{LC_ALL} = 'de_DE@euro';
99 }
1010
11 use BerkeleyDB;
11 use BerkeleyDB;
1212 use util ;
1313
1414 use Test::More ;
129129 my $ErrMsg = join "|", map { "$prefix$_" }
130130 'illegal flag specified to (db_open|DB->open)',
131131 '(BDB\d+ )?DB_AUTO_COMMIT may not be specified in non-transactional environment';
132
132
133133 return 1 if $BerkeleyDB::Error =~ /^$ErrMsg/ ;
134134 warn "# $BerkeleyDB::Error\n" ;
135135 return 0;
141141 my $home = "./fred" ;
142142 ok my $lexD = new LexDir($home), "lexdir" ;
143143 my $lex = new LexFile $errfile ;
144 ok my $env = new BerkeleyDB::Env( -ErrFile => $errfile,
144 ok my $env = new BerkeleyDB::Env( -ErrFile => $errfile,
145145 -Flags => DB_CREATE,
146146 -Home => $home) ;
147147 my $db = new BerkeleyDB::Hash -Filename => $Dfile,
151151
152152 my $ErrMsg = join "'", 'illegal flag specified to (db_open|DB->open)',
153153 'DB_AUTO_COMMIT may not be specified in non-transactional environment';
154
154
155155 ok chkMsg();
156156 ok -e $errfile ;
157157 my $contents = docat($errfile) ;
169169 ok my $lexD = new LexDir($home) ;
170170 my $lex = new LexFile $errfile ;
171171 my $fh = new IO::File ">$errfile" ;
172 ok my $env = new BerkeleyDB::Env( -ErrFile => $fh,
172 ok my $env = new BerkeleyDB::Env( -ErrFile => $fh,
173173 -Flags => DB_CREATE,
174174 -Home => $home) ;
175175 my $db = new BerkeleyDB::Hash -Filename => $Dfile,
260260 # The test below is not portable -- the error message returned by
261261 # $BerkeleyDB::Error is locale dependant.
262262
263 #ok $version_major == 2 ? 1
263 #ok $version_major == 2 ? 1
264264 # : $BerkeleyDB::Error =~ /No such file or directory/ ;
265265 # or print "# BerkeleyDB::Error is $BerkeleyDB::Error\n";
266266 chdir ".." ;
00 #!./perl -w
11
2 use strict ;
2 use strict ;
33
44 BEGIN {
55 unless(grep /blib/, @INC) {
99 }
1010
1111 use lib 't';
12 use BerkeleyDB;
12 use BerkeleyDB;
1313 use Test::More;
1414 use util;
1515
3434 use strict ;
3535 use BerkeleyDB ;
3636 use vars qw( %h $k $v ) ;
37
37
3838 my $filename = "fruit" ;
3939 unlink $filename ;
40 tie %h, "BerkeleyDB::Hash",
41 -Filename => $filename,
40 tie %h, "BerkeleyDB::Hash",
41 -Filename => $filename,
4242 -Flags => DB_CREATE
4343 or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
4444
4747 $h{"orange"} = "orange" ;
4848 $h{"banana"} = "yellow" ;
4949 $h{"tomato"} = "red" ;
50
50
5151 # Check for existence of a key
5252 print "Banana Exists\n\n" if $h{"banana"} ;
53
53
5454 # Delete a key/value pair.
5555 delete $h{"apple"} ;
56
56
5757 # print the contents of the file
5858 while (($k, $v) = each %h)
5959 { print "$k -> $v\n" }
60
60
6161 untie %h ;
6262 unlink $filename ;
6363 }
8282
8383 use strict ;
8484 use BerkeleyDB ;
85
85
8686 my $filename = "fruit" ;
8787 unlink $filename ;
88 my $db = new BerkeleyDB::Hash
89 -Filename => $filename,
88 my $db = new BerkeleyDB::Hash
89 -Filename => $filename,
9090 -Flags => DB_CREATE
9191 or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
9292
9595 $db->db_put("orange", "orange") ;
9696 $db->db_put("banana", "yellow") ;
9797 $db->db_put("tomato", "red") ;
98
98
9999 # Check for existence of a key
100100 print "Banana Exists\n\n" if $db->db_get("banana", $v) == 0;
101
101
102102 # Delete a key/value pair.
103103 $db->db_del("apple") ;
104
104
105105 # print the contents of the file
106106 my ($k, $v) = ("", "") ;
107107 my $cursor = $db->db_cursor() ;
108108 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
109109 { print "$k -> $v\n" }
110
110
111111 undef $cursor ;
112112 undef $db ;
113113 unlink $filename ;
136136 my $filename = "tree" ;
137137 unlink $filename ;
138138 my %h ;
139 tie %h, 'BerkeleyDB::Btree',
140 -Filename => $filename,
139 tie %h, 'BerkeleyDB::Btree',
140 -Filename => $filename,
141141 -Flags => DB_CREATE
142142 or die "Cannot open $filename: $! $BerkeleyDB::Error\n" ;
143143
181181 my $filename = "tree" ;
182182 unlink $filename ;
183183 my %h ;
184 tie %h, 'BerkeleyDB::Btree',
185 -Filename => $filename,
184 tie %h, 'BerkeleyDB::Btree',
185 -Filename => $filename,
186186 -Flags => DB_CREATE,
187187 -Compare => sub { lc $_[0] cmp lc $_[1] }
188188 or die "Cannot open $filename: $!\n" ;
228228 my $filename = "filt.db" ;
229229 unlink $filename ;
230230
231 my $db = tie %hash, 'BerkeleyDB::Hash',
232 -Filename => $filename,
231 my $db = tie %hash, 'BerkeleyDB::Hash',
232 -Filename => $filename,
233233 -Flags => DB_CREATE
234234 or die "Cannot open $filename: $!\n" ;
235235
244244 # ...
245245 undef $db ;
246246 untie %hash ;
247 $db = tie %hash, 'BerkeleyDB::Hash',
248 -Filename => $filename,
247 $db = tie %hash, 'BerkeleyDB::Hash',
248 -Filename => $filename,
249249 -Flags => DB_CREATE
250250 or die "Cannot open $filename: $!\n" ;
251251 while (($k, $v) = each %hash)
276276 unlink $filename ;
277277
278278
279 my $db = tie %hash, 'BerkeleyDB::Btree',
280 -Filename => $filename,
279 my $db = tie %hash, 'BerkeleyDB::Btree',
280 -Filename => $filename,
281281 -Flags => DB_CREATE
282282 or die "Cannot open $filename: $!\n" ;
283283
287287 # ...
288288 undef $db ;
289289 untie %hash ;
290 $db = tie %hash, 'BerkeleyDB::Btree',
291 -Filename => $filename,
290 $db = tie %hash, 'BerkeleyDB::Btree',
291 -Filename => $filename,
292292 -Flags => DB_CREATE
293293 or die "Cannot Open $filename: $!\n" ;
294294 while (($k, $v) = each %hash)
321321 unlink $filename ;
322322
323323 my @h ;
324 tie @h, 'BerkeleyDB::Recno',
325 -Filename => $filename,
324 tie @h, 'BerkeleyDB::Recno',
325 -Filename => $filename,
326326 -Flags => DB_CREATE,
327327 -Property => DB_RENUMBER
328328 or die "Cannot open $filename: $!\n" ;
357357 unlink $filename ;
358358
359359 my @h ;
360 my $db = tie @h, 'BerkeleyDB::Recno',
361 -Filename => $filename,
360 my $db = tie @h, 'BerkeleyDB::Recno',
361 -Filename => $filename,
362362 -Flags => DB_CREATE,
363363 -Property => DB_RENUMBER
364364 or die "Cannot open $filename: $!\n" ;
399399 EOM
400400
401401 }
402
00 #!./perl -w
11
2 use strict ;
2 use strict ;
33
44 BEGIN {
55 unless(grep /blib/, @INC) {
99 }
1010
1111 use lib 't';
12 use BerkeleyDB;
12 use BerkeleyDB;
1313 use Test::More;
1414 use util;
1515
3535 use strict ;
3636 use BerkeleyDB ;
3737 use vars qw( %h $k $v ) ;
38
38
3939 my $filename = "fruit" ;
4040 unlink $filename ;
41 tie %h, "BerkeleyDB::Hash",
42 -Filename => $filename,
41 tie %h, "BerkeleyDB::Hash",
42 -Filename => $filename,
4343 -Flags => DB_CREATE
4444 or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
4545
4848 $h{"orange"} = "orange" ;
4949 $h{"banana"} = "yellow" ;
5050 $h{"tomato"} = "red" ;
51
51
5252 # Check for existence of a key
5353 print "Banana Exists\n\n" if $h{"banana"} ;
54
54
5555 # Delete a key/value pair.
5656 delete $h{"apple"} ;
57
57
5858 # print the contents of the file
5959 while (($k, $v) = each %h)
6060 { print "$k -> $v\n" }
61
61
6262 untie %h ;
6363 ## END simpleHash
6464 unlink $filename ;
8585 ## BEGIN simpleHash2
8686 use strict ;
8787 use BerkeleyDB ;
88
88
8989 my $filename = "fruit" ;
9090 unlink $filename ;
91 my $db = new BerkeleyDB::Hash
92 -Filename => $filename,
91 my $db = new BerkeleyDB::Hash
92 -Filename => $filename,
9393 -Flags => DB_CREATE
9494 or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
9595
9898 $db->db_put("orange", "orange") ;
9999 $db->db_put("banana", "yellow") ;
100100 $db->db_put("tomato", "red") ;
101
101
102102 # Check for existence of a key
103103 print "Banana Exists\n\n" if $db->db_get("banana", $v) == 0;
104
104
105105 # Delete a key/value pair.
106106 $db->db_del("apple") ;
107
107
108108 # print the contents of the file
109109 my ($k, $v) = ("", "") ;
110110 my $cursor = $db->db_cursor() ;
111111 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
112112 { print "$k -> $v\n" }
113
113
114114 undef $cursor ;
115115 undef $db ;
116116 ## END simpleHash2
141141 my $filename = "tree" ;
142142 unlink $filename ;
143143 my %h ;
144 tie %h, 'BerkeleyDB::Btree',
145 -Filename => $filename,
144 tie %h, 'BerkeleyDB::Btree',
145 -Filename => $filename,
146146 -Flags => DB_CREATE
147147 or die "Cannot open $filename: $! $BerkeleyDB::Error\n" ;
148148
188188 my $filename = "tree" ;
189189 unlink $filename ;
190190 my %h ;
191 tie %h, 'BerkeleyDB::Btree',
192 -Filename => $filename,
191 tie %h, 'BerkeleyDB::Btree',
192 -Filename => $filename,
193193 -Flags => DB_CREATE,
194194 -Compare => sub { lc $_[0] cmp lc $_[1] }
195195 or die "Cannot open $filename: $!\n" ;
237237 my $filename = "filt.db" ;
238238 unlink $filename ;
239239
240 my $db = tie %hash, 'BerkeleyDB::Hash',
241 -Filename => $filename,
240 my $db = tie %hash, 'BerkeleyDB::Hash',
241 -Filename => $filename,
242242 -Flags => DB_CREATE
243243 or die "Cannot open $filename: $!\n" ;
244244
254254 undef $db ;
255255 untie %hash ;
256256 ## END nullFilter
257 $db = tie %hash, 'BerkeleyDB::Hash',
258 -Filename => $filename,
257 $db = tie %hash, 'BerkeleyDB::Hash',
258 -Filename => $filename,
259259 -Flags => DB_CREATE
260260 or die "Cannot open $filename: $!\n" ;
261261 while (($k, $v) = each %hash)
287287 unlink $filename ;
288288
289289
290 my $db = tie %hash, 'BerkeleyDB::Btree',
291 -Filename => $filename,
290 my $db = tie %hash, 'BerkeleyDB::Btree',
291 -Filename => $filename,
292292 -Flags => DB_CREATE
293293 or die "Cannot open $filename: $!\n" ;
294294
299299 undef $db ;
300300 untie %hash ;
301301 ## END intFilter
302 $db = tie %hash, 'BerkeleyDB::Btree',
303 -Filename => $filename,
302 $db = tie %hash, 'BerkeleyDB::Btree',
303 -Filename => $filename,
304304 -Flags => DB_CREATE
305305 or die "Cannot Open $filename: $!\n" ;
306306 while (($k, $v) = each %hash)
334334 unlink $filename ;
335335
336336 my @h ;
337 tie @h, 'BerkeleyDB::Recno',
338 -Filename => $filename,
337 tie @h, 'BerkeleyDB::Recno',
338 -Filename => $filename,
339339 -Flags => DB_CREATE,
340340 -Property => DB_RENUMBER
341341 or die "Cannot open $filename: $!\n" ;
371371 unlink $filename ;
372372
373373 my @h ;
374 my $db = tie @h, 'BerkeleyDB::Recno',
375 -Filename => $filename,
374 my $db = tie @h, 'BerkeleyDB::Recno',
375 -Filename => $filename,
376376 -Flags => DB_CREATE,
377377 -Property => DB_RENUMBER
378378 or die "Cannot open $filename: $!\n" ;
413413 EOM
414414
415415 }
416
00 #!./perl -w
11
2 use strict ;
2 use strict ;
33
44 BEGIN {
55 unless(grep /blib/, @INC) {
99 }
1010
1111 use lib 't';
12 use BerkeleyDB;
12 use BerkeleyDB;
1313 use Test::More;
1414 use util ;
1515
16 #BEGIN
16 #BEGIN
1717 #{
1818 # if ($BerkeleyDB::db_version < 3) {
1919 # print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
4747
4848 use strict ;
4949 use BerkeleyDB ;
50
50
5151 my $filename = "fruit" ;
5252 unlink $filename ;
53 my $db = new BerkeleyDB::Hash
54 -Filename => $filename,
53 my $db = new BerkeleyDB::Hash
54 -Filename => $filename,
5555 -Flags => DB_CREATE,
5656 -Property => DB_DUP
5757 or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
6363 $db->db_put("yellow", "banana") ;
6464 $db->db_put("red", "tomato") ;
6565 $db->db_put("green", "apple") ;
66
66
6767 # print the contents of the file
6868 my ($k, $v) = ("", "") ;
6969 my $cursor = $db->db_cursor() ;
7070 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
7171 { print "$k -> $v\n" }
72
72
7373 undef $cursor ;
7474 undef $db ;
7575 unlink $filename ;
9595
9696 use strict ;
9797 use BerkeleyDB ;
98
98
9999 my $filename = "fruit" ;
100100 unlink $filename ;
101 my $db = new BerkeleyDB::Hash
102 -Filename => $filename,
101 my $db = new BerkeleyDB::Hash
102 -Filename => $filename,
103103 -Flags => DB_CREATE,
104104 -Property => DB_DUP | DB_DUPSORT
105105 or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
111111 $db->db_put("yellow", "banana") ;
112112 $db->db_put("red", "tomato") ;
113113 $db->db_put("green", "apple") ;
114
114
115115 # print the contents of the file
116116 my ($k, $v) = ("", "") ;
117117 my $cursor = $db->db_cursor() ;
118118 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
119119 { print "$k -> $v\n" }
120
120
121121 undef $cursor ;
122122 undef $db ;
123123 unlink $filename ;
134134 EOM
135135
136136 }
137
138
00 #!./perl -w
11
2 use strict ;
2 use strict ;
33
44 BEGIN {
55 unless(grep /blib/, @INC) {
99 }
1010
1111 use lib 't';
12 use BerkeleyDB;
12 use BerkeleyDB;
1313 use Test::More;
1414 use util ;
1515
16 #BEGIN
16 #BEGIN
1717 #{
1818 # if ($BerkeleyDB::db_version < 3) {
1919 # print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
4848 ## BEGIN dupHash
4949 use strict ;
5050 use BerkeleyDB ;
51
51
5252 my $filename = "fruit" ;
5353 unlink $filename ;
54 my $db = new BerkeleyDB::Hash
55 -Filename => $filename,
54 my $db = new BerkeleyDB::Hash
55 -Filename => $filename,
5656 -Flags => DB_CREATE,
5757 -Property => DB_DUP
5858 or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
6464 $db->db_put("yellow", "banana") ;
6565 $db->db_put("red", "tomato") ;
6666 $db->db_put("green", "apple") ;
67
67
6868 # print the contents of the file
6969 my ($k, $v) = ("", "") ;
7070 my $cursor = $db->db_cursor() ;
7171 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
7272 { print "$k -> $v\n" }
73
73
7474 undef $cursor ;
7575 undef $db ;
7676 ## END dupHash
9898 ## BEGIN dupSortHash
9999 use strict ;
100100 use BerkeleyDB ;
101
101
102102 my $filename = "fruit" ;
103103 unlink $filename ;
104 my $db = new BerkeleyDB::Hash
105 -Filename => $filename,
104 my $db = new BerkeleyDB::Hash
105 -Filename => $filename,
106106 -Flags => DB_CREATE,
107107 -Property => DB_DUP | DB_DUPSORT
108108 or die "Cannot open file $filename: $! $BerkeleyDB::Error\n" ;
114114 $db->db_put("yellow", "banana") ;
115115 $db->db_put("red", "tomato") ;
116116 $db->db_put("green", "apple") ;
117
117
118118 # print the contents of the file
119119 my ($k, $v) = ("", "") ;
120120 my $cursor = $db->db_cursor() ;
121121 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
122122 { print "$k -> $v\n" }
123
123
124124 undef $cursor ;
125125 undef $db ;
126126 ## END dupSortHash
138138 EOM
139139
140140 }
141
142
00 #!./perl -w
11
2 # ID: %I%, %G%
2 # ID: %I%, %G%
33
44 use strict ;
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99 use Test::More;
1010
2727 {
2828 my($fk, $sk, $fv, $sv) = @_ ;
2929 return
30 $fetch_key eq $fk && $store_key eq $sk &&
30 $fetch_key eq $fk && $store_key eq $sk &&
3131 $fetch_value eq $fv && $store_value eq $sv &&
3232 $_ eq 'original' ;
3333 }
34
35 ok $db = tie %h, 'BerkeleyDB::Hash',
36 -Filename => $Dfile,
37 -Flags => DB_CREATE;
34
35 ok $db = tie %h, 'BerkeleyDB::Hash',
36 -Filename => $Dfile,
37 -Flags => DB_CREATE;
3838
3939 $db->filter_fetch_key (sub { $fetch_key = $_ }) ;
4040 $db->filter_store_key (sub { $store_key = $_ }) ;
5858 ok checkOutput( "fred", "", "", "") ;
5959
6060 # replace the filters, but remember the previous set
61 my ($old_fk) = $db->filter_fetch_key
61 my ($old_fk) = $db->filter_fetch_key
6262 (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
63 my ($old_sk) = $db->filter_store_key
63 my ($old_sk) = $db->filter_store_key
6464 (sub { $_ = lc $_ ; $store_key = $_ }) ;
65 my ($old_fv) = $db->filter_fetch_value
65 my ($old_fv) = $db->filter_fetch_value
6666 (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
67 my ($old_sv) = $db->filter_store_value
67 my ($old_sv) = $db->filter_store_value
6868 (sub { s/o/x/g; $store_value = $_ }) ;
69
69
7070 ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
7171 $h{"Fred"} = "Joe" ;
7272 # fk sk fv sv
124124 unlink $Dfile;
125125 }
126126
127 {
127 {
128128 # DBM Filter with a closure
129129
130130 use strict ;
131131 my (%h, $db) ;
132132
133133 unlink $Dfile;
134 ok $db = tie %h, 'BerkeleyDB::Hash',
135 -Filename => $Dfile,
136 -Flags => DB_CREATE;
134 ok $db = tie %h, 'BerkeleyDB::Hash',
135 -Filename => $Dfile,
136 -Flags => DB_CREATE;
137137
138138 my %result = () ;
139139
143143 my $count = 0 ;
144144 my @kept = () ;
145145
146 return sub { ++$count ;
147 push @kept, $_ ;
146 return sub { ++$count ;
147 push @kept, $_ ;
148148 $result{$name} = "$name - $count: [@kept]" ;
149149 }
150150 }
187187 undef $db ;
188188 untie %h;
189189 unlink $Dfile;
190 }
190 }
191191
192192 {
193193 # DBM Filter recursion detection
195195 my (%h, $db) ;
196196 unlink $Dfile;
197197
198 ok $db = tie %h, 'BerkeleyDB::Hash',
199 -Filename => $Dfile,
200 -Flags => DB_CREATE;
198 ok $db = tie %h, 'BerkeleyDB::Hash',
199 -Filename => $Dfile,
200 -Flags => DB_CREATE;
201201
202202 $db->filter_store_key (sub { $_ = $h{$_} }) ;
203203
204204 eval '$h{1} = 1234' ;
205205 ok $@ =~ /^recursion detected in filter_store_key at/ ;
206
206
207207 undef $db ;
208208 untie %h;
209209 unlink $Dfile;
217217 my (%h, $db) ;
218218 unlink $Dfile;
219219
220 ok $db = tie %h, 'BerkeleyDB::Hash',
221 -Filename => $Dfile,
222 -Flags => DB_CREATE;
220 ok $db = tie %h, 'BerkeleyDB::Hash',
221 -Filename => $Dfile,
222 -Flags => DB_CREATE;
223223
224224 $db->filter_fetch_key (sub { }) ;
225225 $db->filter_store_key (sub { }) ;
246246 ok($h{"fred"} eq "joe");
247247
248248 ok($db->FIRSTKEY() eq "fred") ;
249
249
250250 eval { grep { $h{$_} } (1, 2, 3) };
251251 ok (! $@);
252252
262262 my (%h, $db) ;
263263
264264 unlink $Dfile;
265 ok $db = tie %h, 'BerkeleyDB::Hash',
266 -Filename => $Dfile,
267 -Flags => DB_CREATE;
265 ok $db = tie %h, 'BerkeleyDB::Hash',
266 -Filename => $Dfile,
267 -Flags => DB_CREATE;
268268
269269 my %result = () ;
270270
322322 untie %h;
323323 unlink $Dfile;
324324 }
325
00 #!./perl -w
11
2 # ID: %I%, %G%
2 # ID: %I%, %G%
33
44 use strict ;
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99 use Test::More;
1010
4444 {
4545 my $lex = new LexFile $Dfile ;
4646
47 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
47 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
4848 -Flags => DB_CREATE ;
4949
5050 # Add a k/v pair
100100
101101 ok my $env = new BerkeleyDB::Env -Flags => DB_CREATE| DB_INIT_MPOOL,@StdErrFile,
102102 -Home => $home ;
103 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
103 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
104104 -Env => $env,
105105 -Flags => DB_CREATE ;
106106
107107 isa_ok $db->Env, 'BerkeleyDB::Env';
108
108
109109 # Add a k/v pair
110110 my $value ;
111111 ok $db->db_put("some key", "some value") == 0 ;
121121 my $lex = new LexFile $Dfile ;
122122 my $value ;
123123 $::count = 0 ;
124 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
124 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
125125 -Hash => sub { ++$::count ; length $_[0] },
126126 -Flags => DB_CREATE ;
127127
131131 ok $::count > 0 ;
132132
133133 }
134
134
135135 {
136136 # cursors
137137
138138 my $lex = new LexFile $Dfile ;
139139 my %hash ;
140140 my ($k, $v) ;
141 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
141 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
142142 -Flags => DB_CREATE ;
143143
144144 # create some data
162162 my $extras = 0 ;
163163 # sequence forwards
164164 while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
165 if ( $copy{$k} eq $v )
165 if ( $copy{$k} eq $v )
166166 { delete $copy{$k} }
167167 else
168168 { ++ $extras }
179179 for ( $status = $cursor->c_get($k, $v, DB_LAST) ;
180180 $status == 0 ;
181181 $status = $cursor->c_get($k, $v, DB_PREV)) {
182 if ( $copy{$k} eq $v )
182 if ( $copy{$k} eq $v )
183183 { delete $copy{$k} }
184184 else
185185 { ++ $extras }
199199
200200 ($k, $v) = ("black", "house") ;
201201 ok $cursor->c_get($k, $v, DB_GET_BOTH) == DB_NOTFOUND ;
202
203 }
204
202
203 }
204
205205 {
206206 # Tied Hash interface
207207
277277 undef $db ;
278278 untie %hash ;
279279 }
280
280
281281 {
282282 # partial
283283 # check works via API
362362
363363 {
364364 # partial
365 # check works via tied hash
365 # check works via tied hash
366366
367367 my $lex = new LexFile $Dfile ;
368368 my %hash ;
529529 ok $cursor->c_get($key, $value, DB_NEXT) == 0 ;
530530 ok $key eq "Wall" && $value eq "Brick" ;
531531
532 #my $ref = $db->db_stat() ;
532 #my $ref = $db->db_stat() ;
533533 #ok $ref->{bt_flags} | DB_DUP ;
534534
535535 # test DB_DUP_NEXT
543543 ok $cursor->c_get($k, $v, DB_NEXT_DUP) == 0 ;
544544 ok $k eq "Wall" && $v eq "Brick" ;
545545 ok $cursor->c_get($k, $v, DB_NEXT_DUP) == DB_NOTFOUND ;
546
546
547547
548548 undef $db ;
549549 undef $cursor ;
556556 my $lex = new LexFile $Dfile, $Dfile2;
557557 my ($key, $value) ;
558558 my (%h, %g) ;
559 my @Keys = qw( 0123 9 12 -1234 9 987654321 9 def ) ;
560 my @Values = qw( 1 11 3 dd x abc 2 0 ) ;
561
562 ok tie %h, "BerkeleyDB::Hash", -Filename => $Dfile,
559 my @Keys = qw( 0123 9 12 -1234 9 987654321 9 def ) ;
560 my @Values = qw( 1 11 3 dd x abc 2 0 ) ;
561
562 ok tie %h, "BerkeleyDB::Hash", -Filename => $Dfile,
563563 -DupCompare => sub { $_[0] cmp $_[1] },
564564 -Property => DB_DUP|DB_DUPSORT,
565565 -Flags => DB_CREATE ;
566566
567 ok tie %g, 'BerkeleyDB::Hash', -Filename => $Dfile2,
567 ok tie %g, 'BerkeleyDB::Hash', -Filename => $Dfile2,
568568 -DupCompare => sub { $_[0] <=> $_[1] },
569569 -Property => DB_DUP|DB_DUPSORT,
570570 -Flags => DB_CREATE ;
572572 foreach (@Keys) {
573573 local $^W = 0 ;
574574 my $value = shift @Values ;
575 $h{$_} = $value ;
575 $h{$_} = $value ;
576576 $g{$_} = $value ;
577577 }
578578
602602 my $lex = new LexFile $Dfile;
603603 my %hh ;
604604
605 ok my $YY = tie %hh, "BerkeleyDB::Hash", -Filename => $Dfile,
605 ok my $YY = tie %hh, "BerkeleyDB::Hash", -Filename => $Dfile,
606606 -DupCompare => sub { $_[0] cmp $_[1] },
607607 -Property => DB_DUP,
608608 -Flags => DB_CREATE ;
612612 $hh{'Wall'} = 'Brick' ; # Note the duplicate key
613613 $hh{'Smith'} = 'John' ;
614614 $hh{'mouse'} = 'mickey' ;
615
615
616616 # first work in scalar context
617617 ok scalar $YY->get_dup('Unknown') == 0 ;
618618 ok scalar $YY->get_dup('Smith') == 1 ;
619619 ok scalar $YY->get_dup('Wall') == 3 ;
620
620
621621 # now in list context
622622 my @unknown = $YY->get_dup('Unknown') ;
623623 ok "@unknown" eq "" ;
624
624
625625 my @smith = $YY->get_dup('Smith') ;
626626 ok "@smith" eq "John" ;
627
627
628628 {
629629 my @wall = $YY->get_dup('Wall') ;
630630 my %wall ;
631631 @wall{@wall} = @wall ;
632 ok (@wall == 3 && $wall{'Larry'}
632 ok (@wall == 3 && $wall{'Larry'}
633633 && $wall{'Stone'} && $wall{'Brick'});
634634 }
635
635
636636 # hash
637637 my %unknown = $YY->get_dup('Unknown', 1) ;
638638 ok keys %unknown == 0 ;
639
639
640640 my %smith = $YY->get_dup('Smith', 1) ;
641641 ok keys %smith == 1 && $smith{'John'} ;
642
642
643643 my %wall = $YY->get_dup('Wall', 1) ;
644 ok keys %wall == 3 && $wall{'Larry'} == 1 && $wall{'Stone'} == 1
644 ok keys %wall == 3 && $wall{'Larry'} == 1 && $wall{'Stone'} == 1
645645 && $wall{'Brick'} == 1 ;
646
646
647647 undef $YY ;
648648 untie %hh ;
649649
669669 @ISA=qw(BerkeleyDB BerkeleyDB::Hash);
670670 @EXPORT = @BerkeleyDB::EXPORT ;
671671
672 sub db_put {
672 sub db_put {
673673 my $self = shift ;
674674 my $key = shift ;
675675 my $value = shift ;
676676 $self->SUPER::db_put($key, $value * 3) ;
677677 }
678678
679 sub db_get {
679 sub db_get {
680680 my $self = shift ;
681681 $self->SUPER::db_get($_[0], $_[1]) ;
682682 $_[1] -= 2 ;
696696 close FILE ;
697697
698698 use Test::More;
699 BEGIN { push @INC, '.'; }
699 BEGIN { push @INC, '.'; }
700700 eval 'use SubDB ; ';
701701 ok $@ eq "" ;
702702 my %h ;
703703 my $X ;
704704 eval '
705 $X = tie(%h, "SubDB", -Filename => "dbhash.tmp",
705 $X = tie(%h, "SubDB", -Filename => "dbhash.tmp",
706706 -Flags => DB_CREATE,
707707 -Mode => 0640 );
708708 ' ;
22 use strict ;
33
44 use lib 't';
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use util ;
77 use Test::More;
88
3131 ok $@ =~ /unknown key value\(s\) Stupid/ ;
3232
3333 eval ' $db = new BerkeleyDB::Heap -Bad => 2, -Mode => 0345, -Stupid => 3; ' ;
34 ok $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/
34 ok $@ =~ /unknown key value\(s\) (Bad,? |Stupid,? ){2}/
3535 or print "# $@" ;
3636
3737 eval ' $db = new BerkeleyDB::Heap -Env => 2 ' ;
6060 {
6161 my $lex = new LexFile $Dfile ;
6262
63 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
64 -Flags => DB_CREATE
63 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
64 -Flags => DB_CREATE
6565 or diag "Cannot create Heap: [$!][$BerkeleyDB::Error]\n" ;
6666
6767 # Add a k/v pair
7070 my $key1;
7171 my $key2;
7272 is $db->Env, undef;
73 ok $db->db_put($key1, "some value", DB_APPEND) == 0
73 ok $db->db_put($key1, "some value", DB_APPEND) == 0
7474 or diag "Cannot db_put: " . $db->status() . "[$!][$BerkeleyDB::Error]\n" ;
7575 ok $db->status() == 0 ;
76 ok $db->db_get($key1, $value) == 0
76 ok $db->db_get($key1, $value) == 0
7777 or diag "Cannot db_get: [$!][$BerkeleyDB::Error]\n" ;
7878 ok $value eq "some value" ;
7979 ok $db->db_put($key2, "value", DB_APPEND) == 0 ;
80 ok $db->db_get($key2, $value) == 0
80 ok $db->db_get($key2, $value) == 0
8181 or diag "Cannot db_get: [$!][$BerkeleyDB::Error]\n" ;
8282 ok $value eq "value" ;
8383 ok $db->db_del($key1) == 0 ;
8484 ok $db->db_get($key1, $value) == DB_NOTFOUND ;
8585 ok $db->status() == DB_NOTFOUND ;
86 ok $db->status() =~ $DB_errors{'DB_NOTFOUND'}
86 ok $db->status() =~ $DB_errors{'DB_NOTFOUND'}
8787 or diag "Status is [" . $db->status() . "]";
8888
8989 ok $db->db_sync() == 0 ;
124124
125125 ok my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,
126126 @StdErrFile, -Home => $home ;
127 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
127 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
128128 -Env => $env,
129129 -Flags => DB_CREATE ;
130130
141141 undef $env ;
142142 }
143143
144
144
145145 {
146146 # cursors
147147
148148 my $lex = new LexFile $Dfile ;
149149 my %hash ;
150150 my ($k, $v) ;
151 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
151 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
152152 -Flags => DB_CREATE ;
153 #print "[$db] [$!] $BerkeleyDB::Error\n" ;
153 #print "[$db] [$!] $BerkeleyDB::Error\n" ;
154154
155155 # create some data
156156 my %data = ();
174174 my $extras = 0 ;
175175 # sequence forwards
176176 while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
177 if ( $copy{$k} eq $v )
177 if ( $copy{$k} eq $v )
178178 { delete $copy{$k} }
179179 else
180180 { ++ $extras }
191191 for ( $status = $cursor->c_get($k, $v, DB_LAST) ;
192192 $status == 0 ;
193193 $status = $cursor->c_get($k, $v, DB_PREV)) {
194 if ( $copy{$k} eq $v )
194 if ( $copy{$k} eq $v )
195195 { delete $copy{$k} }
196196 else
197197 { ++ $extras }
213213 ok $cursor->c_get($k, $v, DB_GET_BOTH) == DB_NOTFOUND, "DB_NOTFOUND" ;
214214
215215 }
216
216
217217
218218
219219
225225 my $fd ;
226226 my $value ;
227227 #ok my $db = tie %hash, 'BerkeleyDB::Heap' ;
228 my $db = new BerkeleyDB::Heap
228 my $db = new BerkeleyDB::Heap
229229 -Flags => DB_CREATE ;
230230
231231 isa_ok $db, 'BerkeleyDB::Heap' ;
235235 ok $value eq "some value", "some value" ;
236236
237237 }
238
238
239239 if (0)
240240 {
241241 # partial
352352 ok ((my $Z = $txn->txn_commit()) == 0) ;
353353 ok $txn = $env->txn_begin() ;
354354 $db1->Txn($txn);
355
355
356356 # create some data
357357 my %data = (
358358 "red" => "boat",
432432 ok $cursor->c_get($key, $value, DB_NEXT) == 0 ;
433433 ok $key eq "Wall" && $value eq "Brick" ;
434434
435 #my $ref = $db->db_stat() ;
435 #my $ref = $db->db_stat() ;
436436 #ok ($ref->{bt_flags} | DB_DUP) == DB_DUP ;
437437 #print "bt_flags " . $ref->{bt_flags} . " DB_DUP " . DB_DUP ."\n";
438438
449449 my $recs = ($BerkeleyDB::db_version >= 3.1 ? "bt_ndata" : "bt_nrecs") ;
450450 my %hash ;
451451 my ($k, $v) ;
452 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
452 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
453453 -Flags => DB_CREATE,
454454 -Minkey =>3 ,
455 -Pagesize => 2 **12
455 -Pagesize => 2 **12
456456 ;
457457
458 my $ref = $db->db_stat() ;
458 my $ref = $db->db_stat() ;
459459 ok $ref->{$recs} == 0;
460460 ok $ref->{'bt_minkey'} == 3;
461461 ok $ref->{'bt_pagesize'} == 2 ** 12;
473473 }
474474 ok $ret == 0 ;
475475
476 $ref = $db->db_stat() ;
476 $ref = $db->db_stat() ;
477477 ok $ref->{$recs} == 3;
478478 }
479479
497497 @ISA=qw(BerkeleyDB BerkeleyDB::Heap );
498498 @EXPORT = @BerkeleyDB::EXPORT ;
499499
500 sub db_put {
500 sub db_put {
501501 my $self = shift ;
502502 my $key = shift ;
503503 my $value = shift ;
504504 $self->SUPER::db_put($key, $value * 3) ;
505505 }
506506
507 sub db_get {
507 sub db_get {
508508 my $self = shift ;
509509 $self->SUPER::db_get($_[0], $_[1]) ;
510510 $_[1] -= 2 ;
524524 close FILE ;
525525
526526 use Test::More;
527 BEGIN { push @INC, '.'; }
527 BEGIN { push @INC, '.'; }
528528 eval 'use SubDB ; ';
529529 ok $@ eq "" ;
530530 my %h ;
531531 my $X ;
532532 eval '
533 $X = tie(%h, "SubDB", -Filename => "dbbtree.tmp",
533 $X = tie(%h, "SubDB", -Filename => "dbbtree.tmp",
534534 -Flags => DB_CREATE,
535535 -Mode => 0640 );
536536 ' ;
559559 unlink "SubDB.pm", "dbbtree.tmp" ;
560560
561561 }
562
563
00 #!./perl -w
11
2 # ID: %I%, %G%
2 # ID: %I%, %G%
33
44 use strict ;
55
66 use lib 't';
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99 use Test::More;
1010
1212 plan(skip_all => "this needs BerkeleyDB 2.5.2 or better" )
1313 if $BerkeleyDB::db_ver < 2.005002;
1414
15 plan tests => 42;
15 plan tests => 42;
1616 }
1717
1818 my $Dfile1 = "dbhash1.tmp";
3030 my $status ;
3131 my $cursor ;
3232
33 ok my $db1 = tie %hash1, 'BerkeleyDB::Hash',
33 ok my $db1 = tie %hash1, 'BerkeleyDB::Hash',
3434 -Filename => $Dfile1,
3535 -Flags => DB_CREATE,
3636 -DupCompare => sub { $_[0] lt $_[1] },
7878 |DB_INIT_MPOOL;
7979 #|DB_INIT_MPOOL| DB_INIT_LOCK;
8080 ok my $txn = $env->txn_begin() ;
81 ok my $db1 = tie %hash1, 'BerkeleyDB::Hash',
81 ok my $db1 = tie %hash1, 'BerkeleyDB::Hash',
8282 -Filename => $Dfile1,
8383 -Flags => DB_CREATE,
8484 -DupCompare => sub { $_[0] cmp $_[1] },
8787 -Txn => $txn ;
8888 ;
8989
90 ok my $db2 = tie %hash2, 'BerkeleyDB::Hash',
90 ok my $db2 = tie %hash2, 'BerkeleyDB::Hash',
9191 -Filename => $Dfile2,
9292 -Flags => DB_CREATE,
9393 -DupCompare => sub { $_[0] cmp $_[1] },
9595 -Env => $env,
9696 -Txn => $txn ;
9797
98 ok my $db3 = tie %hash3, 'BerkeleyDB::Btree',
98 ok my $db3 = tie %hash3, 'BerkeleyDB::Btree',
9999 -Filename => $Dfile3,
100100 -Flags => DB_CREATE,
101101 -DupCompare => sub { $_[0] cmp $_[1] },
103103 -Env => $env,
104104 -Txn => $txn ;
105105
106
106
107107 ok addData($db1, qw( apple Convenience
108108 peach Shopway
109109 pear Farmer
144144
145145 # sequence forwards
146146 while ($cursor1->c_get($k, $v) == 0) {
147 delete $expected{$k}
147 delete $expected{$k}
148148 if defined $expected{$k} && $expected{$k} eq $v ;
149149 #print "[$k] [$v]\n" ;
150150 }
169169
170170 # sequence forwards
171171 while ($cursor1->c_get($k, $v) == 0) {
172 delete $expected{$k}
172 delete $expected{$k}
173173 if defined $expected{$k} && $expected{$k} eq $v ;
174174 #print "[$k] [$v]\n" ;
175175 }
182182 $k = "red" ;
183183 $v = "" ;
184184 ok $cursor2->c_get($k, $v, DB_SET) == 0 ;
185
185
186186 ok $cursor3 = $db3->db_cursor() ;
187187 $k = "expensive" ;
188188 $v = "" ;
189189 ok $cursor3->c_get($k, $v, DB_SET) == 0 ;
190190 ok $cursor1 = $db1->db_join([$cursor2, $cursor3]) ;
191
191
192192 %expected = qw( apple 1
193193 strawberry 1
194194 ) ;
195
195
196196 # sequence forwards
197197 $k = "" ;
198198 $v = "" ;
44 use lib 't';
55 use Test::More ;
66
7 BEGIN
7 BEGIN
88 {
99 plan skip_all => "this is Perl $], skipping test\n"
1010 if $] < 5.005 ;
2424 plan skip_all => "MLDBM is not installed on this system.\n";
2525 }
2626
27 plan tests => 12;
27 plan tests => 12;
2828 }
2929
3030 use lib 't' ;
3232
3333 {
3434 package BTREE ;
35
35
3636 use BerkeleyDB ;
37 use MLDBM qw(BerkeleyDB::Btree) ;
37 use MLDBM qw(BerkeleyDB::Btree) ;
3838 use Data::Dumper;
3939 use Test::More;
40
40
4141 my $filename = "";
4242 my $lex = new LexFile $filename;
43
43
4444 $MLDBM::UseDB = "BerkeleyDB::Btree" ;
4545 my %o ;
4646 my $db = tie %o, 'MLDBM', -Filename => $filename,
4848 or die $!;
4949 ok $db ;
5050 ok $db->type() == DB_BTREE ;
51
51
5252 my $c = [\'c'];
5353 my $b = {};
5454 my $a = [1, $b, $c];
5959 $o{d} = "{once upon a time}";
6060 $o{e} = 1024;
6161 $o{f} = 1024.1024;
62
62
6363 my $struct = [@o{qw(a b c)}];
6464 ok ::_compare([$a, $b, $c], $struct);
6565 ok $o{d} eq "{once upon a time}" ;
6666 ok $o{e} == 1024 ;
6767 ok $o{f} eq 1024.1024 ;
68
68
6969 }
7070
7171 {
7373 package HASH ;
7474
7575 use BerkeleyDB ;
76 use MLDBM qw(BerkeleyDB::Hash) ;
76 use MLDBM qw(BerkeleyDB::Hash) ;
7777 use Data::Dumper;
7878
7979 my $filename = "";
00 #!./perl -w
11
2 # ID: %I%, %G%
2 # ID: %I%, %G%
33
44 use strict ;
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use Test::More;
99 use util;
1010
1111 plan(skip_all => "Queue needs Berkeley DB 3.3.x or better\n" )
1212 if $BerkeleyDB::db_version < 3.3;
13
13
1414 plan tests => 260;
1515
1616
5050 my $rec_len = 10 ;
5151 my $pad = "x" ;
5252
53 ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
53 ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
5454 -Flags => DB_CREATE,
5555 -Len => $rec_len,
5656 -Pad => $pad;
108108
109109 ok my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,@StdErrFile,
110110 -Home => $home ;
111 ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
111 ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
112112 -Env => $env,
113113 -Flags => DB_CREATE,
114114 -Len => $rec_len;
115115
116116 isa_ok $db->Env, 'BerkeleyDB::Env';
117
117
118118 # Add a k/v pair
119119 my $value ;
120120 ok $db->db_put(1, "some value") == 0 ;
124124 undef $env ;
125125 }
126126
127
127
128128 {
129129 # cursors
130130
132132 my @array ;
133133 my ($k, $v) ;
134134 my $rec_len = 5 ;
135 ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
135 ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
136136 -ArrayBase => 0,
137137 -Flags => DB_CREATE ,
138138 -Len => $rec_len;
160160 my %copy = %data;
161161 my $extras = 0 ;
162162 # sequence forwards
163 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
163 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
164164 {
165 if ( fillout($copy{$k}, $rec_len) eq $v )
165 if ( fillout($copy{$k}, $rec_len) eq $v )
166166 { delete $copy{$k} }
167167 else
168168 { ++ $extras }
180180 for ( $status = $cursor->c_get($k, $v, DB_LAST) ;
181181 $status == 0 ;
182182 $status = $cursor->c_get($k, $v, DB_PREV)) {
183 if ( fillout($copy{$k}, $rec_len) eq $v )
183 if ( fillout($copy{$k}, $rec_len) eq $v )
184184 { delete $copy{$k} }
185185 else
186186 { ++ $extras }
192192 ok keys %copy == 0 ;
193193 ok $extras == 0 ;
194194 }
195
195
196196 {
197197 # Tied Array interface
198198
246246
247247 # unshift isn't allowed
248248 # eval {
249 # $FA ? unshift @array, "red", "green", "blue"
249 # $FA ? unshift @array, "red", "green", "blue"
250250 # : $db->unshift("red", "green", "blue" ) ;
251251 # } ;
252 # ok $@ =~ /^unshift is unsupported with Queue databases/ ;
252 # ok $@ =~ /^unshift is unsupported with Queue databases/ ;
253253 $array[0] = "red" ;
254254 $array[1] = "green" ;
255255 $array[2] = "blue" ;
278278 ok (($FA ? shift @array : $db->shift()) == 2) ;
279279
280280 # push
281 $FA ? push @array, "the", "end"
281 $FA ? push @array, "the", "end"
282282 : $db->push("the", "end") ;
283283 ok $cursor->c_get($k, $v, DB_LAST) == 0 ;
284284 ok $k == 102 ;
297297
298298 undef $cursor;
299299
300 # now clear the array
301 $FA ? @array = ()
300 # now clear the array
301 $FA ? @array = ()
302302 : $db->clear() ;
303303 ok $cursor = (tied @array)->db_cursor() ;
304304 ok $cursor->c_get($k, $v, DB_FIRST) == DB_NOTFOUND ;
323323 ok $value eq fillout("some value", $rec_len) ;
324324
325325 }
326
326
327327 {
328328 # partial
329329 # check works via API
413413
414414 {
415415 # partial
416 # check works via tied array
416 # check works via tied array
417417
418418 my $lex = new LexFile $Dfile ;
419419 my @array ;
508508 -Flags => DB_CREATE|DB_INIT_TXN|
509509 DB_INIT_MPOOL|DB_INIT_LOCK ;
510510 ok my $txn = $env->txn_begin() ;
511 ok my $db1 = tie @array, 'BerkeleyDB::Queue',
511 ok my $db1 = tie @array, 'BerkeleyDB::Queue',
512512 -Filename => $Dfile,
513513 -ArrayBase => 0,
514514 -Flags => DB_CREATE ,
517517 -Len => $rec_len,
518518 -Pad => " " ;
519519
520
520
521521 ok $txn->txn_commit() == 0 ;
522522 ok $txn = $env->txn_begin() ;
523523 $db1->Txn($txn);
576576 my @array ;
577577 my ($k, $v) ;
578578 my $rec_len = 7 ;
579 ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
579 ok my $db = new BerkeleyDB::Queue -Filename => $Dfile,
580580 -Flags => DB_CREATE,
581581 -Pagesize => 4 * 1024,
582582 -Len => $rec_len,
583 -Pad => " "
583 -Pad => " "
584584 ;
585585
586 my $ref = $db->db_stat() ;
586 my $ref = $db->db_stat() ;
587587 ok $ref->{$recs} == 0;
588588 ok $ref->{'qs_pagesize'} == 4 * 1024;
589589
601601 }
602602 ok $ret == 0 ;
603603
604 $ref = $db->db_stat() ;
604 $ref = $db->db_stat() ;
605605 ok $ref->{$recs} == 3;
606606 }
607607
625625 @ISA=qw(BerkeleyDB BerkeleyDB::Queue);
626626 @EXPORT = @BerkeleyDB::EXPORT ;
627627
628 sub db_put {
628 sub db_put {
629629 my $self = shift ;
630630 my $key = shift ;
631631 my $value = shift ;
632632 $self->SUPER::db_put($key, $value * 3) ;
633633 }
634634
635 sub db_get {
635 sub db_get {
636636 my $self = shift ;
637637 $self->SUPER::db_get($_[0], $_[1]) ;
638638 $_[1] -= 2 ;
652652 close FILE ;
653653
654654 use Test::More;
655 BEGIN { push @INC, '.'; }
655 BEGIN { push @INC, '.'; }
656656 eval 'use SubDB ; ';
657657 ok $@ eq "" ;
658658 my @h ;
659659 my $X ;
660660 my $rec_len = 34 ;
661661 eval '
662 $X = tie(@h, "SubDB", -Filename => "dbqueue.tmp",
662 $X = tie(@h, "SubDB", -Filename => "dbqueue.tmp",
663663 -Flags => DB_CREATE,
664664 -Mode => 0640 ,
665665 -Len => $rec_len,
666 -Pad => " "
667 );
666 -Pad => " "
667 );
668668 ' ;
669669
670670 ok $@ eq "" ;
699699 my @array ;
700700 my $value ;
701701 my $rec_len = 21 ;
702 ok my $db = tie @array, 'BerkeleyDB::Queue',
702 ok my $db = tie @array, 'BerkeleyDB::Queue',
703703 -Filename => $Dfile,
704704 -Flags => DB_CREATE ,
705705 -Len => $rec_len,
724724 my @array ;
725725 my $db ;
726726 my $rec_len = 21 ;
727 ok $db = tie @array, 'BerkeleyDB::Queue',
727 ok $db = tie @array, 'BerkeleyDB::Queue',
728728 -Flags => DB_CREATE ,
729729 -ArrayBase => 0,
730730 -Len => $rec_len,
805805
806806 # unshift isn't allowed
807807 # eval {
808 # $FA ? unshift @array, "red", "green", "blue"
808 # $FA ? unshift @array, "red", "green", "blue"
809809 # : $db->unshift("red", "green", "blue" ) ;
810810 # } ;
811 # ok $@ =~ /^unshift is unsupported with Queue databases/ ;
811 # ok $@ =~ /^unshift is unsupported with Queue databases/ ;
812812 $array[0] = "red" ;
813813 $array[1] = "green" ;
814814 $array[2] = "blue" ;
837837 ok (($FA ? shift @array : $db->shift()) == 2) ;
838838
839839 # push
840 $FA ? push @array, "the", "end"
840 $FA ? push @array, "the", "end"
841841 : $db->push("the", "end") ;
842842 ok $cursor->c_get($k, $v, DB_LAST) == 0 ;
843843 ok $k == 102 ;
855855 ok (( $FA ? pop @array : $db->pop ) == 200 ) ;
856856
857857 undef $cursor ;
858 # now clear the array
859 $FA ? @array = ()
858 # now clear the array
859 $FA ? @array = ()
860860 : $db->clear() ;
861861 ok $cursor = (tied @array)->db_cursor() ;
862862 ok $cursor->c_get($k, $v, DB_FIRST) == DB_NOTFOUND ;
872872 my $lex = new LexFile $Dfile ;
873873 my @array ;
874874 my $db ;
875 $db = tie @array, 'BerkeleyDB::Queue',
875 $db = tie @array, 'BerkeleyDB::Queue',
876876 -Flags => DB_CREATE ,
877877 -Len => 2,
878878 -Filename => $Dfile ;
879 isa_ok $db, 'BerkeleyDB::Queue';
879 isa_ok $db, 'BerkeleyDB::Queue';
880880 $FA ? push @array, "ab", "cd", "ef", "gh"
881881 : $db->push("ab", "cd", "ef", "gh") ;
882882 is scalar(@array), 4;
00 #!./perl -w
11
2 # ID: %I%, %G%
2 # ID: %I%, %G%
33
44 use strict ;
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99 use Test::More;
1010
4343 {
4444 my $lex = new LexFile $Dfile ;
4545
46 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
46 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
4747 -Flags => DB_CREATE ;
4848
4949 is $db->Env, undef;
9696 ok my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,@StdErrFile,
9797 -Home => $home ;
9898
99 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
99 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
100100 -Env => $env,
101101 -Flags => DB_CREATE ;
102102
103103 isa_ok $db->Env, 'BerkeleyDB::Env';
104
104
105105 # Add a k/v pair
106106 my $value ;
107107 ok $db->db_put(1, "some value") == 0 ;
111111 undef $env ;
112112 }
113113
114
114
115115 {
116116 # cursors
117117
118118 my $lex = new LexFile $Dfile ;
119119 my @array ;
120120 my ($k, $v) ;
121 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
121 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
122122 -ArrayBase => 0,
123123 -Flags => DB_CREATE ;
124124
145145 my %copy = %data;
146146 my $extras = 0 ;
147147 # sequence forwards
148 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
148 while ($cursor->c_get($k, $v, DB_NEXT) == 0)
149149 {
150 if ( $copy{$k} eq $v )
150 if ( $copy{$k} eq $v )
151151 { delete $copy{$k} }
152152 else
153153 { ++ $extras }
165165 for ( $status = $cursor->c_get($k, $v, DB_LAST) ;
166166 $status == 0 ;
167167 $status = $cursor->c_get($k, $v, DB_PREV)) {
168 if ( $copy{$k} eq $v )
168 if ( $copy{$k} eq $v )
169169 { delete $copy{$k} }
170170 else
171171 { ++ $extras }
177177 ok keys %copy == 0 ;
178178 ok $extras == 0 ;
179179 }
180
180
181181 {
182182 # Tied Array interface
183183
235235 ok $values == 2022 ;
236236
237237 # unshift
238 $FA ? unshift @array, "red", "green", "blue"
238 $FA ? unshift @array, "red", "green", "blue"
239239 : $db->unshift("red", "green", "blue" ) ;
240240 ok $array[1] eq "red" ;
241241 ok $cursor->c_get($k, $v, DB_FIRST) == 0 ;
261261 ok (($FA ? shift @array : $db->shift()) == 2) ;
262262
263263 # push
264 $FA ? push @array, "the", "end"
264 $FA ? push @array, "the", "end"
265265 : $db->push("the", "end") ;
266266 ok $cursor->c_get($k, $v, DB_LAST) == 0 ;
267267 ok $k == 1001 ;
279279 ok (( $FA ? pop @array : $db->pop ) == 2000) ;
280280
281281 undef $cursor;
282 # now clear the array
283 $FA ? @array = ()
282 # now clear the array
283 $FA ? @array = ()
284284 : $db->clear() ;
285285 ok $cursor = $db->db_cursor() ;
286286 ok $cursor->c_get($k, $v, DB_FIRST) == DB_NOTFOUND ;
303303 ok $value eq "some value" ;
304304
305305 }
306
306
307307 {
308308 # partial
309309 # check works via API
389389
390390 {
391391 # partial
392 # check works via tied array
392 # check works via tied array
393393
394394 my $lex = new LexFile $Dfile ;
395395 my @array ;
469469 -Flags => DB_CREATE|DB_INIT_TXN|
470470 DB_INIT_MPOOL|DB_INIT_LOCK ;
471471 ok my $txn = $env->txn_begin() ;
472 ok my $db1 = tie @array, 'BerkeleyDB::Recno',
472 ok my $db1 = tie @array, 'BerkeleyDB::Recno',
473473 -Filename => $Dfile,
474474 -ArrayBase => 0,
475475 -Flags => DB_CREATE ,
476476 -Env => $env,
477477 -Txn => $txn ;
478478
479
479
480480 ok $txn->txn_commit() == 0 ;
481481 ok $txn = $env->txn_begin() ;
482482 $db1->Txn($txn);
534534 my $recs = ($BerkeleyDB::db_version >= 3.1 ? "bt_ndata" : "bt_nrecs") ;
535535 my @array ;
536536 my ($k, $v) ;
537 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
537 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
538538 -Flags => DB_CREATE,
539539 -Pagesize => 4 * 1024,
540540 ;
541541
542 my $ref = $db->db_stat() ;
542 my $ref = $db->db_stat() ;
543543 ok $ref->{$recs} == 0;
544544 ok $ref->{'bt_pagesize'} == 4 * 1024;
545545
557557 }
558558 ok $ret == 0 ;
559559
560 $ref = $db->db_stat() ;
560 $ref = $db->db_stat() ;
561561 ok $ref->{$recs} == 3;
562562 }
563563
581581 @ISA=qw(BerkeleyDB BerkeleyDB::Recno);
582582 @EXPORT = @BerkeleyDB::EXPORT ;
583583
584 sub db_put {
584 sub db_put {
585585 my $self = shift ;
586586 my $key = shift ;
587587 my $value = shift ;
588588 $self->SUPER::db_put($key, $value * 3) ;
589589 }
590590
591 sub db_get {
591 sub db_get {
592592 my $self = shift ;
593593 $self->SUPER::db_get($_[0], $_[1]) ;
594594 $_[1] -= 2 ;
607607
608608 close FILE ;
609609
610 BEGIN { push @INC, '.'; }
610 BEGIN { push @INC, '.'; }
611611 use Test::More;
612612 eval 'use SubDB ; ';
613613 ok $@ eq "" ;
614614 my @h ;
615615 my $X ;
616616 eval '
617 $X = tie(@h, "SubDB", -Filename => "dbrecno.tmp",
617 $X = tie(@h, "SubDB", -Filename => "dbrecno.tmp",
618618 -Flags => DB_CREATE,
619619 -Mode => 0640 );
620620 ' ;
763763 my $lex = new LexFile $Dfile;
764764 my @array ;
765765 my $value ;
766 ok my $db = tie @array, 'BerkeleyDB::Recno',
766 ok my $db = tie @array, 'BerkeleyDB::Recno',
767767 -Filename => $Dfile,
768768 -Flags => DB_CREATE ;
769769
806806 touch $Dfile2 ;
807807 my @array ;
808808 my $value ;
809 ok tie @array, 'BerkeleyDB::Recno',
809 ok tie @array, 'BerkeleyDB::Recno',
810810 -ArrayBase => 0,
811811 -Flags => DB_CREATE ,
812812 -Source => $Dfile2 ,
849849 touch $Dfile2 ;
850850 my @array ;
851851 my $value ;
852 ok tie @array, 'BerkeleyDB::Recno',
852 ok tie @array, 'BerkeleyDB::Recno',
853853 -ArrayBase => 0,
854854 -Flags => DB_CREATE ,
855855 -Property => DB_RENUMBER,
870870 my $lex = new LexFile $Dfile ;
871871 my @array ;
872872 my $db ;
873 ok $db = tie @array, 'BerkeleyDB::Recno',
873 ok $db = tie @array, 'BerkeleyDB::Recno',
874874 -ArrayBase => 0,
875875 -Flags => DB_CREATE ,
876876 -Property => DB_RENUMBER,
891891 my $lex = new LexFile $Dfile ;
892892 my @array ;
893893 my $db ;
894 ok $db = tie @array, 'BerkeleyDB::Recno',
894 ok $db = tie @array, 'BerkeleyDB::Recno',
895895 -ArrayBase => 0,
896896 -Flags => DB_CREATE ,
897897 -Property => DB_RENUMBER,
911911 if(0)
912912 {
913913 # RT #75691: scalar(@array) returns incorrect value after shift() on tied array
914 skip "Test needs Berkeley DB 3.2 or better", 4
914 skip "Test needs Berkeley DB 3.2 or better", 4
915915 if $BerkeleyDB::db_version < 3.3;
916916
917917 my $lex = new LexFile $Dfile ;
918918 my @array ;
919919 my $db ;
920 ok $db = tie @array, 'BerkeleyDB::Recno',
920 ok $db = tie @array, 'BerkeleyDB::Recno',
921921 -Flags => DB_CREATE ,
922922 -Filename => $Dfile ;
923923
22
33 use lib 't' ;
44 use Test::More;
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use util;
77
88 plan(skip_all => "Sequence needs Berkeley DB 4.3.x or better\n" )
99 if $BerkeleyDB::db_version < 4.3;
10
10
1111 plan tests => 13;
1212
1313 {
2424
2525 my $db = BerkeleyDB::Btree->new(
2626 Env => $env,
27 -Filename => $Dfile,
27 -Filename => $Dfile,
2828 -Flags => DB_CREATE
2929 );
3030
22 use strict ;
33
44 use lib 't' ;
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use util ;
77
88 use Test::More ;
99
10 plan tests => 44;
10 plan tests => 44;
1111
1212 my $Dfile = "dbhash.tmp";
1313 my $home = "./fred" ;
2424 ok my $env = new BerkeleyDB::Env -Home => $home,@StdErrFile,
2525 -Flags => DB_CREATE|DB_INIT_TXN|
2626 DB_INIT_MPOOL|DB_INIT_LOCK ;
27
27
2828 ok my $db1 = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
2929 -Flags => DB_CREATE ,
3030 -Env => $env;
3131
32 ok $db1->db_close() == 0 ;
32 ok $db1->db_close() == 0 ;
3333
3434 eval { $status = $env->db_appexit() ; } ;
3535 ok $status == 0 ;
4747 ok my $env = new BerkeleyDB::Env -Home => $home,@StdErrFile,
4848 -Flags => DB_CREATE|DB_INIT_TXN|
4949 DB_INIT_MPOOL|DB_INIT_LOCK ;
50
50
5151 ok my $db1 = tie %hash, 'BerkeleyDB::Hash', -Filename => $Dfile,
5252 -Flags => DB_CREATE ,
5353 -Env => $env;
6262 }
6363
6464 {
65 # closing a transaction & a database
65 # closing a transaction & a database
6666 my $lex = new LexFile $Dfile ;
6767 my %hash ;
6868 my $status ;
113113 }
114114
115115 {
116 # closing a cursor & a database
116 # closing a cursor & a database
117117 my $lex = new LexFile $Dfile ;
118118 my %hash ;
119119 my $status ;
140140 }
141141
142142 {
143 # closing a transaction & a cursor
143 # closing a transaction & a cursor
144144 my $lex = new LexFile $Dfile ;
145145 my %hash ;
146146 my $status ;
169169 ok $@ eq "" ;
170170 #print "[$@]\n" ;
171171 }
172
22 use strict ;
33
44 use lib 't' ;
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use Test::More ;
77 use util ;
88
3737 ok $status == DB_NOTFOUND;
3838
3939 return wantarray ? sort @dbnames : scalar @dbnames ;
40
40
4141
4242 }
4343
7272
7373 my $lex = new LexFile $Dfile ;
7474
75 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
75 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
7676 -Flags => DB_CREATE ;
7777
7878 # Add a k/v pair
8888
8989 undef $db ;
9090
91 $db = new BerkeleyDB::Hash -Filename => $Dfile,
91 $db = new BerkeleyDB::Hash -Filename => $Dfile,
9292 -Subname => "fred" ;
93 ok ! $db ;
93 ok ! $db ;
9494
9595 ok -e $Dfile ;
9696 ok ! BerkeleyDB::db_remove(-Filename => $Dfile) ;
104104
105105 my $lex = new LexFile $Dfile ;
106106
107 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
107 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
108108 -Subname => "fred" ,
109109 -Flags => DB_CREATE ;
110110
121121
122122 undef $db ;
123123
124 $db = new BerkeleyDB::Hash -Filename => $Dfile,
124 $db = new BerkeleyDB::Hash -Filename => $Dfile,
125125 -Subname => "joe" ;
126126
127 ok !$db ;
128
129 }
130
131 {
132 # subdatabases
133
134 my $lex = new LexFile $Dfile ;
135
136 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
127 ok !$db ;
128
129 }
130
131 {
132 # subdatabases
133
134 my $lex = new LexFile $Dfile ;
135
136 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
137137 -Subname => "fred" ,
138138 -Flags => DB_CREATE ;
139139
160160 # of the subdatabase names
161161
162162 my $lex = new LexFile $Dfile ;
163
164 ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
163
164 ok my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
165165 -Subname => "fred" ,
166166 -Flags => DB_CREATE ;
167167
168 ok my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
168 ok my $db2 = new BerkeleyDB::Btree -Filename => $Dfile,
169169 -Subname => "joe" ,
170170 -Flags => DB_CREATE ;
171171
183183
184184 undef $db1 ;
185185 undef $db2 ;
186
186
187187 is join(",", countDatabases($Dfile)), "fred,joe";
188188
189189 ok BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "harry") != 0;
190190 ok BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") == 0 ;
191
191
192192 # should only be one subdatabase
193193 is join(",", countDatabases($Dfile)), "joe";
194194
195195 # can't delete an already deleted subdatabase
196196 ok BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "fred") != 0;
197
197
198198 ok BerkeleyDB::db_remove(-Filename => $Dfile, -Subname => "joe") == 0 ;
199
199
200200 # should only be one subdatabase
201201 is countDatabases($Dfile), 0;
202202
22 use strict ;
33
44 use lib 't' ;
5 use BerkeleyDB;
5 use BerkeleyDB;
66 use util ;
77
88 use Test::More ;
99
10 plan tests => 58;
10 plan tests => 58;
1111
1212 my $Dfile = "dbhash.tmp";
1313
5151 -Env => $env,
5252 -Txn => $txn ;
5353
54
54
5555 ok $txn->txn_commit() == 0 ;
5656 ok $txn = $env->txn_begin() ;
5757 $db1->Txn($txn);
125125 ok $txn->txn_commit() == 0 ;
126126 ok $txn = $env->txn_begin() ;
127127 $db1->Txn($txn);
128
128
129129 # create some data
130130 my %data = (
131131 "red" => "boat",
192192 -Env => $env,
193193 -Txn => $txn ;
194194
195
195
196196 ok $txn->txn_commit() == 0 ;
197197 ok $txn = $env->txn_begin() ;
198198 $db1->Txn($txn);
265265 ok $txn->txn_commit() == 0 ;
266266 ok $txn = $env->txn_begin() ;
267267 $db1->Txn($txn);
268
268
269269 # create some data
270270 my %data = (
271271 "red" => "boat",
312312 undef $env ;
313313 untie %hash ;
314314 }
315
00 #!./perl -w
11
2 # ID: %I%, %G%
2 # ID: %I%, %G%
33
44 use strict ;
55
66 use lib 't' ;
7 use BerkeleyDB;
7 use BerkeleyDB;
88 use util ;
99 use Test::More;
1010 plan tests => 50;
4242 my $lex = new LexFile $Dfile ;
4343 ok writeFile($Dfile, "") ;
4444
45 ok ! (new BerkeleyDB::Unknown -Filename => $Dfile);
45 ok ! (new BerkeleyDB::Unknown -Filename => $Dfile);
4646
4747 # now a non-database file
4848 writeFile($Dfile, "\x2af6") ;
49 ok ! (new BerkeleyDB::Unknown -Filename => $Dfile);
49 ok ! (new BerkeleyDB::Unknown -Filename => $Dfile);
5050 }
5151
5252 # check the interface to a Hash database
5555 my $lex = new LexFile $Dfile ;
5656
5757 # create a hash database
58 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
59 -Flags => DB_CREATE ;
60
61 # Add a few k/v pairs
62 my $value ;
63 my $status ;
64 ok $db->db_put("some key", "some value") == 0
58 ok my $db = new BerkeleyDB::Hash -Filename => $Dfile,
59 -Flags => DB_CREATE ;
60
61 # Add a few k/v pairs
62 my $value ;
63 my $status ;
64 ok $db->db_put("some key", "some value") == 0
6565 or diag "Cannot db_put: [$!][$BerkeleyDB::Error]\n" ;
6666
6767 ok $db->db_put("key", "value") == 0 ;
7070 undef $db ;
7171
7272 # now open it with Unknown
73 ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
73 ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
7474
7575 ok $db->type() == DB_HASH ;
7676 ok $db->db_get("some key", $value) == 0 ;
9494 my $lex = new LexFile $Dfile ;
9595
9696 # create a hash database
97 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
97 ok my $db = new BerkeleyDB::Btree -Filename => $Dfile,
9898 -Flags => DB_CREATE ;
9999
100100 # Add a few k/v pairs
108108
109109 # now open it with Unknown
110110 # create a hash database
111 ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
111 ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
112112
113113 ok $db->type() == DB_BTREE ;
114114 ok $db->db_get("some key", $value) == 0 ;
135135 my $lex = new LexFile $Dfile ;
136136
137137 # create a recno database
138 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
138 ok my $db = new BerkeleyDB::Recno -Filename => $Dfile,
139139 -Flags => DB_CREATE ;
140140
141141 # Add a few k/v pairs
149149
150150 # now open it with Unknown
151151 # create a hash database
152 ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
152 ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
153153
154154 ok $db->type() == DB_RECNO ;
155155 ok $db->db_get(0, $value) == 0 ;
179179 my $lex = new LexFile $Dfile ;
180180
181181 # create a hash database
182 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
182 ok my $db = new BerkeleyDB::Heap -Filename => $Dfile,
183183 -Flags => DB_CREATE ;
184184
185185 # Add a few k/v pairs
195195
196196 # now open it with Unknown
197197 # create a hash database
198 ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
198 ok $db = new BerkeleyDB::Unknown -Filename => $Dfile;
199199
200200 ok $db->type() == DB_HEAP ;
201 ok $db->db_get($key1, $value) == 0
201 ok $db->db_get($key1, $value) == 0
202202 or diag "Cannot db_get: [$!][$BerkeleyDB::Error]\n" ;
203203 ok $value eq "some value" ;
204204 ok $db->db_get($key2, $value) == 0 ;
3232 {
3333 sub try::TIEARRAY { bless [], "try" }
3434 sub try::FETCHSIZE { $FA = 1 }
35 my @a ;
35 my @a ;
3636 tie @a, 'try' ;
3737 my $a = @a ;
3838 }
8282 {
8383 my $self = shift ;
8484 my $dir = shift ;
85
85
8686 rmtree $dir if -e $dir ;
87
87
8888 mkdir $dir, 0777 or return undef ;
8989
9090 return bless [ $dir ], $self ;
9191 }
92
93 sub DESTROY
92
93 sub DESTROY
9494 {
9595 my $self = shift ;
9696 my $dir = $self->[0];
151151 }
152152
153153 sub docat_del
154 {
154 {
155155 my $file = shift;
156156 local $/ = undef;
157157 open(CAT,$file) || die "Cannot open $file: $!";
160160 unlink $file ;
161161 $result = normalise($result);
162162 return $result;
163 }
163 }
164164
165165 sub docat_del_sort
166 {
166 {
167167 my $file = shift;
168168 open(CAT,$file) || die "Cannot open $file: $!";
169169 my @got = <CAT>;
174174 unlink $file ;
175175 $result = normalise($result);
176176 return $result;
177 }
177 }
178178
179179 sub readFile
180180 {
00 # typemap for Perl 5 interface to Berkeley DB version 2 & 3
11 #
2 # SCCS: %I%, %G%
2 # SCCS: %I%, %G%
33 #
44 # written by Paul Marquess <pmqs@cpan.org>
55 #
66 #################################### DB SECTION
77 #
8 #
8 #
99
1010 SVnull* T_SV_NULL
1111 void * T_PV
174174
175175 T_IO_NULL
176176 if ($arg == &PL_sv_undef)
177 $var = NULL ;
178 else
177 $var = NULL ;
178 else
179179 $var = IoOFP(sv_2io($arg))
180180
181181 T_PTROBJ_NULL
216216 DBT_clear($var) ;
217217 SvGETMAGIC($arg) ;
218218 if (db->recno_or_queue) {
219 Value = GetRecnoKey(db, SvIV(my_sv)) ;
220 $var.data = & Value;
219 Value = GetRecnoKey(db, SvIV(my_sv)) ;
220 $var.data = & Value;
221221 $var.size = (int)sizeof(db_recno_t);
222222 }
223223 else {
250250 SvGETMAGIC($arg) ;
251251 if (db->recno_or_queue ||
252252 (db->type == DB_BTREE && flagSet(DB_SET_RECNO))) {
253 Value = GetRecnoKey(db, SvIV(my_sv)) ;
254 $var.data = & Value;
253 Value = GetRecnoKey(db, SvIV(my_sv)) ;
254 $var.data = & Value;
255255 $var.size = (int)sizeof(db_recno_t);
256256 }
257257 else {
291291 DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
292292 DBT_clear($var) ;
293293 SvGETMAGIC($arg) ;
294 if (db->recno_or_queue ||
294 if (db->recno_or_queue ||
295295 (db->type == DB_BTREE && flagSet(DB_SET_RECNO))) {
296 Value = GetRecnoKey(db, SvIV(my_sv)) ;
297 $var.data = & Value;
296 Value = GetRecnoKey(db, SvIV(my_sv)) ;
297 $var.data = & Value;
298298 $var.size = (int)sizeof(db_recno_t);
299299 }
300300 else {
312312 DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
313313 DBT_clear($var) ;
314314 SvGETMAGIC($arg) ;
315 if (db->recno_or_queue ||
315 if (db->recno_or_queue ||
316316 (db->type == DB_BTREE && flagSet(DB_SET_RECNO))) {
317 Value = GetRecnoKey(db, SvIV(my_sv)) ;
318 $var.data = & Value;
317 Value = GetRecnoKey(db, SvIV(my_sv)) ;
318 $var.data = & Value;
319319 $var.size = (int)sizeof(db_recno_t);
320320 }
321321 else {
343343 $var.dlen = db->dlen ;
344344 $var.doff = db->doff ;
345345 }
346
346
347347 T_dbtdatum_opt
348348 DBT_clear($var) ;
349349 if (flagSetBoth()) {
357357 $var.dlen = db->dlen ;
358358 $var.doff = db->doff ;
359359 }
360
360
361361 T_dbtdatum_btree
362362 DBT_clear($var) ;
363363 if (flagSetBoth()) {
371371 $var.dlen = db->dlen ;
372372 $var.doff = db->doff ;
373373 }
374
374
375375
376376 OUTPUT
377377